summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2020-07-18 15:25:25 +0200
committerJens Georg <mail@jensge.org>2020-07-18 15:25:28 +0200
commit5da240ddc9ef233c42f739a4ed861a08133fe508 (patch)
tree96a6b6a445cc7361d7da6ae6f126591d2291a2cf
parentc8d5f7a95c435ddac4b757803acff06fa4ec95bb (diff)
downloadgupnp-tools-5da240ddc9ef233c42f739a4ed861a08133fe508.tar.gz
av-cp: Hook up icons in search entry
Left Icon will start or cancel the search, right icon will actually clear the text
-rw-r--r--data/search-dialog.ui3
-rw-r--r--src/av-cp/search-dialog.c39
2 files changed, 38 insertions, 4 deletions
diff --git a/data/search-dialog.ui b/data/search-dialog.ui
index 453158e..720c3b8 100644
--- a/data/search-dialog.ui
+++ b/data/search-dialog.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.22.2 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<object class="GtkListStore" id="search_dialog_liststore">
@@ -70,6 +70,7 @@
<property name="secondary_icon_name">edit-clear-symbolic</property>
<property name="placeholder_text" translatable="yes">UPnP search expression</property>
<signal name="activate" handler="search_dialog_on_search_activate" object="SearchDialog" swapped="yes"/>
+ <signal name="icon-release" handler="search_dialog_on_icon_release" object="SearchDialog" swapped="yes"/>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/av-cp/search-dialog.c b/src/av-cp/search-dialog.c
index 54d1eec..d929cc5 100644
--- a/src/av-cp/search-dialog.c
+++ b/src/av-cp/search-dialog.c
@@ -78,6 +78,9 @@ static void
search_dialog_on_didl_popup_activate (SearchDialog *self, GVariant *parameter, gpointer user_data);
static void
+search_dialog_on_icon_release (SearchDialog *self, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data);
+
+static void
search_dialog_finalize (GObject *object);
static void
@@ -357,6 +360,7 @@ search_dialog_class_init (SearchDialogClass *klass)
gtk_widget_class_bind_template_callback (widget_class,
search_dialog_on_listview_button_release);
gtk_widget_class_bind_template_callback (widget_class, gtk_widget_hide);
+ gtk_widget_class_bind_template_callback (widget_class, search_dialog_on_icon_release);
object_class->finalize = search_dialog_finalize;
@@ -440,7 +444,13 @@ search_dialog_on_search_task_done (gpointer user_data)
g_source_remove (priv->pulse_timer);
gtk_entry_set_progress_fraction (priv->search_dialog_entry, 0);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->search_dialog_entry), TRUE);
+ gtk_editable_set_editable (GTK_EDITABLE (priv->search_dialog_entry), TRUE);
+ g_object_set (G_OBJECT (priv->search_dialog_entry),
+ "primary-icon-name",
+ "edit-find-symbolic",
+ "secondary-icon-activatable",
+ TRUE,
+ NULL);
/* Only show visible error if dialog is visible. */
if (priv->task->error != NULL &&
@@ -557,8 +567,15 @@ search_dialog_on_search_activate (SearchDialog *self, GtkEntry *entry)
gupnp_search_criteria_parser_parse_text (priv->parser, text, &error);
if (error == NULL) {
+
+ g_object_set (G_OBJECT (entry),
+ "primary-icon-name",
+ "media-playback-stop-symbolic",
+ "secondary-icon-activatable",
+ FALSE,
+ NULL);
gtk_list_store_clear (priv->search_dialog_liststore);
- gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);
+ gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE);
priv->pulse_timer = g_timeout_add_seconds (1, pulse_timer, self);
g_clear_pointer (&priv->task, search_task_free);
@@ -801,4 +818,20 @@ search_dialog_new (void)
"use-header-bar",
use_header == 1 ? TRUE : FALSE,
NULL);
-} \ No newline at end of file
+}
+
+static void
+search_dialog_on_icon_release (SearchDialog *self, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data)
+{
+ SearchDialogPrivate *priv = search_dialog_get_instance_private (self);
+
+ if (icon_pos == GTK_ENTRY_ICON_PRIMARY) {
+ if (priv->task != NULL && priv->task->running) {
+ search_task_cancel (priv->task);
+ } else {
+ search_dialog_on_search_activate (self, user_data);
+ }
+ } else {
+ gtk_entry_set_text (GTK_ENTRY (user_data), "");
+ }
+}