diff options
| author | Scott Moynes <smoynes@nexus.carleton.ca> | 2003-07-21 23:19:03 +0000 |
|---|---|---|
| committer | Scott Moynes <smoynes@nexus.carleton.ca> | 2003-07-21 23:19:03 +0000 |
| commit | ea53850762b423f8cdbaa95aa69b6c413a65a7d9 (patch) | |
| tree | 785e2641b554b9d2fe6c549ddf66d7070da38107 /openbox/event.c | |
| parent | e9a8e272c06fd0cc1a2d93418d261886e786b16f (diff) | |
Keyboard navigatable menus
Diffstat (limited to 'openbox/event.c')
| -rw-r--r-- | openbox/event.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/openbox/event.c b/openbox/event.c index cdac8683..35d3472d 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -966,27 +966,37 @@ static void event_handle_menu(ObClient *client, XEvent *e) static ObMenuEntry *over = NULL; ObMenuEntry *entry; ObMenu *top; - GSList *it; + GList *it = NULL; - top = g_slist_nth_data(menu_visible, 0); + top = g_list_nth_data(menu_visible, 0); g_message("EVENT %d", e->type); switch (e->type) { case KeyPress: - if (over) { - if (over->parent->mouseover) - over->parent->mouseover(over, FALSE); - else - menu_control_mouseover(over, FALSE); - menu_entry_render(over); - over = NULL; - } + if (e->xkey.keycode == ob_keycode(OB_KEY_DOWN)) + over = menu_control_keyboard_nav(over, OB_KEY_DOWN); + else if (e->xkey.keycode == ob_keycode(OB_KEY_UP)) + over = menu_control_keyboard_nav(over, OB_KEY_UP); + else if (e->xkey.keycode == ob_keycode(OB_KEY_RETURN)) + over = menu_control_keyboard_nav(over, OB_KEY_RETURN); + else if (e->xkey.keycode == ob_keycode(OB_KEY_ESCAPE)) + over = menu_control_keyboard_nav(over, OB_KEY_ESCAPE); + else { + if (over) { + if (over->parent->mouseover) + over->parent->mouseover(over, FALSE); + else + menu_control_mouseover(over, FALSE); + menu_entry_render(over); + over = NULL; + } /* - if (top->hide) - top->hide(top); - else + if (top->hide) + top->hide(top); + else */ menu_hide(top); + } break; case ButtonPress: if (e->xbutton.button > 3) break; @@ -998,7 +1008,7 @@ static void event_handle_menu(ObClient *client, XEvent *e) g_message("BUTTON RELEASED"); - for (it = menu_visible; it; it = g_slist_next(it)) { + for (it = menu_visible; it; it = g_list_next(it)) { ObMenu *m = it->data; if (e->xbutton.x_root >= m->location.x - ob_rr_theme->bwidth && e->xbutton.y_root >= m->location.y - ob_rr_theme->bwidth && @@ -1045,7 +1055,7 @@ static void event_handle_menu(ObClient *client, XEvent *e) break; case MotionNotify: g_message("motion"); - for (it = menu_visible; it; it = g_slist_next(it)) { + for (it = menu_visible; it; it = g_list_next(it)) { ObMenu *m = it->data; if ((entry = menu_find_entry_by_pos(it->data, e->xmotion.x_root - |
