summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-22 00:31:03 +0000
committerDana Jansens <danakj@orodu.net>2007-04-22 00:31:03 +0000
commit8644a47cb76a8188b39ce4c86deb96cd063e8dc4 (patch)
tree4fbe7ff08b36300cc379261a9dc1d62932b89480
parent213426194f57bfcf6b0c0d1361871c7ac3ecd02b (diff)
handle enter/leave events in the menu
-rw-r--r--openbox/event.c39
1 files changed, 22 insertions, 17 deletions
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: