diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver index 8f70183689..427e2484c5 100644 --- a/libnm-glib/libnm-glib.ver +++ b/libnm-glib/libnm-glib.ver @@ -199,6 +199,7 @@ global: nm_secret_agent_delete_secrets; nm_secret_agent_error_get_type; nm_secret_agent_error_quark; + nm_secret_agent_get_registered; nm_secret_agent_get_secrets; nm_secret_agent_get_secrets_flags_get_type; nm_secret_agent_get_type; diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c index d6a15f9b0b..19f55c0e2d 100644 --- a/libnm-glib/nm-secret-agent.c +++ b/libnm-glib/nm-secret-agent.c @@ -87,6 +87,7 @@ enum { PROP_0, PROP_IDENTIFIER, PROP_AUTO_REGISTER, + PROP_REGISTERED, LAST_PROP }; @@ -145,6 +146,7 @@ _internal_unregister (NMSecretAgent *self) if (priv->registered) { dbus_g_connection_unregister_g_object (priv->bus, G_OBJECT (self)); priv->registered = FALSE; + g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_REGISTERED); } } @@ -509,9 +511,10 @@ reg_request_cb (DBusGProxy *proxy, priv->reg_call = NULL; - if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) + if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) { priv->registered = TRUE; - else { + g_object_notify (G_OBJECT (self), NM_SECRET_AGENT_REGISTERED); + } else { /* If registration failed we shouldn't expose ourselves on the bus */ _internal_unregister (self); } @@ -607,6 +610,21 @@ nm_secret_agent_unregister (NMSecretAgent *self) return TRUE; } +/** + * nm_secret_agent_get_registered: + * @self: a #NMSecretAgent + * + * Returns: a %TRUE if the agent is registered, %FALSE if it is not. + **/ +gboolean +nm_secret_agent_get_registered (NMSecretAgent *self) +{ + g_return_val_if_fail (self != NULL, FALSE); + g_return_val_if_fail (NM_IS_SECRET_AGENT (self), FALSE); + + return NM_SECRET_AGENT_GET_PRIVATE (self)->registered; +} + static gboolean auto_register_cb (gpointer user_data) { @@ -818,6 +836,9 @@ get_property (GObject *object, case PROP_AUTO_REGISTER: g_value_set_boolean (value, priv->auto_register); break; + case PROP_REGISTERED: + g_value_set_boolean (value, priv->registered); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -935,6 +956,19 @@ nm_secret_agent_class_init (NMSecretAgentClass *class) TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + /** + * NMSecretAgent:registered: + * + * %TRUE if the agent is registered with NetworkManager, %FALSE if not. + **/ + g_object_class_install_property + (object_class, PROP_REGISTERED, + g_param_spec_boolean (NM_SECRET_AGENT_REGISTERED, + "Registered", + "Registered", + FALSE, + G_PARAM_READABLE)); + /** * NMSecretAgent::registration-result: * @agent: the agent that received the signal diff --git a/libnm-glib/nm-secret-agent.h b/libnm-glib/nm-secret-agent.h index 19f257ec36..c367f91675 100644 --- a/libnm-glib/nm-secret-agent.h +++ b/libnm-glib/nm-secret-agent.h @@ -68,6 +68,7 @@ typedef enum { #define NM_SECRET_AGENT_IDENTIFIER "identifier" #define NM_SECRET_AGENT_AUTO_REGISTER "auto-register" +#define NM_SECRET_AGENT_REGISTERED "registered" #define NM_SECRET_AGENT_REGISTRATION_RESULT "registration-result" @@ -229,6 +230,8 @@ gboolean nm_secret_agent_register (NMSecretAgent *self); gboolean nm_secret_agent_unregister (NMSecretAgent *self); +gboolean nm_secret_agent_get_registered (NMSecretAgent *self); + void nm_secret_agent_get_secrets (NMSecretAgent *self, NMConnection *connection, const char *setting_name,