diff options
author | Jens Georg <mail@jensge.org> | 2020-07-18 15:25:25 +0200 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2020-07-18 15:25:28 +0200 |
commit | 5da240ddc9ef233c42f739a4ed861a08133fe508 (patch) | |
tree | 96a6b6a445cc7361d7da6ae6f126591d2291a2cf | |
parent | c8d5f7a95c435ddac4b757803acff06fa4ec95bb (diff) | |
download | gupnp-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.ui | 3 | ||||
-rw-r--r-- | 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 @@ -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), ""); + } +} |