mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-04 08:23:38 +02:00
GDBusObjectManagerServer: Allow setting :connection property
.. and add a C setter to do this. Also make the C getter return a reference since the property may be set from another thread. Also change the constructor to _not_ take a GDBusConnection since this is something you almost always want to do _after_ creating it. The API/ABI break is fine as there has never been a GLib release with this type. https://bugzilla.gnome.org/show_bug.cgi?id=648959 Signed-off-by: David Zeuthen <davidz@redhat.com>
This commit is contained in:
@@ -68,7 +68,7 @@ on_bus_acquired (GDBusConnection *connection,
|
||||
g_print ("Acquired a message bus connection\n");
|
||||
|
||||
/* Create a new org.freedesktop.DBus.ObjectManager rooted at /example/Animals */
|
||||
manager = g_dbus_object_manager_server_new (connection, "/example/Animals");
|
||||
manager = g_dbus_object_manager_server_new ("/example/Animals");
|
||||
|
||||
for (n = 0; n < 10; n++)
|
||||
{
|
||||
@@ -111,6 +111,9 @@ on_bus_acquired (GDBusConnection *connection,
|
||||
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
|
||||
g_object_unref (object);
|
||||
}
|
||||
|
||||
/* Export all objects */
|
||||
g_dbus_object_manager_server_set_connection (manager, connection);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -1762,7 +1762,8 @@ check_object_manager (void)
|
||||
g_error_free (error);
|
||||
g_assert (pm == NULL);
|
||||
|
||||
manager = g_dbus_object_manager_server_new (c, "/managed");
|
||||
manager = g_dbus_object_manager_server_new ("/managed");
|
||||
g_dbus_object_manager_server_set_connection (manager, c);
|
||||
|
||||
/* Check that the manager object is visible */
|
||||
info = introspect (c, g_dbus_connection_get_unique_name (c), "/managed", loop);
|
||||
@@ -1985,6 +1986,17 @@ check_object_manager (void)
|
||||
om_check_get_all (c, loop,
|
||||
"({objectpath '/managed/first': {'com.acme.Coyote': {'Mood': <''>}}, '/managed/second': {'org.project.Bar': {'y': <byte 0x00>, 'b': <false>, 'n': <int16 0>, 'q': <uint16 0>, 'i': <0>, 'u': <uint32 0>, 'x': <int64 0>, 't': <uint64 0>, 'd': <0.0>, 's': <''>, 'o': <objectpath '/'>, 'g': <signature ''>, 'ay': <b''>, 'as': <@as []>, 'aay': <@aay []>, 'ao': <@ao []>, 'ag': <@ag []>, 'FinallyNormalName': <''>, 'ReadonlyProperty': <''>, 'unset_i': <0>, 'unset_d': <0.0>, 'unset_s': <''>, 'unset_o': <objectpath '/'>, 'unset_g': <signature ''>, 'unset_ay': <b''>, 'unset_as': <@as []>, 'unset_ao': <@ao []>, 'unset_ag': <@ag []>, 'unset_struct': <(0, 0.0, '', objectpath '/', signature '', @ay [], @as [], @ao [], @ag [])>}, 'org.project.Bat': {'force_i': <0>, 'force_s': <''>, 'force_ay': <@ay []>, 'force_struct': <(0,)>}}},)");
|
||||
|
||||
/* Set connection to NULL, causing everything to be unexported.. verify this.. and
|
||||
* then set the connection back.. and then check things still work
|
||||
*/
|
||||
g_dbus_object_manager_server_set_connection (manager, NULL);
|
||||
info = introspect (c, g_dbus_connection_get_unique_name (c), "/managed", loop);
|
||||
g_assert_cmpint (count_interfaces (info), ==, 0); /* nothing */
|
||||
g_dbus_node_info_unref (info);
|
||||
g_dbus_object_manager_server_set_connection (manager, c);
|
||||
om_check_get_all (c, loop,
|
||||
"({objectpath '/managed/first': {'com.acme.Coyote': {'Mood': <''>}}, '/managed/second': {'org.project.Bar': {'y': <byte 0x00>, 'b': <false>, 'n': <int16 0>, 'q': <uint16 0>, 'i': <0>, 'u': <uint32 0>, 'x': <int64 0>, 't': <uint64 0>, 'd': <0.0>, 's': <''>, 'o': <objectpath '/'>, 'g': <signature ''>, 'ay': <b''>, 'as': <@as []>, 'aay': <@aay []>, 'ao': <@ao []>, 'ag': <@ag []>, 'FinallyNormalName': <''>, 'ReadonlyProperty': <''>, 'unset_i': <0>, 'unset_d': <0.0>, 'unset_s': <''>, 'unset_o': <objectpath '/'>, 'unset_g': <signature ''>, 'unset_ay': <b''>, 'unset_as': <@as []>, 'unset_ao': <@ao []>, 'unset_ag': <@ag []>, 'unset_struct': <(0, 0.0, '', objectpath '/', signature '', @ay [], @as [], @ao [], @ag [])>}, 'org.project.Bat': {'force_i': <0>, 'force_s': <''>, 'force_ay': <@ay []>, 'force_struct': <(0,)>}}},)");
|
||||
|
||||
/* Also check that the ObjectManagerClient returns these objects - and
|
||||
* that they are of the right GType cf. what was requested via
|
||||
* the generated ::get-proxy-type signal handler
|
||||
|
Reference in New Issue
Block a user