From efc9d9708e3e746a9744a6175a4d3a1259d69991 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 14 Oct 2011 20:48:54 -0400 Subject: [PATCH] Select the menu item under the mouse when the mouse is moved (Fix bug 5237) --- openbox/event.c | 14 ++++++++++++++ openbox/menuframe.c | 3 ++- openbox/menuframe.h | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/openbox/event.c b/openbox/event.c index e198eaa..15a7a47 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 4887173..b49a221 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 44c0256..2d7a2ae 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); -- 1.9.1