summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2008-01-11 18:57:32 -0500
committerDana Jansens <danakj@orodu.net>2008-01-11 18:57:32 -0500
commit040d344a89f40487de8a1920e0aaeccd93a6a995 (patch)
tree03c14b7b496f57d12480a6728cebf7360428bde1 /openbox
parent78cd9bba523f4986413e3aefe87704e9d11cd081 (diff)
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.
Diffstat (limited to 'openbox')
-rw-r--r--openbox/event.c4
-rw-r--r--openbox/menuframe.h5
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