Add "Since: 2.30" for new D-Bus routines
[platform/upstream/glib.git] / gio / gdbusobjectmanager.c
1 /* GDBus - GLib D-Bus Library
2  *
3  * Copyright (C) 2008-2010 Red Hat, Inc.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General
16  * Public License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18  * Boston, MA 02111-1307, USA.
19  *
20  * Author: David Zeuthen <davidz@redhat.com>
21  */
22
23 #include "config.h"
24
25 #include "gdbusobject.h"
26 #include "gdbusobjectmanager.h"
27 #include "gio-marshal.h"
28 #include "gdbusinterface.h"
29 #include "gdbusutils.h"
30
31 #include "glibintl.h"
32
33 /**
34  * SECTION:gdbusobjectmanager
35  * @short_description: Base type for D-Bus object managers
36  * @include: gio/gio.h
37  *
38  * The #GDBusObjectManager type is the base type for service- and
39  * client-side implementations of the standardized <ulink
40  * url="http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces-objectmanager">org.freedesktop.DBus.ObjectManager</ulink>
41  * interface.
42  *
43  * See #GDBusObjectManagerClient for the client-side implementation
44  * and #GDBusObjectManagerServer for the service-side implementation.
45  */
46
47 typedef GDBusObjectManagerIface GDBusObjectManagerInterface;
48 G_DEFINE_INTERFACE (GDBusObjectManager, g_dbus_object_manager, G_TYPE_OBJECT)
49
50 static void
51 g_dbus_object_manager_default_init (GDBusObjectManagerIface *iface)
52 {
53   /**
54    * GDBusObjectManager::object-added:
55    * @manager: The #GDBusObjectManager emitting the signal.
56    * @object: The #GDBusObject that was added.
57    *
58    * Emitted when @object is added to @manager.
59    *
60    * Since: 2.30
61    */
62   g_signal_new ("object-added",
63                 G_TYPE_FROM_INTERFACE (iface),
64                 G_SIGNAL_RUN_LAST,
65                 G_STRUCT_OFFSET (GDBusObjectManagerIface, object_added),
66                 NULL,
67                 NULL,
68                 g_cclosure_marshal_VOID__OBJECT,
69                 G_TYPE_NONE,
70                 1,
71                 G_TYPE_DBUS_OBJECT);
72
73   /**
74    * GDBusObjectManager::object-removed:
75    * @manager: The #GDBusObjectManager emitting the signal.
76    * @object: The #GDBusObject that was removed.
77    *
78    * Emitted when @object is removed from @manager.
79    *
80    * Since: 2.30
81    */
82   g_signal_new ("object-removed",
83                 G_TYPE_FROM_INTERFACE (iface),
84                 G_SIGNAL_RUN_LAST,
85                 G_STRUCT_OFFSET (GDBusObjectManagerIface, object_removed),
86                 NULL,
87                 NULL,
88                 g_cclosure_marshal_VOID__OBJECT,
89                 G_TYPE_NONE,
90                 1,
91                 G_TYPE_DBUS_OBJECT);
92
93   /**
94    * GDBusObjectManager::interface-added:
95    * @manager: The #GDBusObjectManager emitting the signal.
96    * @object: The #GDBusObject on which an interface was added.
97    * @interface: The #GDBusInterface that was added.
98    *
99    * Emitted when @interface is added to @object.
100    *
101    * This signal exists purely as a convenience to avoid having to
102    * connect signals to all objects managed by @manager.
103    *
104    * Since: 2.30
105    */
106   g_signal_new ("interface-added",
107                 G_TYPE_FROM_INTERFACE (iface),
108                 G_SIGNAL_RUN_LAST,
109                 G_STRUCT_OFFSET (GDBusObjectManagerIface, interface_added),
110                 NULL,
111                 NULL,
112                 _gio_marshal_VOID__OBJECT_OBJECT,
113                 G_TYPE_NONE,
114                 2,
115                 G_TYPE_DBUS_OBJECT,
116                 G_TYPE_DBUS_INTERFACE);
117
118   /**
119    * GDBusObjectManager::interface-removed:
120    * @manager: The #GDBusObjectManager emitting the signal.
121    * @object: The #GDBusObject on which an interface was removed.
122    * @interface: The #GDBusInterface that was removed.
123    *
124    * Emitted when @interface has been removed from @object.
125    *
126    * This signal exists purely as a convenience to avoid having to
127    * connect signals to all objects managed by @manager.
128    *
129    * Since: 2.30
130    */
131   g_signal_new ("interface-removed",
132                 G_TYPE_FROM_INTERFACE (iface),
133                 G_SIGNAL_RUN_LAST,
134                 G_STRUCT_OFFSET (GDBusObjectManagerIface, interface_removed),
135                 NULL,
136                 NULL,
137                 _gio_marshal_VOID__OBJECT_OBJECT,
138                 G_TYPE_NONE,
139                 2,
140                 G_TYPE_DBUS_OBJECT,
141                 G_TYPE_DBUS_INTERFACE);
142
143 }
144
145 /* ---------------------------------------------------------------------------------------------------- */
146
147 /**
148  * g_dbus_object_manager_get_object_path:
149  * @manager: A #GDBusObjectManager.
150  *
151  * Gets the object path that @manager is for.
152  *
153  * Returns: A string owned by @manager. Do not free.
154  *
155  * Since: 2.30
156  */
157 const gchar *
158 g_dbus_object_manager_get_object_path (GDBusObjectManager *manager)
159 {
160   GDBusObjectManagerIface *iface = G_DBUS_OBJECT_MANAGER_GET_IFACE (manager);
161   return iface->get_object_path (manager);
162 }
163
164 /**
165  * g_dbus_object_manager_get_objects:
166  * @manager: A #GDBusObjectManager.
167  *
168  * Gets all #GDBusObject objects known to @manager.
169  *
170  * Returns: (transfer full) (element-type GDBusObject): A list of
171  *   #GDBusObject objects. The returned list should be freed with
172  *   g_list_free() after each element has been freed with
173  *   g_object_unref().
174  *
175  * Since: 2.30
176  */
177 GList *
178 g_dbus_object_manager_get_objects (GDBusObjectManager *manager)
179 {
180   GDBusObjectManagerIface *iface = G_DBUS_OBJECT_MANAGER_GET_IFACE (manager);
181   return iface->get_objects (manager);
182 }
183
184 /**
185  * g_dbus_object_manager_get_object:
186  * @manager: A #GDBusObjectManager.
187  * @object_path: Object path to lookup.
188  *
189  * Gets the #GDBusObjectProxy at @object_path, if any.
190  *
191  * Returns: A #GDBusObject or %NULL. Free with g_object_unref().
192  *
193  * Since: 2.30
194  */
195 GDBusObject *
196 g_dbus_object_manager_get_object (GDBusObjectManager *manager,
197                                   const gchar        *object_path)
198 {
199   GDBusObjectManagerIface *iface = G_DBUS_OBJECT_MANAGER_GET_IFACE (manager);
200   g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
201   return iface->get_object (manager, object_path);
202 }
203
204 /**
205  * g_dbus_object_manager_get_interface:
206  * @manager: A #GDBusObjectManager.
207  * @object_path: Object path to lookup.
208  * @interface_name: D-Bus interface name to lookup.
209  *
210  * Gets the interface proxy for @interface_name at @object_path, if
211  * any.
212  *
213  * Returns: A #GDBusInterface instance or %NULL. Free with g_object_unref().
214  *
215  * Since: 2.30
216  */
217 GDBusInterface *
218 g_dbus_object_manager_get_interface (GDBusObjectManager *manager,
219                                      const gchar        *object_path,
220                                      const gchar        *interface_name)
221 {
222   GDBusObjectManagerIface *iface = G_DBUS_OBJECT_MANAGER_GET_IFACE (manager);
223   g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
224   g_return_val_if_fail (g_dbus_is_interface_name (interface_name), NULL);
225   return iface->get_interface (manager, object_path, interface_name);
226 }