[gupnp-tools] av-cp: Hook up icons in search entry



commit 5da240ddc9ef233c42f739a4ed861a08133fe508
Author: Jens Georg <mail jensge org>
Date:   Sat Jul 18 15:25:25 2020 +0200

    av-cp: Hook up icons in search entry
    
    Left Icon will start or cancel the search, right icon will actually
    clear the text

 data/search-dialog.ui     |  3 ++-
 src/av-cp/search-dialog.c | 39 ++++++++++++++++++++++++++++++++++++---
 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
@@ -77,6 +77,9 @@ search_dialog_on_listview_button_release (GtkWidget      *widget,
 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);
 
@@ -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), "");
+        }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]