Select the menu item under the mouse when the mouse is moved (Fix bug 5237)
This commit is contained in:
parent
8f988b2bef
commit
efc9d9708e
3 changed files with 17 additions and 2 deletions
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue