From 47ab3b6a44901ba8760568289524c8cf461bfd37 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Jan 13 2021 22:20:21 +0000 Subject: Apply patch window-dragging.patch patch_name: window-dragging.patch present_in_specfile: true --- diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 81df2ec..077c2d3 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -609,18 +609,45 @@ gtk_menu_shell_button_press (GtkWidget *widget, if (!menu_shell->active || !menu_shell->button) { - gtk_menu_shell_activate (menu_shell); + gboolean initially_active = menu_shell->active; menu_shell->button = event->button; - if (menu_item && _gtk_menu_item_is_selectable (menu_item) && - menu_item->parent == widget && - menu_item != menu_shell->active_menu_item) + if (menu_item) { - if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM) + if (_gtk_menu_item_is_selectable (menu_item) && + menu_item->parent == widget && + menu_item != menu_shell->active_menu_item) { - menu_shell->activate_time = event->time; - gtk_menu_shell_select_item (menu_shell, menu_item); + gtk_menu_shell_activate (menu_shell); + menu_shell->button = event->button; + + if (GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement == GTK_TOP_BOTTOM) + { + menu_shell->activate_time = event->time; + gtk_menu_shell_select_item (menu_shell, menu_item); + } + } + } + else + { + if (!initially_active) + { + gboolean window_drag = FALSE; + + gtk_widget_style_get (widget, + "window-dragging", &window_drag, + NULL); + + if (window_drag) + { + gtk_menu_shell_deactivate (menu_shell); + gtk_window_begin_move_drag (GTK_WINDOW (gtk_widget_get_toplevel (widget)), + event->button, + event->x_root, + event->y_root, + event->time); + } } } } diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index f774dfa..e0b75f8 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -2701,6 +2701,8 @@ static gboolean gtk_toolbar_button_press (GtkWidget *toolbar, GdkEventButton *event) { + GtkWidget *window; + if (_gtk_button_event_triggers_context_menu (event)) { gboolean return_value; @@ -2711,7 +2713,29 @@ gtk_toolbar_button_press (GtkWidget *toolbar, return return_value; } - + + window = gtk_widget_get_toplevel (toolbar); + + if (window) + { + gboolean window_drag = FALSE; + + gtk_widget_style_get (toolbar, + "window-dragging", &window_drag, + NULL); + + if (window_drag) + { + gtk_window_begin_move_drag (GTK_WINDOW (window), + event->button, + event->x_root, + event->y_root, + event->time); + + return TRUE; + } + } + return FALSE; } diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 1d1f6bb..d8f6023 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2467,6 +2467,13 @@ gtk_widget_class_init (GtkWidgetClass *klass) 0.0, 1.0, 0.04, GTK_PARAM_READABLE)); + gtk_widget_class_install_style_property (klass, + g_param_spec_boolean ("window-dragging", + P_("Window dragging"), + P_("Window dragging"), + FALSE, + GTK_PARAM_READWRITE)); + /** * GtkWidget:draw-border: *