From ac03cbce048724965f07c83150ee57313e723c0e Mon Sep 17 00:00:00 2001 From: Witold Sowa Date: Tue, 22 Sep 2009 23:29:02 -0700 Subject: [PATCH] libnm-glib: add service-running property to NMRemoteSettings So that users can actually tell if the remote service is running or not. It doesn't have to be when the object is created. --- libnm-glib/nm-remote-settings.c | 35 +++++++++++++++++++++++++++++++-- libnm-glib/nm-remote-settings.h | 1 + 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c index 3d335fe715..c81be430b6 100644 --- a/libnm-glib/nm-remote-settings.c +++ b/libnm-glib/nm-remote-settings.c @@ -45,6 +45,7 @@ typedef struct { DBusGProxy *proxy; GHashTable *connections; GHashTable *pending; /* Connections we don't have settings for yet */ + gboolean service_running; DBusGProxy *dbus_proxy; @@ -57,6 +58,7 @@ enum { PROP_0, PROP_BUS, PROP_SCOPE, + PROP_SERVICE_RUNNING, LAST_PROP }; @@ -283,10 +285,14 @@ name_owner_changed (DBusGProxy *proxy, if (priv->fetch_id) g_source_remove (priv->fetch_id); - if (new_owner && strlen (new_owner) > 0) + if (new_owner && strlen (new_owner) > 0) { priv->fetch_id = g_idle_add (fetch_connections, self); - else + priv->service_running = TRUE; + } else { priv->fetch_id = g_idle_add (remove_connections, self); + priv->service_running = FALSE; + } + g_object_notify (G_OBJECT (self), NM_REMOTE_SETTINGS_SERVICE_RUNNING); } } @@ -339,6 +345,7 @@ constructor (GType type, GObject *object; NMRemoteSettingsPrivate *priv; const char *service = NM_DBUS_SERVICE_USER_SETTINGS; + GError *error = NULL; object = G_OBJECT_CLASS (nm_remote_settings_parent_class)->constructor (type, n_construct_params, construct_params); if (!object) @@ -369,6 +376,19 @@ constructor (GType type, if (priv->scope == NM_CONNECTION_SCOPE_SYSTEM) service = NM_DBUS_SERVICE_SYSTEM_SETTINGS; + if (!dbus_g_proxy_call (priv->dbus_proxy, "NameHasOwner", &error, + G_TYPE_STRING, service, + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &priv->service_running, + G_TYPE_INVALID)) { + g_warning ("%s (NMRemoteSettings) error getting remote settings service status: (%d) %s\n", + __func__, + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + g_error_free (error); + priv->service_running = FALSE; + } + priv->proxy = dbus_g_proxy_new_for_name (priv->bus, service, NM_DBUS_PATH_SETTINGS, @@ -447,6 +467,9 @@ get_property (GObject *object, guint prop_id, case PROP_SCOPE: g_value_set_uint (value, priv->scope); break; + case PROP_SERVICE_RUNNING: + g_value_set_boolean (value, priv->service_running); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -484,5 +507,13 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class) NM_CONNECTION_SCOPE_USER, NM_CONNECTION_SCOPE_USER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property + (object_class, PROP_SERVICE_RUNNING, + g_param_spec_boolean (NM_REMOTE_SETTINGS_SERVICE_RUNNING, + "Service running", + "Is service running", + FALSE, + G_PARAM_READABLE)); } diff --git a/libnm-glib/nm-remote-settings.h b/libnm-glib/nm-remote-settings.h index f94aee4f2e..19397c3a8d 100644 --- a/libnm-glib/nm-remote-settings.h +++ b/libnm-glib/nm-remote-settings.h @@ -40,6 +40,7 @@ G_BEGIN_DECLS #define NM_REMOTE_SETTINGS_BUS "bus" #define NM_REMOTE_SETTINGS_SCOPE "scope" +#define NM_REMOTE_SETTINGS_SERVICE_RUNNING "service-running" typedef struct { GObject parent;