diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-08-24 17:20:20 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-08-24 17:20:20 +0000 |
commit | b9c51e65c1c4912b590da7398dbf0b38e845c1ba (patch) | |
tree | 5faeec55905dbb81ab3dc98e8914b870032d5e5c | |
parent | da5eb92f47b1ce2e787eeb8f9731cfd5ad5a1ec8 (diff) | |
parent | e652054d505bf12b52130ec42baf89f9e3753a42 (diff) | |
download | gtk+-b9c51e65c1c4912b590da7398dbf0b38e845c1ba.tar.gz |
Merge branch 'wip/carlosg/gesture-state-in-entries' into 'master'
Claim clicks further at GtkEntry/GtkSearchEntry
See merge request GNOME/gtk!3873
-rw-r--r-- | gtk/gtkentry.c | 17 | ||||
-rw-r--r-- | gtk/gtkpasswordentry.c | 25 | ||||
-rw-r--r-- | gtk/gtksearchentry.c | 29 | ||||
-rw-r--r-- | gtk/gtktext.c | 2 |
4 files changed, 72 insertions, 1 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index e03127f134..9ad392ba3c 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -1465,15 +1465,32 @@ disconnect_text_signals (GtkEntry *entry) } 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_entry_init (GtkEntry *entry) { GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); + GtkGesture *catchall; priv->text = gtk_text_new (); gtk_widget_set_parent (priv->text, GTK_WIDGET (entry)); gtk_editable_init_delegate (GTK_EDITABLE (entry)); connect_text_signals (entry); + 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)); + priv->editing_canceled = FALSE; } diff --git a/gtk/gtkpasswordentry.c b/gtk/gtkpasswordentry.c index 0e66499c69..7e375a05bc 100644 --- a/gtk/gtkpasswordentry.c +++ b/gtk/gtkpasswordentry.c @@ -141,6 +141,12 @@ focus_changed (GtkWidget *widget) caps_lock_state_changed (entry->keyboard, NULL, widget); } +static void +gtk_password_entry_icon_press (GtkGesture *gesture) +{ + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED); +} + /*< private > * gtk_password_entry_toggle_peek: * @entry: a `GtkPasswordEntry` @@ -183,8 +189,19 @@ activate_cb (GtkPasswordEntry *entry) } 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_password_entry_init (GtkPasswordEntry *entry) { + GtkGesture *catchall; GtkEntryBuffer *buffer = gtk_password_entry_buffer_new (); entry->entry = gtk_text_new (); @@ -201,6 +218,12 @@ gtk_password_entry_init (GtkPasswordEntry *entry) gtk_widget_set_cursor (entry->icon, gtk_widget_get_cursor (entry->entry)); gtk_widget_set_parent (entry->icon, GTK_WIDGET (entry)); + 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_("password")); gtk_password_entry_set_extra_menu (entry, NULL); @@ -607,6 +630,8 @@ gtk_password_entry_set_show_peek_icon (GtkPasswordEntry *entry, gtk_widget_set_parent (entry->peek_icon, GTK_WIDGET (entry)); press = gtk_gesture_click_new (); + g_signal_connect (press, "pressed", + G_CALLBACK (gtk_password_entry_icon_press), entry); g_signal_connect_swapped (press, "released", G_CALLBACK (gtk_password_entry_toggle_peek), entry); gtk_widget_add_controller (entry->peek_icon, GTK_EVENT_CONTROLLER (press)); diff --git a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c index 6a9d3c8969..6708fcc3af 100644 --- a/gtk/gtksearchentry.c +++ b/gtk/gtksearchentry.c @@ -491,6 +491,16 @@ gtk_search_entry_accessible_init (GtkAccessibleInterface *iface) } static void +gtk_search_entry_icon_press (GtkGestureClick *press, + int n_press, + double x, + double y, + GtkSearchEntry *entry) +{ + gtk_gesture_set_state (GTK_GESTURE (press), GTK_EVENT_SEQUENCE_CLAIMED); +} + +static void gtk_search_entry_icon_release (GtkGestureClick *press, int n_press, double x, @@ -570,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, @@ -601,9 +621,16 @@ gtk_search_entry_init (GtkSearchEntry *entry) gtk_widget_set_child_visible (entry->icon, FALSE); press = gtk_gesture_click_new (); + g_signal_connect (press, "pressed", G_CALLBACK (gtk_search_entry_icon_press), 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")); } diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 52cbf56a09..43d8c52d62 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -2773,6 +2773,8 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture, GdkDevice *source; guint state; + gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); + sel_start = priv->selection_bound; sel_end = priv->current_pos; have_selection = sel_start != sel_end; |