/* Copyright (C) 2014 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 .
*/
#include
#include
#include
_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/object_p.h)
_PINCLUDE(gio/gio.h)
namespace Gio
{
/** An object representing the permission to perform a certain action.
*
* A Permission represents the status of the caller's permission to
* perform a certain action.
*
* You can query if the action is currently allowed and if it is
* possible to acquire the permission so that the action will be allowed
* in the future.
*
* There is also an API to actually acquire the permission and one to
* release it.
*
* As an example, a Permission might represent the ability for the
* user to write to a Settings object. This Permission object could
* then be used to decide if it is appropriate to show a "Click here to
* unlock" button in a dialog and to provide the mechanism to invoke
* when that button is clicked.
*
* @newin{2,42}
*/
class Permission : public Glib::Object
{
_CLASS_GOBJECT(Permission, GPermission, G_PERMISSION, Glib::Object, GObject)
public:
_WRAP_METHOD(bool acquire(const Glib::RefPtr& cancellable{?}), g_permission_acquire, errthrow)
_WRAP_METHOD(void acquire_async(const SlotAsyncReady& slot{callback}, const Glib::RefPtr& cancellable{.?}), g_permission_acquire_async, slot_name slot, slot_callback SignalProxy_async_callback)
_WRAP_METHOD(bool acquire_finish(const Glib::RefPtr& result), g_permission_acquire_finish, errthrow)
_WRAP_METHOD(bool release(const Glib::RefPtr& cancellable{?}), g_permission_release, errthrow)
_WRAP_METHOD(void release_async(const SlotAsyncReady& slot{callback}, const Glib::RefPtr& cancellable{.?}), g_permission_release_async, slot_name slot, slot_callback SignalProxy_async_callback)
_WRAP_METHOD(bool release_finish(const Glib::RefPtr& result), g_permission_release_finish, errthrow)
_WRAP_METHOD(bool get_allowed() const, g_permission_get_allowed)
_WRAP_METHOD(bool get_can_acquire() const, g_permission_get_can_acquire)
_WRAP_METHOD(bool get_can_release() const, g_permission_get_can_release)
_WRAP_PROPERTY("allowed", bool)
_WRAP_PROPERTY("can-acquire", bool)
_WRAP_PROPERTY("can-release", bool)
protected:
_CTOR_DEFAULT
// A copy is needed for vfuncs, i.e. Glib::wrap($3, true)
#m4 _CONVERSION(`GAsyncResult*',`const Glib::RefPtr&',`Glib::wrap($3, true)')
#m4 _CONVERSION(`GCancellable*',`const Glib::RefPtr&',`Glib::wrap($3, true)')
_WRAP_VFUNC(bool acquire(const Glib::RefPtr& cancellable), acquire, errthrow)
_WRAP_VFUNC(void acquire_async(const SlotAsyncReady& slot{callback}, const Glib::RefPtr& cancellable{.}), acquire_async, slot_name slot, slot_callback SignalProxy_async_callback)
_WRAP_VFUNC(bool acquire_finish(const Glib::RefPtr& result), acquire_finish, errthrow)
_WRAP_VFUNC(bool release(const Glib::RefPtr& cancellable), release, errthrow)
_WRAP_VFUNC(void release_async(const SlotAsyncReady& slot{callback}, const Glib::RefPtr& cancellable{.}), release_async, slot_name slot, slot_callback SignalProxy_async_callback)
_WRAP_VFUNC(bool release_finish(const Glib::RefPtr& result), release_finish, errthrow)
// You should never call this function except from a Gio::Permission implementation.
_WRAP_METHOD(void impl_update(bool allowed, bool can_acquire, bool can_release), g_permission_impl_update)
};
} // namespace Gio