menubutton: Fix possible button/popover state inconsistences

While a popover is hiding, the modal grab is already gone and the toggle
button is clickable again, but clicking again at that time will result in
gtk_widget_show() trying to show an already shown widget (although fading
out and hidden soon) and the toggle button activated.

So let the menubutton set the active status only if the menu/popover
widget wasn't already shown, and ensure this doesn't get triggered by
double/triple button press events.
This commit is contained in:
Carlos Garnacho 2015-02-20 13:33:09 +01:00
parent 85ad434290
commit fa48b42ef1

View File

@ -442,10 +442,16 @@ gtk_menu_button_button_press_event (GtkWidget *widget,
if (event->button == GDK_BUTTON_PRIMARY)
{
if (priv->menu)
/* Filter out double/triple clicks */
if (event->type != GDK_BUTTON_PRESS)
return TRUE;
if (priv->menu && !gtk_widget_get_visible (priv->menu))
popup_menu (menu_button, event);
else if (priv->popover)
else if (priv->popover && !gtk_widget_get_visible (priv->popover))
gtk_widget_show (priv->popover);
else
return TRUE;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);