all repos — openbox @ 310d268bf0b3fbc065e754b9dc25862a60efcaae

openbox fork - make it a bit more like ryudo

patch from syscrash2k, adds submenuShowDelay option, bug #2682
Mikael Magnusson mikachu@comhem.se
commit

310d268bf0b3fbc065e754b9dc25862a60efcaae

parent

ad215303e7e651c0274d219709e109073bc4a032

3 files changed, 36 insertions(+), 2 deletions(-)

jump to
M openbox/config.copenbox/config.c

@@ -70,6 +70,7 @@

gboolean config_menu_warppointer; gboolean config_menu_xorstyle; guint config_menu_hide_delay; +guint config_submenu_show_delay; gboolean config_menu_client_list_icons; GSList *config_menu_files;

@@ -422,6 +423,8 @@ if ((n = parse_find_node("xorStyle", node)))

config_menu_xorstyle = parse_bool(doc, n); if ((n = parse_find_node("hideDelay", node))) config_menu_hide_delay = parse_int(doc, n); + if ((n = parse_find_node("submenuShowDelay", node))) + config_submenu_show_delay = parse_int(doc, n); if ((n = parse_find_node("desktopMenuIcons", node))) config_menu_client_list_icons = parse_bool(doc, n); }

@@ -617,6 +620,7 @@

config_menu_warppointer = TRUE; config_menu_xorstyle = TRUE; config_menu_hide_delay = 250; + config_submenu_show_delay = 0; config_menu_client_list_icons = TRUE; config_menu_files = NULL;
M openbox/config.hopenbox/config.h

@@ -122,6 +122,8 @@ /*! make menus jump around a lot */

extern gboolean config_menu_xorstyle; /*! delay for hiding menu when opening */ extern guint config_menu_hide_delay; +/*! delay before opening a submenu */ +extern guint config_submenu_show_delay; /*! show icons in client_list_menu */ extern gboolean config_menu_client_list_icons; /*! User-specified menu files */
M openbox/menuframe.copenbox/menuframe.c

@@ -43,6 +43,7 @@ ObMenuFrame *frame);

static void menu_entry_frame_free(ObMenuEntryFrame *self); static void menu_frame_render(ObMenuFrame *self); static void menu_frame_update(ObMenuFrame *self); +static gboolean menu_entry_frame_submenu_timeout(gpointer data); static Window createWindow(Window parent, gulong mask, XSetWindowAttributes *attrib)

@@ -663,6 +664,11 @@ }

void menu_frame_hide_all() { + if (config_submenu_show_delay) { + /* remove any submenu open requests */ + ob_main_loop_timeout_remove(ob_main_loop, + menu_entry_frame_submenu_timeout); + } GList *it = g_list_last(menu_frame_visible); if (it) menu_frame_hide(it->data);

@@ -717,6 +723,12 @@ }

return ret; } +static gboolean menu_entry_frame_submenu_timeout(gpointer data) +{ + menu_entry_frame_show_submenu((ObMenuEntryFrame*)data); + return FALSE; +} + void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry) { ObMenuEntryFrame *old = self->selected;

@@ -726,6 +738,12 @@ if (entry && entry->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR)

entry = old; if (old == entry) return; + + if (config_submenu_show_delay) { + /* remove any submenu open requests */ + ob_main_loop_timeout_remove(ob_main_loop, + menu_entry_frame_submenu_timeout); + } self->selected = entry;

@@ -737,8 +755,18 @@

if (self->selected) { menu_entry_frame_render(self->selected); - if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) - menu_entry_frame_show_submenu(self->selected); + if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) { + if (config_submenu_show_delay) { + /* initiate a new submenu open request */ + ob_main_loop_timeout_add(ob_main_loop, + config_submenu_show_delay * 1000, + menu_entry_frame_submenu_timeout, + self->selected, + NULL); + } else { + menu_entry_frame_show_submenu(self->selected); + } + } } }