diff options
author | Stef Walter <stefw@gnome.org> | 2015-10-16 22:46:07 +0200 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2015-10-17 10:09:38 +0200 |
commit | 7840cb97902c952c34831cc63dcba00ececabd0c (patch) | |
tree | c5c98bb449868dd91a5e60d67dd480c0c8aee012 /daemon | |
parent | 91dfc6a365f3d12e87769680c2dedc2bc1e57b23 (diff) | |
download | gnome-keyring-7840cb97902c952c34831cc63dcba00ececabd0c.tar.gz |
dbus: Fix object path regression from GDBus port
Previously objects were only explicitly exported on the bus when
they were ready. However now due to GDBus handler connections
they are exported earlier.
Make sure to export a prompt object before something is exported
at the same object path to take its place.
https://bugzilla.gnome.org/show_bug.cgi?id=756032
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/dbus/gkd-secret-create.c | 1 | ||||
-rw-r--r-- | daemon/dbus/gkd-secret-prompt.c | 10 | ||||
-rw-r--r-- | daemon/dbus/gkd-secret-prompt.h | 3 |
3 files changed, 14 insertions, 0 deletions
diff --git a/daemon/dbus/gkd-secret-create.c b/daemon/dbus/gkd-secret-create.c index 0f2b5738..cd5587b7 100644 --- a/daemon/dbus/gkd-secret-create.c +++ b/daemon/dbus/gkd-secret-create.c @@ -176,6 +176,7 @@ unlock_or_complete_this_prompt (GkdSecretCreate *self) g_object_ref (self); prompt = GKD_SECRET_PROMPT (self); + gkd_secret_prompt_unexport (prompt); unlock = gkd_secret_unlock_new (gkd_secret_prompt_get_service (prompt), gkd_secret_prompt_get_caller (prompt), diff --git a/daemon/dbus/gkd-secret-prompt.c b/daemon/dbus/gkd-secret-prompt.c index 207cc8a6..f0a6d63a 100644 --- a/daemon/dbus/gkd-secret-prompt.c +++ b/daemon/dbus/gkd-secret-prompt.c @@ -202,6 +202,16 @@ gkd_secret_prompt_constructed (GObject *obj) G_CALLBACK (prompt_method_prompt), self); } +void +gkd_secret_prompt_unexport (GkdSecretPrompt *self) +{ + g_return_if_fail (self->pv->skeleton != NULL); + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->pv->skeleton)); + g_signal_handlers_disconnect_by_func (self->pv->skeleton, prompt_method_dismiss, self); + g_signal_handlers_disconnect_by_func (self->pv->skeleton, prompt_method_prompt, self); + g_clear_object (&self->pv->skeleton); +} + static void gkd_secret_prompt_init (GkdSecretPrompt *self) { diff --git a/daemon/dbus/gkd-secret-prompt.h b/daemon/dbus/gkd-secret-prompt.h index 0b52ea08..a133f256 100644 --- a/daemon/dbus/gkd-secret-prompt.h +++ b/daemon/dbus/gkd-secret-prompt.h @@ -77,4 +77,7 @@ void gkd_secret_prompt_dismiss (GkdSecretPrompt * void gkd_secret_prompt_dismiss_with_error (GkdSecretPrompt *self, GError *error); +/* Used by derived classes */ +void gkd_secret_prompt_unexport (GkdSecretPrompt *self); + #endif /* __GKD_SECRET_PROMPT_H__ */ |