merge r5761-r5763 from trunk
authorDana Jansens <danakj@orodu.net>
Sun, 22 Apr 2007 02:13:40 +0000 (02:13 +0000)
committerDana Jansens <danakj@orodu.net>
Sun, 22 Apr 2007 02:13:40 +0000 (02:13 +0000)
openbox/event.c
openbox/grab.c
openbox/menuframe.c

index 00de8b36880e075ebef460e0b9da9bcf236a7d9a..1f5bae13287b6427cc29cc0b2e17dcc1fc33db89 100644 (file)
@@ -387,9 +387,7 @@ static gboolean event_ignore(XEvent *e, ObClient *client)
     switch(e->type) {
     case EnterNotify:
     case LeaveNotify:
-        if (e->xcrossing.detail == NotifyInferior)
-            return TRUE;
-        break;
+        return keyboard_interactively_grabbed();
     case FocusIn:
     case FocusOut:
         /* I don't think this should ever happen with our event masks, but
@@ -473,7 +471,13 @@ static void event_process(const XEvent *ec, gpointer data)
             ed->ignored = FALSE;
 
     /* deal with it in the kernel */
-    if (group)
+
+    if (menu_frame_visible &&
+        (e->type == EnterNotify || e->type == LeaveNotify))
+    {
+        /* crossing events for menu */
+        event_handle_menu(e);
+    } else if (group)
         event_handle_group(group, e);
     else if (client)
         event_handle_client(client, e);
@@ -506,11 +510,6 @@ static void event_process(const XEvent *ec, gpointer data)
         xerror_set_ignore(FALSE);
     }
 
-    /* crossing events for menu */
-    if (e->type == EnterNotify || e->type == LeaveNotify)
-        if (menu_frame_visible)
-            event_handle_menu(e);
-
     /* user input (action-bound) events */
     if (e->type == ButtonPress || e->type == ButtonRelease ||
         e->type == MotionNotify || e->type == KeyPress ||
@@ -1276,17 +1275,12 @@ static void event_handle_menu(XEvent *ev)
         }
         break;
     case LeaveNotify:
-        if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) {
-            if (e->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU)
-                menu_frame_select(e->frame, NULL);
-        }
-    case MotionNotify:
-        if ((e = menu_entry_frame_under(ev->xmotion.x_root,
-                                        ev->xmotion.y_root))) {
-            /* XXX menu_frame_entry_move_on_screen(f); */
-            menu_frame_select(e->frame, e);
+        if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window)) &&
+            (f = find_active_menu()) && f->selected == e &&
+            e->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU)
+        {
+            menu_frame_select(e->frame, NULL);
         }
-        break;
     case KeyPress:
         if (ev->xkey.keycode == ob_keycode(OB_KEY_ESCAPE))
             menu_frame_hide_all();
index a8a6200efa246b62e12bce1192ac90427789b37d..9b19906a340b7289a20f7a0256a38dbb8dec02e7 100644 (file)
@@ -72,7 +72,7 @@ gboolean grab_keyboard(gboolean grab)
     if (grab) {
         if (kgrabs++ == 0) {
             ret = XGrabKeyboard(ob_display, RootWindow(ob_display, ob_screen),
-                                FALSE, GrabModeAsync, GrabModeAsync,
+                                False, GrabModeAsync, GrabModeAsync,
                                 event_curtime) == Success;
             if (!ret)
                 --kgrabs;
index c417c05a11df59512f0420b6a58abc0a29e08a4f..fd7e95200cef7437a87929edb5cbfa1ca7f3d257 100644 (file)
@@ -326,6 +326,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
         text_a->texture[0].data.text.string = sub ? sub->title : "";
         break;
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
+        text_a = self->a_text_normal;
         break;
     }
 
@@ -738,7 +739,8 @@ gboolean menu_frame_show_submenu(ObMenuFrame *self, ObMenuFrame *parent,
 
     XMapWindow(ob_display, self->window);
 
-    if (screen_pointer_pos(&dx, &dy) && (e = menu_entry_frame_under(dx, dy)))
+    if (screen_pointer_pos(&dx, &dy) && (e = menu_entry_frame_under(dx, dy)) &&
+        e->frame == self)
         ++e->ignore_enters;
 
     return TRUE;