[gnome-settings-daemon] all: Only call g_bus_own_name() once



commit 8324674ed47191de9ef72419c6a71f5d68c51f17
Author: Bastien Nocera <hadess hadess net>
Date:   Tue Nov 23 14:19:37 2010 +0000

    all: Only call g_bus_own_name() once
    
    Only call g_bus_own_name() once, in the main code, and register
    our interfaces as soon as we get the bus connection in other
    cases.
    
    Fixes the main daemon exiting as soon as created in some cases.

 gnome-settings-daemon/gnome-settings-manager.c |   30 +++--
 plugins/media-keys/gsd-media-keys-manager.c    |  156 ++++++++++++------------
 plugins/xrandr/gsd-xrandr-manager.c            |   38 ++++---
 3 files changed, 118 insertions(+), 106 deletions(-)
---
diff --git a/gnome-settings-daemon/gnome-settings-manager.c b/gnome-settings-daemon/gnome-settings-manager.c
index 13b69a8..784752b 100644
--- a/gnome-settings-daemon/gnome-settings-manager.c
+++ b/gnome-settings-daemon/gnome-settings-manager.c
@@ -371,11 +371,21 @@ static const GDBusInterfaceVTable interface_vtable =
 };
 
 static void
-on_bus_acquired (GDBusConnection      *connection,
-                 const gchar          *name,
-                 GnomeSettingsManager *manager)
+on_bus_gotten (GObject             *source_object,
+               GAsyncResult        *res,
+               GnomeSettingsManager *manager)
 {
+        GDBusConnection *connection;
         guint registration_id;
+        GError *error = NULL;
+
+        connection = g_bus_get_finish (res, &error);
+        if (connection == NULL) {
+                g_warning ("Could not get session bus: %s", error->message);
+                g_error_free (error);
+                return;
+        }
+        manager->priv->connection = connection;
 
         registration_id = g_dbus_connection_register_object (connection,
                                                              GSD_MANAGER_DBUS_PATH,
@@ -384,8 +394,6 @@ on_bus_acquired (GDBusConnection      *connection,
                                                              manager,
                                                              NULL,
                                                              NULL);
-        if (registration_id > 0)
-                manager->priv->connection = connection;
 }
 
 static void
@@ -394,14 +402,10 @@ register_manager (GnomeSettingsManager *manager)
         manager->priv->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
         g_assert (manager->priv->introspection_data != NULL);
 
-        manager->priv->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
-                                                  GSD_MANAGER_DBUS_NAME,
-                                                  G_BUS_NAME_OWNER_FLAGS_NONE,
-                                                  (GBusAcquiredCallback) on_bus_acquired,
-                                                  NULL,
-                                                  NULL,
-                                                  manager,
-                                                  NULL);
+        g_bus_get (G_BUS_TYPE_SESSION,
+                   NULL,
+                   (GAsyncReadyCallback) on_bus_gotten,
+                   manager);
 }
 
 gboolean
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index bf305c4..f90b563 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -103,7 +103,6 @@ struct GsdMediaKeysManagerPrivate
 
         GList           *media_players;
 
-        guint            owner_id;
         GDBusNodeInfo   *introspection_data;
         GDBusConnection *connection;
         GDBusProxy      *xrandr_proxy;
@@ -1006,20 +1005,20 @@ do_xrandr_action (GsdMediaKeysManager *manager,
                 return;
         }
 
-	priv->cancellable = g_cancellable_new ();
+        priv->cancellable = g_cancellable_new ();
 
         g_object_set_data (G_OBJECT (priv->xrandr_proxy),
-			   "gsd-media-keys-manager-xrandr-action",
-			   g_strdup (action));
-
-	g_dbus_proxy_call (priv->xrandr_proxy,
-			   action,
-			   g_variant_new ("(x)", timestamp),
-			   G_DBUS_CALL_FLAGS_NONE,
-			   -1,
-			   priv->cancellable,
-			   (GAsyncReadyCallback) on_xrandr_action_call_finished,
-			   manager);
+                           "gsd-media-keys-manager-xrandr-action",
+                           g_strdup (action));
+
+        g_dbus_proxy_call (priv->xrandr_proxy,
+                           action,
+                           g_variant_new ("(x)", timestamp),
+                           G_DBUS_CALL_FLAGS_NONE,
+                           -1,
+                           priv->cancellable,
+                           (GAsyncReadyCallback) on_xrandr_action_call_finished,
+                           manager);
 }
 
 static gboolean
