[gnome-keyring] dbus: Fix object path regression from GDBus port



commit 7840cb97902c952c34831cc63dcba00ececabd0c
Author: Stef Walter <stefw gnome org>
Date:   Fri Oct 16 22:46:07 2015 +0200

    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

 daemon/dbus/gkd-secret-create.c |    1 +
 daemon/dbus/gkd-secret-prompt.c |   10 ++++++++++
 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 0f2b573..cd5587b 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 207cc8a..f0a6d63 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 0b52ea0..a133f25 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__ */


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