[gtk+/wip/carlosg/event-delivery: 33/104] gtkwidget: Make gtk_widget_event() Accept pointing events in root coordinates
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/carlosg/event-delivery: 33/104] gtkwidget: Make gtk_widget_event() Accept pointing events in root coordinates
- Date: Thu, 25 May 2017 14:42:53 +0000 (UTC)
commit ef4f0e53364b51efea1d71f7770e8d52631c3cb0
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Mar 31 18:25:04 2017 +0200
gtkwidget: Make gtk_widget_event() Accept pointing events in root coordinates
This function will, at the last minute, ensure the event contains the right
widget-relative coordinates for the widget the event is being emitted to.
gtk/gtkwidget.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 55e1353..a550394 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]