diff options
-rw-r--r-- | gtk/gtkentry.c | 8 | ||||
-rw-r--r-- | gtk/gtkentryprivate.h | 1 | ||||
-rw-r--r-- | gtk/gtkfilechooserentry.c | 37 |
3 files changed, 21 insertions, 25 deletions
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index d9863310ff..5f64a75f14 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -9580,3 +9580,11 @@ set_enable_emoji_completion (GtkEntry *entry, g_object_notify_by_pspec (G_OBJECT (entry), entry_props[PROP_ENABLE_EMOJI_COMPLETION]); } + +GtkEventController * +gtk_entry_get_key_controller (GtkEntry *entry) +{ + GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); + + return priv->key_controller; +} diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h index 527bbf8bff..96aef386ea 100644 --- a/gtk/gtkentryprivate.h +++ b/gtk/gtkentryprivate.h @@ -97,6 +97,7 @@ void gtk_entry_set_positions (GtkEntry *entry, int current_pos, int selection_bound); +GtkEventController * gtk_entry_get_key_controller (GtkEntry *entry); G_END_DECLS diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 1b17f2aec3..e07cbbcbd9 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -24,7 +24,7 @@ #include "gtkcelllayout.h" #include "gtkcellrenderertext.h" -#include "gtkentry.h" +#include "gtkentryprivate.h" #include "gtkfilesystemmodel.h" #include "gtklabel.h" #include "gtkmain.h" @@ -86,8 +86,6 @@ static void gtk_file_chooser_entry_dispose (GObject *object) static void gtk_file_chooser_entry_grab_focus (GtkWidget *widget); static gboolean gtk_file_chooser_entry_tab_handler (GtkWidget *widget, GdkEvent *event); -static gboolean gtk_file_chooser_entry_event (GtkWidget *widget, - GdkEvent *event); #ifdef G_OS_WIN32 static gint insert_text_callback (GtkFileChooserEntry *widget, @@ -169,7 +167,6 @@ _gtk_file_chooser_entry_class_init (GtkFileChooserEntryClass *class) gobject_class->dispatch_properties_changed = gtk_file_chooser_entry_dispatch_properties_changed; widget_class->grab_focus = gtk_file_chooser_entry_grab_focus; - widget_class->event = gtk_file_chooser_entry_event; signals[HIDE_ENTRY] = g_signal_new (I_("hide-entry"), @@ -259,6 +256,13 @@ match_func (GtkEntryCompletion *compl, } static void +chooser_entry_focus_out (GtkEventControllerKey *key_controller, + GtkFileChooserEntry *chooser_entry) +{ + set_complete_on_load (chooser_entry, FALSE); +} + +static void _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry) { GtkEntryCompletion *comp; @@ -298,6 +302,10 @@ _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry) g_signal_connect (chooser_entry, "event", G_CALLBACK (gtk_file_chooser_entry_tab_handler), NULL); + g_signal_connect (gtk_entry_get_key_controller (GTK_ENTRY (chooser_entry)), + "focus-out", G_CALLBACK (chooser_entry_focus_out), + chooser_entry); + #ifdef G_OS_WIN32 g_signal_connect (chooser_entry, "insert-text", G_CALLBACK (insert_text_callback), NULL); @@ -543,27 +551,6 @@ gtk_file_chooser_entry_tab_handler (GtkWidget *widget, return GDK_EVENT_STOP; } -static gboolean -gtk_file_chooser_entry_event (GtkWidget *widget, - GdkEvent *event) -{ - GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (widget); - - if (gdk_event_get_event_type (event) == GDK_FOCUS_CHANGE) - { - gboolean focus_in; - - gdk_event_get_focus_in (event, &focus_in); - - if (!focus_in) - set_complete_on_load (chooser_entry, FALSE); - - return GDK_EVENT_PROPAGATE; - } - - return GDK_EVENT_PROPAGATE; -} - static void update_inline_completion (GtkFileChooserEntry *chooser_entry) { |