gi-gio-2.0.20: GI/Gio/Interfaces/RemoteActionGroup.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
The GRemoteActionGroup interface is implemented by 'GI.Gio.Interfaces.ActionGroup.ActionGroup'
instances that either transmit action invocations to other processes
or receive action invocations in the local process from other
processes.
The interface has @_full@ variants of the two
methods on 'GI.Gio.Interfaces.ActionGroup.ActionGroup' used to activate actions:
'GI.Gio.Interfaces.ActionGroup.actionGroupActivateAction' and
'GI.Gio.Interfaces.ActionGroup.actionGroupChangeActionState'. These variants allow a
\"platform data\" 'GVariant' to be specified: a dictionary providing
context for the action invocation (for example: timestamps, startup
notification IDs, etc).
'GI.Gio.Objects.DBusActionGroup.DBusActionGroup' implements 'GI.Gio.Interfaces.RemoteActionGroup.RemoteActionGroup'. This provides a
mechanism to send platform data for action invocations over D-Bus.
Additionally, 'GI.Gio.Objects.DBusConnection.dBusConnectionExportActionGroup' will check if
the exported 'GI.Gio.Interfaces.ActionGroup.ActionGroup' implements 'GI.Gio.Interfaces.RemoteActionGroup.RemoteActionGroup' and use the
@_full@ variants of the calls if available. This
provides a mechanism by which to receive platform data for action
invocations that arrive by way of D-Bus.
/Since: 2.32/
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Gio.Interfaces.RemoteActionGroup
(
-- * Exported types
RemoteActionGroup(..) ,
noRemoteActionGroup ,
IsRemoteActionGroup ,
toRemoteActionGroup ,
-- * Methods
-- ** activateActionFull #method:activateActionFull#
#if ENABLE_OVERLOADING
RemoteActionGroupActivateActionFullMethodInfo,
#endif
remoteActionGroupActivateActionFull ,
-- ** changeActionStateFull #method:changeActionStateFull#
#if ENABLE_OVERLOADING
RemoteActionGroupChangeActionStateFullMethodInfo,
#endif
remoteActionGroupChangeActionStateFull ,
) 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 {-# SOURCE #-} qualified GI.Gio.Interfaces.ActionGroup as Gio.ActionGroup
-- interface RemoteActionGroup
-- | Memory-managed wrapper type.
newtype RemoteActionGroup = RemoteActionGroup (ManagedPtr RemoteActionGroup)
-- | A convenience alias for `Nothing` :: `Maybe` `RemoteActionGroup`.
noRemoteActionGroup :: Maybe RemoteActionGroup
noRemoteActionGroup = Nothing
#if ENABLE_OVERLOADING
type instance O.SignalList RemoteActionGroup = RemoteActionGroupSignalList
type RemoteActionGroupSignalList = ('[ '("actionAdded", Gio.ActionGroup.ActionGroupActionAddedSignalInfo), '("actionEnabledChanged", Gio.ActionGroup.ActionGroupActionEnabledChangedSignalInfo), '("actionRemoved", Gio.ActionGroup.ActionGroupActionRemovedSignalInfo), '("actionStateChanged", Gio.ActionGroup.ActionGroupActionStateChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
foreign import ccall "g_remote_action_group_get_type"
c_g_remote_action_group_get_type :: IO GType
instance GObject RemoteActionGroup where
gobjectType = c_g_remote_action_group_get_type
-- | Type class for types which can be safely cast to `RemoteActionGroup`, for instance with `toRemoteActionGroup`.
class (GObject o, O.IsDescendantOf RemoteActionGroup o) => IsRemoteActionGroup o
instance (GObject o, O.IsDescendantOf RemoteActionGroup o) => IsRemoteActionGroup o
instance O.HasParentTypes RemoteActionGroup
type instance O.ParentTypes RemoteActionGroup = '[Gio.ActionGroup.ActionGroup, GObject.Object.Object]
-- | Cast to `RemoteActionGroup`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toRemoteActionGroup :: (MonadIO m, IsRemoteActionGroup o) => o -> m RemoteActionGroup
toRemoteActionGroup = liftIO . unsafeCastTo RemoteActionGroup
#if ENABLE_OVERLOADING
instance O.HasAttributeList RemoteActionGroup
type instance O.AttributeList RemoteActionGroup = RemoteActionGroupAttributeList
type RemoteActionGroupAttributeList = ('[ ] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
type family ResolveRemoteActionGroupMethod (t :: Symbol) (o :: *) :: * where
ResolveRemoteActionGroupMethod "actionAdded" o = Gio.ActionGroup.ActionGroupActionAddedMethodInfo
ResolveRemoteActionGroupMethod "actionEnabledChanged" o = Gio.ActionGroup.ActionGroupActionEnabledChangedMethodInfo
ResolveRemoteActionGroupMethod "actionRemoved" o = Gio.ActionGroup.ActionGroupActionRemovedMethodInfo
ResolveRemoteActionGroupMethod "actionStateChanged" o = Gio.ActionGroup.ActionGroupActionStateChangedMethodInfo
ResolveRemoteActionGroupMethod "activateAction" o = Gio.ActionGroup.ActionGroupActivateActionMethodInfo
ResolveRemoteActionGroupMethod "activateActionFull" o = RemoteActionGroupActivateActionFullMethodInfo
ResolveRemoteActionGroupMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveRemoteActionGroupMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveRemoteActionGroupMethod "changeActionState" o = Gio.ActionGroup.ActionGroupChangeActionStateMethodInfo
ResolveRemoteActionGroupMethod "changeActionStateFull" o = RemoteActionGroupChangeActionStateFullMethodInfo
ResolveRemoteActionGroupMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveRemoteActionGroupMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveRemoteActionGroupMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveRemoteActionGroupMethod "hasAction" o = Gio.ActionGroup.ActionGroupHasActionMethodInfo
ResolveRemoteActionGroupMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveRemoteActionGroupMethod "listActions" o = Gio.ActionGroup.ActionGroupListActionsMethodInfo
ResolveRemoteActionGroupMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveRemoteActionGroupMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveRemoteActionGroupMethod "queryAction" o = Gio.ActionGroup.ActionGroupQueryActionMethodInfo
ResolveRemoteActionGroupMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveRemoteActionGroupMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveRemoteActionGroupMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveRemoteActionGroupMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveRemoteActionGroupMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveRemoteActionGroupMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveRemoteActionGroupMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveRemoteActionGroupMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveRemoteActionGroupMethod "getActionEnabled" o = Gio.ActionGroup.ActionGroupGetActionEnabledMethodInfo
ResolveRemoteActionGroupMethod "getActionParameterType" o = Gio.ActionGroup.ActionGroupGetActionParameterTypeMethodInfo
ResolveRemoteActionGroupMethod "getActionState" o = Gio.ActionGroup.ActionGroupGetActionStateMethodInfo
ResolveRemoteActionGroupMethod "getActionStateHint" o = Gio.ActionGroup.ActionGroupGetActionStateHintMethodInfo
ResolveRemoteActionGroupMethod "getActionStateType" o = Gio.ActionGroup.ActionGroupGetActionStateTypeMethodInfo
ResolveRemoteActionGroupMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveRemoteActionGroupMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveRemoteActionGroupMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveRemoteActionGroupMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveRemoteActionGroupMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveRemoteActionGroupMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveRemoteActionGroupMethod t RemoteActionGroup, O.MethodInfo info RemoteActionGroup p) => OL.IsLabel t (RemoteActionGroup -> 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
-- method RemoteActionGroup::activate_action_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "remote", argType = TInterface (Name {namespace = "Gio", name = "RemoteActionGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GDBusActionGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the action to activate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parameter", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the optional parameter to the activation", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "platform_data", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the platform data to send", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_remote_action_group_activate_action_full" g_remote_action_group_activate_action_full ::
Ptr RemoteActionGroup -> -- remote : TInterface (Name {namespace = "Gio", name = "RemoteActionGroup"})
CString -> -- action_name : TBasicType TUTF8
Ptr GVariant -> -- parameter : TVariant
Ptr GVariant -> -- platform_data : TVariant
IO ()
{- |
Activates the remote action.
This is the same as 'GI.Gio.Interfaces.ActionGroup.actionGroupActivateAction' except that it
allows for provision of \"platform data\" to be sent along with the
activation request. This typically contains details such as the user
interaction timestamp or startup notification information.
/@platformData@/ must be non-'Nothing' and must have the type
@/G_VARIANT_TYPE_VARDICT/@. If it is floating, it will be consumed.
/Since: 2.32/
-}
remoteActionGroupActivateActionFull ::
(B.CallStack.HasCallStack, MonadIO m, IsRemoteActionGroup a) =>
a
{- ^ /@remote@/: a 'GI.Gio.Objects.DBusActionGroup.DBusActionGroup' -}
-> T.Text
{- ^ /@actionName@/: the name of the action to activate -}
-> Maybe (GVariant)
{- ^ /@parameter@/: the optional parameter to the activation -}
-> GVariant
{- ^ /@platformData@/: the platform data to send -}
-> m ()
remoteActionGroupActivateActionFull remote actionName parameter platformData = liftIO $ do
remote' <- unsafeManagedPtrCastPtr remote
actionName' <- textToCString actionName
maybeParameter <- case parameter of
Nothing -> return nullPtr
Just jParameter -> do
jParameter' <- unsafeManagedPtrGetPtr jParameter
return jParameter'
platformData' <- unsafeManagedPtrGetPtr platformData
g_remote_action_group_activate_action_full remote' actionName' maybeParameter platformData'
touchManagedPtr remote
whenJust parameter touchManagedPtr
touchManagedPtr platformData
freeMem actionName'
return ()
#if ENABLE_OVERLOADING
data RemoteActionGroupActivateActionFullMethodInfo
instance (signature ~ (T.Text -> Maybe (GVariant) -> GVariant -> m ()), MonadIO m, IsRemoteActionGroup a) => O.MethodInfo RemoteActionGroupActivateActionFullMethodInfo a signature where
overloadedMethod _ = remoteActionGroupActivateActionFull
#endif
-- method RemoteActionGroup::change_action_state_full
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "remote", argType = TInterface (Name {namespace = "Gio", name = "RemoteActionGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GRemoteActionGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the action to change the state of", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new requested value for the state", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "platform_data", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the platform data to send", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_remote_action_group_change_action_state_full" g_remote_action_group_change_action_state_full ::
Ptr RemoteActionGroup -> -- remote : TInterface (Name {namespace = "Gio", name = "RemoteActionGroup"})
CString -> -- action_name : TBasicType TUTF8
Ptr GVariant -> -- value : TVariant
Ptr GVariant -> -- platform_data : TVariant
IO ()
{- |
Changes the state of a remote action.
This is the same as 'GI.Gio.Interfaces.ActionGroup.actionGroupChangeActionState' except that
it allows for provision of \"platform data\" to be sent along with the
state change request. This typically contains details such as the
user interaction timestamp or startup notification information.
/@platformData@/ must be non-'Nothing' and must have the type
@/G_VARIANT_TYPE_VARDICT/@. If it is floating, it will be consumed.
/Since: 2.32/
-}
remoteActionGroupChangeActionStateFull ::
(B.CallStack.HasCallStack, MonadIO m, IsRemoteActionGroup a) =>
a
{- ^ /@remote@/: a 'GI.Gio.Interfaces.RemoteActionGroup.RemoteActionGroup' -}
-> T.Text
{- ^ /@actionName@/: the name of the action to change the state of -}
-> GVariant
{- ^ /@value@/: the new requested value for the state -}
-> GVariant
{- ^ /@platformData@/: the platform data to send -}
-> m ()
remoteActionGroupChangeActionStateFull remote actionName value platformData = liftIO $ do
remote' <- unsafeManagedPtrCastPtr remote
actionName' <- textToCString actionName
value' <- unsafeManagedPtrGetPtr value
platformData' <- unsafeManagedPtrGetPtr platformData
g_remote_action_group_change_action_state_full remote' actionName' value' platformData'
touchManagedPtr remote
touchManagedPtr value
touchManagedPtr platformData
freeMem actionName'
return ()
#if ENABLE_OVERLOADING
data RemoteActionGroupChangeActionStateFullMethodInfo
instance (signature ~ (T.Text -> GVariant -> GVariant -> m ()), MonadIO m, IsRemoteActionGroup a) => O.MethodInfo RemoteActionGroupChangeActionStateFullMethodInfo a signature where
overloadedMethod _ = remoteActionGroupChangeActionStateFull
#endif