@@ -1041,31 +1040,31 @@ do_video_rotate_action (GsdMediaKeysManager *manager,
 static void
 do_toggle_accessibility_key (const char *key)
 {
-	GSettings *settings;
-	gboolean state;
+        GSettings *settings;
+        gboolean state;
 
-	settings = g_settings_new ("org.gnome.desktop.a11y.applications");
-	state = g_settings_get_boolean (settings, key);
-	g_settings_set_boolean (settings, key, !state);
-	g_object_unref (settings);
+        settings = g_settings_new ("org.gnome.desktop.a11y.applications");
+        state = g_settings_get_boolean (settings, key);
+        g_settings_set_boolean (settings, key, !state);
+        g_object_unref (settings);
 }
 
 static void
 do_magnifier_action (GsdMediaKeysManager *manager)
 {
-	do_toggle_accessibility_key ("screen-magnifier-enabled");
+        do_toggle_accessibility_key ("screen-magnifier-enabled");
 }
 
 static void
 do_screenreader_action (GsdMediaKeysManager *manager)
 {
-	do_toggle_accessibility_key ("screen-reader-enabled");
+        do_toggle_accessibility_key ("screen-reader-enabled");
 }
 
 static void
 do_on_screen_keyboard_action (GsdMediaKeysManager *manager)
 {
-	do_toggle_accessibility_key ("screen-keyboard-enabled");
+        do_toggle_accessibility_key ("screen-keyboard-enabled");
 }
 
 static gboolean
@@ -1080,12 +1079,12 @@ do_action (GsdMediaKeysManager *manager,
         case TOUCHPAD_KEY:
                 do_touchpad_action (manager);
                 break;
-	case TOUCHPAD_ON_KEY:
-		do_touchpad_osd_action (manager, TRUE);
-		break;
-	case TOUCHPAD_OFF_KEY:
-		do_touchpad_osd_action (manager, FALSE);
-		break;
+        case TOUCHPAD_ON_KEY:
+                do_touchpad_osd_action (manager, TRUE);
+                break;
+        case TOUCHPAD_OFF_KEY:
+                do_touchpad_osd_action (manager, FALSE);
+                break;
         case MUTE_KEY:
         case VOLUME_DOWN_KEY:
         case VOLUME_UP_KEY:
@@ -1163,18 +1162,18 @@ do_action (GsdMediaKeysManager *manager,
         case VIDEO_OUT2_KEY:
                 do_video_out_action (manager, timestamp);
                 break;
-	case ROTATE_VIDEO_KEY:
-		do_video_rotate_action (manager, timestamp);
-		break;
-	case MAGNIFIER_KEY:
-		do_magnifier_action (manager);
-		break;
-	case SCREENREADER_KEY:
-		do_screenreader_action (manager);
-		break;
-	case ON_SCREEN_KEYBOARD_KEY:
-		do_on_screen_keyboard_action (manager);
-		break;
+        case ROTATE_VIDEO_KEY:
+                do_video_rotate_action (manager, timestamp);
+                break;
+        case MAGNIFIER_KEY:
+                do_magnifier_action (manager);
+                break;
+        case SCREENREADER_KEY:
+                do_screenreader_action (manager);
+                break;
+        case ON_SCREEN_KEYBOARD_KEY:
+                do_on_screen_keyboard_action (manager);
+                break;
         case HANDLED_KEYS:
                 g_assert_not_reached ();
         /* Note, no default so compiler catches missing keys */
@@ -1350,17 +1349,15 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 priv->cancellable = NULL;
         }
 
-        if (priv->owner_id > 0) {
-                g_bus_unown_name (priv->owner_id);
-                priv->owner_id = 0;
-        }
-
         if (priv->introspection_data) {
                 g_dbus_node_info_unref (priv->introspection_data);
                 priv->introspection_data = NULL;
         }
 
-        priv->connection = NULL;
+        if (priv->connection != NULL) {
+                g_object_unref (priv->connection);
+                priv->connection = NULL;
+        }
 
         need_flush = FALSE;
         gdk_error_trap_push ();
@@ -1500,24 +1497,34 @@ gsd_media_keys_manager_finalize (GObject *object)
 
 static void
 xrandr_ready_cb (GObject             *source_object,
-		 GAsyncResult        *res,
-		 GsdMediaKeysManager *manager)
+                 GAsyncResult        *res,
+                 GsdMediaKeysManager *manager)
 {
-	GError *error = NULL;
+        GError *error = NULL;
 
-	manager->priv->xrandr_proxy = g_dbus_proxy_new_finish (res, &error);
-	if (manager->priv->xrandr_proxy == NULL) {
-		g_warning ("Failed to get proxy for XRandR operations: %s", error->message);
-		g_error_free (error);
-	}
+        manager->priv->xrandr_proxy = g_dbus_proxy_new_finish (res, &error);
+        if (manager->priv->xrandr_proxy == NULL) {
+                g_warning ("Failed to get proxy for XRandR operations: %s", error->message);
+                g_error_free (error);
+        }
 }
 
 static void
-on_bus_acquired (GDBusConnection     *connection,
-                 const gchar         *name,
-                 GsdMediaKeysManager *manager)
+on_bus_gotten (GObject             *source_object,
+               GAsyncResult        *res,
+               GsdMediaKeysManager *manager)
 {
+        GDBusConnection *connection;
         guint registration_id;
+        GError *error = NULL;
+
+        connection = g_bus_get_finish (res, &error);
+        if (connection == NULL) {
+                g_warning ("Could not get session bus: %s", error->message);
+                g_error_free (error);
+                return;
+        }
+        manager->priv->connection = connection;
 
         registration_id = g_dbus_connection_register_object (connection,
                                                              GSD_MEDIA_KEYS_DBUS_PATH,
@@ -1526,19 +1533,16 @@ on_bus_acquired (GDBusConnection     *connection,
                                                              manager,
                                                              NULL,
                                                              NULL);
-        if (registration_id > 0) {
-                manager->priv->connection = connection;
-
-		g_dbus_proxy_new (manager->priv->connection,
-				  G_DBUS_PROXY_FLAGS_NONE,
-				  NULL,
-				  "org.gnome.SettingsDaemon",
-				  "/org/gnome/SettingsDaemon/XRANDR",
-				  "org.gnome.SettingsDaemon.XRANDR_2",
-				  NULL,
-				  (GAsyncReadyCallback) xrandr_ready_cb,
-				  manager);
-	}
+
+        g_dbus_proxy_new (manager->priv->connection,
+                          G_DBUS_PROXY_FLAGS_NONE,
+                          NULL,
+                          "org.gnome.SettingsDaemon",
+                          "/org/gnome/SettingsDaemon/XRANDR",
+                          "org.gnome.SettingsDaemon.XRANDR_2",
+                          NULL,
+                          (GAsyncReadyCallback) xrandr_ready_cb,
+                          manager);
 }
 
 static void
@@ -1547,14 +1551,10 @@ register_manager (GsdMediaKeysManager *manager)
         manager->priv->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
         g_assert (manager->priv->introspection_data != NULL);
 
-        manager->priv->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
-                                                  GSD_DBUS_NAME,
-                                                  G_BUS_NAME_OWNER_FLAGS_NONE,
-                                                  (GBusAcquiredCallback) on_bus_acquired,
-                                                  NULL,
-                                                  NULL,
-                                                  manager,
-                                                  NULL);
+        g_bus_get (G_BUS_TYPE_SESSION,
+                   NULL,
+                   (GAsyncReadyCallback) on_bus_gotten,
+                   manager);
 }
 
 GsdMediaKeysManager *
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index 886c798..8b65f64 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -101,7 +101,7 @@ struct GsdXrandrManagerPrivate
 
         GSettings       *settings;
         GDBusNodeInfo   *introspection_data;
