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;
|
ObMenuEntryFrame *e;
|
||||||
|
|
||||||
switch (ev->type) {
|
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:
|
case EnterNotify:
|
||||||
if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) {
|
if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) {
|
||||||
if (e->ignore_enters)
|
if (e->ignore_enters)
|
||||||
|
|
|
@ -38,7 +38,8 @@
|
||||||
#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask |\
|
#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask |\
|
||||||
LeaveWindowMask)
|
LeaveWindowMask)
|
||||||
#define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
|
#define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
|
||||||
ButtonPressMask | ButtonReleaseMask)
|
ButtonPressMask | ButtonReleaseMask | \
|
||||||
|
PointerMotionMask)
|
||||||
|
|
||||||
GList *menu_frame_visible;
|
GList *menu_frame_visible;
|
||||||
GHashTable *menu_frame_map;
|
GHashTable *menu_frame_map;
|
||||||
|
|
|
@ -121,7 +121,7 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,
|
||||||
gint *dx, gint *dy);
|
gint *dx, gint *dy);
|
||||||
|
|
||||||
gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y,
|
gboolean menu_frame_show_topmenu(ObMenuFrame *self, gint x, gint y,
|
||||||
gint button);
|
gboolean mouse);
|
||||||
gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
|
gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
|
||||||
ObMenuEntryFrame *parent_entry);
|
ObMenuEntryFrame *parent_entry);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue