]> git.sur5r.net Git - i3/i3/commitdiff
re-implement support for MappingNotifys
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 14 Mar 2011 16:20:04 +0000 (17:20 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 14 Mar 2011 16:20:04 +0000 (17:20 +0100)
include/handlers.h
src/handlers.c
src/main.c

index 2d592e64c9b15e7a85457243e249ec29ccc9c026..76ba3eeaf2996c10278b76b6a8630958f69ad8fa 100644 (file)
@@ -41,7 +41,6 @@ int handle_enter_notify(void *ignored, xcb_connection_t *conn,
 int handle_motion_notify(void *ignored, xcb_connection_t *conn,
                          xcb_motion_notify_event_t *event);
 
-#if 0
 /**
  * Called when the keyboard mapping changes (for example by using Xmodmap),
  * we need to update our key bindings then (re-translate symbols).
@@ -49,6 +48,7 @@ int handle_motion_notify(void *ignored, xcb_connection_t *conn,
  */
 int handle_mapping_notify(void *ignored, xcb_connection_t *conn,
                           xcb_mapping_notify_event_t *event);
+#if 0
 
 /**
  * Checks if the button press was on a stack window, handles focus setting and
index 9c584b8b122c645c05094388938f9153929184e8..6e6626a9671f275f7a51141b42857fabfb8ced75 100644 (file)
@@ -251,30 +251,28 @@ int handle_motion_notify(void *ignored, xcb_connection_t *conn, xcb_motion_notif
     return 1;
 }
 
-#if 0
 /*
  * Called when the keyboard mapping changes (for example by using Xmodmap),
  * we need to update our key bindings then (re-translate symbols).
  *
  */
 int handle_mapping_notify(void *ignored, xcb_connection_t *conn, xcb_mapping_notify_event_t *event) {
-        if (event->request != XCB_MAPPING_KEYBOARD &&
-            event->request != XCB_MAPPING_MODIFIER)
-                return 0;
+    if (event->request != XCB_MAPPING_KEYBOARD &&
+        event->request != XCB_MAPPING_MODIFIER)
+        return 0;
 
-        DLOG("Received mapping_notify for keyboard or modifier mapping, re-grabbing keys\n");
-        xcb_refresh_keyboard_mapping(keysyms, event);
+    DLOG("Received mapping_notify for keyboard or modifier mapping, re-grabbing keys\n");
+    xcb_refresh_keyboard_mapping(keysyms, event);
 
-        xcb_get_numlock_mask(conn);
+    xcb_get_numlock_mask(conn);
 
-        ungrab_all_keys(conn);
-        translate_keysyms();
-        grab_all_keys(conn, false);
+    ungrab_all_keys(conn);
+    translate_keysyms();
+    grab_all_keys(conn, false);
 
-        return 0;
+    return 0;
 }
 
-#endif
 /*
  * A new window appeared on the screen (=was mapped), so let’s manage it.
  *
index c497ab9ef25c45391cc27d6e7bd94fdb45adae7d..eb17322152a0695b6f024ce2175c0b3dd616f75f 100644 (file)
@@ -417,6 +417,9 @@ int main(int argc, char *argv[]) {
     /* Watch WM_TRANSIENT_FOR property (to which client this popup window belongs) */
     xcb_property_set_handler(&prophs, WM_TRANSIENT_FOR, UINT_MAX, handle_transient_for, NULL);
 
+    /* Mapping notify = keyboard mapping changed (Xmodmap), re-grab bindings */
+    xcb_event_set_mapping_notify_handler(&evenths, handle_mapping_notify, NULL);
+
     /* Set up the atoms we support */
     xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, atoms[_NET_SUPPORTED], ATOM, 32, 7, atoms);
     /* Set up the window manager’s name */