-        guint            owner_id;
+        GDBusConnection *connection;
 
         /* fn-F7 status */
         int             current_fn_f7_config;             /* -1 if no configs */
@@ -1794,6 +1794,11 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
                 manager->priv->rw_screen = NULL;
         }
 
+        if (manager->priv->connection != NULL) {
+                g_object_unref (manager->priv->connection);
+                manager->priv->connection = NULL;
+        }
+
         log_open ();
         log_msg ("STOPPING XRANDR PLUGIN\n------------------------------------------------------------\n");
         log_close ();
@@ -1895,9 +1900,6 @@ gsd_xrandr_manager_finalize (GObject *object)
 
         g_return_if_fail (xrandr_manager->priv != NULL);
 
-        if (xrandr_manager->priv->owner_id > 0)
-                g_bus_unown_name (xrandr_manager->priv->owner_id);
-
         G_OBJECT_CLASS (gsd_xrandr_manager_parent_class)->finalize (object);
 }
 
@@ -1947,11 +1949,21 @@ static const GDBusInterfaceVTable interface_vtable =
 };
 
 static void
-on_bus_acquired (GDBusConnection     *connection,
-                 const gchar         *name,
-                 GsdXrandrManager    *manager)
+on_bus_gotten (GObject             *source_object,
+               GAsyncResult        *res,
+               GsdXrandrManager    *manager)
 {
+        GDBusConnection *connection;
         guint registration_id;
+        GError *error = NULL;
+
+        connection = g_bus_get_finish (res, &error);
+        if (connection == NULL) {
+                g_warning ("Could not get session bus: %s", error->message);
+                g_error_free (error);
+                return;
+        }
+        manager->priv->connection = connection;
 
         registration_id = g_dbus_connection_register_object (connection,
                                                              GSD_XRANDR_DBUS_PATH,
@@ -1968,14 +1980,10 @@ register_manager_dbus (GsdXrandrManager *manager)
         manager->priv->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
         g_assert (manager->priv->introspection_data != NULL);
 
-        manager->priv->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
-                                                  GSD_DBUS_NAME,
-                                                  G_BUS_NAME_OWNER_FLAGS_NONE,
-                                                  (GBusAcquiredCallback) on_bus_acquired,
-                                                  NULL,
-                                                  NULL,
-                                                  manager,
-                                                  NULL);
+        g_bus_get (G_BUS_TYPE_SESSION,
+                   NULL,
+                   (GAsyncReadyCallback) on_bus_gotten,
+                   manager);
 }
 
 GsdXrandrManager *



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