diff --git a/panels/region/gnome-region-panel-layout-chooser.ui b/panels/region/gnome-region-panel-layout-chooser.ui
index 43341f26b..7140d82d9 100644
--- a/panels/region/gnome-region-panel-layout-chooser.ui
+++ b/panels/region/gnome-region-panel-layout-chooser.ui
@@ -151,6 +151,9 @@
True
True
•
+ edit-find-symbolic
+ False
+ False
False
diff --git a/panels/region/gnome-region-panel-xkbltadd.c b/panels/region/gnome-region-panel-xkbltadd.c
index 2cd588af0..c2a3dc417 100644
--- a/panels/region/gnome-region-panel-xkbltadd.c
+++ b/panels/region/gnome-region-panel-xkbltadd.c
@@ -243,6 +243,15 @@ xkl_layout_add_to_list (XklConfigRegistry * config,
g_free (language_desc);
}
+static void
+xkb_layout_filter_clear (GtkEntry *entry,
+ GtkEntryIconPosition icon_pos,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ gtk_entry_set_text (entry, "");
+}
+
static void
xkb_layout_filter_changed (GtkBuilder * chooser_dialog)
{
@@ -254,6 +263,20 @@ xkb_layout_filter_changed (GtkBuilder * chooser_dialog)
gtk_entry_get_text (GTK_ENTRY (xkb_layout_filter));
gchar *upattern = g_utf8_strup (pattern, -1);
+ if (!g_strcmp0 (pattern, "")) {
+ g_object_set (G_OBJECT (xkb_layout_filter),
+ "secondary-icon-name", "edit-find-symbolic",
+ "secondary-icon-activatable", FALSE,
+ "secondary-icon-sensitive", FALSE,
+ NULL);
+ } else {
+ g_object_set (G_OBJECT (xkb_layout_filter),
+ "secondary-icon-name", "edit-clear-symbolic",
+ "secondary-icon-activatable", TRUE,
+ "secondary-icon-sensitive", TRUE,
+ NULL);
+ }
+
if (search_pattern_list != NULL)
g_strfreev (search_pattern_list);
@@ -363,6 +386,9 @@ xkb_layout_choose (GtkBuilder * dialog)
(xkb_layout_filter_changed),
chooser_dialog);
+ g_signal_connect (G_OBJECT (xkb_layout_filter), "icon-release",
+ G_CALLBACK (xkb_layout_filter_clear), NULL);
+
selection =
gtk_tree_view_get_selection (GTK_TREE_VIEW
(xkb_filtered_layouts_list));