X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=04e651451dad1a7d9ea86acae5d1463521c031a3;hb=8a1e9c64d86b0a21db9edfe6b6a7221f07c1e5f5;hp=f71fdf57b07e1689b7e588be6da45c4a1127c528;hpb=3c5f6db04cb577fa3f547b45283eac7a0664be39;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index f71fdf57..04e65145 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1147,6 +1147,19 @@ static void event_handle_dockapp(ObDockApp *app, XEvent *e) } } +ObMenuFrame* find_active_menu() +{ + GList *it; + ObMenuFrame *f; + + for (it = menu_frame_visible; it; it = g_list_next(it)) { + f = it->data; + if (f->selected) + break; + } + return it ? it->data : NULL; +} + static void event_handle_menu(XEvent *ev) { ObMenuFrame *f; @@ -1173,5 +1186,31 @@ static void event_handle_menu(XEvent *ev) menu_frame_select(f, e); } break; + case KeyPress: + if (ev->xkey.keycode == ob_keycode(OB_KEY_ESCAPE)) + menu_frame_hide_all(); + else if (ev->xkey.keycode == ob_keycode(OB_KEY_RETURN)) { + ObMenuFrame *f; + if ((f = find_active_menu())) + menu_entry_frame_execute(f->selected, + !(ev->xkey.state & ControlMask)); + } else if (ev->xkey.keycode == ob_keycode(OB_KEY_LEFT)) { + ObMenuFrame *f; + if ((f = find_active_menu()) && f->parent) + menu_frame_select(f, NULL); + } else if (ev->xkey.keycode == ob_keycode(OB_KEY_RIGHT)) { + ObMenuFrame *f; + if ((f = find_active_menu()) && f->child) + menu_frame_select_next(f->child); + } else if (ev->xkey.keycode == ob_keycode(OB_KEY_UP)) { + ObMenuFrame *f; + if ((f = find_active_menu())) + menu_frame_select_previous(f); + } else if (ev->xkey.keycode == ob_keycode(OB_KEY_DOWN)) { + ObMenuFrame *f; + if ((f = find_active_menu())) + menu_frame_select_next(f); + } + break; } }