summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/event.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/openbox/event.c b/openbox/event.c
index ecd20f92..ba39ef9f 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -1859,14 +1859,23 @@ static gboolean event_handle_menu_input(XEvent *ev)
ret = TRUE;
}
- else if (sym == XK_Right) {
- /* Right goes to the selected submenu */
- if (frame->selected &&
- frame->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
- {
- /* make sure it is visible */
- menu_frame_select(frame, frame->selected, TRUE);
- menu_frame_select_next(frame->child);
+ else if (sym == XK_Right || sym == XK_Return || sym == XK_KP_Enter)
+ {
+ /* Right and enter goes to the selected submenu.
+ Enter executes instead if it's not on a submenu. */
+
+ if (frame->selected) {
+ const ObMenuEntryType t = frame->selected->entry->type;
+
+ if (t == OB_MENU_ENTRY_TYPE_SUBMENU) {
+ /* make sure it is visible */
+ menu_frame_select(frame, frame->selected, TRUE);
+ /* move focus to the child menu */
+ menu_frame_select_next(frame->child);
+ }
+ else if (sym != XK_Right) {
+ frame->press_doexec = TRUE;
+ }
}
ret = TRUE;
}
@@ -1891,11 +1900,6 @@ static gboolean event_handle_menu_input(XEvent *ev)
ret = TRUE;
}
- else if (sym == XK_Return || sym == XK_KP_Enter) {
- frame->press_doexec = TRUE;
- ret = TRUE;
- }
-
/* keyboard accelerator shortcuts. (if it was a valid key) */
else if (frame->entries &&
(unikey =
@@ -1957,9 +1961,7 @@ static gboolean event_handle_menu_input(XEvent *ev)
frame->got_press &&
frame->press_doexec)
{
- if (frame->child)
- menu_frame_select_next(frame->child);
- else if (frame->selected)
+ if (frame->selected)
menu_entry_frame_execute(frame->selected, ev->xkey.state);
}
}