{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) A 'GI.Gio.Objects.Permission.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 'GI.Gio.Objects.Permission.Permission' might represent the ability for the user to write to a 'GI.Gio.Objects.Settings.Settings' object. This 'GI.Gio.Objects.Permission.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. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gio.Objects.Permission ( -- * Exported types Permission(..) , IsPermission , toPermission , noPermission , -- * Methods -- ** acquire #method:acquire# #if ENABLE_OVERLOADING PermissionAcquireMethodInfo , #endif permissionAcquire , -- ** acquireAsync #method:acquireAsync# #if ENABLE_OVERLOADING PermissionAcquireAsyncMethodInfo , #endif permissionAcquireAsync , -- ** acquireFinish #method:acquireFinish# #if ENABLE_OVERLOADING PermissionAcquireFinishMethodInfo , #endif permissionAcquireFinish , -- ** getAllowed #method:getAllowed# #if ENABLE_OVERLOADING PermissionGetAllowedMethodInfo , #endif permissionGetAllowed , -- ** getCanAcquire #method:getCanAcquire# #if ENABLE_OVERLOADING PermissionGetCanAcquireMethodInfo , #endif permissionGetCanAcquire , -- ** getCanRelease #method:getCanRelease# #if ENABLE_OVERLOADING PermissionGetCanReleaseMethodInfo , #endif permissionGetCanRelease , -- ** implUpdate #method:implUpdate# #if ENABLE_OVERLOADING PermissionImplUpdateMethodInfo , #endif permissionImplUpdate , -- ** release #method:release# #if ENABLE_OVERLOADING PermissionReleaseMethodInfo , #endif permissionRelease , -- ** releaseAsync #method:releaseAsync# #if ENABLE_OVERLOADING PermissionReleaseAsyncMethodInfo , #endif permissionReleaseAsync , -- ** releaseFinish #method:releaseFinish# #if ENABLE_OVERLOADING PermissionReleaseFinishMethodInfo , #endif permissionReleaseFinish , -- * Properties -- ** allowed #attr:allowed# {- | 'True' if the caller currently has permission to perform the action that /@permission@/ represents the permission to perform. -} #if ENABLE_OVERLOADING PermissionAllowedPropertyInfo , #endif getPermissionAllowed , #if ENABLE_OVERLOADING permissionAllowed , #endif -- ** canAcquire #attr:canAcquire# {- | 'True' if it is generally possible to acquire the permission by calling 'GI.Gio.Objects.Permission.permissionAcquire'. -} #if ENABLE_OVERLOADING PermissionCanAcquirePropertyInfo , #endif getPermissionCanAcquire , #if ENABLE_OVERLOADING permissionCanAcquire , #endif -- ** canRelease #attr:canRelease# {- | 'True' if it is generally possible to release the permission by calling 'GI.Gio.Objects.Permission.permissionRelease'. -} #if ENABLE_OVERLOADING PermissionCanReleasePropertyInfo , #endif getPermissionCanRelease , #if ENABLE_OVERLOADING permissionCanRelease , #endif ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import qualified GI.Gio.Callbacks as Gio.Callbacks import {-# SOURCE #-} qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult import {-# SOURCE #-} qualified GI.Gio.Objects.Cancellable as Gio.Cancellable -- | Memory-managed wrapper type. newtype Permission = Permission (ManagedPtr Permission) foreign import ccall "g_permission_get_type" c_g_permission_get_type :: IO GType instance GObject Permission where gobjectType = c_g_permission_get_type -- | Type class for types which can be safely cast to `Permission`, for instance with `toPermission`. class (GObject o, O.IsDescendantOf Permission o) => IsPermission o instance (GObject o, O.IsDescendantOf Permission o) => IsPermission o instance O.HasParentTypes Permission type instance O.ParentTypes Permission = '[GObject.Object.Object] -- | Cast to `Permission`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toPermission :: (MonadIO m, IsPermission o) => o -> m Permission toPermission = liftIO . unsafeCastTo Permission -- | A convenience alias for `Nothing` :: `Maybe` `Permission`. noPermission :: Maybe Permission noPermission = Nothing #if ENABLE_OVERLOADING type family ResolvePermissionMethod (t :: Symbol) (o :: *) :: * where ResolvePermissionMethod "acquire" o = PermissionAcquireMethodInfo ResolvePermissionMethod "acquireAsync" o = PermissionAcquireAsyncMethodInfo ResolvePermissionMethod "acquireFinish" o = PermissionAcquireFinishMethodInfo ResolvePermissionMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolvePermissionMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolvePermissionMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolvePermissionMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolvePermissionMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolvePermissionMethod "implUpdate" o = PermissionImplUpdateMethodInfo ResolvePermissionMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolvePermissionMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolvePermissionMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolvePermissionMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolvePermissionMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolvePermissionMethod "release" o = PermissionReleaseMethodInfo ResolvePermissionMethod "releaseAsync" o = PermissionReleaseAsyncMethodInfo ResolvePermissionMethod "releaseFinish" o = PermissionReleaseFinishMethodInfo ResolvePermissionMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolvePermissionMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolvePermissionMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolvePermissionMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolvePermissionMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolvePermissionMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolvePermissionMethod "getAllowed" o = PermissionGetAllowedMethodInfo ResolvePermissionMethod "getCanAcquire" o = PermissionGetCanAcquireMethodInfo ResolvePermissionMethod "getCanRelease" o = PermissionGetCanReleaseMethodInfo ResolvePermissionMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolvePermissionMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolvePermissionMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolvePermissionMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolvePermissionMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolvePermissionMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolvePermissionMethod t Permission, O.MethodInfo info Permission p) => OL.IsLabel t (Permission -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif -- VVV Prop "allowed" -- Type: TBasicType TBoolean -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@allowed@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' permission #allowed @ -} getPermissionAllowed :: (MonadIO m, IsPermission o) => o -> m Bool getPermissionAllowed obj = liftIO $ B.Properties.getObjectPropertyBool obj "allowed" #if ENABLE_OVERLOADING data PermissionAllowedPropertyInfo instance AttrInfo PermissionAllowedPropertyInfo where type AttrAllowedOps PermissionAllowedPropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint PermissionAllowedPropertyInfo = (~) () type AttrBaseTypeConstraint PermissionAllowedPropertyInfo = IsPermission type AttrGetType PermissionAllowedPropertyInfo = Bool type AttrLabel PermissionAllowedPropertyInfo = "allowed" type AttrOrigin PermissionAllowedPropertyInfo = Permission attrGet _ = getPermissionAllowed attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif -- VVV Prop "can-acquire" -- Type: TBasicType TBoolean -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@can-acquire@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' permission #canAcquire @ -} getPermissionCanAcquire :: (MonadIO m, IsPermission o) => o -> m Bool getPermissionCanAcquire obj = liftIO $ B.Properties.getObjectPropertyBool obj "can-acquire" #if ENABLE_OVERLOADING data PermissionCanAcquirePropertyInfo instance AttrInfo PermissionCanAcquirePropertyInfo where type AttrAllowedOps PermissionCanAcquirePropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint PermissionCanAcquirePropertyInfo = (~) () type AttrBaseTypeConstraint PermissionCanAcquirePropertyInfo = IsPermission type AttrGetType PermissionCanAcquirePropertyInfo = Bool type AttrLabel PermissionCanAcquirePropertyInfo = "can-acquire" type AttrOrigin PermissionCanAcquirePropertyInfo = Permission attrGet _ = getPermissionCanAcquire attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif -- VVV Prop "can-release" -- Type: TBasicType TBoolean -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@can-release@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' permission #canRelease @ -} getPermissionCanRelease :: (MonadIO m, IsPermission o) => o -> m Bool getPermissionCanRelease obj = liftIO $ B.Properties.getObjectPropertyBool obj "can-release" #if ENABLE_OVERLOADING data PermissionCanReleasePropertyInfo instance AttrInfo PermissionCanReleasePropertyInfo where type AttrAllowedOps PermissionCanReleasePropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint PermissionCanReleasePropertyInfo = (~) () type AttrBaseTypeConstraint PermissionCanReleasePropertyInfo = IsPermission type AttrGetType PermissionCanReleasePropertyInfo = Bool type AttrLabel PermissionCanReleasePropertyInfo = "can-release" type AttrOrigin PermissionCanReleasePropertyInfo = Permission attrGet _ = getPermissionCanRelease attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif #if ENABLE_OVERLOADING instance O.HasAttributeList Permission type instance O.AttributeList Permission = PermissionAttributeList type PermissionAttributeList = ('[ '("allowed", PermissionAllowedPropertyInfo), '("canAcquire", PermissionCanAcquirePropertyInfo), '("canRelease", PermissionCanReleasePropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING permissionAllowed :: AttrLabelProxy "allowed" permissionAllowed = AttrLabelProxy permissionCanAcquire :: AttrLabelProxy "canAcquire" permissionCanAcquire = AttrLabelProxy permissionCanRelease :: AttrLabelProxy "canRelease" permissionCanRelease = AttrLabelProxy #endif #if ENABLE_OVERLOADING type instance O.SignalList Permission = PermissionSignalList type PermissionSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif -- method Permission::acquire -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_permission_acquire" g_permission_acquire :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) Ptr (Ptr GError) -> -- error IO CInt {- | Attempts to acquire the permission represented by /@permission@/. The precise method by which this happens depends on the permission and the underlying authentication mechanism. A simple example is that a dialog may appear asking the user to enter their password. You should check with 'GI.Gio.Objects.Permission.permissionGetCanAcquire' before calling this function. If the permission is acquired then 'True' is returned. Otherwise, 'False' is returned and /@error@/ is set appropriately. This call is blocking, likely for a very long time (in the case that user interaction is required). See 'GI.Gio.Objects.Permission.permissionAcquireAsync' for the non-blocking version. /Since: 2.26/ -} permissionAcquire :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> Maybe (b) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} permissionAcquire permission cancellable = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' onException (do _ <- propagateGError $ g_permission_acquire permission' maybeCancellable touchManagedPtr permission whenJust cancellable touchManagedPtr return () ) (do return () ) #if ENABLE_OVERLOADING data PermissionAcquireMethodInfo instance (signature ~ (Maybe (b) -> m ()), MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => O.MethodInfo PermissionAcquireMethodInfo a signature where overloadedMethod _ = permissionAcquire #endif -- method Permission::acquire_async -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the #GAsyncReadyCallback to call when done", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 3, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_permission_acquire_async" g_permission_acquire_async :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}) Ptr () -> -- user_data : TBasicType TPtr IO () {- | Attempts to acquire the permission represented by /@permission@/. This is the first half of the asynchronous version of 'GI.Gio.Objects.Permission.permissionAcquire'. /Since: 2.26/ -} permissionAcquireAsync :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> Maybe (b) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> Maybe (Gio.Callbacks.AsyncReadyCallback) {- ^ /@callback@/: the 'GI.Gio.Callbacks.AsyncReadyCallback' to call when done -} -> m () permissionAcquireAsync permission cancellable callback = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' maybeCallback <- case callback of Nothing -> return (castPtrToFunPtr nullPtr) Just jCallback -> do ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback)) jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback)) poke ptrcallback jCallback' return jCallback' let userData = nullPtr g_permission_acquire_async permission' maybeCancellable maybeCallback userData touchManagedPtr permission whenJust cancellable touchManagedPtr return () #if ENABLE_OVERLOADING data PermissionAcquireAsyncMethodInfo instance (signature ~ (Maybe (b) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => O.MethodInfo PermissionAcquireAsyncMethodInfo a signature where overloadedMethod _ = permissionAcquireAsync #endif -- method Permission::acquire_finish -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GAsyncResult given to the #GAsyncReadyCallback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_permission_acquire_finish" g_permission_acquire_finish :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.AsyncResult.AsyncResult -> -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"}) Ptr (Ptr GError) -> -- error IO CInt {- | Collects the result of attempting to acquire the permission represented by /@permission@/. This is the second half of the asynchronous version of 'GI.Gio.Objects.Permission.permissionAcquire'. /Since: 2.26/ -} permissionAcquireFinish :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.AsyncResult.IsAsyncResult b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> b {- ^ /@result@/: the 'GI.Gio.Interfaces.AsyncResult.AsyncResult' given to the 'GI.Gio.Callbacks.AsyncReadyCallback' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} permissionAcquireFinish permission result_ = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission result_' <- unsafeManagedPtrCastPtr result_ onException (do _ <- propagateGError $ g_permission_acquire_finish permission' result_' touchManagedPtr permission touchManagedPtr result_ return () ) (do return () ) #if ENABLE_OVERLOADING data PermissionAcquireFinishMethodInfo instance (signature ~ (b -> m ()), MonadIO m, IsPermission a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo PermissionAcquireFinishMethodInfo a signature where overloadedMethod _ = permissionAcquireFinish #endif -- method Permission::get_allowed -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "g_permission_get_allowed" g_permission_get_allowed :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) IO CInt {- | Gets the value of the \'allowed\' property. This property is 'True' if the caller currently has permission to perform the action that /@permission@/ represents the permission to perform. /Since: 2.26/ -} permissionGetAllowed :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> m Bool {- ^ __Returns:__ the value of the \'allowed\' property -} permissionGetAllowed permission = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission result <- g_permission_get_allowed permission' let result' = (/= 0) result touchManagedPtr permission return result' #if ENABLE_OVERLOADING data PermissionGetAllowedMethodInfo instance (signature ~ (m Bool), MonadIO m, IsPermission a) => O.MethodInfo PermissionGetAllowedMethodInfo a signature where overloadedMethod _ = permissionGetAllowed #endif -- method Permission::get_can_acquire -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "g_permission_get_can_acquire" g_permission_get_can_acquire :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) IO CInt {- | Gets the value of the \'can-acquire\' property. This property is 'True' if it is generally possible to acquire the permission by calling 'GI.Gio.Objects.Permission.permissionAcquire'. /Since: 2.26/ -} permissionGetCanAcquire :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> m Bool {- ^ __Returns:__ the value of the \'can-acquire\' property -} permissionGetCanAcquire permission = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission result <- g_permission_get_can_acquire permission' let result' = (/= 0) result touchManagedPtr permission return result' #if ENABLE_OVERLOADING data PermissionGetCanAcquireMethodInfo instance (signature ~ (m Bool), MonadIO m, IsPermission a) => O.MethodInfo PermissionGetCanAcquireMethodInfo a signature where overloadedMethod _ = permissionGetCanAcquire #endif -- method Permission::get_can_release -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "g_permission_get_can_release" g_permission_get_can_release :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) IO CInt {- | Gets the value of the \'can-release\' property. This property is 'True' if it is generally possible to release the permission by calling 'GI.Gio.Objects.Permission.permissionRelease'. /Since: 2.26/ -} permissionGetCanRelease :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> m Bool {- ^ __Returns:__ the value of the \'can-release\' property -} permissionGetCanRelease permission = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission result <- g_permission_get_can_release permission' let result' = (/= 0) result touchManagedPtr permission return result' #if ENABLE_OVERLOADING data PermissionGetCanReleaseMethodInfo instance (signature ~ (m Bool), MonadIO m, IsPermission a) => O.MethodInfo PermissionGetCanReleaseMethodInfo a signature where overloadedMethod _ = permissionGetCanRelease #endif -- method Permission::impl_update -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allowed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new value for the 'allowed' property", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "can_acquire", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new value for the 'can-acquire' property", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "can_release", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new value for the 'can-release' property", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_permission_impl_update" g_permission_impl_update :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) CInt -> -- allowed : TBasicType TBoolean CInt -> -- can_acquire : TBasicType TBoolean CInt -> -- can_release : TBasicType TBoolean IO () {- | This function is called by the 'GI.Gio.Objects.Permission.Permission' implementation to update the properties of the permission. You should never call this function except from a 'GI.Gio.Objects.Permission.Permission' implementation. GObject notify signals are generated, as appropriate. /Since: 2.26/ -} permissionImplUpdate :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> Bool {- ^ /@allowed@/: the new value for the \'allowed\' property -} -> Bool {- ^ /@canAcquire@/: the new value for the \'can-acquire\' property -} -> Bool {- ^ /@canRelease@/: the new value for the \'can-release\' property -} -> m () permissionImplUpdate permission allowed canAcquire canRelease = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission let allowed' = (fromIntegral . fromEnum) allowed let canAcquire' = (fromIntegral . fromEnum) canAcquire let canRelease' = (fromIntegral . fromEnum) canRelease g_permission_impl_update permission' allowed' canAcquire' canRelease' touchManagedPtr permission return () #if ENABLE_OVERLOADING data PermissionImplUpdateMethodInfo instance (signature ~ (Bool -> Bool -> Bool -> m ()), MonadIO m, IsPermission a) => O.MethodInfo PermissionImplUpdateMethodInfo a signature where overloadedMethod _ = permissionImplUpdate #endif -- method Permission::release -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_permission_release" g_permission_release :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) Ptr (Ptr GError) -> -- error IO CInt {- | Attempts to release the permission represented by /@permission@/. The precise method by which this happens depends on the permission and the underlying authentication mechanism. In most cases the permission will be dropped immediately without further action. You should check with 'GI.Gio.Objects.Permission.permissionGetCanRelease' before calling this function. If the permission is released then 'True' is returned. Otherwise, 'False' is returned and /@error@/ is set appropriately. This call is blocking, likely for a very long time (in the case that user interaction is required). See 'GI.Gio.Objects.Permission.permissionReleaseAsync' for the non-blocking version. /Since: 2.26/ -} permissionRelease :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> Maybe (b) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} permissionRelease permission cancellable = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' onException (do _ <- propagateGError $ g_permission_release permission' maybeCancellable touchManagedPtr permission whenJust cancellable touchManagedPtr return () ) (do return () ) #if ENABLE_OVERLOADING data PermissionReleaseMethodInfo instance (signature ~ (Maybe (b) -> m ()), MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => O.MethodInfo PermissionReleaseMethodInfo a signature where overloadedMethod _ = permissionRelease #endif -- method Permission::release_async -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the #GAsyncReadyCallback to call when done", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 3, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the user data to pass to @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_permission_release_async" g_permission_release_async :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}) Ptr () -> -- user_data : TBasicType TPtr IO () {- | Attempts to release the permission represented by /@permission@/. This is the first half of the asynchronous version of 'GI.Gio.Objects.Permission.permissionRelease'. /Since: 2.26/ -} permissionReleaseAsync :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> Maybe (b) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> Maybe (Gio.Callbacks.AsyncReadyCallback) {- ^ /@callback@/: the 'GI.Gio.Callbacks.AsyncReadyCallback' to call when done -} -> m () permissionReleaseAsync permission cancellable callback = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' maybeCallback <- case callback of Nothing -> return (castPtrToFunPtr nullPtr) Just jCallback -> do ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback)) jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback)) poke ptrcallback jCallback' return jCallback' let userData = nullPtr g_permission_release_async permission' maybeCancellable maybeCallback userData touchManagedPtr permission whenJust cancellable touchManagedPtr return () #if ENABLE_OVERLOADING data PermissionReleaseAsyncMethodInfo instance (signature ~ (Maybe (b) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsPermission a, Gio.Cancellable.IsCancellable b) => O.MethodInfo PermissionReleaseAsyncMethodInfo a signature where overloadedMethod _ = permissionReleaseAsync #endif -- method Permission::release_finish -- method type : OrdinaryMethod -- Args : [Arg {argCName = "permission", argType = TInterface (Name {namespace = "Gio", name = "Permission"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GPermission instance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GAsyncResult given to the #GAsyncReadyCallback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_permission_release_finish" g_permission_release_finish :: Ptr Permission -> -- permission : TInterface (Name {namespace = "Gio", name = "Permission"}) Ptr Gio.AsyncResult.AsyncResult -> -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"}) Ptr (Ptr GError) -> -- error IO CInt {- | Collects the result of attempting to release the permission represented by /@permission@/. This is the second half of the asynchronous version of 'GI.Gio.Objects.Permission.permissionRelease'. /Since: 2.26/ -} permissionReleaseFinish :: (B.CallStack.HasCallStack, MonadIO m, IsPermission a, Gio.AsyncResult.IsAsyncResult b) => a {- ^ /@permission@/: a 'GI.Gio.Objects.Permission.Permission' instance -} -> b {- ^ /@result@/: the 'GI.Gio.Interfaces.AsyncResult.AsyncResult' given to the 'GI.Gio.Callbacks.AsyncReadyCallback' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} permissionReleaseFinish permission result_ = liftIO $ do permission' <- unsafeManagedPtrCastPtr permission result_' <- unsafeManagedPtrCastPtr result_ onException (do _ <- propagateGError $ g_permission_release_finish permission' result_' touchManagedPtr permission touchManagedPtr result_ return () ) (do return () ) #if ENABLE_OVERLOADING data PermissionReleaseFinishMethodInfo instance (signature ~ (b -> m ()), MonadIO m, IsPermission a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo PermissionReleaseFinishMethodInfo a signature where overloadedMethod _ = permissionReleaseFinish #endif