X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkmenushell.c;h=ae36459d43f981feae370333b014a5f46b5df0f8;hb=45ad8a06ad511ad95a74172172b9fe459bc666ad;hp=b74f424e937de7e2689e45169fc86012633d2901;hpb=7cc3eb04ec5c77f01f25f21ef88723e00a96620e;p=~andy%2Fgtk diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index b74f424e9..ae36459d4 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -649,7 +649,7 @@ gtk_menu_shell_realize (GtkWidget *widget) window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gtk_widget_set_window (widget, window); - gdk_window_set_user_data (window, widget); + gtk_widget_register_window (widget, window); context = gtk_widget_get_style_context (widget); gtk_style_context_set_background (context, window); @@ -1083,13 +1083,11 @@ gtk_menu_shell_enter_notify (GtkWidget *widget, if (!gtk_widget_get_visible (GTK_MENU_ITEM (menu_item)->priv->submenu)) { - gboolean touchscreen_mode; + GdkDevice *source_device; - g_object_get (gtk_widget_get_settings (widget), - "gtk-touchscreen-mode", &touchscreen_mode, - NULL); + source_device = gdk_event_get_source_device ((GdkEvent *) event); - if (touchscreen_mode) + if (gdk_device_get_source (source_device) == GDK_SOURCE_TOUCHSCREEN) _gtk_menu_item_popup_submenu (menu_item, TRUE); } } @@ -1109,7 +1107,7 @@ gtk_menu_shell_leave_notify (GtkWidget *widget, GdkEventCrossing *event) { if (event->mode == GDK_CROSSING_GTK_GRAB || - event->mode == GDK_CROSSING_GTK_GRAB || + event->mode == GDK_CROSSING_GTK_UNGRAB || event->mode == GDK_CROSSING_STATE_CHANGED) return TRUE; @@ -1611,45 +1609,19 @@ gtk_real_menu_shell_move_current (GtkMenuShell *menu_shell, GtkMenuShellPrivate *priv = menu_shell->priv; GtkMenuShell *parent_menu_shell = NULL; gboolean had_selection; - gboolean touchscreen_mode; priv->in_unselectable_item = FALSE; had_selection = priv->active_menu_item != NULL; - g_object_get (gtk_widget_get_settings (GTK_WIDGET (menu_shell)), - "gtk-touchscreen-mode", &touchscreen_mode, - NULL); - if (priv->parent_menu_shell) parent_menu_shell = GTK_MENU_SHELL (priv->parent_menu_shell); switch (direction) { case GTK_MENU_DIR_PARENT: - if (touchscreen_mode && - priv->active_menu_item && - GTK_MENU_ITEM (priv->active_menu_item)->priv->submenu && - gtk_widget_get_visible (GTK_MENU_ITEM (priv->active_menu_item)->priv->submenu)) - { - /* if we are on a menu item that has an open submenu but the - * focus is not in that submenu (e.g. because it's empty or - * has only insensitive items), close that submenu instead of - * running into the code below which would close *this* menu. - */ - _gtk_menu_item_popdown_submenu (priv->active_menu_item); - _gtk_menu_shell_update_mnemonics (menu_shell); - } - else if (parent_menu_shell) + if (parent_menu_shell) { - if (touchscreen_mode) - { - /* close menu when returning from submenu. */ - _gtk_menu_item_popdown_submenu (GTK_MENU (menu_shell)->priv->parent_menu_item); - _gtk_menu_shell_update_mnemonics (parent_menu_shell); - break; - } - if (GTK_MENU_SHELL_GET_CLASS (parent_menu_shell)->submenu_placement == GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement) gtk_menu_shell_deselect (menu_shell); @@ -1751,12 +1723,10 @@ static void gtk_real_menu_shell_cycle_focus (GtkMenuShell *menu_shell, GtkDirectionType dir) { - GtkMenuShellPrivate *priv = menu_shell->priv; - while (menu_shell && !GTK_IS_MENU_BAR (menu_shell)) { - if (priv->parent_menu_shell) - menu_shell = GTK_MENU_SHELL (priv->parent_menu_shell); + if (menu_shell->priv->parent_menu_shell) + menu_shell = GTK_MENU_SHELL (menu_shell->priv->parent_menu_shell); else menu_shell = NULL; }