*
* - Consistent timeout handling (25s vs 30s?)
*
- * - GDBusProxy subclass example
- *
* - Update GDBusAuthObserver (s/deny/authorize/)
*/
* <example id="gdbus-subtree-server"><title>D-Bus subtree example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-subtree.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*
* <example id="gdbus-unix-fd-client"><title>D-Bus UNIX File Descriptor example</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-unix-fd-client.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
+ *
+ * <example id="gdbus-export"><title>Exporting a GObject</title><programlisting><xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../gio/tests/gdbus-example-export.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include></programlisting></example>
*/
/* ---------------------------------------------------------------------------------------------------- */
blob = g_dbus_message_to_blob (message,
&blob_size,
+ connection->priv->capabilities,
error);
if (blob == NULL)
goto out;
" <signal name=\"PropertiesChanged\">\n"
" <arg type=\"s\" name=\"interface_name\"/>\n"
" <arg type=\"a{sv}\" name=\"changed_properties\"/>\n"
+ " <arg type=\"as\" name=\"invalidated_properties\"/>\n"
" </signal>\n"
" </interface>\n"
" <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
* g_dbus_connection_register_object:
* @connection: A #GDBusConnection.
* @object_path: The object path to register at.
- * @interface_name: The D-Bus interface to register.
* @introspection_data: Introspection data for the interface.
* @vtable: A #GDBusInterfaceVTable to call into or %NULL.
* @user_data: Data to pass to functions in @vtable.
* @error: Return location for error or %NULL.
*
* Registers callbacks for exported objects at @object_path with the
- * D-Bus interface @interface_name.
+ * D-Bus interface that is described in @introspection_data.
*
* Calls to functions in @vtable (and @user_data_free_func) will
* happen in the <link linkend="g-main-context-push-thread-default">thread-default main
* If an existing callback is already registered at @object_path and
* @interface_name, then @error is set to #G_IO_ERROR_EXISTS.
*
+ * GDBus automatically implements the standard D-Bus interfaces
+ * org.freedesktop.DBus.Properties, org.freedesktop.DBus.Introspectable
+ * and org.freedesktop.Peer, so you don't have to implement those for
+ * the objects you export. You <emphasis>can</emphasis> implement
+ * org.freedesktop.DBus.Properties yourself, e.g. to handle getting
+ * and setting of properties asynchronously.
+ *
* See <xref linkend="gdbus-server"/> for an example of how to use this method.
*
* Returns: 0 if @error is set, otherwise a registration id (never 0)
guint
g_dbus_connection_register_object (GDBusConnection *connection,
const gchar *object_path,
- const gchar *interface_name,
const GDBusInterfaceInfo *introspection_data,
const GDBusInterfaceVTable *vtable,
gpointer user_data,
g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), 0);
g_return_val_if_fail (!g_dbus_connection_is_closed (connection), 0);
g_return_val_if_fail (object_path != NULL && g_variant_is_object_path (object_path), 0);
- g_return_val_if_fail (interface_name == NULL || g_dbus_is_interface_name (interface_name), 0);
g_return_val_if_fail (introspection_data != NULL, 0);
+ g_return_val_if_fail (g_dbus_is_interface_name (introspection_data->name), 0);
g_return_val_if_fail (error == NULL || *error == NULL, 0);
ret = 0;
g_hash_table_insert (connection->priv->map_object_path_to_eo, eo->object_path, eo);
}
- ei = g_hash_table_lookup (eo->map_if_name_to_ei, interface_name);
+ ei = g_hash_table_lookup (eo->map_if_name_to_ei, introspection_data->name);
if (ei != NULL)
{
g_set_error (error,
G_IO_ERROR,
G_IO_ERROR_EXISTS,
_("An object is already exported for the interface %s at %s"),
- interface_name,
+ introspection_data->name,
object_path);
goto out;
}
ei->user_data_free_func = user_data_free_func;
ei->vtable = vtable;
ei->introspection_data = introspection_data;
- ei->interface_name = g_strdup (interface_name);
+ ei->interface_name = g_strdup (introspection_data->name);
ei->context = g_main_context_get_thread_default ();
if (ei->context != NULL)
g_main_context_ref (ei->context);