From: Dana Jansens Date: Sun, 22 Apr 2007 00:31:03 +0000 (+0000) Subject: handle enter/leave events in the menu X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=8644a47cb76a8188b39ce4c86deb96cd063e8dc4;p=chaz%2Fopenbox handle enter/leave events in the menu --- diff --git a/openbox/event.c b/openbox/event.c index b9f04e4d..00de8b36 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -506,6 +506,11 @@ 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 || @@ -1262,24 +1267,24 @@ static void event_handle_menu(XEvent *ev) menu_frame_hide_all(); } break; - case MotionNotify: - if ((f = menu_frame_under(ev->xmotion.x_root, - ev->xmotion.y_root))) { - 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(f, e); - } + case EnterNotify: + if ((e = g_hash_table_lookup(menu_frame_map, &ev->xcrossing.window))) { + if (e->ignore_enters) + --e->ignore_enters; + else + menu_frame_select(e->frame, e); } - { - ObMenuFrame *a; - - a = find_active_menu(); - if (a && a != f && - a->selected->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU) - { - menu_frame_select(a, NULL); - } + 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); } break; case KeyPress: