static guint pressed = 0;
static Window pressed_win = None;
+ event_sourcetime = event_curtime;
+
/* If the button press was on some non-root window, or was physically
on the root window... */
if (window != obt_root(ob_screen) ||
else if (e->type == KeyPress || e->type == KeyRelease ||
e->type == MotionNotify)
{
+ event_sourcetime = event_curtime;
+
used = event_handle_user_input(client, e);
if (prompt && !used)
used = event_handle_prompt(prompt, e);
}
+ /* show any debug prompts that are queued */
+ ob_debug_show_prompts();
+
/* if something happens and it's not from an XEvent, then we don't know
the time, so clear it here until the next event is handled */
event_curtime = event_sourcetime = CurrentTime;
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;
}
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 =
if (found) {
menu_frame_select(frame, found, TRUE);
- if (num_found == 1)
- frame->press_doexec = TRUE;
+ if (num_found == 1) {
+ if (found->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) {
+ /* move focus to the child menu */
+ menu_frame_select_next(frame->child);
+ }
+ else {
+ frame->press_doexec = TRUE;
+ }
+ }
ret = TRUE;
}
}
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);
}
}