{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.Gtk.Objects.Popover
    ( 

-- * Exported types
    Popover(..)                             ,
    PopoverK                                ,
    toPopover                               ,
    noPopover                               ,


 -- * Methods
-- ** popoverBindModel
    popoverBindModel                        ,


-- ** popoverGetModal
    popoverGetModal                         ,


-- ** popoverGetPointingTo
    popoverGetPointingTo                    ,


-- ** popoverGetPosition
    popoverGetPosition                      ,


-- ** popoverGetRelativeTo
    popoverGetRelativeTo                    ,


-- ** popoverGetTransitionsEnabled
    popoverGetTransitionsEnabled            ,


-- ** popoverNew
    popoverNew                              ,


-- ** popoverNewFromModel
    popoverNewFromModel                     ,


-- ** popoverSetModal
    popoverSetModal                         ,


-- ** popoverSetPointingTo
    popoverSetPointingTo                    ,


-- ** popoverSetPosition
    popoverSetPosition                      ,


-- ** popoverSetRelativeTo
    popoverSetRelativeTo                    ,


-- ** popoverSetTransitionsEnabled
    popoverSetTransitionsEnabled            ,




 -- * Properties
-- ** Modal
    PopoverModalPropertyInfo                ,
    constructPopoverModal                   ,
    getPopoverModal                         ,
    setPopoverModal                         ,


-- ** PointingTo
    PopoverPointingToPropertyInfo           ,
    constructPopoverPointingTo              ,
    getPopoverPointingTo                    ,
    setPopoverPointingTo                    ,


-- ** Position
    PopoverPositionPropertyInfo             ,
    constructPopoverPosition                ,
    getPopoverPosition                      ,
    setPopoverPosition                      ,


-- ** RelativeTo
    PopoverRelativeToPropertyInfo           ,
    constructPopoverRelativeTo              ,
    getPopoverRelativeTo                    ,
    setPopoverRelativeTo                    ,


-- ** TransitionsEnabled
    PopoverTransitionsEnabledPropertyInfo   ,
    constructPopoverTransitionsEnabled      ,
    getPopoverTransitionsEnabled            ,
    setPopoverTransitionsEnabled            ,




 -- * Signals
-- ** Closed
    PopoverClosedCallback                   ,
    PopoverClosedCallbackC                  ,
    PopoverClosedSignalInfo                 ,
    afterPopoverClosed                      ,
    mkPopoverClosedCallback                 ,
    noPopoverClosedCallback                 ,
    onPopoverClosed                         ,
    popoverClosedCallbackWrapper            ,
    popoverClosedClosure                    ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.Atk as Atk
import qualified GI.GObject as GObject
import qualified GI.Gio as Gio
import qualified GI.Cairo as Cairo

newtype Popover = Popover (ForeignPtr Popover)
foreign import ccall "gtk_popover_get_type"
    c_gtk_popover_get_type :: IO GType

type instance ParentTypes Popover = PopoverParentTypes
type PopoverParentTypes = '[Bin, Container, Widget, GObject.Object, Atk.ImplementorIface, Buildable]

instance GObject Popover where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_popover_get_type
    

class GObject o => PopoverK o
instance (GObject o, IsDescendantOf Popover o) => PopoverK o

toPopover :: PopoverK o => o -> IO Popover
toPopover = unsafeCastTo Popover

noPopover :: Maybe Popover
noPopover = Nothing

-- signal Popover::closed
type PopoverClosedCallback =
    IO ()

noPopoverClosedCallback :: Maybe PopoverClosedCallback
noPopoverClosedCallback = Nothing

type PopoverClosedCallbackC =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkPopoverClosedCallback :: PopoverClosedCallbackC -> IO (FunPtr PopoverClosedCallbackC)

popoverClosedClosure :: PopoverClosedCallback -> IO Closure
popoverClosedClosure cb = newCClosure =<< mkPopoverClosedCallback wrapped
    where wrapped = popoverClosedCallbackWrapper cb

popoverClosedCallbackWrapper ::
    PopoverClosedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
popoverClosedCallbackWrapper _cb _ _ = do
    _cb 

onPopoverClosed :: (GObject a, MonadIO m) => a -> PopoverClosedCallback -> m SignalHandlerId
onPopoverClosed obj cb = liftIO $ connectPopoverClosed obj cb SignalConnectBefore
afterPopoverClosed :: (GObject a, MonadIO m) => a -> PopoverClosedCallback -> m SignalHandlerId
afterPopoverClosed obj cb = connectPopoverClosed obj cb SignalConnectAfter

connectPopoverClosed :: (GObject a, MonadIO m) =>
                        a -> PopoverClosedCallback -> SignalConnectMode -> m SignalHandlerId
connectPopoverClosed obj cb after = liftIO $ do
    cb' <- mkPopoverClosedCallback (popoverClosedCallbackWrapper cb)
    connectSignalFunPtr obj "closed" cb' after

-- VVV Prop "modal"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getPopoverModal :: (MonadIO m, PopoverK o) => o -> m Bool
getPopoverModal obj = liftIO $ getObjectPropertyBool obj "modal"

setPopoverModal :: (MonadIO m, PopoverK o) => o -> Bool -> m ()
setPopoverModal obj val = liftIO $ setObjectPropertyBool obj "modal" val

constructPopoverModal :: Bool -> IO ([Char], GValue)
constructPopoverModal val = constructObjectPropertyBool "modal" val

data PopoverModalPropertyInfo
instance AttrInfo PopoverModalPropertyInfo where
    type AttrAllowedOps PopoverModalPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PopoverModalPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint PopoverModalPropertyInfo = PopoverK
    type AttrGetType PopoverModalPropertyInfo = Bool
    type AttrLabel PopoverModalPropertyInfo = "Popover::modal"
    attrGet _ = getPopoverModal
    attrSet _ = setPopoverModal
    attrConstruct _ = constructPopoverModal

-- VVV Prop "pointing-to"
   -- Type: TInterface "cairo" "RectangleInt"
   -- Flags: [PropertyReadable,PropertyWritable]

getPopoverPointingTo :: (MonadIO m, PopoverK o) => o -> m Cairo.RectangleInt
getPopoverPointingTo obj = liftIO $ getObjectPropertyBoxed obj "pointing-to" Cairo.RectangleInt

setPopoverPointingTo :: (MonadIO m, PopoverK o) => o -> Cairo.RectangleInt -> m ()
setPopoverPointingTo obj val = liftIO $ setObjectPropertyBoxed obj "pointing-to" val

constructPopoverPointingTo :: Cairo.RectangleInt -> IO ([Char], GValue)
constructPopoverPointingTo val = constructObjectPropertyBoxed "pointing-to" val

data PopoverPointingToPropertyInfo
instance AttrInfo PopoverPointingToPropertyInfo where
    type AttrAllowedOps PopoverPointingToPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PopoverPointingToPropertyInfo = (~) Cairo.RectangleInt
    type AttrBaseTypeConstraint PopoverPointingToPropertyInfo = PopoverK
    type AttrGetType PopoverPointingToPropertyInfo = Cairo.RectangleInt
    type AttrLabel PopoverPointingToPropertyInfo = "Popover::pointing-to"
    attrGet _ = getPopoverPointingTo
    attrSet _ = setPopoverPointingTo
    attrConstruct _ = constructPopoverPointingTo

-- VVV Prop "position"
   -- Type: TInterface "Gtk" "PositionType"
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]

getPopoverPosition :: (MonadIO m, PopoverK o) => o -> m PositionType
getPopoverPosition obj = liftIO $ getObjectPropertyEnum obj "position"

setPopoverPosition :: (MonadIO m, PopoverK o) => o -> PositionType -> m ()
setPopoverPosition obj val = liftIO $ setObjectPropertyEnum obj "position" val

constructPopoverPosition :: PositionType -> IO ([Char], GValue)
constructPopoverPosition val = constructObjectPropertyEnum "position" val

data PopoverPositionPropertyInfo
instance AttrInfo PopoverPositionPropertyInfo where
    type AttrAllowedOps PopoverPositionPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PopoverPositionPropertyInfo = (~) PositionType
    type AttrBaseTypeConstraint PopoverPositionPropertyInfo = PopoverK
    type AttrGetType PopoverPositionPropertyInfo = PositionType
    type AttrLabel PopoverPositionPropertyInfo = "Popover::position"
    attrGet _ = getPopoverPosition
    attrSet _ = setPopoverPosition
    attrConstruct _ = constructPopoverPosition

-- VVV Prop "relative-to"
   -- Type: TInterface "Gtk" "Widget"
   -- Flags: [PropertyReadable,PropertyWritable]

getPopoverRelativeTo :: (MonadIO m, PopoverK o) => o -> m Widget
getPopoverRelativeTo obj = liftIO $ getObjectPropertyObject obj "relative-to" Widget

setPopoverRelativeTo :: (MonadIO m, PopoverK o, WidgetK a) => o -> a -> m ()
setPopoverRelativeTo obj val = liftIO $ setObjectPropertyObject obj "relative-to" val

constructPopoverRelativeTo :: (WidgetK a) => a -> IO ([Char], GValue)
constructPopoverRelativeTo val = constructObjectPropertyObject "relative-to" val

data PopoverRelativeToPropertyInfo
instance AttrInfo PopoverRelativeToPropertyInfo where
    type AttrAllowedOps PopoverRelativeToPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PopoverRelativeToPropertyInfo = WidgetK
    type AttrBaseTypeConstraint PopoverRelativeToPropertyInfo = PopoverK
    type AttrGetType PopoverRelativeToPropertyInfo = Widget
    type AttrLabel PopoverRelativeToPropertyInfo = "Popover::relative-to"
    attrGet _ = getPopoverRelativeTo
    attrSet _ = setPopoverRelativeTo
    attrConstruct _ = constructPopoverRelativeTo

-- VVV Prop "transitions-enabled"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]

