diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 55e1353224..a550394ca5 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -6981,6 +6981,26 @@ event_window_is_still_viewable (GdkEvent *event) } } +static void +translate_coordinates (GdkEvent *event, + GtkWidget *widget) +{ + GtkWidget *event_widget; + gdouble xd, yd; + gint x, y; + + if (!gdk_event_get_coords (event, &xd, &yd)) + return; + event_widget = gtk_get_event_widget (event); + + /* FIXME: loses precision */ + x = xd; + y = yd; + gtk_widget_translate_coordinates (event_widget, widget, + x, y, &x, &y); + gdk_event_set_coords (event, x, y); +} + static gint gtk_widget_event_internal (GtkWidget *widget, GdkEvent *event) @@ -6996,6 +7016,7 @@ gtk_widget_event_internal (GtkWidget *widget, return TRUE; g_object_ref (widget); + translate_coordinates (event_copy, widget); if (widget == gtk_get_event_widget (event)) return_val |= _gtk_widget_run_controllers (widget, event, GTK_PHASE_TARGET);