[gnome-software] search provider: Don't own a separate bus name



commit 046ba20bf9de4b2a050e15e877429f90fd24c7c7
Author: Kalev Lember <klember redhat com>
Date:   Sat Sep 5 15:35:52 2015 +0200

    search provider: Don't own a separate bus name
    
    This is not needed anymore, now that we're fully dbus activatable.

 src/gnome-software-search-provider.ini |    3 +-
 src/gs-application.c                   |   24 ++++++++-
 src/gs-shell-search-provider.c         |   81 +++++++++----------------------
 src/gs-shell-search-provider.h         |    4 ++
 4 files changed, 50 insertions(+), 62 deletions(-)
---
diff --git a/src/gnome-software-search-provider.ini b/src/gnome-software-search-provider.ini
index 3ae7bd4..7d8f809 100644
--- a/src/gnome-software-search-provider.ini
+++ b/src/gnome-software-search-provider.ini
@@ -1,6 +1,5 @@
 [Shell Search Provider]
 DesktopId=org.gnome.Software.desktop
-BusName=org.gnome.Software.SearchProvider
+BusName=org.gnome.Software
 ObjectPath=/org/gnome/Software/SearchProvider
 Version=2
-
diff --git a/src/gs-application.c b/src/gs-application.c
index 1a8898d..86fd225 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -183,13 +183,30 @@ gs_application_initialize_plugins (GsApplication *app)
 
 }
 
-static void
-gs_application_provide_search (GsApplication *app)
+static gboolean
+gs_application_dbus_register (GApplication    *application,
+                              GDBusConnection *connection,
+                              const gchar     *object_path,
+                              GError         **error)
 {
+       GsApplication *app = GS_APPLICATION (application);
+
        gs_application_initialize_plugins (app);
        app->search_provider = gs_shell_search_provider_new ();
        gs_shell_search_provider_setup (app->search_provider,
                                        app->plugin_loader);
+
+       return gs_shell_search_provider_register (app->search_provider, connection, error);
+}
+
+static void
+gs_application_dbus_unregister (GApplication    *application,
+                                GDBusConnection *connection,
+                                const gchar     *object_path)
+{
+       GsApplication *app = GS_APPLICATION (application);
+
+       gs_shell_search_provider_unregister (app->search_provider);
 }
 
 static void
@@ -558,7 +575,6 @@ gs_application_startup (GApplication *application)
        GS_APPLICATION (application)->settings = g_settings_new ("org.gnome.software");
        gs_application_monitor_permission (GS_APPLICATION (application));
        gs_application_monitor_updates (GS_APPLICATION (application));
-       gs_application_provide_search (GS_APPLICATION (application));
        gs_application_monitor_network (GS_APPLICATION (application));
        gs_folders_convert ();
 }
@@ -712,6 +728,8 @@ gs_application_class_init (GsApplicationClass *class)
        G_APPLICATION_CLASS (class)->startup = gs_application_startup;
        G_APPLICATION_CLASS (class)->activate = gs_application_activate;
        G_APPLICATION_CLASS (class)->local_command_line = gs_application_local_command_line;
+       G_APPLICATION_CLASS (class)->dbus_register = gs_application_dbus_register;
+       G_APPLICATION_CLASS (class)->dbus_unregister = gs_application_dbus_unregister;
 }
 
 GsApplication *
diff --git a/src/gs-shell-search-provider.c b/src/gs-shell-search-provider.c
index 155b485..21c503d 100644
--- a/src/gs-shell-search-provider.c
+++ b/src/gs-shell-search-provider.c
@@ -41,8 +41,6 @@ typedef struct {
 struct _GsShellSearchProvider {
        GObject parent;
 
-       guint name_owner_id;
-       GDBusObjectManagerServer *object_manager;
        GsShellSearchProvider2 *skeleton;
        GsPluginLoader *plugin_loader;
        GCancellable *cancellable;
@@ -266,47 +264,20 @@ handle_launch_search (GsShellSearchProvider2         *skeleton,
        return TRUE;
 }
 
-static void
-search_provider_name_acquired_cb (GDBusConnection *connection,
-                                 const gchar     *name,
-                                 gpointer       user_data)
+gboolean
+gs_shell_search_provider_register (GsShellSearchProvider *self,
+                                   GDBusConnection       *connection,
+                                   GError               **error)
 {
-       g_debug ("Search provider name acquired: %s", name);
+       return g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skeleton),
+                                                connection,
+                                                "/org/gnome/Software/SearchProvider", error);
 }
 
