gi-gtk-3.0.28: GI/Gtk/Objects/WindowGroup.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)
A 'GI.Gtk.Objects.WindowGroup.WindowGroup' restricts the effect of grabs to windows
in the same group, thereby making window groups almost behave
like separate applications.
A window can be a member in at most one window group at a time.
Windows that have not been explicitly assigned to a group are
implicitly treated like windows of the default window group.
GtkWindowGroup objects are referenced by each window in the group,
so once you have added all windows to a GtkWindowGroup, you can drop
the initial reference to the window group with 'GI.GObject.Objects.Object.objectUnref'. If the
windows in the window group are subsequently destroyed, then they will
be removed from the window group and drop their references on the window
group; when all window have been removed, the window group will be
freed.
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Gtk.Objects.WindowGroup
(
-- * Exported types
WindowGroup(..) ,
IsWindowGroup ,
toWindowGroup ,
noWindowGroup ,
-- * Methods
-- ** addWindow #method:addWindow#
#if ENABLE_OVERLOADING
WindowGroupAddWindowMethodInfo ,
#endif
windowGroupAddWindow ,
-- ** getCurrentDeviceGrab #method:getCurrentDeviceGrab#
#if ENABLE_OVERLOADING
WindowGroupGetCurrentDeviceGrabMethodInfo,
#endif
windowGroupGetCurrentDeviceGrab ,
-- ** getCurrentGrab #method:getCurrentGrab#
#if ENABLE_OVERLOADING
WindowGroupGetCurrentGrabMethodInfo ,
#endif
windowGroupGetCurrentGrab ,
-- ** listWindows #method:listWindows#
#if ENABLE_OVERLOADING
WindowGroupListWindowsMethodInfo ,
#endif
windowGroupListWindows ,
-- ** new #method:new#
windowGroupNew ,
-- ** removeWindow #method:removeWindow#
#if ENABLE_OVERLOADING
WindowGroupRemoveWindowMethodInfo ,
#endif
windowGroupRemoveWindow ,
) 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.Gdk.Objects.Device as Gdk.Device
import {-# SOURCE #-} qualified GI.Gtk.Objects.Widget as Gtk.Widget
import {-# SOURCE #-} qualified GI.Gtk.Objects.Window as Gtk.Window
-- | Memory-managed wrapper type.
newtype WindowGroup = WindowGroup (ManagedPtr WindowGroup)
foreign import ccall "gtk_window_group_get_type"
c_gtk_window_group_get_type :: IO GType
instance GObject WindowGroup where
gobjectType = c_gtk_window_group_get_type
-- | Type class for types which can be safely cast to `WindowGroup`, for instance with `toWindowGroup`.
class (GObject o, O.IsDescendantOf WindowGroup o) => IsWindowGroup o
instance (GObject o, O.IsDescendantOf WindowGroup o) => IsWindowGroup o
instance O.HasParentTypes WindowGroup
type instance O.ParentTypes WindowGroup = '[GObject.Object.Object]
-- | Cast to `WindowGroup`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toWindowGroup :: (MonadIO m, IsWindowGroup o) => o -> m WindowGroup
toWindowGroup = liftIO . unsafeCastTo WindowGroup
-- | A convenience alias for `Nothing` :: `Maybe` `WindowGroup`.
noWindowGroup :: Maybe WindowGroup
noWindowGroup = Nothing
#if ENABLE_OVERLOADING
type family ResolveWindowGroupMethod (t :: Symbol) (o :: *) :: * where
ResolveWindowGroupMethod "addWindow" o = WindowGroupAddWindowMethodInfo
ResolveWindowGroupMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveWindowGroupMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveWindowGroupMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveWindowGroupMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveWindowGroupMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveWindowGroupMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveWindowGroupMethod "listWindows" o = WindowGroupListWindowsMethodInfo
ResolveWindowGroupMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveWindowGroupMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveWindowGroupMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveWindowGroupMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveWindowGroupMethod "removeWindow" o = WindowGroupRemoveWindowMethodInfo
ResolveWindowGroupMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveWindowGroupMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveWindowGroupMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveWindowGroupMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveWindowGroupMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveWindowGroupMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveWindowGroupMethod "getCurrentDeviceGrab" o = WindowGroupGetCurrentDeviceGrabMethodInfo
ResolveWindowGroupMethod "getCurrentGrab" o = WindowGroupGetCurrentGrabMethodInfo
ResolveWindowGroupMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveWindowGroupMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveWindowGroupMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveWindowGroupMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveWindowGroupMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveWindowGroupMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveWindowGroupMethod t WindowGroup, O.MethodInfo info WindowGroup p) => OL.IsLabel t (WindowGroup -> 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
#if ENABLE_OVERLOADING
instance O.HasAttributeList WindowGroup
type instance O.AttributeList WindowGroup = WindowGroupAttributeList
type WindowGroupAttributeList = ('[ ] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList WindowGroup = WindowGroupSignalList
type WindowGroupSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method WindowGroup::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "WindowGroup"}))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_new" gtk_window_group_new ::
IO (Ptr WindowGroup)
{- |
Creates a new 'GI.Gtk.Objects.WindowGroup.WindowGroup' object. Grabs added with
'GI.Gtk.Objects.Widget.widgetGrabAdd' only affect windows within the same 'GI.Gtk.Objects.WindowGroup.WindowGroup'.
-}
windowGroupNew ::
(B.CallStack.HasCallStack, MonadIO m) =>
m WindowGroup
{- ^ __Returns:__ a new 'GI.Gtk.Objects.WindowGroup.WindowGroup'. -}
windowGroupNew = liftIO $ do
result <- gtk_window_group_new
checkUnexpectedReturnNULL "windowGroupNew" result
result' <- (wrapObject WindowGroup) result
return result'
#if ENABLE_OVERLOADING
#endif
-- method WindowGroup::add_window
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "window_group", argType = TInterface (Name {namespace = "Gtk", name = "WindowGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkWindowGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "window", argType = TInterface (Name {namespace = "Gtk", name = "Window"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkWindow to add", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_add_window" gtk_window_group_add_window ::
Ptr WindowGroup -> -- window_group : TInterface (Name {namespace = "Gtk", name = "WindowGroup"})
Ptr Gtk.Window.Window -> -- window : TInterface (Name {namespace = "Gtk", name = "Window"})
IO ()
{- |
Adds a window to a 'GI.Gtk.Objects.WindowGroup.WindowGroup'.
-}
windowGroupAddWindow ::
(B.CallStack.HasCallStack, MonadIO m, IsWindowGroup a, Gtk.Window.IsWindow b) =>
a
{- ^ /@windowGroup@/: a 'GI.Gtk.Objects.WindowGroup.WindowGroup' -}
-> b
{- ^ /@window@/: the 'GI.Gtk.Objects.Window.Window' to add -}
-> m ()
windowGroupAddWindow windowGroup window = liftIO $ do
windowGroup' <- unsafeManagedPtrCastPtr windowGroup
window' <- unsafeManagedPtrCastPtr window
gtk_window_group_add_window windowGroup' window'
touchManagedPtr windowGroup
touchManagedPtr window
return ()
#if ENABLE_OVERLOADING
data WindowGroupAddWindowMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsWindowGroup a, Gtk.Window.IsWindow b) => O.MethodInfo WindowGroupAddWindowMethodInfo a signature where
overloadedMethod _ = windowGroupAddWindow
#endif
-- method WindowGroup::get_current_device_grab
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "window_group", argType = TInterface (Name {namespace = "Gtk", name = "WindowGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkWindowGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "device", argType = TInterface (Name {namespace = "Gdk", name = "Device"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GdkDevice", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "Widget"}))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_get_current_device_grab" gtk_window_group_get_current_device_grab ::
Ptr WindowGroup -> -- window_group : TInterface (Name {namespace = "Gtk", name = "WindowGroup"})
Ptr Gdk.Device.Device -> -- device : TInterface (Name {namespace = "Gdk", name = "Device"})
IO (Ptr Gtk.Widget.Widget)
{- |
Returns the current grab widget for /@device@/, or 'Nothing' if none.
/Since: 3.0/
-}
windowGroupGetCurrentDeviceGrab ::
(B.CallStack.HasCallStack, MonadIO m, IsWindowGroup a, Gdk.Device.IsDevice b) =>
a
{- ^ /@windowGroup@/: a 'GI.Gtk.Objects.WindowGroup.WindowGroup' -}
-> b
{- ^ /@device@/: a 'GI.Gdk.Objects.Device.Device' -}
-> m (Maybe Gtk.Widget.Widget)
{- ^ __Returns:__ The grab widget, or 'Nothing' -}
windowGroupGetCurrentDeviceGrab windowGroup device = liftIO $ do
windowGroup' <- unsafeManagedPtrCastPtr windowGroup
device' <- unsafeManagedPtrCastPtr device
result <- gtk_window_group_get_current_device_grab windowGroup' device'
maybeResult <- convertIfNonNull result $ \result' -> do
result'' <- (newObject Gtk.Widget.Widget) result'
return result''
touchManagedPtr windowGroup
touchManagedPtr device
return maybeResult
#if ENABLE_OVERLOADING
data WindowGroupGetCurrentDeviceGrabMethodInfo
instance (signature ~ (b -> m (Maybe Gtk.Widget.Widget)), MonadIO m, IsWindowGroup a, Gdk.Device.IsDevice b) => O.MethodInfo WindowGroupGetCurrentDeviceGrabMethodInfo a signature where
overloadedMethod _ = windowGroupGetCurrentDeviceGrab
#endif
-- method WindowGroup::get_current_grab
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "window_group", argType = TInterface (Name {namespace = "Gtk", name = "WindowGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkWindowGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gtk", name = "Widget"}))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_get_current_grab" gtk_window_group_get_current_grab ::
Ptr WindowGroup -> -- window_group : TInterface (Name {namespace = "Gtk", name = "WindowGroup"})
IO (Ptr Gtk.Widget.Widget)
{- |
Gets the current grab widget of the given group,
see 'GI.Gtk.Objects.Widget.widgetGrabAdd'.
/Since: 2.22/
-}
windowGroupGetCurrentGrab ::
(B.CallStack.HasCallStack, MonadIO m, IsWindowGroup a) =>
a
{- ^ /@windowGroup@/: a 'GI.Gtk.Objects.WindowGroup.WindowGroup' -}
-> m Gtk.Widget.Widget
{- ^ __Returns:__ the current grab widget of the group -}
windowGroupGetCurrentGrab windowGroup = liftIO $ do
windowGroup' <- unsafeManagedPtrCastPtr windowGroup
result <- gtk_window_group_get_current_grab windowGroup'
checkUnexpectedReturnNULL "windowGroupGetCurrentGrab" result
result' <- (newObject Gtk.Widget.Widget) result
touchManagedPtr windowGroup
return result'
#if ENABLE_OVERLOADING
data WindowGroupGetCurrentGrabMethodInfo
instance (signature ~ (m Gtk.Widget.Widget), MonadIO m, IsWindowGroup a) => O.MethodInfo WindowGroupGetCurrentGrabMethodInfo a signature where
overloadedMethod _ = windowGroupGetCurrentGrab
#endif
-- method WindowGroup::list_windows
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "window_group", argType = TInterface (Name {namespace = "Gtk", name = "WindowGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkWindowGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TGList (TInterface (Name {namespace = "Gtk", name = "Window"})))
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_list_windows" gtk_window_group_list_windows ::
Ptr WindowGroup -> -- window_group : TInterface (Name {namespace = "Gtk", name = "WindowGroup"})
IO (Ptr (GList (Ptr Gtk.Window.Window)))
{- |
Returns a list of the @/GtkWindows/@ that belong to /@windowGroup@/.
/Since: 2.14/
-}
windowGroupListWindows ::
(B.CallStack.HasCallStack, MonadIO m, IsWindowGroup a) =>
a
{- ^ /@windowGroup@/: a 'GI.Gtk.Objects.WindowGroup.WindowGroup' -}
-> m [Gtk.Window.Window]
{- ^ __Returns:__ A
newly-allocated list of windows inside the group. -}
windowGroupListWindows windowGroup = liftIO $ do
windowGroup' <- unsafeManagedPtrCastPtr windowGroup
result <- gtk_window_group_list_windows windowGroup'
result' <- unpackGList result
result'' <- mapM (newObject Gtk.Window.Window) result'
g_list_free result
touchManagedPtr windowGroup
return result''
#if ENABLE_OVERLOADING
data WindowGroupListWindowsMethodInfo
instance (signature ~ (m [Gtk.Window.Window]), MonadIO m, IsWindowGroup a) => O.MethodInfo WindowGroupListWindowsMethodInfo a signature where
overloadedMethod _ = windowGroupListWindows
#endif
-- method WindowGroup::remove_window
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "window_group", argType = TInterface (Name {namespace = "Gtk", name = "WindowGroup"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkWindowGroup", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "window", argType = TInterface (Name {namespace = "Gtk", name = "Window"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkWindow to remove", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gtk_window_group_remove_window" gtk_window_group_remove_window ::
Ptr WindowGroup -> -- window_group : TInterface (Name {namespace = "Gtk", name = "WindowGroup"})
Ptr Gtk.Window.Window -> -- window : TInterface (Name {namespace = "Gtk", name = "Window"})
IO ()
{- |
Removes a window from a 'GI.Gtk.Objects.WindowGroup.WindowGroup'.
-}
windowGroupRemoveWindow ::
(B.CallStack.HasCallStack, MonadIO m, IsWindowGroup a, Gtk.Window.IsWindow b) =>
a
{- ^ /@windowGroup@/: a 'GI.Gtk.Objects.WindowGroup.WindowGroup' -}
-> b
{- ^ /@window@/: the 'GI.Gtk.Objects.Window.Window' to remove -}
-> m ()
windowGroupRemoveWindow windowGroup window = liftIO $ do
windowGroup' <- unsafeManagedPtrCastPtr windowGroup
window' <- unsafeManagedPtrCastPtr window
gtk_window_group_remove_window windowGroup' window'
touchManagedPtr windowGroup
touchManagedPtr window
return ()
#if ENABLE_OVERLOADING
data WindowGroupRemoveWindowMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsWindowGroup a, Gtk.Window.IsWindow b) => O.MethodInfo WindowGroupRemoveWindowMethodInfo a signature where
overloadedMethod _ = windowGroupRemoveWindow
#endif