when nothing in a menu is selected, still let keybindings work
This commit is contained in:
parent
7101e30ed8
commit
a1be19e627
1 changed files with 20 additions and 8 deletions
|
@ -1166,14 +1166,26 @@ static void event_handle_dockapp(ObDockApp *app, XEvent *e)
|
||||||
ObMenuFrame* find_active_menu()
|
ObMenuFrame* find_active_menu()
|
||||||
{
|
{
|
||||||
GList *it;
|
GList *it;
|
||||||
ObMenuFrame *f;
|
ObMenuFrame *ret = NULL;
|
||||||
|
|
||||||
for (it = menu_frame_visible; it; it = g_list_next(it)) {
|
for (it = menu_frame_visible; it; it = g_list_next(it)) {
|
||||||
f = it->data;
|
ret = it->data;
|
||||||
if (f->selected)
|
if (ret->selected)
|
||||||
break;
|
break;
|
||||||
|
ret = NULL;
|
||||||
}
|
}
|
||||||
return it ? it->data : NULL;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObMenuFrame* find_active_or_last_menu()
|
||||||
|
{
|
||||||
|
GList *it;
|
||||||
|
ObMenuFrame *ret = NULL;
|
||||||
|
|
||||||
|
ret = find_active_menu();
|
||||||
|
if (!ret && menu_frame_visible)
|
||||||
|
ret = menu_frame_visible->data;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void event_handle_menu(XEvent *ev)
|
static void event_handle_menu(XEvent *ev)
|
||||||
|
@ -1219,19 +1231,19 @@ static void event_handle_menu(XEvent *ev)
|
||||||
menu_entry_frame_execute(f->selected, ev->xkey.state);
|
menu_entry_frame_execute(f->selected, ev->xkey.state);
|
||||||
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_LEFT)) {
|
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_LEFT)) {
|
||||||
ObMenuFrame *f;
|
ObMenuFrame *f;
|
||||||
if ((f = find_active_menu()) && f->parent)
|
if ((f = find_active_or_last_menu()) && f->parent)
|
||||||
menu_frame_select(f, NULL);
|
menu_frame_select(f, NULL);
|
||||||
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_RIGHT)) {
|
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_RIGHT)) {
|
||||||
ObMenuFrame *f;
|
ObMenuFrame *f;
|
||||||
if ((f = find_active_menu()) && f->child)
|
if ((f = find_active_or_last_menu()) && f->child)
|
||||||
menu_frame_select_next(f->child);
|
menu_frame_select_next(f->child);
|
||||||
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_UP)) {
|
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_UP)) {
|
||||||
ObMenuFrame *f;
|
ObMenuFrame *f;
|
||||||
if ((f = find_active_menu()))
|
if ((f = find_active_or_last_menu()))
|
||||||
menu_frame_select_previous(f);
|
menu_frame_select_previous(f);
|
||||||
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_DOWN)) {
|
} else if (ev->xkey.keycode == ob_keycode(OB_KEY_DOWN)) {
|
||||||
ObMenuFrame *f;
|
ObMenuFrame *f;
|
||||||
if ((f = find_active_menu()))
|
if ((f = find_active_or_last_menu()))
|
||||||
menu_frame_select_next(f);
|
menu_frame_select_next(f);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue