[gnome-settings-daemon] main: Provide a singleton SessionManager proxy object



commit 58d38a39f67c71ccdea219e3d3651f7726e495a1
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Oct 20 20:17:58 2012 -0400

    main: Provide a singleton SessionManager proxy object
    
    Many plugins were creating these on their own, with ugly async
    code. It seems much more straightforward and efficient to get
    a proxy once, and keep it around for everybody to use.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=686556

 gnome-settings-daemon/gnome-settings-session.c |   32 ++++++++++++++++++++++++
 gnome-settings-daemon/gnome-settings-session.h |    1 +
 2 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/gnome-settings-daemon/gnome-settings-session.c b/gnome-settings-daemon/gnome-settings-session.c
index 5786300..4ba4869 100644
--- a/gnome-settings-daemon/gnome-settings-session.c
+++ b/gnome-settings-daemon/gnome-settings-session.c
@@ -434,3 +434,35 @@ gnome_settings_session_new (void)
 	session = g_object_new (GNOME_TYPE_SETTINGS_SESSION, NULL);
 	return GNOME_SETTINGS_SESSION (session);
 }
+
+#define GNOME_SESSION_DBUS_NAME      "org.gnome.SessionManager"
+#define GNOME_SESSION_DBUS_OBJECT    "/org/gnome/SessionManager"
+#define GNOME_SESSION_DBUS_INTERFACE "org.gnome.SessionManager"
+
+GDBusProxy *
+gnome_settings_session_get_session_proxy (void)
+{
+        static GDBusProxy *session_proxy;
+        GError *error =  NULL;
+
+        if (session_proxy != NULL) {
+                g_object_ref (session_proxy);
+        } else {
+                session_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+                                                               G_DBUS_PROXY_FLAGS_NONE,
+                                                               NULL,
+                                                               GNOME_SESSION_DBUS_NAME,
+                                                               GNOME_SESSION_DBUS_OBJECT,
+                                                               GNOME_SESSION_DBUS_INTERFACE,
+                                                               NULL,
+                                                               &error);
+                if (error) {
+                        g_warning ("Failed to connect to the session manager: %s", error->message);
+                        g_error_free (error);
+                } else {
+                        g_object_add_weak_pointer (G_OBJECT (session_proxy), (gpointer*)&session_proxy);
+                }
+        }
+
+        return session_proxy;
+}
diff --git a/gnome-settings-daemon/gnome-settings-session.h b/gnome-settings-daemon/gnome-settings-session.h
index c9b64ee..1f7580d 100644
--- a/gnome-settings-daemon/gnome-settings-session.h
+++ b/gnome-settings-daemon/gnome-settings-session.h
@@ -58,6 +58,7 @@ GType			 gnome_settings_session_state_get_type	(void);
 GnomeSettingsSession	*gnome_settings_session_new		(void);
 GnomeSettingsSessionState gnome_settings_session_get_state	(GnomeSettingsSession	*session);
 
+GDBusProxy              *gnome_settings_session_get_session_proxy  (void);
 
 G_END_DECLS
 



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