summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2021-08-23 15:33:32 +0200
committerCarlos Garnacho <carlosg@gnome.org>2021-08-23 15:38:33 +0200
commit7a4afb08bdd39916aaccb624ef6cbb62291e91d7 (patch)
treee15f2be0419920c0f54d977f48ee553034e88edc
parentc5cd1ac63079622e5876f3a48759663de5533b27 (diff)
downloadgtk+-7a4afb08bdd39916aaccb624ef6cbb62291e91d7.tar.gz
gtksearchentry: Add a "catchall" click gesture handler
This gesture is set on the whole widget surface, since there's multiple input targets inside an entry (icons, the GtkText itself) it makes sense to consider the full entry an area handling clicks. Ensure these events don't propagate further up, and result in other actions.
-rw-r--r--gtk/gtksearchentry.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c
index ebee742622..6708fcc3af 100644
--- a/gtk/gtksearchentry.c
+++ b/gtk/gtksearchentry.c
@@ -580,10 +580,20 @@ activate_cb (GtkText *text,
}
static void
+catchall_click_press (GtkGestureClick *gesture,
+ int n_press,
+ double x,
+ double y,
+ gpointer user_data)
+{
+ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
+}
+
+static void
gtk_search_entry_init (GtkSearchEntry *entry)
{
GtkWidget *icon;
- GtkGesture *press;
+ GtkGesture *press, *catchall;
/* The search icon is purely presentational */
icon = g_object_new (GTK_TYPE_IMAGE,
@@ -615,6 +625,12 @@ gtk_search_entry_init (GtkSearchEntry *entry)
g_signal_connect (press, "released", G_CALLBACK (gtk_search_entry_icon_release), entry);
gtk_widget_add_controller (entry->icon, GTK_EVENT_CONTROLLER (press));
+ catchall = gtk_gesture_click_new ();
+ g_signal_connect (catchall, "pressed",
+ G_CALLBACK (catchall_click_press), entry);
+ gtk_widget_add_controller (GTK_WIDGET (entry),
+ GTK_EVENT_CONTROLLER (catchall));
+
gtk_widget_add_css_class (GTK_WIDGET (entry), I_("search"));
}