/* Copyright (C) 2012 The giomm Development Team
 *
 * 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/>.
 */

#include <glibmm/object.h>
#include <giomm/actiongroup.h>
#include <giomm/remoteactiongroup.h>

_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/object_p.h)

#ifndef DOXYGEN_SHOULD_SKIP_THIS
// GDBusActionGroup was declared a final type between GLib 2.89.1 and 2.89.2.
// Before that, GDBusActionGroupClass was not declared in GLib.
// The preprocessor macro G_DBUS_ACTION_GROUP_CLASS was defined, though.
#if !GLIB_CHECK_VERSION(2,89,1) || (!GLIB_CHECK_VERSION(2,89,2) && defined(G_DBUS_ACTION_GROUP_CLASS))
  // glib < 2.89.1 or (glib == 2.89.1 and G_DBUS_ACTION_GROUP_CLASS is a preprocessor macro)
  // GDBusActionGroup is not a final type,
  // GDBusActionGroupClass is not declared in GLib.
  using GDBusActionGroupClass = struct _GDBusActionGroupClass;
#endif
#endif /* DOXYGEN_SHOULD_SKIP_THIS */

namespace Gio
{

namespace DBus
{

class GIOMM_API Connection;

_GMMPROC_EXTRA_NAMESPACE(DBus)

/** ActionGroup - A D-Bus Gio::ActionGroup implementation.
 * ActionGroup is an implementation of the Gio::ActionGroup interface that can
 * be used as a proxy for an action group that is exported over D-Bus with
 * Gio::DBus::Connection::export_action_group().
 * @newin{2,32}
 */
class GIOMM_API ActionGroup
: public Glib::Object, public ::Gio::ActionGroup, public RemoteActionGroup
{
  _CLASS_GOBJECT(ActionGroup, GDBusActionGroup, G_DBUS_ACTION_GROUP, Glib::Object, GObject, , , GIOMM_API)
  _IMPLEMENTS_INTERFACE(::Gio::ActionGroup)
  _IMPLEMENTS_INTERFACE(RemoteActionGroup)
  _DO_NOT_DERIVE_GTYPE dnl// GDBusActionGroup is a final type since glib 2.89.2
  _ABI_AS_WITH_DERIVED_GTYPE dnl// Remove when we can break ABI
  _STRUCT_NOT_HIDDEN

protected:
  _CTOR_DEFAULT

public:
#m4 _CONVERSION(`GDBusActionGroup*',`Glib::RefPtr<ActionGroup>',`Glib::wrap($3)')
  _WRAP_METHOD(static Glib::RefPtr<ActionGroup> get(const Glib::RefPtr<Connection>& connection, const Glib::ustring& bus_name, const Glib::ustring& object_path), g_dbus_action_group_get)
};

} // namespace DBus

} // namespace Gio
