Apply surface transform in more places
authorMatthias Clasen <mclasen@redhat.com>
Sun, 17 May 2020 06:22:29 +0000 (02:22 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 17 May 2020 06:23:23 +0000 (02:23 -0400)
With these fixes, GtkSwitch now works in the presence
of surface transforms.

gtk/gtkmain.c
gtk/gtkwidget.c

index 89e1235fdfe16de9fccf78e2e36ec5b67a41c6b4..f58c73890b19d64a540cf8b9ec91e2532502f7da 100644 (file)
@@ -1281,8 +1281,10 @@ translate_event_coordinates (GdkEvent  *event,
                              GtkWidget *widget)
 {
   GtkWidget *event_widget;
+  GtkNative *native;
   graphene_point_t p;
   double event_x, event_y;
+  int native_x, native_y;
 
   *x = *y = 0;
 
@@ -1290,6 +1292,11 @@ translate_event_coordinates (GdkEvent  *event,
     return FALSE;
 
   event_widget = gtk_get_event_widget (event);
+  native = gtk_widget_get_native (event_widget);
+
+  gtk_native_get_surface_transform (GTK_NATIVE (native), &native_x, &native_y);
+  event_x -= native_x;
+  event_y -= native_y;
 
   if (!gtk_widget_compute_point (event_widget,
                                  widget,
@@ -1426,6 +1433,7 @@ update_pointer_focus_state (GtkWindow *toplevel,
   GdkEventSequence *sequence;
   GdkDevice *device;
   gdouble x, y;
+  int nx, ny;
 
   device = gdk_event_get_device (event);
   sequence = gdk_event_get_event_sequence (event);
@@ -1434,6 +1442,10 @@ update_pointer_focus_state (GtkWindow *toplevel,
     return old_target;
 
   gdk_event_get_position (event, &x, &y);
+  gtk_native_get_surface_transform (GTK_NATIVE (toplevel), &nx, &ny);
+  x -= nx;
+  y -= ny;
+
   gtk_window_update_pointer_focus (toplevel, device, sequence,
                                    new_target, x, y);
 
index d3c9e7232fdac9422c5b960bd4f60fb8f5af87db..7c32c427d769fc760a02aa095b633ccd169edb93 100644 (file)
@@ -4551,6 +4551,8 @@ translate_event_coordinates (GdkEvent  *event,
   GtkWidget *event_widget;
   graphene_point_t p;
   double event_x, event_y;
+  GtkNative *native;
+  int nx, ny;
 
   *x = *y = 0;
 
@@ -4558,6 +4560,10 @@ translate_event_coordinates (GdkEvent  *event,
     return FALSE;
 
   event_widget = gtk_get_event_widget (event);
+  native = gtk_widget_get_native (event_widget);
+  gtk_native_get_surface_transform (native, &nx, &ny);
+  event_x -= nx;
+  event_y -= ny;
 
   if (!gtk_widget_compute_point (event_widget,
                                  widget,