[gtk/wip/matthiasc/focus2: 50/50] Add gtk_get_event_related_target
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/focus2: 50/50] Add gtk_get_event_related_target
- Date: Thu, 7 Mar 2019 11:44:35 +0000 (UTC)
commit 1ecc34347269369db2d4e525cb42b959fbac2129
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Mar 7 06:39:10 2019 -0500
Add gtk_get_event_related_target
This is meant to return the 'other' endpoint,
crossing events.
gtk/gtkmain.c | 34 ++++++++++++++++++++++++++++------
gtk/gtkmain.h | 3 +++
gtk/gtkprivate.h | 2 ++
3 files changed, 33 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 96b3036248..4e46d23b48 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1407,7 +1407,8 @@ static void
synth_crossing (GtkWidget *widget,
GtkWidget *toplevel,
gboolean enter,
- GtkWidget *other_widget,
+ GtkWidget *target,
+ GtkWidget *related_target,
GdkEvent *source,
GdkNotifyType notify_type,
GdkCrossingMode crossing_mode)
@@ -1430,8 +1431,8 @@ synth_crossing (GtkWidget *widget,
{
gdouble x, y;
event = gdk_event_new (enter ? GDK_ENTER_NOTIFY : GDK_LEAVE_NOTIFY);
- if (other_widget)
- event->crossing.child_surface = g_object_ref (gtk_widget_get_surface (other_widget));
+ if (related_target)
+ event->crossing.child_surface = g_object_ref (gtk_widget_get_surface (related_target));
gdk_event_get_coords (source, &x, &y);
event->crossing.x = x;
event->crossing.y = y;
@@ -1441,7 +1442,8 @@ synth_crossing (GtkWidget *widget,
flags = GTK_STATE_FLAG_PRELIGHT;
}
- gdk_event_set_user_data (event, G_OBJECT (widget));
+ gdk_event_set_user_data (event, G_OBJECT (target));
+ gtk_set_event_related_target (event, related_target);
gdk_event_set_device (event, gdk_event_get_device (source));
gdk_event_set_source_device (event, gdk_event_get_source_device (source));
@@ -1500,7 +1502,7 @@ gtk_synthesize_crossing_events (GtkWindow *toplevel,
leave_type : get_virtual_notify_type (leave_type);
synth_crossing (widget, GTK_WIDGET (toplevel), FALSE,
- new_target, event, notify_type, mode);
+ old_target, new_target, event, notify_type, mode);
widget = gtk_widget_get_parent (widget);
}
}
@@ -1525,7 +1527,7 @@ gtk_synthesize_crossing_events (GtkWindow *toplevel,
enter_type : get_virtual_notify_type (enter_type);
synth_crossing (widget, GTK_WIDGET (toplevel), TRUE,
- old_target, event, notify_type, mode);
+ new_target, old_target, event, notify_type, mode);
}
}
}
@@ -2427,6 +2429,26 @@ gtk_get_event_target (const GdkEvent *event)
return GTK_WIDGET (gdk_event_get_user_data (event));
}
+void
+gtk_set_event_related_target (GdkEvent *event,
+ GtkWidget *widget)
+{
+ g_object_set_data (G_OBJECT (event), "related-target", widget);
+}
+
+GtkWidget *
+gtk_get_event_related_target (const GdkEvent *event)
+{
+ gpointer ret;
+
+ ret = g_object_get_data (G_OBJECT (event), "related-target");
+
+ if (ret)
+ return GTK_WIDGET (ret);
+
+ return NULL;
+}
+
/**
* gtk_get_event_target_with_type:
* @event: a #GdkEvent
diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h
index 81c1e574ad..b1199e6f93 100644
--- a/gtk/gtkmain.h
+++ b/gtk/gtkmain.h
@@ -155,6 +155,9 @@ GtkWidget *gtk_get_event_widget (const GdkEvent *event);
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_get_event_target (const GdkEvent *event);
+GDK_AVAILABLE_IN_ALL
+GtkWidget *gtk_get_event_related_target (const GdkEvent *event);
+
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_get_event_target_with_type (GdkEvent *event,
GType type);
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index 81f9068693..94d8d82fd3 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -93,6 +93,8 @@ gboolean _gtk_translate_keyboard_accel_state (GdkKeymap *keymap,
void gtk_propagate_event_internal (GtkWidget *widget,
GdkEvent *event,
GtkWidget *topmost);
+void gtk_set_event_related_target (GdkEvent *event,
+ GtkWidget *widget);
gdouble _gtk_get_slowdown (void);
void _gtk_set_slowdown (gdouble slowdown_factor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]