summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-03-06 17:53:53 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-04-05 19:26:54 +0200
commit80c3ebe3a08ca9ecdb0cdb6b561281a278774536 (patch)
tree9edb21987e4e4ec3bf4e381337ac77036b81ac8b
parent585aafc2df9061dfb1f2b1c2b0c1a2d60eb54888 (diff)
downloadgtk+-80c3ebe3a08ca9ecdb0cdb6b561281a278774536.tar.gz
gtkentrycompletion: Stop using ::key-press-event
Use GtkEventControllerKey for the task
-rw-r--r--gtk/gtkentrycompletion.c24
-rw-r--r--gtk/gtkentryprivate.h3
2 files changed, 17 insertions, 10 deletions
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
index f9571b9ccb..f5b470d645 100644
--- a/gtk/gtkentrycompletion.c
+++ b/gtk/gtkentrycompletion.c
@@ -2060,16 +2060,17 @@ keyval_is_cursor_move (guint keyval)
}
static gboolean
-gtk_entry_completion_key_press (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
+gtk_entry_completion_key_pressed (GtkEventControllerKey *controller,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ gpointer user_data)
{
gint matches, actions = 0;
GtkEntryCompletion *completion = GTK_ENTRY_COMPLETION (user_data);
- guint keyval;
+ GtkWidget *widget = completion->priv->entry;
- if (!completion->priv->popup_completion ||
- !gdk_event_get_keyval ((GdkEvent *) event, &keyval))
+ if (!completion->priv->popup_completion)
return FALSE;
if (keyval == GDK_KEY_Return ||
@@ -2470,11 +2471,14 @@ maybe_accept_completion (GtkEntry *entry,
static void
connect_completion_signals (GtkEntryCompletion *completion)
{
+ completion->priv->entry_key_controller =
+ gtk_event_controller_key_new (completion->priv->entry);
+ g_signal_connect (completion->priv->entry_key_controller, "key-pressed",
+ G_CALLBACK (gtk_entry_completion_key_pressed), completion);
+
completion->priv->changed_id =
g_signal_connect (completion->priv->entry, "changed",
G_CALLBACK (gtk_entry_completion_changed), completion);
- g_signal_connect (completion->priv->entry, "key-press-event",
- G_CALLBACK (gtk_entry_completion_key_press), completion);
completion->priv->insert_text_id =
g_signal_connect (completion->priv->entry, "insert-text",
@@ -2520,6 +2524,8 @@ unset_accessible_relation (GtkWidget *window,
static void
disconnect_completion_signals (GtkEntryCompletion *completion)
{
+ g_clear_object (&completion->priv->entry_key_controller);
+
if (completion->priv->changed_id > 0 &&
g_signal_handler_is_connected (completion->priv->entry,
completion->priv->changed_id))
@@ -2528,8 +2534,6 @@ disconnect_completion_signals (GtkEntryCompletion *completion)
completion->priv->changed_id);
completion->priv->changed_id = 0;
}
- g_signal_handlers_disconnect_by_func (completion->priv->entry,
- G_CALLBACK (gtk_entry_completion_key_press), completion);
if (completion->priv->insert_text_id > 0 &&
g_signal_handler_is_connected (completion->priv->entry,
completion->priv->insert_text_id))
diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h
index 0d1e8494e7..83d9715b77 100644
--- a/gtk/gtkentryprivate.h
+++ b/gtk/gtkentryprivate.h
@@ -25,6 +25,7 @@
#include "gtkliststore.h"
#include "gtktreemodelfilter.h"
#include "gtktreeviewcolumn.h"
+#include "gtkeventcontrollerkey.h"
G_BEGIN_DECLS
@@ -47,6 +48,8 @@ struct _GtkEntryCompletionPrivate
gchar *case_normalized_key;
+ GtkEventController *entry_key_controller;
+
/* only used by GtkEntry when attached: */
GtkWidget *popup_window;
GtkWidget *vbox;