]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
dont reparse the config file when the keyboard map changes. just rebind everything...
[chaz/openbox] / openbox / event.c
index d2cb7567c63fbb3027da80172265ff4e7641cfba..bc59d67e7ada52146be6f5166842af6a52817857 100644 (file)
@@ -639,9 +639,12 @@ static void event_process(const XEvent *ec, gpointer data)
     else if (e->type == MapRequest)
         client_manage(window);
     else if (e->type == MappingNotify) {
-        /* keyboard layout changes, reconfigure openbox. need to restart the
-           modkeys system, but also to reload the key bindings. */
-        ob_reconfigure();
+        /* keyboard layout changes for modifier mapping changes. reload the
+           modifier map, and rebind all the key bindings as appropriate */
+        ob_debug("Kepboard map changed. Reloading keyboard bindings.\n");
+        modkeys_shutdown(TRUE);
+        modkeys_startup(TRUE);
+        keyboard_rebind();
     }
     else if (e->type == ClientMessage) {
         /* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
@@ -1671,6 +1674,8 @@ static gboolean event_handle_menu_keyboard(XEvent *ev)
 
     /* Allow control while going thru the menu */
     else if (ev->type == KeyPress && (state & ~ControlMask) == 0) {
+        frame->got_press = TRUE;
+
         if (keycode == ob_keycode(OB_KEY_ESCAPE)) {
             menu_frame_hide_all();
             ret = TRUE;
@@ -1704,7 +1709,7 @@ static gboolean event_handle_menu_keyboard(XEvent *ev)
 
        Allow ControlMask only, and don't bother if the menu is empty */
     else if (ev->type == KeyRelease && (state & ~ControlMask) == 0 &&
-             frame->entries)
+             frame->entries && frame->got_press)
     {
         if (keycode == ob_keycode(OB_KEY_RETURN)) {
             /* Enter runs the active item or goes into the submenu.
This page took 0.024685 seconds and 4 git commands to generate.