Handle absence of portals
authorMatthias Clasen <mclasen@redhat.com>
Wed, 7 Sep 2022 11:53:12 +0000 (07:53 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 7 Sep 2022 12:45:31 +0000 (08:45 -0400)
When the documents portal is not on the bus,
we still get an (unowned) proxy, and we need
to handle that situation.

gdk/filetransferportal.c

index d9934fbb43772d7211e13370bf4de8a34c276a95..bf1e2e2be54327b9194eb82d1d7834b2a4cfdb01 100644 (file)
@@ -512,6 +512,21 @@ finish_registration (void)
                     "closed", G_CALLBACK (connection_closed), NULL);
 }
 
+static gboolean
+proxy_has_owner (GDBusProxy *proxy)
+{
+  char *owner;
+
+  owner = g_dbus_proxy_get_name_owner (proxy);
+  if (owner)
+    {
+      g_free (owner);
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
 void
 file_transfer_portal_register (void)
 {
@@ -531,6 +546,10 @@ file_transfer_portal_register (void)
                                 "org.freedesktop.portal.FileTransfer",
                                 NULL,
                                 NULL);
+
+      if (file_transfer_proxy && !proxy_has_owner (file_transfer_proxy))
+        g_clear_object (&file_transfer_proxy);
+
       if (file_transfer_proxy)
         finish_registration ();
     }