{- |
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.MenuShell
    ( 

-- * Exported types
    MenuShell(..)                           ,
    MenuShellK                              ,
    toMenuShell                             ,
    noMenuShell                             ,


 -- * Methods
-- ** menuShellActivateItem
    menuShellActivateItem                   ,


-- ** menuShellAppend
    menuShellAppend                         ,


-- ** menuShellBindModel
    menuShellBindModel                      ,


-- ** menuShellCancel
    menuShellCancel                         ,


-- ** menuShellDeactivate
    menuShellDeactivate                     ,


-- ** menuShellDeselect
    menuShellDeselect                       ,


-- ** menuShellGetParentShell
    menuShellGetParentShell                 ,


-- ** menuShellGetSelectedItem
    menuShellGetSelectedItem                ,


-- ** menuShellGetTakeFocus
    menuShellGetTakeFocus                   ,


-- ** menuShellInsert
    menuShellInsert                         ,


-- ** menuShellPrepend
    menuShellPrepend                        ,


-- ** menuShellSelectFirst
    menuShellSelectFirst                    ,


-- ** menuShellSelectItem
    menuShellSelectItem                     ,


-- ** menuShellSetTakeFocus
    menuShellSetTakeFocus                   ,




 -- * Properties
-- ** TakeFocus
    MenuShellTakeFocusPropertyInfo          ,
    constructMenuShellTakeFocus             ,
    getMenuShellTakeFocus                   ,
    setMenuShellTakeFocus                   ,




 -- * Signals
-- ** ActivateCurrent
    MenuShellActivateCurrentCallback        ,
    MenuShellActivateCurrentCallbackC       ,
    MenuShellActivateCurrentSignalInfo      ,
    afterMenuShellActivateCurrent           ,
    menuShellActivateCurrentCallbackWrapper ,
    menuShellActivateCurrentClosure         ,
    mkMenuShellActivateCurrentCallback      ,
    noMenuShellActivateCurrentCallback      ,
    onMenuShellActivateCurrent              ,


-- ** Cancel
    MenuShellCancelCallback                 ,
    MenuShellCancelCallbackC                ,
    MenuShellCancelSignalInfo               ,
    afterMenuShellCancel                    ,
    menuShellCancelCallbackWrapper          ,
    menuShellCancelClosure                  ,
    mkMenuShellCancelCallback               ,
    noMenuShellCancelCallback               ,
    onMenuShellCancel                       ,


-- ** CycleFocus
    MenuShellCycleFocusCallback             ,
    MenuShellCycleFocusCallbackC            ,
    MenuShellCycleFocusSignalInfo           ,
    afterMenuShellCycleFocus                ,
    menuShellCycleFocusCallbackWrapper      ,
    menuShellCycleFocusClosure              ,
    mkMenuShellCycleFocusCallback           ,
    noMenuShellCycleFocusCallback           ,
    onMenuShellCycleFocus                   ,


-- ** Deactivate
    MenuShellDeactivateCallback             ,
    MenuShellDeactivateCallbackC            ,
    MenuShellDeactivateSignalInfo           ,
    afterMenuShellDeactivate                ,
    menuShellDeactivateCallbackWrapper      ,
    menuShellDeactivateClosure              ,
    mkMenuShellDeactivateCallback           ,
    noMenuShellDeactivateCallback           ,
    onMenuShellDeactivate                   ,


-- ** Insert
    MenuShellInsertCallback                 ,
    MenuShellInsertCallbackC                ,
    MenuShellInsertSignalInfo               ,
    afterMenuShellInsert                    ,
    menuShellInsertCallbackWrapper          ,
    menuShellInsertClosure                  ,
    mkMenuShellInsertCallback               ,
    noMenuShellInsertCallback               ,
    onMenuShellInsert                       ,


-- ** MoveCurrent
    MenuShellMoveCurrentCallback            ,
    MenuShellMoveCurrentCallbackC           ,
    MenuShellMoveCurrentSignalInfo          ,
    afterMenuShellMoveCurrent               ,
    menuShellMoveCurrentCallbackWrapper     ,
    menuShellMoveCurrentClosure             ,
    mkMenuShellMoveCurrentCallback          ,
    noMenuShellMoveCurrentCallback          ,
    onMenuShellMoveCurrent                  ,


-- ** MoveSelected
    MenuShellMoveSelectedCallback           ,
    MenuShellMoveSelectedCallbackC          ,
    MenuShellMoveSelectedSignalInfo         ,
    afterMenuShellMoveSelected              ,
    menuShellMoveSelectedCallbackWrapper    ,
    menuShellMoveSelectedClosure            ,
    mkMenuShellMoveSelectedCallback         ,
    noMenuShellMoveSelectedCallback         ,
    onMenuShellMoveSelected                 ,


-- ** SelectionDone
    MenuShellSelectionDoneCallback          ,
    MenuShellSelectionDoneCallbackC         ,
    MenuShellSelectionDoneSignalInfo        ,
    afterMenuShellSelectionDone             ,
    menuShellSelectionDoneCallbackWrapper   ,
    menuShellSelectionDoneClosure           ,
    mkMenuShellSelectionDoneCallback        ,
    noMenuShellSelectionDoneCallback        ,
    onMenuShellSelectionDone                ,




    ) 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

newtype MenuShell = MenuShell (ForeignPtr MenuShell)
foreign import ccall "gtk_menu_shell_get_type"
    c_gtk_menu_shell_get_type :: IO GType

type instance ParentTypes MenuShell = MenuShellParentTypes
type MenuShellParentTypes = '[Container, Widget, GObject.Object, Atk.ImplementorIface, Buildable]

instance GObject MenuShell where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gtk_menu_shell_get_type
    

class GObject o => MenuShellK o
instance (GObject o, IsDescendantOf MenuShell o) => MenuShellK o

toMenuShell :: MenuShellK o => o -> IO MenuShell
toMenuShell = unsafeCastTo MenuShell

noMenuShell :: Maybe MenuShell
noMenuShell = Nothing

-- signal MenuShell::activate-current
type MenuShellActivateCurrentCallback =
    Bool ->
    IO ()

noMenuShellActivateCurrentCallback :: Maybe MenuShellActivateCurrentCallback
noMenuShellActivateCurrentCallback = Nothing

type MenuShellActivateCurrentCallbackC =
    Ptr () ->                               -- object
    CInt ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkMenuShellActivateCurrentCallback :: MenuShellActivateCurrentCallbackC -> IO (FunPtr MenuShellActivateCurrentCallbackC)

menuShellActivateCurrentClosure :: MenuShellActivateCurrentCallback -> IO Closure
menuShellActivateCurrentClosure cb = newCClosure =<< mkMenuShellActivateCurrentCallback wrapped
    where wrapped = menuShellActivateCurrentCallbackWrapper cb

menuShellActivateCurrentCallbackWrapper ::
    MenuShellActivateCurrentCallback ->
    Ptr () ->
    CInt ->
    Ptr () ->
    IO ()
menuShellActivateCurrentCallbackWrapper _cb _ force_hide _ = do
    let force_hide' = (/= 0) force_hide
    _cb  force_hide'

onMenuShellActivateCurrent :: (GObject a, MonadIO m) => a -> MenuShellActivateCurrentCallback -> m SignalHandlerId
onMenuShellActivateCurrent obj cb = liftIO $ connectMenuShellActivateCurrent obj cb SignalConnectBefore
afterMenuShellActivateCurrent :: (GObject a, MonadIO m) => a -> MenuShellActivateCurrentCallback -> m SignalHandlerId
afterMenuShellActivateCurrent obj cb = connectMenuShellActivateCurrent obj cb SignalConnectAfter

connectMenuShellActivateCurrent :: (GObject a, MonadIO m) =>
                                   a -> MenuShellActivateCurrentCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellActivateCurrent obj cb after = liftIO $ do
    cb' <- mkMenuShellActivateCurrentCallback (menuShellActivateCurrentCallbackWrapper cb)
    connectSignalFunPtr obj "activate-current" cb' after

-- signal MenuShell::cancel
type MenuShellCancelCallback =
    IO ()

noMenuShellCancelCallback :: Maybe MenuShellCancelCallback
noMenuShellCancelCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuShellCancelCallback :: MenuShellCancelCallbackC -> IO (FunPtr MenuShellCancelCallbackC)

menuShellCancelClosure :: MenuShellCancelCallback -> IO Closure
menuShellCancelClosure cb = newCClosure =<< mkMenuShellCancelCallback wrapped
    where wrapped = menuShellCancelCallbackWrapper cb

menuShellCancelCallbackWrapper ::
    MenuShellCancelCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuShellCancelCallbackWrapper _cb _ _ = do
    _cb 

onMenuShellCancel :: (GObject a, MonadIO m) => a -> MenuShellCancelCallback -> m SignalHandlerId
onMenuShellCancel obj cb = liftIO $ connectMenuShellCancel obj cb SignalConnectBefore
afterMenuShellCancel :: (GObject a, MonadIO m) => a -> MenuShellCancelCallback -> m SignalHandlerId
afterMenuShellCancel obj cb = connectMenuShellCancel obj cb SignalConnectAfter

connectMenuShellCancel :: (GObject a, MonadIO m) =>
                          a -> MenuShellCancelCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellCancel obj cb after = liftIO $ do
    cb' <- mkMenuShellCancelCallback (menuShellCancelCallbackWrapper cb)
    connectSignalFunPtr obj "cancel" cb' after

-- signal MenuShell::cycle-focus
type MenuShellCycleFocusCallback =
    DirectionType ->
    IO ()

noMenuShellCycleFocusCallback :: Maybe MenuShellCycleFocusCallback
noMenuShellCycleFocusCallback = Nothing

type MenuShellCycleFocusCallbackC =
    Ptr () ->                               -- object
    CUInt ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkMenuShellCycleFocusCallback :: MenuShellCycleFocusCallbackC -> IO (FunPtr MenuShellCycleFocusCallbackC)

menuShellCycleFocusClosure :: MenuShellCycleFocusCallback -> IO Closure
menuShellCycleFocusClosure cb = newCClosure =<< mkMenuShellCycleFocusCallback wrapped
    where wrapped = menuShellCycleFocusCallbackWrapper cb

menuShellCycleFocusCallbackWrapper ::
    MenuShellCycleFocusCallback ->
    Ptr () ->
    CUInt ->
    Ptr () ->
    IO ()
menuShellCycleFocusCallbackWrapper _cb _ direction _ = do
    let direction' = (toEnum . fromIntegral) direction
    _cb  direction'

onMenuShellCycleFocus :: (GObject a, MonadIO m) => a -> MenuShellCycleFocusCallback -> m SignalHandlerId
onMenuShellCycleFocus obj cb = liftIO $ connectMenuShellCycleFocus obj cb SignalConnectBefore
afterMenuShellCycleFocus :: (GObject a, MonadIO m) => a -> MenuShellCycleFocusCallback -> m SignalHandlerId
afterMenuShellCycleFocus obj cb = connectMenuShellCycleFocus obj cb SignalConnectAfter

connectMenuShellCycleFocus :: (GObject a, MonadIO m) =>
                              a -> MenuShellCycleFocusCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellCycleFocus obj cb after = liftIO $ do
    cb' <- mkMenuShellCycleFocusCallback (menuShellCycleFocusCallbackWrapper cb)
    connectSignalFunPtr obj "cycle-focus" cb' after

-- signal MenuShell::deactivate
type MenuShellDeactivateCallback =
    IO ()

noMenuShellDeactivateCallback :: Maybe MenuShellDeactivateCallback
noMenuShellDeactivateCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuShellDeactivateCallback :: MenuShellDeactivateCallbackC -> IO (FunPtr MenuShellDeactivateCallbackC)

menuShellDeactivateClosure :: MenuShellDeactivateCallback -> IO Closure
menuShellDeactivateClosure cb = newCClosure =<< mkMenuShellDeactivateCallback wrapped
    where wrapped = menuShellDeactivateCallbackWrapper cb

menuShellDeactivateCallbackWrapper ::
    MenuShellDeactivateCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuShellDeactivateCallbackWrapper _cb _ _ = do
    _cb 

onMenuShellDeactivate :: (GObject a, MonadIO m) => a -> MenuShellDeactivateCallback -> m SignalHandlerId
onMenuShellDeactivate obj cb = liftIO $ connectMenuShellDeactivate obj cb SignalConnectBefore
afterMenuShellDeactivate :: (GObject a, MonadIO m) => a -> MenuShellDeactivateCallback -> m SignalHandlerId
afterMenuShellDeactivate obj cb = connectMenuShellDeactivate obj cb SignalConnectAfter

connectMenuShellDeactivate :: (GObject a, MonadIO m) =>
                              a -> MenuShellDeactivateCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellDeactivate obj cb after = liftIO $ do
    cb' <- mkMenuShellDeactivateCallback (menuShellDeactivateCallbackWrapper cb)
    connectSignalFunPtr obj "deactivate" cb' after

-- signal MenuShell::insert
type MenuShellInsertCallback =
    Widget ->
    Int32 ->
    IO ()

noMenuShellInsertCallback :: Maybe MenuShellInsertCallback
noMenuShellInsertCallback = Nothing

type MenuShellInsertCallbackC =
    Ptr () ->                               -- object
    Ptr Widget ->
    Int32 ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkMenuShellInsertCallback :: MenuShellInsertCallbackC -> IO (FunPtr MenuShellInsertCallbackC)

menuShellInsertClosure :: MenuShellInsertCallback -> IO Closure
menuShellInsertClosure cb = newCClosure =<< mkMenuShellInsertCallback wrapped
    where wrapped = menuShellInsertCallbackWrapper cb

menuShellInsertCallbackWrapper ::
    MenuShellInsertCallback ->
    Ptr () ->
    Ptr Widget ->
    Int32 ->
    Ptr () ->
    IO ()
menuShellInsertCallbackWrapper _cb _ child position _ = do
    child' <- (newObject Widget) child
    _cb  child' position

onMenuShellInsert :: (GObject a, MonadIO m) => a -> MenuShellInsertCallback -> m SignalHandlerId
onMenuShellInsert obj cb = liftIO $ connectMenuShellInsert obj cb SignalConnectBefore
afterMenuShellInsert :: (GObject a, MonadIO m) => a -> MenuShellInsertCallback -> m SignalHandlerId
afterMenuShellInsert obj cb = connectMenuShellInsert obj cb SignalConnectAfter

connectMenuShellInsert :: (GObject a, MonadIO m) =>
                          a -> MenuShellInsertCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellInsert obj cb after = liftIO $ do
    cb' <- mkMenuShellInsertCallback (menuShellInsertCallbackWrapper cb)
    connectSignalFunPtr obj "insert" cb' after

-- signal MenuShell::move-current
type MenuShellMoveCurrentCallback =
    MenuDirectionType ->
    IO ()

noMenuShellMoveCurrentCallback :: Maybe MenuShellMoveCurrentCallback
noMenuShellMoveCurrentCallback = Nothing

type MenuShellMoveCurrentCallbackC =
    Ptr () ->                               -- object
    CUInt ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkMenuShellMoveCurrentCallback :: MenuShellMoveCurrentCallbackC -> IO (FunPtr MenuShellMoveCurrentCallbackC)

menuShellMoveCurrentClosure :: MenuShellMoveCurrentCallback -> IO Closure
menuShellMoveCurrentClosure cb = newCClosure =<< mkMenuShellMoveCurrentCallback wrapped
    where wrapped = menuShellMoveCurrentCallbackWrapper cb

menuShellMoveCurrentCallbackWrapper ::
    MenuShellMoveCurrentCallback ->
    Ptr () ->
    CUInt ->
    Ptr () ->
    IO ()
menuShellMoveCurrentCallbackWrapper _cb _ direction _ = do
    let direction' = (toEnum . fromIntegral) direction
    _cb  direction'

onMenuShellMoveCurrent :: (GObject a, MonadIO m) => a -> MenuShellMoveCurrentCallback -> m SignalHandlerId
onMenuShellMoveCurrent obj cb = liftIO $ connectMenuShellMoveCurrent obj cb SignalConnectBefore
afterMenuShellMoveCurrent :: (GObject a, MonadIO m) => a -> MenuShellMoveCurrentCallback -> m SignalHandlerId
afterMenuShellMoveCurrent obj cb = connectMenuShellMoveCurrent obj cb SignalConnectAfter

connectMenuShellMoveCurrent :: (GObject a, MonadIO m) =>
                               a -> MenuShellMoveCurrentCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellMoveCurrent obj cb after = liftIO $ do
    cb' <- mkMenuShellMoveCurrentCallback (menuShellMoveCurrentCallbackWrapper cb)
    connectSignalFunPtr obj "move-current" cb' after

-- signal MenuShell::move-selected
type MenuShellMoveSelectedCallback =
    Int32 ->
    IO Bool

noMenuShellMoveSelectedCallback :: Maybe MenuShellMoveSelectedCallback
noMenuShellMoveSelectedCallback = Nothing

type MenuShellMoveSelectedCallbackC =
    Ptr () ->                               -- object
    Int32 ->
    Ptr () ->                               -- user_data
    IO CInt

foreign import ccall "wrapper"
    mkMenuShellMoveSelectedCallback :: MenuShellMoveSelectedCallbackC -> IO (FunPtr MenuShellMoveSelectedCallbackC)

menuShellMoveSelectedClosure :: MenuShellMoveSelectedCallback -> IO Closure
menuShellMoveSelectedClosure cb = newCClosure =<< mkMenuShellMoveSelectedCallback wrapped
    where wrapped = menuShellMoveSelectedCallbackWrapper cb

menuShellMoveSelectedCallbackWrapper ::
    MenuShellMoveSelectedCallback ->
    Ptr () ->
    Int32 ->
    Ptr () ->
    IO CInt
menuShellMoveSelectedCallbackWrapper _cb _ distance _ = do
    result <- _cb  distance
    let result' = (fromIntegral . fromEnum) result
    return result'

onMenuShellMoveSelected :: (GObject a, MonadIO m) => a -> MenuShellMoveSelectedCallback -> m SignalHandlerId
onMenuShellMoveSelected obj cb = liftIO $ connectMenuShellMoveSelected obj cb SignalConnectBefore
afterMenuShellMoveSelected :: (GObject a, MonadIO m) => a -> MenuShellMoveSelectedCallback -> m SignalHandlerId
afterMenuShellMoveSelected obj cb = connectMenuShellMoveSelected obj cb SignalConnectAfter

connectMenuShellMoveSelected :: (GObject a, MonadIO m) =>
                                a -> MenuShellMoveSelectedCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellMoveSelected obj cb after = liftIO $ do
    cb' <- mkMenuShellMoveSelectedCallback (menuShellMoveSelectedCallbackWrapper cb)
    connectSignalFunPtr obj "move-selected" cb' after

-- signal MenuShell::selection-done
type MenuShellSelectionDoneCallback =
    IO ()

noMenuShellSelectionDoneCallback :: Maybe MenuShellSelectionDoneCallback
noMenuShellSelectionDoneCallback = Nothing

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

foreign import ccall "wrapper"
    mkMenuShellSelectionDoneCallback :: MenuShellSelectionDoneCallbackC -> IO (FunPtr MenuShellSelectionDoneCallbackC)

menuShellSelectionDoneClosure :: MenuShellSelectionDoneCallback -> IO Closure
menuShellSelectionDoneClosure cb = newCClosure =<< mkMenuShellSelectionDoneCallback wrapped
    where wrapped = menuShellSelectionDoneCallbackWrapper cb

menuShellSelectionDoneCallbackWrapper ::
    MenuShellSelectionDoneCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
menuShellSelectionDoneCallbackWrapper _cb _ _ = do
    _cb 

onMenuShellSelectionDone :: (GObject a, MonadIO m) => a -> MenuShellSelectionDoneCallback -> m SignalHandlerId
onMenuShellSelectionDone obj cb = liftIO $ connectMenuShellSelectionDone obj cb SignalConnectBefore
afterMenuShellSelectionDone :: (GObject a, MonadIO m) => a -> MenuShellSelectionDoneCallback -> m SignalHandlerId
afterMenuShellSelectionDone obj cb = connectMenuShellSelectionDone obj cb SignalConnectAfter

connectMenuShellSelectionDone :: (GObject a, MonadIO m) =>
                                 a -> MenuShellSelectionDoneCallback -> SignalConnectMode -> m SignalHandlerId
connectMenuShellSelectionDone obj cb after = liftIO $ do
    cb' <- mkMenuShellSelectionDoneCallback (menuShellSelectionDoneCallbackWrapper cb)
    connectSignalFunPtr obj "selection-done" cb' after

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

getMenuShellTakeFocus :: (MonadIO m, MenuShellK o) => o -> m Bool
getMenuShellTakeFocus obj = liftIO $ getObjectPropertyBool obj "take-focus"

setMenuShellTakeFocus :: (MonadIO m, MenuShellK o) => o -> Bool -> m ()
setMenuShellTakeFocus obj val = liftIO $ setObjectPropertyBool obj "take-focus" val

constructMenuShellTakeFocus :: Bool -> IO ([Char], GValue)
constructMenuShellTakeFocus val = constructObjectPropertyBool "take-focus" val

data MenuShellTakeFocusPropertyInfo
instance AttrInfo MenuShellTakeFocusPropertyInfo where
    type AttrAllowedOps MenuShellTakeFocusPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint MenuShellTakeFocusPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint MenuShellTakeFocusPropertyInfo = MenuShellK
    type AttrGetType MenuShellTakeFocusPropertyInfo = Bool
    type AttrLabel MenuShellTakeFocusPropertyInfo = "MenuShell::take-focus"
    attrGet _ = getMenuShellTakeFocus
    attrSet _ = setMenuShellTakeFocus
    attrConstruct _ = constructMenuShellTakeFocus

type instance AttributeList MenuShell = MenuShellAttributeList
type MenuShellAttributeList = ('[ '("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), '("name", WidgetNamePropertyInfo), '("no-show-all", WidgetNoShowAllPropertyInfo), '("opacity", WidgetOpacityPropertyInfo), '("parent", WidgetParentPropertyInfo), '("receives-default", WidgetReceivesDefaultPropertyInfo), '("resize-mode", ContainerResizeModePropertyInfo), '("scale-factor", WidgetScaleFactorPropertyInfo), '("sensitive", WidgetSensitivePropertyInfo), '("style", WidgetStylePropertyInfo), '("take-focus", MenuShellTakeFocusPropertyInfo), '("tooltip-markup", WidgetTooltipMarkupPropertyInfo), '("tooltip-text", WidgetTooltipTextPropertyInfo), '("valign", WidgetValignPropertyInfo), '("vexpand", WidgetVexpandPropertyInfo), '("vexpand-set", WidgetVexpandSetPropertyInfo), '("visible", WidgetVisiblePropertyInfo), '("width-request", WidgetWidthRequestPropertyInfo), '("window", WidgetWindowPropertyInfo)] :: [(Symbol, *)])

data MenuShellActivateCurrentSignalInfo
instance SignalInfo MenuShellActivateCurrentSignalInfo where
    type HaskellCallbackType MenuShellActivateCurrentSignalInfo = MenuShellActivateCurrentCallback
    connectSignal _ = connectMenuShellActivateCurrent

data MenuShellCancelSignalInfo
instance SignalInfo MenuShellCancelSignalInfo where
    type HaskellCallbackType MenuShellCancelSignalInfo = MenuShellCancelCallback
    connectSignal _ = connectMenuShellCancel

data MenuShellCycleFocusSignalInfo
instance SignalInfo MenuShellCycleFocusSignalInfo where
    type HaskellCallbackType MenuShellCycleFocusSignalInfo = MenuShellCycleFocusCallback
    connectSignal _ = connectMenuShellCycleFocus

data MenuShellDeactivateSignalInfo
instance SignalInfo MenuShellDeactivateSignalInfo where
    type HaskellCallbackType MenuShellDeactivateSignalInfo = MenuShellDeactivateCallback
    connectSignal _ = connectMenuShellDeactivate

data MenuShellInsertSignalInfo
instance SignalInfo MenuShellInsertSignalInfo where
    type HaskellCallbackType MenuShellInsertSignalInfo = MenuShellInsertCallback
    connectSignal _ = connectMenuShellInsert

data MenuShellMoveCurrentSignalInfo
instance SignalInfo MenuShellMoveCurrentSignalInfo where
    type HaskellCallbackType MenuShellMoveCurrentSignalInfo = MenuShellMoveCurrentCallback
    connectSignal _ = connectMenuShellMoveCurrent

data MenuShellMoveSelectedSignalInfo
instance SignalInfo MenuShellMoveSelectedSignalInfo where
    type HaskellCallbackType MenuShellMoveSelectedSignalInfo = MenuShellMoveSelectedCallback
    connectSignal _ = connectMenuShellMoveSelected

data MenuShellSelectionDoneSignalInfo
instance SignalInfo MenuShellSelectionDoneSignalInfo where
    type HaskellCallbackType MenuShellSelectionDoneSignalInfo = MenuShellSelectionDoneCallback
    connectSignal _ = connectMenuShellSelectionDone

type instance SignalList MenuShell = MenuShellSignalList
type MenuShellSignalList = ('[ '("accel-closures-changed", WidgetAccelClosuresChangedSignalInfo), '("activate-current", MenuShellActivateCurrentSignalInfo), '("add", ContainerAddSignalInfo), '("button-press-event", WidgetButtonPressEventSignalInfo), '("button-release-event", WidgetButtonReleaseEventSignalInfo), '("can-activate-accel", WidgetCanActivateAccelSignalInfo), '("cancel", MenuShellCancelSignalInfo), '("check-resize", ContainerCheckResizeSignalInfo), '("child-notify", WidgetChildNotifySignalInfo), '("composited-changed", WidgetCompositedChangedSignalInfo), '("configure-event", WidgetConfigureEventSignalInfo), '("cycle-focus", MenuShellCycleFocusSignalInfo), '("damage-event", WidgetDamageEventSignalInfo), '("deactivate", MenuShellDeactivateSignalInfo), '("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), '("insert", MenuShellInsertSignalInfo), '("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-current", MenuShellMoveCurrentSignalInfo), '("move-focus", WidgetMoveFocusSignalInfo), '("move-selected", MenuShellMoveSelectedSignalInfo), '("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-done", MenuShellSelectionDoneSignalInfo), '("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 MenuShell::activate_item
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "menu_item", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "force_deactivate", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "menu_item", argType = TInterface "Gtk" "Widget", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "force_deactivate", 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_menu_shell_activate_item" gtk_menu_shell_activate_item :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr Widget ->                           -- menu_item : TInterface "Gtk" "Widget"
    CInt ->                                 -- force_deactivate : TBasicType TBoolean
    IO ()


menuShellActivateItem ::
    (MonadIO m, MenuShellK a, WidgetK b) =>
    a ->                                    -- _obj
    b ->                                    -- menu_item
    Bool ->                                 -- force_deactivate
    m ()
menuShellActivateItem _obj menu_item force_deactivate = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let menu_item' = unsafeManagedPtrCastPtr menu_item
    let force_deactivate' = (fromIntegral . fromEnum) force_deactivate
    gtk_menu_shell_activate_item _obj' menu_item' force_deactivate'
    touchManagedPtr _obj
    touchManagedPtr menu_item
    return ()

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

foreign import ccall "gtk_menu_shell_append" gtk_menu_shell_append :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr MenuItem ->                         -- child : TInterface "Gtk" "MenuItem"
    IO ()


menuShellAppend ::
    (MonadIO m, MenuShellK a, MenuItemK b) =>
    a ->                                    -- _obj
    b ->                                    -- child
    m ()
menuShellAppend _obj child = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let child' = unsafeManagedPtrCastPtr child
    gtk_menu_shell_append _obj' child'
    touchManagedPtr _obj
    touchManagedPtr child
    return ()

-- method MenuShell::bind_model
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", 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},Arg {argName = "with_separators", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", 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},Arg {argName = "with_separators", 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_menu_shell_bind_model" gtk_menu_shell_bind_model :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr Gio.MenuModel ->                    -- model : TInterface "Gio" "MenuModel"
    CString ->                              -- action_namespace : TBasicType TUTF8
    CInt ->                                 -- with_separators : TBasicType TBoolean
    IO ()


menuShellBindModel ::
    (MonadIO m, MenuShellK a, Gio.MenuModelK b) =>
    a ->                                    -- _obj
    Maybe (b) ->                            -- model
    Maybe (T.Text) ->                       -- action_namespace
    Bool ->                                 -- with_separators
    m ()
menuShellBindModel _obj model action_namespace with_separators = 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'
    let with_separators' = (fromIntegral . fromEnum) with_separators
    gtk_menu_shell_bind_model _obj' maybeModel maybeAction_namespace with_separators'
    touchManagedPtr _obj
    whenJust model touchManagedPtr
    freeMem maybeAction_namespace
    return ()

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

foreign import ccall "gtk_menu_shell_cancel" gtk_menu_shell_cancel :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO ()


menuShellCancel ::
    (MonadIO m, MenuShellK a) =>
    a ->                                    -- _obj
    m ()
menuShellCancel _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_shell_cancel _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_shell_deactivate" gtk_menu_shell_deactivate :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO ()


menuShellDeactivate ::
    (MonadIO m, MenuShellK a) =>
    a ->                                    -- _obj
    m ()
menuShellDeactivate _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_shell_deactivate _obj'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_shell_deselect" gtk_menu_shell_deselect :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO ()


menuShellDeselect ::
    (MonadIO m, MenuShellK a) =>
    a ->                                    -- _obj
    m ()
menuShellDeselect _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gtk_menu_shell_deselect _obj'
    touchManagedPtr _obj
    return ()

-- method MenuShell::get_parent_shell
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", 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_menu_shell_get_parent_shell" gtk_menu_shell_get_parent_shell :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO (Ptr Widget)


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

-- method MenuShell::get_selected_item
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", 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_menu_shell_get_selected_item" gtk_menu_shell_get_selected_item :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO (Ptr Widget)


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

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

foreign import ccall "gtk_menu_shell_get_take_focus" gtk_menu_shell_get_take_focus :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    IO CInt


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

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

foreign import ccall "gtk_menu_shell_insert" gtk_menu_shell_insert :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr Widget ->                           -- child : TInterface "Gtk" "Widget"
    Int32 ->                                -- position : TBasicType TInt32
    IO ()


menuShellInsert ::
    (MonadIO m, MenuShellK a, WidgetK b) =>
    a ->                                    -- _obj
    b ->                                    -- child
    Int32 ->                                -- position
    m ()
menuShellInsert _obj child position = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let child' = unsafeManagedPtrCastPtr child
    gtk_menu_shell_insert _obj' child' position
    touchManagedPtr _obj
    touchManagedPtr child
    return ()

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

foreign import ccall "gtk_menu_shell_prepend" gtk_menu_shell_prepend :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr Widget ->                           -- child : TInterface "Gtk" "Widget"
    IO ()


menuShellPrepend ::
    (MonadIO m, MenuShellK a, WidgetK b) =>
    a ->                                    -- _obj
    b ->                                    -- child
    m ()
menuShellPrepend _obj child = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let child' = unsafeManagedPtrCastPtr child
    gtk_menu_shell_prepend _obj' child'
    touchManagedPtr _obj
    touchManagedPtr child
    return ()

-- method MenuShell::select_first
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "search_sensitive", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "search_sensitive", 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_menu_shell_select_first" gtk_menu_shell_select_first :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    CInt ->                                 -- search_sensitive : TBasicType TBoolean
    IO ()


menuShellSelectFirst ::
    (MonadIO m, MenuShellK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- search_sensitive
    m ()
menuShellSelectFirst _obj search_sensitive = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let search_sensitive' = (fromIntegral . fromEnum) search_sensitive
    gtk_menu_shell_select_first _obj' search_sensitive'
    touchManagedPtr _obj
    return ()

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

foreign import ccall "gtk_menu_shell_select_item" gtk_menu_shell_select_item :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    Ptr Widget ->                           -- menu_item : TInterface "Gtk" "Widget"
    IO ()


menuShellSelectItem ::
    (MonadIO m, MenuShellK a, WidgetK b) =>
    a ->                                    -- _obj
    b ->                                    -- menu_item
    m ()
menuShellSelectItem _obj menu_item = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let menu_item' = unsafeManagedPtrCastPtr menu_item
    gtk_menu_shell_select_item _obj' menu_item'
    touchManagedPtr _obj
    touchManagedPtr menu_item
    return ()

-- method MenuShell::set_take_focus
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "take_focus", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Gtk" "MenuShell", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "take_focus", 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_menu_shell_set_take_focus" gtk_menu_shell_set_take_focus :: 
    Ptr MenuShell ->                        -- _obj : TInterface "Gtk" "MenuShell"
    CInt ->                                 -- take_focus : TBasicType TBoolean
    IO ()


menuShellSetTakeFocus ::
    (MonadIO m, MenuShellK a) =>
    a ->                                    -- _obj
    Bool ->                                 -- take_focus
    m ()
menuShellSetTakeFocus _obj take_focus = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let take_focus' = (fromIntegral . fromEnum) take_focus
    gtk_menu_shell_set_take_focus _obj' take_focus'
    touchManagedPtr _obj
    return ()