-static void
-search_provider_name_lost_cb (GDBusConnection *connection,
-                             const gchar     *name,
-                             gpointer   user_data)
+void
+gs_shell_search_provider_unregister (GsShellSearchProvider *self)
 {
-       g_debug ("Search provider name lost: %s", name);
-}
-
-static void
-search_provider_bus_acquired_cb (GDBusConnection *connection,
-                                const gchar *name,
-                                gpointer user_data)
-{
-       GsShellSearchProvider *self = user_data;
-
-       self->object_manager = g_dbus_object_manager_server_new ("/org/gnome/Software/SearchProvider");
-       self->skeleton = gs_shell_search_provider2_skeleton_new ();
-
-       g_signal_connect (self->skeleton, "handle-get-initial-result-set",
-                       G_CALLBACK (handle_get_initial_result_set), self);
-       g_signal_connect (self->skeleton, "handle-get-subsearch-result-set",
-                       G_CALLBACK (handle_get_subsearch_result_set), self);
-       g_signal_connect (self->skeleton, "handle-get-result-metas",
-                       G_CALLBACK (handle_get_result_metas), self);
-       g_signal_connect (self->skeleton, "handle-activate-result",
-                       G_CALLBACK (handle_activate_result), self);
-       g_signal_connect (self->skeleton, "handle-launch-search",
-                       G_CALLBACK (handle_launch_search), self);
-
-       g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->skeleton),
-                                       connection,
-                                       "/org/gnome/Software/SearchProvider", NULL);
-       g_dbus_object_manager_server_set_connection (self->object_manager, connection);
+       g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton));
 }
 
 static void
@@ -314,16 +285,6 @@ search_provider_dispose (GObject *obj)
 {
        GsShellSearchProvider *self = GS_SHELL_SEARCH_PROVIDER (obj);
 
-       if (self->name_owner_id != 0) {
-               g_bus_unown_name (self->name_owner_id);
-               self->name_owner_id = 0;
-       }
-
-       if (self->skeleton != NULL) {
-               g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->skeleton));
-               g_clear_object (&self->skeleton);
-       }
-
        if (self->cancellable != NULL) {
                g_cancellable_cancel (self->cancellable);
                g_clear_object (&self->cancellable);
@@ -334,8 +295,8 @@ search_provider_dispose (GObject *obj)
                self->metas_cache = NULL;
        }
 
-       g_clear_object (&self->object_manager);
        g_clear_object (&self->plugin_loader);
+       g_clear_object (&self->skeleton);
 
        G_OBJECT_CLASS (gs_shell_search_provider_parent_class)->dispose (obj);
 }
@@ -354,14 +315,20 @@ gs_shell_search_provider_init (GsShellSearchProvider *self)
        self->metas_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
                                                   g_free, (GDestroyNotify) g_variant_unref);
 
+       self->skeleton = gs_shell_search_provider2_skeleton_new ();
+
+       g_signal_connect (self->skeleton, "handle-get-initial-result-set",
+                       G_CALLBACK (handle_get_initial_result_set), self);
+       g_signal_connect (self->skeleton, "handle-get-subsearch-result-set",
+                       G_CALLBACK (handle_get_subsearch_result_set), self);
+       g_signal_connect (self->skeleton, "handle-get-result-metas",
+                       G_CALLBACK (handle_get_result_metas), self);
+       g_signal_connect (self->skeleton, "handle-activate-result",
+                       G_CALLBACK (handle_activate_result), self);
+       g_signal_connect (self->skeleton, "handle-launch-search",
+                       G_CALLBACK (handle_launch_search), self);
+
        g_application_hold (g_application_get_default ());
-       self->name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
-                                       "org.gnome.Software.SearchProvider",
-                                       G_BUS_NAME_OWNER_FLAGS_NONE,
-                                       search_provider_bus_acquired_cb,
-                                       search_provider_name_acquired_cb,
-                                       search_provider_name_lost_cb,
-                                       self, NULL);
 }
 
 static void
diff --git a/src/gs-shell-search-provider.h b/src/gs-shell-search-provider.h
index af90948..ff7e536 100644
--- a/src/gs-shell-search-provider.h
+++ b/src/gs-shell-search-provider.h
@@ -34,6 +34,10 @@ typedef struct _GsShellSearchProvider GsShellSearchProvider;
 typedef GObjectClass GsShellSearchProviderClass;
 
 GType gs_shell_search_provider_get_type (void);
+gboolean gs_shell_search_provider_register (GsShellSearchProvider *self,
+                                            GDBusConnection       *connection,
+                                            GError               **error);
+void gs_shell_search_provider_unregister (GsShellSearchProvider *self);
 GsShellSearchProvider * gs_shell_search_provider_new (void);
 void gs_shell_search_provider_setup (GsShellSearchProvider *provider,
                                     GsPluginLoader *loader);


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