Don't hog the user during the hideDelay

This commit is contained in:
Mikael Magnusson 2010-08-23 18:30:38 +02:00 committed by Dana Jansens
parent 5d5714f01e
commit 194bb32cf6
2 changed files with 11 additions and 7 deletions

View file

@ -1792,8 +1792,9 @@ static gboolean event_handle_menu_input(XEvent *ev)
if (ev->type == ButtonRelease || ev->type == ButtonPress) { if (ev->type == ButtonRelease || ev->type == ButtonPress) {
ObMenuEntryFrame *e; ObMenuEntryFrame *e;
if (menu_hide_delay_reached() && if ((ev->xbutton.button < 4 || ev->xbutton.button > 5) &&
(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, if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root))) ev->xbutton.y_root)))
@ -1804,7 +1805,7 @@ static gboolean event_handle_menu_input(XEvent *ev)
if (ev->type == ButtonRelease) if (ev->type == ButtonRelease)
menu_entry_frame_execute(e, ev->xbutton.state); menu_entry_frame_execute(e, ev->xbutton.state);
} }
else if (ev->type == ButtonRelease) else
menu_frame_hide_all(); menu_frame_hide_all();
} }
ret = TRUE; ret = TRUE;

View file

@ -49,6 +49,7 @@ static GHashTable *menu_hash = NULL;
static ObtXmlInst *menu_parse_inst; static ObtXmlInst *menu_parse_inst;
static ObMenuParseState menu_parse_state; static ObMenuParseState menu_parse_state;
static gboolean menu_can_hide = FALSE; static gboolean menu_can_hide = FALSE;
static guint menu_timeout_id = 0;
static void menu_destroy_hash_value(ObMenu *self); static void menu_destroy_hash_value(ObMenu *self);
static void parse_menu_item(xmlNodePtr node, gpointer data); 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) static gboolean menu_hide_delay_func(gpointer data)
{ {
menu_can_hide = TRUE; menu_can_hide = TRUE;
menu_timeout_id = 0;
return FALSE; /* no repeat */ 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; menu_can_hide = TRUE;
else { else {
menu_can_hide = FALSE; menu_can_hide = FALSE;
g_timeout_add_full(G_PRIORITY_DEFAULT, if (menu_timeout_id) g_source_remove(menu_timeout_id);
config_menu_hide_delay, menu_timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT,
menu_hide_delay_func, config_menu_hide_delay,
NULL, NULL); menu_hide_delay_func,
NULL, NULL);
} }
} }
} }