Branch data Line data Source code
1 : : /* GDBus - GLib D-Bus Library
2 : : *
3 : : * Copyright (C) 2008-2010 Red Hat, Inc.
4 : : *
5 : : * SPDX-License-Identifier: LGPL-2.1-or-later
6 : : *
7 : : * This library is free software; you can redistribute it and/or
8 : : * modify it under the terms of the GNU Lesser General Public
9 : : * License as published by the Free Software Foundation; either
10 : : * version 2.1 of the License, or (at your option) any later version.
11 : : *
12 : : * This library is distributed in the hope that it will be useful,
13 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 : : * Lesser General Public License for more details.
16 : : *
17 : : * You should have received a copy of the GNU Lesser General
18 : : * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 : : *
20 : : * Author: David Zeuthen <davidz@redhat.com>
21 : : */
22 : :
23 : : #include "config.h"
24 : :
25 : : #include "gdbusobject.h"
26 : : #include "gdbusinterface.h"
27 : :
28 : : #include "glibintl.h"
29 : :
30 : : /**
31 : : * GDBusInterface:
32 : : *
33 : : * Base type for D-Bus interfaces.
34 : : *
35 : : * The `GDBusInterface` type is the base type for D-Bus interfaces both
36 : : * on the service side (see [class@Gio.DBusInterfaceSkeleton]) and client side
37 : : * (see [class@Gio.DBusProxy]).
38 : : *
39 : : * Since: 2.30
40 : : */
41 : :
42 : : typedef GDBusInterfaceIface GDBusInterfaceInterface;
43 : 559 : G_DEFINE_INTERFACE (GDBusInterface, g_dbus_interface, G_TYPE_OBJECT)
44 : :
45 : : static void
46 : 124 : g_dbus_interface_default_init (GDBusInterfaceIface *iface)
47 : : {
48 : 124 : }
49 : :
50 : : /* ---------------------------------------------------------------------------------------------------- */
51 : :
52 : : /**
53 : : * g_dbus_interface_get_info:
54 : : * @interface_: An exported D-Bus interface.
55 : : *
56 : : * Gets D-Bus introspection information for the D-Bus interface
57 : : * implemented by @interface_.
58 : : *
59 : : * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
60 : : *
61 : : * Since: 2.30
62 : : */
63 : : GDBusInterfaceInfo *
64 : 69 : g_dbus_interface_get_info (GDBusInterface *interface_)
65 : : {
66 : 69 : g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
67 : 69 : return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_info (interface_);
68 : : }
69 : :
70 : : /**
71 : : * g_dbus_interface_get_object: (skip)
72 : : * @interface_: An exported D-Bus interface
73 : : *
74 : : * Gets the #GDBusObject that @interface_ belongs to, if any.
75 : : *
76 : : * It is not safe to use the returned object if @interface_ or
77 : : * the returned object is being used from other threads. See
78 : : * g_dbus_interface_dup_object() for a thread-safe alternative.
79 : : *
80 : : * Returns: (nullable) (transfer none): A #GDBusObject or %NULL. The returned
81 : : * reference belongs to @interface_ and should not be freed.
82 : : *
83 : : * Since: 2.30
84 : : */
85 : : GDBusObject *
86 : 12 : g_dbus_interface_get_object (GDBusInterface *interface_)
87 : : {
88 : 12 : g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
89 : 12 : return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_);
90 : : }
91 : :
92 : : /**
93 : : * g_dbus_interface_dup_object: (rename-to g_dbus_interface_get_object)
94 : : * @interface_: An exported D-Bus interface.
95 : : *
96 : : * Gets the #GDBusObject that @interface_ belongs to, if any.
97 : : *
98 : : * Returns: (nullable) (transfer full): A #GDBusObject or %NULL. The returned
99 : : * reference should be freed with g_object_unref().
100 : : *
101 : : * Since: 2.32
102 : : */
103 : : GDBusObject *
104 : 3 : g_dbus_interface_dup_object (GDBusInterface *interface_)
105 : : {
106 : : GDBusObject *ret;
107 : 3 : g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
108 : 3 : if (G_LIKELY (G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object != NULL))
109 : : {
110 : 3 : ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object (interface_);
111 : : }
112 : : else
113 : : {
114 : 0 : g_warning ("No dup_object() vfunc on type %s - using get_object() in a way that is not thread-safe.",
115 : : g_type_name_from_instance ((GTypeInstance *) interface_));
116 : 0 : ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_);
117 : 0 : if (ret != NULL)
118 : 0 : g_object_ref (ret);
119 : : }
120 : 3 : return ret;
121 : : }
122 : :
123 : : /**
124 : : * g_dbus_interface_set_object:
125 : : * @interface_: An exported D-Bus interface.
126 : : * @object: (nullable): A #GDBusObject or %NULL.
127 : : *
128 : : * Sets the #GDBusObject for @interface_ to @object.
129 : : *
130 : : * Note that @interface_ will hold a weak reference to @object.
131 : : *
132 : : * Since: 2.30
133 : : */
134 : : void
135 : 77 : g_dbus_interface_set_object (GDBusInterface *interface_,
136 : : GDBusObject *object)
137 : : {
138 : 77 : g_return_if_fail (G_IS_DBUS_INTERFACE (interface_));
139 : 77 : g_return_if_fail (object == NULL || G_IS_DBUS_OBJECT (object));
140 : 77 : G_DBUS_INTERFACE_GET_IFACE (interface_)->set_object (interface_, object);
141 : : }
|