summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-24 17:20:20 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-24 17:20:20 +0000
commitb9c51e65c1c4912b590da7398dbf0b38e845c1ba (patch)
tree5faeec55905dbb81ab3dc98e8914b870032d5e5c
parentda5eb92f47b1ce2e787eeb8f9731cfd5ad5a1ec8 (diff)
parente652054d505bf12b52130ec42baf89f9e3753a42 (diff)
downloadgtk+-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.c17
-rw-r--r--gtk/gtkpasswordentry.c25
-rw-r--r--gtk/gtksearchentry.c29
-rw-r--r--gtk/gtktext.c2
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;