getPopoverTransitionsEnabled :: (MonadIO m, PopoverK o) => o -> m Bool
getPopoverTransitionsEnabled obj = liftIO $ getObjectPropertyBool obj "transitions-enabled"

setPopoverTransitionsEnabled :: (MonadIO m, PopoverK o) => o -> Bool -> m ()
setPopoverTransitionsEnabled obj val = liftIO $ setObjectPropertyBool obj "transitions-enabled" val

constructPopoverTransitionsEnabled :: Bool -> IO ([Char], GValue)
constructPopoverTransitionsEnabled val = constructObjectPropertyBool "transitions-enabled" val

data PopoverTransitionsEnabledPropertyInfo
instance AttrInfo PopoverTransitionsEnabledPropertyInfo where
    type AttrAllowedOps PopoverTransitionsEnabledPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint PopoverTransitionsEnabledPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint PopoverTransitionsEnabledPropertyInfo = PopoverK
    type AttrGetType PopoverTransitionsEnabledPropertyInfo = Bool
    type AttrLabel PopoverTransitionsEnabledPropertyInfo = "Popover::transitions-enabled"
    attrGet _ = getPopoverTransitionsEnabled
    attrSet _ = setPopoverTransitionsEnabled
    attrConstruct _ = constructPopoverTransitionsEnabled

