<middle>no</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>200</submenuShowDelay>
- <!-- this one is easy, time to delay before showing a submenu after hovering
- over the parent entry -->
+ <!-- time to delay before showing a submenu after hovering over the parent
+ entry.
+ if this is a negative value, then the delay is infinite and the
+ submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu -->
+ if this is a negative value, then the delay is infinite and the
+ submenu will not be hidden until a different submenu is opened -->
<applicationIcons>yes</applicationIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
<manageDesktops>yes</manageDesktops>
if (entry && entry->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR)
entry = old;
- if (old == entry) return;
+ if (old == entry && (old->entry->type != OB_MENU_ENTRY_TYPE_SUBMENU ||
+ old == oldchild_entry))
+ return;
/* if the user left this menu but we have a submenu open, move the
selection back to that submenu */
else if (oldchild_entry == old) {
/* The open submenu was selected and is no longer, so hide the
submenu */
- if (!immediate && config_submenu_hide_delay) {
+ if (immediate || config_submenu_hide_delay == 0)
+ menu_frame_hide(oldchild);
+ else if (config_submenu_hide_delay > 0)
ob_main_loop_timeout_add(ob_main_loop,
config_submenu_hide_delay * 1000,
submenu_hide_timeout,
oldchild, g_direct_equal,
NULL);
- }
- else
- menu_frame_hide(oldchild);
}
}
if (oldchild_entry != self->selected &&
self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
{
- if (config_submenu_show_delay && !immediate) {
- /* initiate a new submenu open request */
+ if (immediate || config_submenu_hide_delay == 0)
+ menu_entry_frame_show_submenu(self->selected);
+ else if (config_submenu_hide_delay > 0)
ob_main_loop_timeout_add(ob_main_loop,
config_submenu_show_delay * 1000,
submenu_show_timeout,
self->selected, g_direct_equal,
NULL);
- } else
- menu_entry_frame_show_submenu(self->selected);
}
}
}