EServerSideSource: Add an "exported" property.
authorMatthew Barnes <mbarnes@redhat.com>
Thu, 21 Jun 2012 12:40:54 +0000 (08:40 -0400)
committerMatthew Barnes <mbarnes@redhat.com>
Thu, 21 Jun 2012 13:05:06 +0000 (09:05 -0400)
Read-only boolean property indicates whether the source has been
exported over D-Bus.  Basically just queries the registry server
for itself.

docs/reference/libebackend/libebackend-sections.txt
libebackend/e-server-side-source.c
libebackend/e-server-side-source.h
libebackend/e-source-registry-server.c

index 4619a18..fb9752b 100644 (file)
@@ -335,6 +335,7 @@ e_server_side_source_get_node
 e_server_side_source_get_server
 e_server_side_source_get_allow_auth_prompt
 e_server_side_source_set_allow_auth_prompt
+e_server_side_source_get_exported
 e_server_side_source_get_write_directory
 e_server_side_source_set_write_directory
 e_server_side_source_set_removable
index 0c586aa..133ccad 100644 (file)
@@ -66,6 +66,7 @@ struct _AsyncClosure {
 enum {
        PROP_0,
        PROP_ALLOW_AUTH_PROMPT,
+       PROP_EXPORTED,
        PROP_FILE,
        PROP_REMOVABLE,
        PROP_SERVER,
@@ -406,6 +407,13 @@ server_side_source_get_property (GObject *object,
                                E_SERVER_SIDE_SOURCE (object)));
                        return;
 
+               case PROP_EXPORTED:
+                       g_value_set_boolean (
+                               value,
+                               e_server_side_source_get_exported (
+                               E_SERVER_SIDE_SOURCE (object)));
+                       return;
+
                case PROP_FILE:
                        g_value_set_object (
                                value,
@@ -846,6 +854,17 @@ e_server_side_source_class_init (EServerSideSourceClass *class)
 
        g_object_class_install_property (
                object_class,
+               PROP_EXPORTED,
+               g_param_spec_boolean (
+                       "exported",
+                       "Exported",
+                       "Whether the source has been exported over D-Bus",
+                       FALSE,
+                       G_PARAM_READABLE |
+                       G_PARAM_STATIC_STRINGS));
+
+       g_object_class_install_property (
+               object_class,
                PROP_FILE,
                g_param_spec_object (
                        "file",
@@ -1342,6 +1361,45 @@ e_server_side_source_set_allow_auth_prompt (EServerSideSource *source,
 }
 
 /**
+ * e_server_side_source_get_exported:
+ * @source: an #EServerSideSource
+ *
+ * Returns whether @source has been exported over D-Bus.
+ *
+ * The function returns %FALSE after @source is initially created, %TRUE
+ * after passing @source to e_source_registry_add_source() (provided that
+ * @source's #ESource:parent is also exported), and %FALSE after passing
+ * @source to e_source_registry_remove_source().
+ *
+ * Returns: whether @source has been exported
+ *
+ * Since: 3.6
+ **/
+gboolean
+e_server_side_source_get_exported (EServerSideSource *source)
+{
+       ESourceRegistryServer *server;
+       ESource *exported_source;
+       gboolean exported = FALSE;
+       const gchar *uid;
+
+       g_return_val_if_fail (E_IS_SERVER_SIDE_SOURCE (source), FALSE);
+
+       uid = e_source_get_uid (E_SOURCE (source));
+       server = e_server_side_source_get_server (source);
+
+       /* We're exported if we can look ourselves up in the registry. */
+
+       exported_source = e_source_registry_server_ref_source (server, uid);
+       if (exported_source != NULL) {
+               exported = TRUE;
+               g_object_unref (exported_source);
+       }
+
+       return exported;
+}
+
+/**
  * e_server_side_source_get_write_directory:
  * @source: an #EServerSideSource
  *
index 597d782..cdb5277 100644 (file)
@@ -96,6 +96,8 @@ gboolean      e_server_side_source_get_allow_auth_prompt
 void           e_server_side_source_set_allow_auth_prompt
                                                (EServerSideSource *source,
                                                 gboolean allow_auth_prompt);
+gboolean       e_server_side_source_get_exported
+                                               (EServerSideSource *source);
 const gchar *  e_server_side_source_get_write_directory
                                                (EServerSideSource *source);
 void           e_server_side_source_set_write_directory
index 4311b5e..b06a1a6 100644 (file)
@@ -975,6 +975,8 @@ source_registry_server_source_added (ESourceRegistryServer *server,
                server->priv->object_manager,
                G_DBUS_OBJECT_SKELETON (dbus_object));
 
+       g_object_notify (G_OBJECT (source), "exported");
+
        uid = e_source_get_uid (source);
 
        g_dbus_object = G_DBUS_OBJECT (dbus_object);
@@ -1007,6 +1009,8 @@ source_registry_server_source_removed (ESourceRegistryServer *server,
        g_dbus_object_manager_server_unexport (
                server->priv->object_manager, object_path);
 
+       g_object_notify (G_OBJECT (source), "exported");
+
        g_object_unref (dbus_object);
 }