| /* GDBus - GLib D-Bus Library | |
| * | |
| * Copyright (C) 2008-2010 Red Hat, Inc. | |
| * | |
| * SPDX-License-Identifier: LGPL-2.1-or-later | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General | |
| * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | |
| * | |
| * Author: David Zeuthen <davidz@redhat.com> | |
| */ | |
| #include "config.h" | |
| #include "gdbusobject.h" | |
| #include "gdbusinterface.h" | |
| #include "glibintl.h" | |
| /** | |
| * GDBusInterface: | |
| * | |
| * Base type for D-Bus interfaces. | |
| * | |
| * The `GDBusInterface` type is the base type for D-Bus interfaces both | |
| * on the service side (see [class@Gio.DBusInterfaceSkeleton]) and client side | |
| * (see [class@Gio.DBusProxy]). | |
| * | |
| * Since: 2.30 | |
| */ | |
| typedef GDBusInterfaceIface GDBusInterfaceInterface; | |
| G_DEFINE_INTERFACE (GDBusInterface, g_dbus_interface, G_TYPE_OBJECT) | |
| static void | |
| g_dbus_interface_default_init (GDBusInterfaceIface *iface) | |
| { | |
| } | |
| /* ---------------------------------------------------------------------------------------------------- */ | |
| /** | |
| * g_dbus_interface_get_info: | |
| * @interface_: An exported D-Bus interface. | |
| * | |
| * Gets D-Bus introspection information for the D-Bus interface | |
| * implemented by @interface_. | |
| * | |
| * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. | |
| * | |
| * Since: 2.30 | |
| */ | |
| GDBusInterfaceInfo * | |
| g_dbus_interface_get_info (GDBusInterface *interface_) | |
| { | |
| g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); | |
| return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_info (interface_); | |
| } | |
| /** | |
| * g_dbus_interface_get_object: (skip) | |
| * @interface_: An exported D-Bus interface | |
| * | |
| * Gets the #GDBusObject that @interface_ belongs to, if any. | |
| * | |
| * It is not safe to use the returned object if @interface_ or | |
| * the returned object is being used from other threads. See | |
| * g_dbus_interface_dup_object() for a thread-safe alternative. | |
| * | |
| * Returns: (nullable) (transfer none): A #GDBusObject or %NULL. The returned | |
| * reference belongs to @interface_ and should not be freed. | |
| * | |
| * Since: 2.30 | |
| */ | |
| GDBusObject * | |
| g_dbus_interface_get_object (GDBusInterface *interface_) | |
| { | |
| g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); | |
| return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_); | |
| } | |
| /** | |
| * g_dbus_interface_dup_object: (rename-to g_dbus_interface_get_object) | |
| * @interface_: An exported D-Bus interface. | |
| * | |
| * Gets the #GDBusObject that @interface_ belongs to, if any. | |
| * | |
| * Returns: (nullable) (transfer full): A #GDBusObject or %NULL. The returned | |
| * reference should be freed with g_object_unref(). | |
| * | |
| * Since: 2.32 | |
| */ | |
| GDBusObject * | |
| g_dbus_interface_dup_object (GDBusInterface *interface_) | |
| { | |
| GDBusObject *ret; | |
| g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); | |
| if (G_LIKELY (G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object != NULL)) | |
| { | |
| ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object (interface_); | |
| } | |
| else | |
| { | |
| g_warning ("No dup_object() vfunc on type %s - using get_object() in a way that is not thread-safe.", | |
| g_type_name_from_instance ((GTypeInstance *) interface_)); | |
| ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_); | |
| if (ret != NULL) | |
| g_object_ref (ret); | |
| } | |
| return ret; | |
| } | |
| /** | |
| * g_dbus_interface_set_object: | |
| * @interface_: An exported D-Bus interface. | |
| * @object: (nullable): A #GDBusObject or %NULL. | |
| * | |
| * Sets the #GDBusObject for @interface_ to @object. | |
| * | |
| * Note that @interface_ will hold a weak reference to @object. | |
| * | |
| * Since: 2.30 | |
| */ | |
| void | |
| g_dbus_interface_set_object (GDBusInterface *interface_, | |
| GDBusObject *object) | |
| { | |
| g_return_if_fail (G_IS_DBUS_INTERFACE (interface_)); | |
| g_return_if_fail (object == NULL || G_IS_DBUS_OBJECT (object)); | |
| G_DBUS_INTERFACE_GET_IFACE (interface_)->set_object (interface_, object); | |
| } |