(root)/
glib-2.79.0/
gio/
gdbusinterface.c
       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  G_DEFINE_INTERFACE (GDBusInterface, g_dbus_interface, G_TYPE_OBJECT)
      44  
      45  static void
      46  g_dbus_interface_default_init (GDBusInterfaceIface *iface)
      47  {
      48  }
      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  g_dbus_interface_get_info (GDBusInterface *interface_)
      65  {
      66    g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
      67    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  g_dbus_interface_get_object (GDBusInterface *interface_)
      87  {
      88    g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
      89    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  g_dbus_interface_dup_object (GDBusInterface *interface_)
     105  {
     106    GDBusObject *ret;
     107    g_return_val_if_fail (G_IS_DBUS_INTERFACE (interface_), NULL);
     108    if (G_LIKELY (G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object != NULL))
     109      {
     110        ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->dup_object (interface_);
     111      }
     112    else
     113      {
     114        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        ret = G_DBUS_INTERFACE_GET_IFACE (interface_)->get_object (interface_);
     117        if (ret != NULL)
     118          g_object_ref (ret);
     119      }
     120    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  g_dbus_interface_set_object (GDBusInterface    *interface_,
     136                               GDBusObject       *object)
     137  {
     138    g_return_if_fail (G_IS_DBUS_INTERFACE (interface_));
     139    g_return_if_fail (object == NULL || G_IS_DBUS_OBJECT (object));
     140    G_DBUS_INTERFACE_GET_IFACE (interface_)->set_object (interface_, object);
     141  }