[gtk/wip/exalm/headerbar-dragging: 1/6] widget: Pass parent to gtk_widget_consumes_motion()



commit b766cf4052e8a50b8ea963c07bf736921e4c774a
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Sat May 2 20:34:15 2020 +0500

    widget: Pass parent to gtk_widget_consumes_motion()
    
    Right now it assumes that the parent is a GtkWindow. This will break when
    window dragging is handled by another widget.

 gtk/gtkwidget.c        | 7 ++++---
 gtk/gtkwidgetprivate.h | 5 +++--
 gtk/gtkwindow.c        | 2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 8ee76a263d..3d2cb302c4 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -11425,12 +11425,13 @@ gtk_widget_remove_controller (GtkWidget          *widget,
 }
 
 gboolean
-_gtk_widget_consumes_motion (GtkWidget        *widget,
-                             GdkEventSequence *sequence)
+gtk_widget_consumes_motion (GtkWidget        *widget,
+                            GtkWidget        *parent,
+                            GdkEventSequence *sequence)
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
 
-  while (widget != NULL && !GTK_IS_WINDOW (widget))
+  while (widget != NULL && widget != parent)
     {
       GList *l;
 
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 5085353525..446bf62e0d 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -281,8 +281,9 @@ void              _gtk_widget_update_parent_muxer          (GtkWidget    *widget
 GtkActionMuxer *  _gtk_widget_get_action_muxer             (GtkWidget    *widget,
                                                             gboolean      create);
 
-gboolean          _gtk_widget_consumes_motion              (GtkWidget           *widget,
-                                                            GdkEventSequence    *sequence);
+gboolean          gtk_widget_consumes_motion               (GtkWidget        *widget,
+                                                            GtkWidget        *parent,
+                                                            GdkEventSequence *sequence);
 
 gboolean          gtk_widget_has_tick_callback             (GtkWidget *widget);
 
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 518d9518f5..c49c48aa41 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -1444,7 +1444,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
            */
           if (event_widget != GTK_WIDGET (window) &&
               !gtk_widget_has_grab (event_widget) &&
-              _gtk_widget_consumes_motion (event_widget, sequence))
+              _gtk_widget_consumes_motion (event_widget, GTK_WIDGET (window), sequence))
             {
               gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
               return;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]