From: Mikael Magnusson Date: Mon, 23 Aug 2010 16:30:38 +0000 (+0200) Subject: Don't hog the user during the hideDelay X-Git-Tag: release-3.5.0~62 X-Git-Url: http://git.openbox.org/?p=dana%2Fopenbox.git;a=commitdiff_plain;h=194bb32cf65d16a4ebec2b96ccad6f3c8c4be9b3;hp=5d5714f01e1a7140847f6e7f2922d457f6bbe66a Don't hog the user during the hideDelay --- diff --git a/openbox/event.c b/openbox/event.c index b59707b..8e0a6bb 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1792,8 +1792,9 @@ static gboolean event_handle_menu_input(XEvent *ev) 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 @@ static gboolean event_handle_menu_input(XEvent *ev) if (ev->type == ButtonRelease) menu_entry_frame_execute(e, ev->xbutton.state); } - else if (ev->type == ButtonRelease) + else menu_frame_hide_all(); } ret = TRUE; diff --git a/openbox/menu.c b/openbox/menu.c index 374aeec..a4f62f6 100644 --- a/openbox/menu.c +++ b/openbox/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 @@ void menu_free(ObMenu *menu) static gboolean menu_hide_delay_func(gpointer data) { menu_can_hide = TRUE; + menu_timeout_id = 0; return FALSE; /* no repeat */ } @@ -486,10 +488,11 @@ void menu_show(gchar *name, gint x, gint y, gboolean mouse, ObClient *client) 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); } } }