diff options
| -rw-r--r-- | openbox/event.c | 4 | ||||
| -rw-r--r-- | openbox/menuframe.h | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/openbox/event.c b/openbox/event.c index d2cb7567..6b0ecdd7 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1671,6 +1671,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 +1706,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. diff --git a/openbox/menuframe.h b/openbox/menuframe.h index 191bcfe8..06975972 100644 --- a/openbox/menuframe.h +++ b/openbox/menuframe.h @@ -73,6 +73,11 @@ struct _ObMenuFrame RrAppearance *a_title; RrAppearance *a_items; + + gboolean got_press; /* don't allow a KeyRelease event to run things in the + menu until it has seen a KeyPress. this is to + avoid having the keybinding used to show the menu + end up running something inside the menu */ }; struct _ObMenuEntryFrame |
