[gupnp-tools] av-cp: Do not abuse GtkBuilder to bind call-backs



commit 7c939932d31d60188929c7f11da170ef424a268a
Author: Jens Georg <mail jensge org>
Date:   Sat Jul 18 13:43:44 2020 +0200

    av-cp: Do not abuse GtkBuilder to bind call-backs

 data/search-dialog.ui     | 13 -------------
 src/av-cp/search-dialog.c | 43 ++++++++++++++++++++++++++++---------------
 2 files changed, 28 insertions(+), 28 deletions(-)
---
diff --git a/data/search-dialog.ui b/data/search-dialog.ui
index 90010c4..d1b65d0 100644
--- a/data/search-dialog.ui
+++ b/data/search-dialog.ui
@@ -2,19 +2,6 @@
 <!-- Generated with glade 3.20.0 -->
 <interface>
   <requires lib="gtk+" version="3.10"/>
-  <object class="GtkMenu" id="popup-menu">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <child>
-      <object class="GtkMenuItem">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Show _DIDL…</property>
-        <property name="use_underline">True</property>
-        <signal name="activate" handler="search_dialog_on_didl_popup_activate" object="SearchDialog" 
swapped="yes"/>
-      </object>
-    </child>
-  </object>
   <object class="GtkListStore" id="search_dialog_liststore">
     <columns>
       <!-- column-name icon -->
diff --git a/src/av-cp/search-dialog.c b/src/av-cp/search-dialog.c
index 31f9287..8235fde 100644
--- a/src/av-cp/search-dialog.c
+++ b/src/av-cp/search-dialog.c
@@ -66,16 +66,16 @@ struct _SearchDialogPrivate {
 typedef struct _SearchDialogPrivate SearchDialogPrivate;
 G_DEFINE_TYPE_WITH_PRIVATE (SearchDialog, search_dialog, GTK_TYPE_DIALOG)
 
-void
+static void
 search_dialog_on_search_activate (SearchDialog *self, GtkEntry *entry);
 
-gboolean
+static gboolean
 search_dialog_on_listview_button_release (GtkWidget      *widget,
                                           GdkEventButton *event,
                                           gpointer        user_data);
 
-void
-search_dialog_on_didl_popup_activate (SearchDialog *self, gpointer user_data);
+static void
+search_dialog_on_didl_popup_activate (SearchDialog *self, GVariant *parameter, gpointer user_data);
 
 static void
 search_dialog_finalize (GObject *object);
@@ -352,6 +352,12 @@ search_dialog_class_init (SearchDialogClass *klass)
         gtk_widget_class_bind_template_child_private (widget_class,
                                                       SearchDialog,
                                                       search_dialog_treeview);
+        gtk_widget_class_bind_template_callback (widget_class,
+                                                 search_dialog_on_search_activate);
+        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);
+
 
         object_class->finalize = search_dialog_finalize;
         object_class->dispose = search_dialog_dispose;
@@ -361,16 +367,26 @@ static void
 search_dialog_init (SearchDialog *self)
 {
         SearchDialogPrivate *priv = NULL;
-        GtkBuilder *builder = gtk_builder_new ();
 
         gtk_widget_init_template (GTK_WIDGET (self));
         priv = search_dialog_get_instance_private (self);
 
         priv->parser = gupnp_search_criteria_parser_new ();
 
-        gtk_builder_add_from_resource (builder, DIALOG_RESOURCE_PATH, NULL);
-        gtk_builder_connect_signals (builder, self);
-        priv->popup_menu = GTK_WIDGET (gtk_builder_get_object (builder, "popup-menu"));
+        GMenu *menu = g_menu_new ();
+        g_menu_insert (menu, 0, _("Show _DIDL…"), "search.show-didl");
+        priv->popup_menu = gtk_menu_new_from_model (G_MENU_MODEL (menu));
+        g_object_unref (menu);
+
+        gtk_menu_attach_to_widget (GTK_MENU (priv->popup_menu), GTK_WIDGET (self), NULL);
+        GSimpleActionGroup *group = g_simple_action_group_new ();
+        GSimpleAction *action = g_simple_action_new ("show-didl", NULL);
+        g_signal_connect_swapped (G_OBJECT (action), "activate", G_CALLBACK 
(search_dialog_on_didl_popup_activate), self);
+        g_action_map_add_action (G_ACTION_MAP (group), G_ACTION (action));
+
+        gtk_widget_insert_action_group (GTK_WIDGET (self), "search", G_ACTION_GROUP (group));
+        g_object_unref (group);
+        g_object_unref (action);
 }
 
 static void
@@ -530,8 +546,7 @@ pulse_timer (gpointer user_data)
         return TRUE;
 }
 
-G_MODULE_EXPORT
-void
+static void
 search_dialog_on_search_activate (SearchDialog *self, GtkEntry *entry)
 {
         GError *error = NULL;
@@ -618,8 +633,7 @@ do_popup_menu (GtkMenu *menu, GtkWidget *widget, GdkEventButton *event)
 #endif
 }
 
-G_MODULE_EXPORT
-gboolean
+static gboolean
 search_dialog_on_listview_button_release (GtkWidget      *widget,
                                           GdkEventButton *event,
                                           gpointer        user_data)
@@ -724,9 +738,8 @@ search_dialog_on_metadata_ready (GObject *source,
         }
 }
 
-G_MODULE_EXPORT
-void
-search_dialog_on_didl_popup_activate (SearchDialog *self, gpointer user_data)
+static void
+search_dialog_on_didl_popup_activate (SearchDialog *self, GVariant *parameter, gpointer user_data)
 {
         SearchDialogPrivate *priv  = search_dialog_get_instance_private (self);
         GtkTreeView  *treeview = priv->search_dialog_treeview;


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