From 990cbcb3d76ea420df589aaa37437faad5668073 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Apr 2007 02:13:40 +0000 Subject: [PATCH] merge r5761-r5763 from trunk --- openbox/event.c | 32 +++++++++++++------------------- openbox/grab.c | 2 +- openbox/menuframe.c | 4 +++- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/openbox/event.c b/openbox/event.c index 00de8b36..1f5bae13 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -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(); diff --git a/openbox/grab.c b/openbox/grab.c index a8a6200e..9b19906a 100644 --- a/openbox/grab.c +++ b/openbox/grab.c @@ -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; diff --git a/openbox/menuframe.c b/openbox/menuframe.c index c417c05a..fd7e9520 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -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; -- 2.34.1