{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) The GActionMap interface is implemented by 'GI.Gio.Interfaces.ActionGroup.ActionGroup' implementations that operate by containing a number of named 'GI.Gio.Interfaces.Action.Action' instances, such as 'GI.Gio.Objects.SimpleActionGroup.SimpleActionGroup'. One useful application of this interface is to map the names of actions from various action groups to unique, prefixed names (e.g. by prepending \"app.\" or \"win.\"). This is the motivation for the \'Map\' part of the interface name. -} module GI.Gio.Interfaces.ActionMap ( -- * Exported types ActionMap(..) , noActionMap , IsActionMap , toActionMap , -- * Methods -- ** addAction #method:addAction# ActionMapAddActionMethodInfo , actionMapAddAction , -- ** addActionEntries #method:addActionEntries# ActionMapAddActionEntriesMethodInfo , actionMapAddActionEntries , -- ** lookupAction #method:lookupAction# ActionMapLookupActionMethodInfo , actionMapLookupAction , -- ** removeAction #method:removeAction# ActionMapRemoveActionMethodInfo , actionMapRemoveAction , ) 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.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack 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 GI.GObject.Objects.Object as GObject.Object import {-# SOURCE #-} qualified GI.Gio.Interfaces.Action as Gio.Action import {-# SOURCE #-} qualified GI.Gio.Structs.ActionEntry as Gio.ActionEntry -- interface ActionMap newtype ActionMap = ActionMap (ManagedPtr ActionMap) noActionMap :: Maybe ActionMap noActionMap = Nothing type family ResolveActionMapMethod (t :: Symbol) (o :: *) :: * where ResolveActionMapMethod "addAction" o = ActionMapAddActionMethodInfo ResolveActionMapMethod "addActionEntries" o = ActionMapAddActionEntriesMethodInfo ResolveActionMapMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveActionMapMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveActionMapMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveActionMapMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveActionMapMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveActionMapMethod "lookupAction" o = ActionMapLookupActionMethodInfo ResolveActionMapMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveActionMapMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveActionMapMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolveActionMapMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveActionMapMethod "removeAction" o = ActionMapRemoveActionMethodInfo ResolveActionMapMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo ResolveActionMapMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo ResolveActionMapMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveActionMapMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveActionMapMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveActionMapMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveActionMapMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolveActionMapMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveActionMapMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveActionMapMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveActionMapMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveActionMapMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveActionMapMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveActionMapMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveActionMapMethod t ActionMap, O.MethodInfo info ActionMap p) => O.IsLabelProxy t (ActionMap -> p) where fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveActionMapMethod t ActionMap, O.MethodInfo info ActionMap p) => O.IsLabel t (ActionMap -> p) where fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif instance O.HasAttributeList ActionMap type instance O.AttributeList ActionMap = ActionMapAttributeList type ActionMapAttributeList = ('[ ] :: [(Symbol, *)]) type instance O.SignalList ActionMap = ActionMapSignalList type ActionMapSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) foreign import ccall "g_action_map_get_type" c_g_action_map_get_type :: IO GType instance GObject ActionMap where gobjectType _ = c_g_action_map_get_type class GObject o => IsActionMap o #if MIN_VERSION_base(4,9,0) instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError ActionMap a) => IsActionMap a #endif instance IsActionMap ActionMap instance GObject.Object.IsObject ActionMap toActionMap :: IsActionMap o => o -> IO ActionMap toActionMap = unsafeCastTo ActionMap -- method ActionMap::add_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action", argType = TInterface (Name {namespace = "Gio", name = "Action"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GAction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_add_action" g_action_map_add_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) Ptr Gio.Action.Action -> -- action : TInterface (Name {namespace = "Gio", name = "Action"}) IO () {- | Adds an action to the /@actionMap@/. If the action map already contains an action with the same name as /@action@/ then the old action is dropped from the action map. The action map takes its own reference on /@action@/. @since 2.32 -} actionMapAddAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a, Gio.Action.IsAction b) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> b {- ^ /@action@/: a 'GI.Gio.Interfaces.Action.Action' -} -> m () actionMapAddAction actionMap action = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap action' <- unsafeManagedPtrCastPtr action g_action_map_add_action actionMap' action' touchManagedPtr actionMap touchManagedPtr action return () data ActionMapAddActionMethodInfo instance (signature ~ (b -> m ()), MonadIO m, IsActionMap a, Gio.Action.IsAction b) => O.MethodInfo ActionMapAddActionMethodInfo a signature where overloadedMethod _ = actionMapAddAction -- method ActionMap::add_action_entries -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "entries", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "Gio", name = "ActionEntry"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to\n the first item in an array of #GActionEntry structs", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_entries", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the length of @entries, or -1 if @entries is %NULL-terminated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the user data for signal connections", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "n_entries", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the length of @entries, or -1 if @entries is %NULL-terminated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_add_action_entries" g_action_map_add_action_entries :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) Ptr Gio.ActionEntry.ActionEntry -> -- entries : TCArray False (-1) 2 (TInterface (Name {namespace = "Gio", name = "ActionEntry"})) Int32 -> -- n_entries : TBasicType TInt Ptr () -> -- user_data : TBasicType TPtr IO () {- | A convenience function for creating multiple 'GI.Gio.Objects.SimpleAction.SimpleAction' instances and adding them to a 'GI.Gio.Interfaces.ActionMap.ActionMap'. Each action is constructed as per one 'GI.Gio.Structs.ActionEntry.ActionEntry'. === /C code/ > >static void >activate_quit (GSimpleAction *simple, > GVariant *parameter, > gpointer user_data) >{ > exit (0); >} > >static void >activate_print_string (GSimpleAction *simple, > GVariant *parameter, > gpointer user_data) >{ > g_print ("%s\n", g_variant_get_string (parameter, NULL)); >} > >static GActionGroup * >create_action_group (void) >{ > const GActionEntry entries[] = { > { "quit", activate_quit }, > { "print-string", activate_print_string, "s" } > }; > GSimpleActionGroup *group; > > group = g_simple_action_group_new (); > g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), NULL); > > return G_ACTION_GROUP (group); >} @since 2.32 -} actionMapAddActionEntries :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> [Gio.ActionEntry.ActionEntry] {- ^ /@entries@/: a pointer to the first item in an array of 'GI.Gio.Structs.ActionEntry.ActionEntry' structs -} -> Ptr () {- ^ /@userData@/: the user data for signal connections -} -> m () actionMapAddActionEntries actionMap entries userData = liftIO $ do let nEntries = fromIntegral $ length entries actionMap' <- unsafeManagedPtrCastPtr actionMap entries' <- mapM unsafeManagedPtrGetPtr entries entries'' <- packBlockArray 64 entries' g_action_map_add_action_entries actionMap' entries'' nEntries userData touchManagedPtr actionMap mapM_ touchManagedPtr entries freeMem entries'' return () data ActionMapAddActionEntriesMethodInfo instance (signature ~ ([Gio.ActionEntry.ActionEntry] -> Ptr () -> m ()), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapAddActionEntriesMethodInfo a signature where overloadedMethod _ = actionMapAddActionEntries -- method ActionMap::lookup_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", 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 an action", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "Action"})) -- throws : False -- Skip return : False foreign import ccall "g_action_map_lookup_action" g_action_map_lookup_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) CString -> -- action_name : TBasicType TUTF8 IO (Ptr Gio.Action.Action) {- | Looks up the action with the name /@actionName@/ in /@actionMap@/. If no such action exists, returns 'Nothing'. @since 2.32 -} actionMapLookupAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> T.Text {- ^ /@actionName@/: the name of an action -} -> m Gio.Action.Action {- ^ __Returns:__ a 'GI.Gio.Interfaces.Action.Action', or 'Nothing' -} actionMapLookupAction actionMap actionName = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap actionName' <- textToCString actionName result <- g_action_map_lookup_action actionMap' actionName' checkUnexpectedReturnNULL "actionMapLookupAction" result result' <- (newObject Gio.Action.Action) result touchManagedPtr actionMap freeMem actionName' return result' data ActionMapLookupActionMethodInfo instance (signature ~ (T.Text -> m Gio.Action.Action), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapLookupActionMethodInfo a signature where overloadedMethod _ = actionMapLookupAction -- method ActionMap::remove_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", 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", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_remove_action" g_action_map_remove_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) CString -> -- action_name : TBasicType TUTF8 IO () {- | Removes the named action from the action map. If no action of this name is in the map then nothing happens. @since 2.32 -} actionMapRemoveAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> T.Text {- ^ /@actionName@/: the name of the action -} -> m () actionMapRemoveAction actionMap actionName = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap actionName' <- textToCString actionName g_action_map_remove_action actionMap' actionName' touchManagedPtr actionMap freeMem actionName' return () data ActionMapRemoveActionMethodInfo instance (signature ~ (T.Text -> m ()), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapRemoveActionMethodInfo a signature where overloadedMethod _ = actionMapRemoveAction