| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | /* GDBus - GLib D-Bus Library
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2008-2010 Red Hat, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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 | 
					
						
							| 
									
										
										
										
											2017-05-27 18:21:30 +02:00
										 |  |  |  * version 2.1 of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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 | 
					
						
							| 
									
										
										
										
											2014-01-23 12:58:29 +01:00
										 |  |  |  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
 | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Author: David Zeuthen <davidz@redhat.com> | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "config.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "gdbusobject.h"
 | 
					
						
							|  |  |  | #include "gdbusinterface.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "glibintl.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * SECTION:gdbusinterface | 
					
						
							|  |  |  |  * @short_description: Base type for D-Bus interfaces | 
					
						
							|  |  |  |  * @include: gio/gio.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The #GDBusInterface type is the base type for D-Bus interfaces both | 
					
						
							| 
									
										
										
										
											2011-04-13 16:33:51 -04:00
										 |  |  |  * on the service side (see #GDBusInterfaceSkeleton) and client side | 
					
						
							|  |  |  |  * (see #GDBusProxy). | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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: | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * @interface_: An exported D-Bus interface. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Gets D-Bus introspection information for the D-Bus interface | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * implemented by @interface_. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. | 
					
						
							| 
									
										
										
										
											2011-04-08 16:29:48 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Since: 2.30 | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | GDBusInterfaceInfo * | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  | g_dbus_interface_get_info (GDBusInterface *interface_) | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |   g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); | 
					
						
							|  |  |  |   return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_info (interface_); | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2012-01-26 14:16:28 -05:00
										 |  |  |  * g_dbus_interface_get_object: (skip) | 
					
						
							| 
									
										
										
										
											2014-01-31 17:38:27 -05:00
										 |  |  |  * @interface_: An exported D-Bus interface | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * Gets the #GDBusObject that @interface_ belongs to, if any. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2014-01-31 17:38:27 -05:00
										 |  |  |  * 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. | 
					
						
							| 
									
										
										
										
											2012-01-26 14:16:28 -05:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-10-18 11:15:54 +03:00
										 |  |  |  * Returns: (nullable) (transfer none): A #GDBusObject or %NULL. The returned | 
					
						
							| 
									
										
										
										
											2014-01-31 17:38:27 -05:00
										 |  |  |  *     reference belongs to @interface_ and should not be freed. | 
					
						
							| 
									
										
										
										
											2011-04-08 16:29:48 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Since: 2.30 | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | GDBusObject * | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  | g_dbus_interface_get_object (GDBusInterface *interface_) | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |   g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL); | 
					
						
							|  |  |  |   return G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_); | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-26 14:16:28 -05:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2015-03-12 16:53:18 -04:00
										 |  |  |  * g_dbus_interface_dup_object: (rename-to g_dbus_interface_get_object) | 
					
						
							| 
									
										
										
										
											2012-01-26 14:16:28 -05:00
										 |  |  |  * @interface_: An exported D-Bus interface. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Gets the #GDBusObject that @interface_ belongs to, if any. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-10-18 11:15:54 +03:00
										 |  |  |  * Returns: (nullable) (transfer full): A #GDBusObject or %NULL. The returned | 
					
						
							| 
									
										
										
										
											2012-01-26 14:16:28 -05:00
										 |  |  |  * 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; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * g_dbus_interface_set_object: | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * @interface_: An exported D-Bus interface. | 
					
						
							| 
									
										
										
										
											2016-10-28 18:29:02 -07:00
										 |  |  |  * @object: (nullable): A #GDBusObject or %NULL. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * Sets the #GDBusObject for @interface_ to @object. | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |  * Note that @interface_ will hold a weak reference to @object. | 
					
						
							| 
									
										
										
										
											2011-04-08 16:29:48 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Since: 2.30 | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | void | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  | g_dbus_interface_set_object (GDBusInterface    *interface_, | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |                              GDBusObject       *object) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |   g_return_if_fail (G_IS_DBUS_INTERFACE (interface_)); | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  |   g_return_if_fail (object == NULL || G_IS_DBUS_OBJECT (object)); | 
					
						
							| 
									
										
										
										
											2011-04-11 15:34:38 -04:00
										 |  |  |   G_DBUS_INTERFACE_GET_IFACE (interface_)->set_object (interface_, object); | 
					
						
							| 
									
										
										
										
											2011-04-08 15:14:47 -04:00
										 |  |  | } |