DBusObjectManagerClient
GDBusObjectManagerClient
is used to create, monitor and delete object proxies for remote objects exported by a class@Gio.DBusObjectManagerServer (or any code implementing the org.freedesktop.DBus.ObjectManager interface).
Once an instance of this type has been created, you can connect to the signal@Gio.DBusObjectManager::object-added and signal@Gio.DBusObjectManager::object-removed signals and inspect the class@Gio.DBusObjectProxy objects returned by method@Gio.DBusObjectManager.get_objects.
If the name for a GDBusObjectManagerClient
is not owned by anyone at object construction time, the default behavior is to request the message bus to launch an owner for the name. This behavior can be disabled using the G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START
flag. It’s also worth noting that this only works if the name of interest is activatable in the first place. E.g. in some cases it is not possible to launch an owner for the requested name. In this case, GDBusObjectManagerClient
object construction still succeeds but there will be no object proxies (e.g. method@Gio.DBusObjectManager.get_objects returns the empty list) and the property@Gio.DBusObjectManagerClient:name-owner property is NULL
.
The owner of the requested name can come and go (for example consider a system service being restarted) – GDBusObjectManagerClient
handles this case too; simply connect to the signal@GObject.Object::notify signal to watch for changes on the property@Gio.DBusObjectManagerClient:name-owner property. When the name owner vanishes, the behavior is that property@Gio.DBusObjectManagerClient:name-owner is set to NULL
(this includes emission of the signal@GObject.Object::notify signal) and then signal@Gio.DBusObjectManager::object-removed signals are synthesized for all currently existing object proxies. Since property@Gio.DBusObjectManagerClient:name-owner is NULL
when this happens, you can use this information to disambiguate a synthesized signal from a genuine signal caused by object removal on the remote iface@Gio.DBusObjectManager. Similarly, when a new name owner appears, signal@Gio.DBusObjectManager::object-added signals are synthesized while property@Gio.DBusObjectManagerClient:name-owner is still NULL
. Only when all object proxies have been added, the property@Gio.DBusObjectManagerClient:name-owner is set to the new name owner (this includes emission of the signal@GObject.Object::notify signal). Furthermore, you are guaranteed that property@Gio.DBusObjectManagerClient:name-owner will alternate between a name owner (e.g. :1.42
) and NULL
even in the case where the name of interest is atomically replaced
Ultimately, GDBusObjectManagerClient
is used to obtain class@Gio.DBusProxy instances. All signals (including the org.freedesktop.DBus.Properties::PropertiesChanged
signal) delivered to class@Gio.DBusProxy instances are guaranteed to originate from the name owner. This guarantee along with the behavior described above, means that certain race conditions including the “half the proxy is from the old owner and the other half is from the new owner” problem cannot happen.
To avoid having the application connect to signals on the returned class@Gio.DBusObjectProxy and class@Gio.DBusProxy objects, the signal@Gio.DBusObject::interface-added, signal@Gio.DBusObject::interface-removed, signal@Gio.DBusProxy::g-properties-changed and signal@Gio.DBusProxy::g-signal signals are also emitted on the GDBusObjectManagerClient
instance managing these objects. The signals emitted are signal@Gio.DBusObjectManager::interface-added, signal@Gio.DBusObjectManager::interface-removed, signal@Gio.DBusObjectManagerClient::interface-proxy-properties-changed and signal@Gio.DBusObjectManagerClient::interface-proxy-signal.
Note that all callbacks and signals are emitted in the thread-default main context (see method@GLib.MainContext.push_thread_default) that the GDBusObjectManagerClient
object was constructed in. Additionally, the class@Gio.DBusObjectProxy and class@Gio.DBusProxy objects originating from the GDBusObjectManagerClient
object will be created in the same context and, consequently, will deliver signals in the same main loop.
Skipped during bindings generation
method
bus-type
: Property has no getter nor settermethod
get-proxy-type-destroy-notify
: Property has no getter nor settermethod
get-proxy-type-func
: Property has no getter nor settermethod
get-proxy-type-user-data
: Property has no getter nor settermethod
object-path
: Property has no getter nor setterconstructor
new_for_bus_sync
: C function g_dbus_object_manager_client_new_for_bus_sync is ignoredconstructor
new_sync
: C function g_dbus_object_manager_client_new_sync is ignoredparameter
callback
: AsyncReadyCallbackparameter
callback
: AsyncReadyCallback
Since
2.30
Constructors
Properties
The #GDBusConnection to use.
Flags from the #GDBusObjectManagerClientFlags enumeration.
Functions
Emitted when @interface is added to @object.
Emitted when one or more D-Bus properties on proxy changes. The local cache has already been updated when this signal fires. Note that both @changed_properties and @invalidated_properties are guaranteed to never be null (either may be empty though).
Emitted when a D-Bus signal is received on @interface_proxy.
Emitted when @interface has been removed from @object.
Emitted when @object is added to @manager.
Emitted when @object is removed from @manager.
Gets the #GDBusConnection used by @manager.
Gets the flags that @manager was constructed with.
Gets the interface proxy for @interface_name at @object_path, if any.
The unique name that owns the name that @manager is for or null if no-one currently owns that name. You can connect to the #GObject::notify signal to track changes to the #GDBusObjectManagerClient:name-owner property.
Gets the #GDBusObject at @object_path, if any.
Gets the object path that @manager is for.
Gets all #GDBusObject objects known to @manager.
Initializes the object implementing the interface.
Starts asynchronous initialization of the object implementing the interface. This must be done before any real use of the object after initial construction. If the object also implements #GInitable you can optionally call g_initable_init() instead.
Finishes asynchronous initialization and returns the result. See g_async_initable_init_async().
Finishes the async construction for the various g_async_initable_new calls, returning the created object or null on error.