all repos — openbox @ 194bb32cf65d16a4ebec2b96ccad6f3c8c4be9b3

openbox fork - make it a bit more like ryudo

Don't hog the user during the hideDelay
Mikael Magnusson mikachu@gmail.com
commit

194bb32cf65d16a4ebec2b96ccad6f3c8c4be9b3

parent

5d5714f01e1a7140847f6e7f2922d457f6bbe66a

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

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

@@ -1792,8 +1792,9 @@

if (ev->type == ButtonRelease || ev->type == ButtonPress) { ObMenuEntryFrame *e; - if (menu_hide_delay_reached() && - (ev->xbutton.button < 4 || ev->xbutton.button > 5)) + if ((ev->xbutton.button < 4 || ev->xbutton.button > 5) && + ((ev->type == ButtonRelease && menu_hide_delay_reached()) || + ev->type == ButtonPress)) { if ((e = menu_entry_frame_under(ev->xbutton.x_root, ev->xbutton.y_root)))

@@ -1804,7 +1805,7 @@ menu_frame_select(e->frame, e, TRUE);

if (ev->type == ButtonRelease) menu_entry_frame_execute(e, ev->xbutton.state); } - else if (ev->type == ButtonRelease) + else menu_frame_hide_all(); } ret = TRUE;
M openbox/menu.copenbox/menu.c

@@ -49,6 +49,7 @@ static GHashTable *menu_hash = NULL;

static ObtXmlInst *menu_parse_inst; static ObMenuParseState menu_parse_state; static gboolean menu_can_hide = FALSE; +static guint menu_timeout_id = 0; static void menu_destroy_hash_value(ObMenu *self); static void parse_menu_item(xmlNodePtr node, gpointer data);

@@ -437,6 +438,7 @@

static gboolean menu_hide_delay_func(gpointer data) { menu_can_hide = TRUE; + menu_timeout_id = 0; return FALSE; /* no repeat */ }

@@ -486,10 +488,11 @@ if (!mouse)

menu_can_hide = TRUE; else { menu_can_hide = FALSE; - g_timeout_add_full(G_PRIORITY_DEFAULT, - config_menu_hide_delay, - menu_hide_delay_func, - NULL, NULL); + if (menu_timeout_id) g_source_remove(menu_timeout_id); + menu_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT, + config_menu_hide_delay, + menu_hide_delay_func, + NULL, NULL); } } }