]> Dogcows Code - chaz/openbox/commitdiff
Select the menu item under the mouse when the mouse is moved (Fix bug 5237)
authorDana Jansens <danakj@orodu.net>
Sat, 15 Oct 2011 00:48:54 +0000 (20:48 -0400)
committerDana Jansens <danakj@orodu.net>
Sun, 30 Sep 2012 19:00:14 +0000 (15:00 -0400)
openbox/event.c
openbox/menuframe.c
openbox/menuframe.h

index e198eaa1aacfacaea51e32ba19ff03862ffe846c..15a7a4790569a5d510b9f59c701a9cbdbcc3e21f 100644 (file)
@@ -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)
index 4887173b40c04ed1e8592011b38f2d4c9ed01e4b..b49a221beeab41e20a60f52f152aad8b050404a4 100644 (file)
@@ -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;
index 44c02562220a983128b6fe2d36dcec3f7cb06510..2d7a2ae072921eb3431db9368aff97d511f11c4a 100644 (file)
@@ -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);
 
This page took 0.023309 seconds and 4 git commands to generate.