diff --git a/gtk/gtksearchbar.c b/gtk/gtksearchbar.c index c1a23bf304c2da22cc7aa3f839aef1fa8ccd9ec6..026bd769be0735ae41b207b7b0423667c13433a6 100644 --- a/gtk/gtksearchbar.c +++ b/gtk/gtksearchbar.c @@ -40,6 +40,7 @@ #include "gtkrevealer.h" #include "gtksearchentryprivate.h" #include "gtksnapshot.h" +#include "gtktextview.h" #include "gtkwidgetprivate.h" /** @@ -520,6 +521,7 @@ capture_widget_key_handled (GtkEventControllerKey *controller, GtkSearchBar *bar) { gboolean handled; + GtkWidget *focus; if (!gtk_widget_get_mapped (GTK_WIDGET (bar))) return GDK_EVENT_PROPAGATE; @@ -527,6 +529,19 @@ capture_widget_key_handled (GtkEventControllerKey *controller, if (bar->reveal_child) return GDK_EVENT_PROPAGATE; + focus = gtk_root_get_focus (gtk_widget_get_root (GTK_WIDGET (bar->capture_widget))); + + /* Make sure type-to-search does not interfere with entries or text views */ + if (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus)) { + gboolean editable; + + /* Take a shortcut as both GtkEditable and GtkTextView have this property */ + g_object_get (focus, "editable", &editable, NULL); + + if (editable) + return GDK_EVENT_PROPAGATE; + } + if (bar->entry == NULL) { g_warning ("The search bar does not have an entry connected to it. Call gtk_search_bar_connect_entry() to connect one.");