type instance AttributeList Popover = PopoverAttributeList
type PopoverAttributeList = ('[ '("app-paintable", WidgetAppPaintablePropertyInfo), '("border-width", ContainerBorderWidthPropertyInfo), '("can-default", WidgetCanDefaultPropertyInfo), '("can-focus", WidgetCanFocusPropertyInfo), '("child", ContainerChildPropertyInfo), '("composite-child", WidgetCompositeChildPropertyInfo), '("double-buffered", WidgetDoubleBufferedPropertyInfo), '("events", WidgetEventsPropertyInfo), '("expand", WidgetExpandPropertyInfo), '("halign", WidgetHalignPropertyInfo), '("has-default", WidgetHasDefaultPropertyInfo), '("has-focus", WidgetHasFocusPropertyInfo), '("has-tooltip", WidgetHasTooltipPropertyInfo), '("height-request", WidgetHeightRequestPropertyInfo), '("hexpand", WidgetHexpandPropertyInfo), '("hexpand-set", WidgetHexpandSetPropertyInfo), '("is-focus", WidgetIsFocusPropertyInfo), '("margin", WidgetMarginPropertyInfo), '("margin-bottom", WidgetMarginBottomPropertyInfo), '("margin-end", WidgetMarginEndPropertyInfo), '("margin-left", WidgetMarginLeftPropertyInfo), '("margin-right", WidgetMarginRightPropertyInfo), '("margin-start", WidgetMarginStartPropertyInfo), '("margin-top", WidgetMarginTopPropertyInfo), '("modal", PopoverModalPropertyInfo), '("name", WidgetNamePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("parent", WidgetParentPropertyInfo), '("pointing-to", PopoverPointingToPropertyInfo), '("position", PopoverPositionPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("relative-to", PopoverRelativeToPropertyInfo), '("resize-mode", ContainerResizeModePropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("style", WidgetStylePropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("transitions-enabled", PopoverTransitionsEnabledPropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo)] :: [(Symbol, *)])

data PopoverClosedSignalInfo
instance SignalInfo PopoverClosedSignalInfo where
    type HaskellCallbackType PopoverClosedSignalInfo = PopoverClosedCallback
    connectSignal _ = connectPopoverClosed

type instance SignalList Popover = PopoverSignalList
type PopoverSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("closed", PopoverClosedSignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("delete-event", WidgetDeleteEventSignalInfo), '("destroy", WidgetDestroySignalInfo), '("destroy-event", WidgetDestroyEventSignalInfo), '("direction-changed", WidgetDirectionChangedSignalInfo), '("drag-begin", WidgetDragBeginSignalInfo), '("drag-data-delete", WidgetDragDataDeleteSignalInfo), '("drag-data-get", WidgetDragDataGetSignalInfo), '("drag-data-received", WidgetDragDataReceivedSignalInfo), '("drag-drop", WidgetDragDropSignalInfo), '("drag-end", WidgetDragEndSignalInfo), '("drag-failed", WidgetDragFailedSignalInfo), '("drag-leave", WidgetDragLeaveSignalInfo), '("drag-motion", WidgetDragMotionSignalInfo), '("draw", WidgetDrawSignalInfo), '("enter-notify-event", WidgetEnterNotifyEventSignalInfo), '("event", WidgetEventSignalInfo), '("event-after", WidgetEventAfterSignalInfo), '("focus", WidgetFocusSignalInfo), '("focus-in-event", WidgetFocusInEventSignalInfo), '("focus-out-event", WidgetFocusOutEventSignalInfo), '("grab-broken-event", WidgetGrabBrokenEventSignalInfo), '("grab-focus", WidgetGrabFocusSignalInfo), '("grab-notify", WidgetGrabNotifySignalInfo), '("hide", WidgetHideSignalInfo), '("hierarchy-changed", WidgetHierarchyChangedSignalInfo), '("key-press-event", WidgetKeyPressEventSignalInfo), '("key-release-event", WidgetKeyReleaseEventSignalInfo), '("keynav-failed", WidgetKeynavFailedSignalInfo), '("leave-notify-event", WidgetLeaveNotifyEventSignalInfo), '("map", WidgetMapSignalInfo), '("map-event", WidgetMapEventSignalInfo), '("mnemonic-activate", WidgetMnemonicActivateSignalInfo), '("motion-notify-event", WidgetMotionNotifyEventSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("parent-set", WidgetParentSetSignalInfo), '("popup-menu", WidgetPopupMenuSignalInfo), '("property-notify-event", WidgetPropertyNotifyEventSignalInfo), '("proximity-in-event", WidgetProximityInEventSignalInfo), '("proximity-out-event", WidgetProximityOutEventSignalInfo), '("query-tooltip", WidgetQueryTooltipSignalInfo), '("realize", WidgetRealizeSignalInfo), '("remove", ContainerRemoveSignalInfo), '("screen-changed", WidgetScreenChangedSignalInfo), '("scroll-event", WidgetScrollEventSignalInfo), '("selection-clear-event", WidgetSelectionClearEventSignalInfo), '("selection-get", WidgetSelectionGetSignalInfo), '("selection-notify-event", WidgetSelectionNotifyEventSignalInfo), '("selection-received", WidgetSelectionReceivedSignalInfo), '("selection-request-event", WidgetSelectionRequestEventSignalInfo), '("set-focus-child", ContainerSetFocusChildSignalInfo), '("show", WidgetShowSignalInfo), '("show-help", WidgetShowHelpSignalInfo), '("size-allocate", WidgetSizeAllocateSignalInfo), '("state-changed", WidgetStateChangedSignalInfo), '("state-flags-changed", WidgetStateFlagsChangedSignalInfo), '("style-set", WidgetStyleSetSignalInfo), '("style-updated", WidgetStyleUpdatedSignalInfo), '("touch-event", WidgetTouchEventSignalInfo), '("unmap", WidgetUnmapSignalInfo), '("unmap-event", WidgetUnmapEventSignalInfo), '("unrealize", WidgetUnrealizeSignalInfo), '("visibility-notify-event", WidgetVisibilityNotifyEventSignalInfo), '("window-state-event", WidgetWindowStateEventSignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Popover::new
-- method type : Constructor
-- Args : [Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Popover"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_new" gtk_popover_new :: 
    Ptr Widget ->                           -- relative_to : TInterface "Gtk" "Widget"
    IO (Ptr Popover)


popoverNew ::
    (MonadIO m, WidgetK a) =>
    Maybe (a) ->                            -- relative_to
    m Popover
popoverNew relative_to = liftIO $ do
    maybeRelative_to <- case relative_to of
        Nothing -> return nullPtr
        Just jRelative_to -> do
            let jRelative_to' = unsafeManagedPtrCastPtr jRelative_to
            return jRelative_to'
    result <- gtk_popover_new maybeRelative_to
    checkUnexpectedReturnNULL "gtk_popover_new" result
    result' <- (newObject Popover) result
    whenJust relative_to touchManagedPtr
    return result'

-- method Popover::new_from_model
-- method type : Constructor
-- Args : [Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gio" "MenuModel", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gio" "MenuModel", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Popover"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_new_from_model" gtk_popover_new_from_model :: 
    Ptr Widget ->                           -- relative_to : TInterface "Gtk" "Widget"
    Ptr Gio.MenuModel ->                    -- model : TInterface "Gio" "MenuModel"
    IO (Ptr Popover)


popoverNewFromModel ::
    (MonadIO m, WidgetK a, Gio.MenuModelK b) =>
    Maybe (a) ->                            -- relative_to
    b ->                                    -- model
    m Popover
popoverNewFromModel relative_to model = liftIO $ do
    maybeRelative_to <- case relative_to of
        Nothing -> return nullPtr
        Just jRelative_to -> do
            let jRelative_to' = unsafeManagedPtrCastPtr jRelative_to
            return jRelative_to'
    let model' = unsafeManagedPtrCastPtr model
    result <- gtk_popover_new_from_model maybeRelative_to model'
    checkUnexpectedReturnNULL "gtk_popover_new_from_model" result
    result' <- (newObject Popover) result
    whenJust relative_to touchManagedPtr
    touchManagedPtr model
    return result'

-- method Popover::bind_model
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gio" "MenuModel", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "action_namespace", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "model", argType = TInterface "Gio" "MenuModel", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "action_namespace", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_bind_model" gtk_popover_bind_model :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    Ptr Gio.MenuModel ->                    -- model : TInterface "Gio" "MenuModel"
    CString ->                              -- action_namespace : TBasicType TUTF8
    IO ()


popoverBindModel ::
    (MonadIO m, PopoverK a, Gio.MenuModelK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- model
    Maybe (T.Text) ->                       -- action_namespace
    m ()
popoverBindModel _obj model action_namespace = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeModel <- case model of
        Nothing -> return nullPtr
        Just jModel -> do
            let jModel' = unsafeManagedPtrCastPtr jModel
            return jModel'
    maybeAction_namespace <- case action_namespace of
        Nothing -> return nullPtr
        Just jAction_namespace -> do
            jAction_namespace' <- textToCString jAction_namespace
            return jAction_namespace'
    gtk_popover_bind_model _obj' maybeModel maybeAction_namespace
    touchManagedPtr _obj
    whenJust model touchManagedPtr
    freeMem maybeAction_namespace
    return ()

-- method Popover::get_modal
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_get_modal" gtk_popover_get_modal :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    IO CInt


popoverGetModal ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    m Bool
popoverGetModal _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_popover_get_modal _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method Popover::get_pointing_to
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "rect", argType = TInterface "cairo" "RectangleInt", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_get_pointing_to" gtk_popover_get_pointing_to :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    Ptr Cairo.RectangleInt ->               -- rect : TInterface "cairo" "RectangleInt"
    IO CInt


popoverGetPointingTo ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    m (Bool,Cairo.RectangleInt)
popoverGetPointingTo _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    rect <- callocBoxedBytes 16 :: IO (Ptr Cairo.RectangleInt)
    result <- gtk_popover_get_pointing_to _obj' rect
    let result' = (/= 0) result
    rect' <- (wrapBoxed Cairo.RectangleInt) rect
    touchManagedPtr _obj
    return (result', rect')

-- method Popover::get_position
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "PositionType"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_get_position" gtk_popover_get_position :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    IO CUInt


popoverGetPosition ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    m PositionType
popoverGetPosition _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_popover_get_position _obj'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr _obj
    return result'

-- method Popover::get_relative_to
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "Gtk" "Widget"
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_get_relative_to" gtk_popover_get_relative_to :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    IO (Ptr Widget)


popoverGetRelativeTo ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    m Widget
popoverGetRelativeTo _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_popover_get_relative_to _obj'
    checkUnexpectedReturnNULL "gtk_popover_get_relative_to" result
    result' <- (newObject Widget) result
    touchManagedPtr _obj
    return result'

-- method Popover::get_transitions_enabled
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_get_transitions_enabled" gtk_popover_get_transitions_enabled :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    IO CInt


popoverGetTransitionsEnabled ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    m Bool
popoverGetTransitionsEnabled _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gtk_popover_get_transitions_enabled _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

-- method Popover::set_modal
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "modal", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "modal", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_set_modal" gtk_popover_set_modal :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    CInt ->                                 -- modal : TBasicType TBoolean
    IO ()


popoverSetModal ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- modal
    m ()
popoverSetModal _obj modal = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let modal' = (fromIntegral . fromEnum) modal
    gtk_popover_set_modal _obj' modal'
    touchManagedPtr _obj
    return ()

-- method Popover::set_pointing_to
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "rect", argType = TInterface "cairo" "RectangleInt", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "rect", argType = TInterface "cairo" "RectangleInt", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_set_pointing_to" gtk_popover_set_pointing_to :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    Ptr Cairo.RectangleInt ->               -- rect : TInterface "cairo" "RectangleInt"
    IO ()


popoverSetPointingTo ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    Cairo.RectangleInt ->                   -- rect
    m ()
popoverSetPointingTo _obj rect = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let rect' = unsafeManagedPtrGetPtr rect
    gtk_popover_set_pointing_to _obj' rect'
    touchManagedPtr _obj
    touchManagedPtr rect
    return ()

-- method Popover::set_position
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "PositionType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "position", argType = TInterface "Gtk" "PositionType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_set_position" gtk_popover_set_position :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    CUInt ->                                -- position : TInterface "Gtk" "PositionType"
    IO ()


popoverSetPosition ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    PositionType ->                         -- position
    m ()
popoverSetPosition _obj position = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let position' = (fromIntegral . fromEnum) position
    gtk_popover_set_position _obj' position'
    touchManagedPtr _obj
    return ()

-- method Popover::set_relative_to
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "relative_to", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_set_relative_to" gtk_popover_set_relative_to :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    Ptr Widget ->                           -- relative_to : TInterface "Gtk" "Widget"
    IO ()


popoverSetRelativeTo ::
    (MonadIO m, PopoverK a, WidgetK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- relative_to
    m ()
popoverSetRelativeTo _obj relative_to = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    maybeRelative_to <- case relative_to of
        Nothing -> return nullPtr
        Just jRelative_to -> do
            let jRelative_to' = unsafeManagedPtrCastPtr jRelative_to
            return jRelative_to'
    gtk_popover_set_relative_to _obj' maybeRelative_to
    touchManagedPtr _obj
    whenJust relative_to touchManagedPtr
    return ()

-- method Popover::set_transitions_enabled
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "transitions_enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "Popover", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "transitions_enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gtk_popover_set_transitions_enabled" gtk_popover_set_transitions_enabled :: 
    Ptr Popover ->                          -- _obj : TInterface "Gtk" "Popover"
    CInt ->                                 -- transitions_enabled : TBasicType TBoolean
    IO ()


popoverSetTransitionsEnabled ::
    (MonadIO m, PopoverK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- transitions_enabled
    m ()
popoverSetTransitionsEnabled _obj transitions_enabled = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let transitions_enabled' = (fromIntegral . fromEnum) transitions_enabled
    gtk_popover_set_transitions_enabled _obj' transitions_enabled'
    touchManagedPtr _obj
    return ()