Allow selecting menu entries during menuHideDelay if you click again, bug 5501

This commit is contained in:
Mikael Magnusson 2014-11-05 09:58:57 +01:00
parent 28e85ea2b2
commit 8944094f71
3 changed files with 16 additions and 2 deletions

View file

@ -1836,8 +1836,14 @@ static gboolean event_handle_menu_input(XEvent *ev)
if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root)))
{
if (ev->type == ButtonPress && e->frame->child)
menu_frame_select(e->frame->child, NULL, TRUE);
if (ev->type == ButtonPress) {
/* We know this is a new press, so we don't have to
* block release events anymore */
menu_hide_delay_reset();
if (e->frame->child)
menu_frame_select(e->frame->child, NULL, TRUE);
}
menu_frame_select(e->frame, e, TRUE);
if (ev->type == ButtonRelease)
menu_entry_frame_execute(e, ev->xbutton.state);

View file

@ -454,6 +454,7 @@ static gboolean menu_hide_delay_func(gpointer data)
{
menu_can_hide = TRUE;
menu_timeout_id = 0;
return FALSE; /* no repeat */
}
@ -518,6 +519,12 @@ gboolean menu_hide_delay_reached(void)
return menu_can_hide;
}
void menu_hide_delay_reset(void)
{
if (menu_timeout_id) g_source_remove(menu_timeout_id);
menu_hide_delay_func(NULL);
}
static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id)
{
ObMenuEntry *self;

View file

@ -185,6 +185,7 @@ void menu_show(gchar *name, const GravityPoint *pos, gint monitor,
gboolean mouse, gboolean user_positioned,
struct _ObClient *client);
gboolean menu_hide_delay_reached(void);
void menu_hide_delay_reset(void);
/*! The show function is called right after a menu is shown */
void menu_set_show_func(ObMenu *menu, ObMenuShowFunc func);