From 040d344a89f40487de8a1920e0aaeccd93a6a995 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 11 Jan 2008 18:57:32 -0500 Subject: [PATCH] don't take KeyRelease events for menus until they receive a KeyPress event first. avoid using the key binding used to show the menu to execute something inside it. --- openbox/event.c | 4 +++- openbox/menuframe.h | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 -- 2.45.2