{- | 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