all repos — openbox @ e8588737c944f4dc5f94ca67bf0c7e3ff7133004

openbox fork - make it a bit more like ryudo

Allow infinite delay for submenu show/hide by using a negative value.
Dana Jansens danakj@orodu.net
commit

e8588737c944f4dc5f94ca67bf0c7e3ff7133004

parent

b88cf22bc0084bc611453443b5d8355edbe33bfa

2 files changed, 15 insertions(+), 11 deletions(-)

jump to
M data/rc.xmldata/rc.xml

@@ -633,11 +633,15 @@ menu is hidden again -->

<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>
M openbox/menuframe.copenbox/menuframe.c

@@ -1160,7 +1160,9 @@ selected before */

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 */

@@ -1187,15 +1189,14 @@ }

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); } }

@@ -1206,15 +1207,14 @@ /* only show if the submenu isn't already showing */

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); } } }