menus: Don't popdown submenus on button release for touch devices
This is so submenus stay open as the parent menu item is pressed/released, since the user would typically lift the finger in order to select a submenu item.
This commit is contained in:
parent
0e8c2db131
commit
535b4150fd
@ -3358,9 +3358,17 @@ static gboolean
|
|||||||
gtk_menu_button_press (GtkWidget *widget,
|
gtk_menu_button_press (GtkWidget *widget,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
{
|
{
|
||||||
|
GdkDevice *source_device;
|
||||||
|
GtkWidget *event_widget;
|
||||||
|
GtkMenu *menu;
|
||||||
|
|
||||||
if (event->type != GDK_BUTTON_PRESS)
|
if (event->type != GDK_BUTTON_PRESS)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
source_device = gdk_event_get_source_device ((GdkEvent *) event);
|
||||||
|
event_widget = gtk_get_event_widget ((GdkEvent *) event);
|
||||||
|
menu = GTK_MENU (widget);
|
||||||
|
|
||||||
/* Don't pass down to menu shell if a non-menuitem part of the menu
|
/* Don't pass down to menu shell if a non-menuitem part of the menu
|
||||||
* was clicked. The check for the event_widget being a GtkMenuShell
|
* was clicked. The check for the event_widget being a GtkMenuShell
|
||||||
* works because we have the pointer grabbed on menu_shell->window
|
* works because we have the pointer grabbed on menu_shell->window
|
||||||
@ -3368,10 +3376,16 @@ gtk_menu_button_press (GtkWidget *widget,
|
|||||||
* the menu or on its border are delivered relative to
|
* the menu or on its border are delivered relative to
|
||||||
* menu_shell->window.
|
* menu_shell->window.
|
||||||
*/
|
*/
|
||||||
if (GTK_IS_MENU_SHELL (gtk_get_event_widget ((GdkEvent *) event)) &&
|
if (GTK_IS_MENU_SHELL (event_widget) &&
|
||||||
pointer_in_menu_window (widget, event->x_root, event->y_root))
|
pointer_in_menu_window (widget, event->x_root, event->y_root))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
if (GTK_IS_MENU_ITEM (event_widget) &&
|
||||||
|
gdk_device_get_source (source_device) == GDK_SOURCE_TOUCHSCREEN &&
|
||||||
|
GTK_MENU_ITEM (event_widget)->priv->submenu != NULL &&
|
||||||
|
!gtk_widget_is_drawable (GTK_MENU_ITEM (event_widget)->priv->submenu))
|
||||||
|
menu->priv->ignore_button_release = TRUE;
|
||||||
|
|
||||||
return GTK_WIDGET_CLASS (gtk_menu_parent_class)->button_press_event (widget, event);
|
return GTK_WIDGET_CLASS (gtk_menu_parent_class)->button_press_event (widget, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1700,7 +1700,7 @@ gtk_real_menu_item_select (GtkMenuItem *menu_item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((!source_device ||
|
if ((!source_device ||
|
||||||
gdk_device_get_source (source_device) != GDK_SOURCE_TOUCH) &&
|
gdk_device_get_source (source_device) != GDK_SOURCE_TOUCHSCREEN) &&
|
||||||
priv->submenu &&
|
priv->submenu &&
|
||||||
(!gtk_widget_get_mapped (priv->submenu) ||
|
(!gtk_widget_get_mapped (priv->submenu) ||
|
||||||
GTK_MENU (priv->submenu)->priv->tearoff_active))
|
GTK_MENU (priv->submenu)->priv->tearoff_active))
|
||||||
|
Loading…
Reference in New Issue
Block a user