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.
This commit is contained in:
Carlos Garnacho
2021-08-23 15:33:32 +02:00
parent c5cd1ac630
commit 7a4afb08bd

View File

@@ -579,11 +579,21 @@ activate_cb (GtkText *text,
g_signal_emit (data, signals[ACTIVATE], 0);
}
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"));
}