summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2011-10-14 20:48:54 -0400
committerDana Jansens <danakj@orodu.net>2012-09-30 15:00:14 -0400
commitefc9d9708e3e746a9744a6175a4d3a1259d69991 (patch)
tree245e3b9178b57cffdc84f071f54db570d7e1276b
parent8f988b2bef5af05f0b5cddbc11b05c833158df5a (diff)
Select the menu item under the mouse when the mouse is moved (Fix bug 5237)
-rw-r--r--openbox/event.c14
-rw-r--r--openbox/menuframe.c3
-rw-r--r--openbox/menuframe.h2
3 files changed, 17 insertions, 2 deletions
diff --git a/openbox/event.c b/openbox/event.c
index e198eaa1..15a7a479 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -2006,6 +2006,20 @@ static void event_handle_menu(ObMenuFrame *frame, XEvent *ev)
ObMenuEntryFrame *e;
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.
+ if ((e = g_hash_table_lookup(menu_frame_map, &ev->xmotion.window))) {
+ if (e->ignore_enters)
+ --e->ignore_enters;
+ else if (!(f = find_active_menu()) ||
+ f == e->frame ||
+ f->parent == e->frame ||
+ f->child == e->frame)
+ menu_frame_select(e->frame, e, FALSE);
+ }
+ break;
case EnterNotify:
if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) {
if (e->ignore_enters)
diff --git a/openbox/menuframe.c b/openbox/menuframe.c
index 4887173b..b49a221b 100644
--- a/openbox/menuframe.c
+++ b/openbox/menuframe.c
@@ -38,7 +38,8 @@
#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask |\
LeaveWindowMask)
#define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
- ButtonPressMask | ButtonReleaseMask)
+ ButtonPressMask | ButtonReleaseMask | \
+ PointerMotionMask)
GList *menu_frame_visible;
GHashTable *menu_frame_map;
diff --git a/openbox/menuframe.h b/openbox/menuframe.h
index 44c02562..2d7a2ae0 100644
--- a/openbox/menuframe.h
+++ b/openbox/menuframe.h
@@ -121,7 +121,7 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,
gint *dx, gint *dy);
gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y,
- gint button);
+ gboolean mouse);
gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
ObMenuEntryFrame *parent_entry);