[gtk] entry: Add motion controller
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] entry: Add motion controller
- Date: Tue, 27 Feb 2018 11:53:24 +0000 (UTC)
commit 3c33e541cd6acafa67d29f2978c480b7783e2c00
Author: Timm Bäder <mail baedert org>
Date: Tue Feb 27 11:05:04 2018 +0100
entry: Add motion controller
Do the mouse cursor un-obscuring in the ::motion handler instead of in
the ->event handler. We don't get rid of the GtkWidgetClass::event
handler altogether that way, but it's a step in the right direction.
gtk/gtkentry.c | 42 ++++++++++++++++++++++++++++--------------
1 file changed, 28 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index f84783aeab..a67089dfa5 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -213,6 +213,7 @@ struct _GtkEntryPrivate
GtkGesture *drag_gesture;
GtkGesture *multipress_gesture;
+ GtkEventController *motion_controller;
GtkWidget *progress_widget;
GtkCssNode *selection_node;
@@ -2430,6 +2431,28 @@ gtk_entry_get_property (GObject *object,
}
}
+static void
+set_text_cursor (GtkWidget *widget)
+{
+ gtk_widget_set_cursor_from_name (widget, "text");
+}
+
+static void
+entry_motion_cb (GtkEventControllerMotion *event_controller,
+ double x,
+ double y,
+ gpointer user_data)
+{
+ GtkEntry *entry = user_data;
+ GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
+
+ if (priv->mouse_cursor_obscured)
+ {
+ set_text_cursor (GTK_WIDGET (entry));
+ priv->mouse_cursor_obscured = FALSE;
+ }
+}
+
static gunichar
find_invisible_char (GtkWidget *widget)
{
@@ -2535,6 +2558,10 @@ gtk_entry_init (GtkEntry *entry)
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->multipress_gesture), 0);
gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (priv->multipress_gesture), TRUE);
+ priv->motion_controller = gtk_event_controller_motion_new (GTK_WIDGET (entry));
+ g_signal_connect (priv->motion_controller, "motion",
+ G_CALLBACK (entry_motion_cb), entry);
+
widget_node = gtk_widget_get_css_node (GTK_WIDGET (entry));
for (i = 0; i < 2; i++)
{
@@ -2742,6 +2769,7 @@ gtk_entry_finalize (GObject *object)
g_clear_object (&priv->drag_gesture);
g_clear_object (&priv->multipress_gesture);
+ g_clear_object (&priv->motion_controller);
if (priv->tabs)
pango_tab_array_free (priv->tabs);
@@ -2838,12 +2866,6 @@ _gtk_entry_get_display_text (GtkEntry *entry,
}
}
-static void
-set_text_cursor (GtkWidget *widget)
-{
- gtk_widget_set_cursor_from_name (widget, "text");
-}
-
static void
update_cursors (GtkWidget *widget)
{
@@ -3539,14 +3561,6 @@ gtk_entry_event (GtkWidget *widget,
return GDK_EVENT_PROPAGATE;
}
- if (gdk_event_get_event_type (event) == GDK_MOTION_NOTIFY &&
- priv->mouse_cursor_obscured)
- {
- set_text_cursor (widget);
- priv->mouse_cursor_obscured = FALSE;
- return GDK_EVENT_PROPAGATE;
- }
-
if (!gdk_event_get_coords (event, &x, &y))
return GDK_EVENT_PROPAGATE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]