Add keyboard/rebindOnMappingNotify option
[dana/openbox.git] / openbox / event.c
index ccbb56e..9f56030 100644 (file)
@@ -206,6 +206,7 @@ static Window event_get_window(XEvent *e)
             switch (((XkbAnyEvent*)e)->xkb_type) {
             case XkbBellNotify:
                 window = ((XkbBellNotifyEvent*)e)->window;
+                break;
             default:
                 window = None;
             }
@@ -636,11 +637,13 @@ static void event_process(const XEvent *ec, gpointer data)
     else if (e->type == MappingNotify) {
         /* keyboard layout changes for modifier mapping changes. reload the
            modifier map, and rebind all the key bindings as appropriate */
-        ob_debug("Keyboard map changed. Reloading keyboard bindings.");
-        ob_set_state(OB_STATE_RECONFIGURING);
-        obt_keyboard_reload();
-        keyboard_rebind();
-        ob_set_state(OB_STATE_RUNNING);
+        if (config_keyboard_rebind_on_mapping_notify) {
+            ob_debug("Keyboard map changed. Reloading keyboard bindings.");
+            ob_set_state(OB_STATE_RECONFIGURING);
+            obt_keyboard_reload();
+            keyboard_rebind();
+            ob_set_state(OB_STATE_RUNNING);
+        }
     }
     else if (e->type == ClientMessage) {
         /* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
@@ -772,7 +775,12 @@ static void event_handle_root(XEvent *e)
             if (d > 0 && d <= 1000)
                 screen_set_num_desktops(d);
         } else if (msgtype == OBT_PROP_ATOM(NET_SHOWING_DESKTOP)) {
-            screen_show_desktop(e->xclient.data.l[0] != 0, NULL);
+            ObScreenShowDestopMode show_mode;
+            if (e->xclient.data.l[0] != 0)
+                show_mode = SCREEN_SHOW_DESKTOP_UNTIL_WINDOW;
+            else
+                show_mode = SCREEN_SHOW_DESKTOP_NO;
+            screen_show_desktop(show_mode, NULL);
         } else if (msgtype == OBT_PROP_ATOM(OB_CONTROL)) {
             ob_debug("OB_CONTROL: %d", e->xclient.data.l[0]);
             if (e->xclient.data.l[0] == 1)
@@ -2004,9 +2012,9 @@ static void event_handle_menu(ObMenuFrame *frame, XEvent *ev)
 
     switch (ev->type) {
     case MotionNotify:
-        // We need to catch MotionNotify in addition to EnterNotify because
-        // it is possible for the menu to be opened under the mouse cursor, and
-        // moving the mouse should select the item.
+        /* We need to catch MotionNotify in addition to EnterNotify because
+           it is possible for the menu to be opened under the mouse cursor, and
+           moving the mouse should select the item. */
         if ((e = g_hash_table_lookup(menu_frame_map, &ev->xmotion.window))) {
             if (e->ignore_enters)
                 --e->ignore_enters;
@@ -2029,7 +2037,7 @@ static void event_handle_menu(ObMenuFrame *frame, XEvent *ev)
         }
         break;
     case LeaveNotify:
-        /*ignore leaves when we're already in the window */
+        /* ignore leaves when we're already in the window */
         if (ev->xcrossing.detail == NotifyInferior)
             break;