{- |
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.WebKit2WebExtension.Objects.ContextMenu
    ( 

-- * Exported types
    ContextMenu(..)                         ,
    IsContextMenu                           ,
    toContextMenu                           ,
    noContextMenu                           ,


 -- * Methods
-- ** append #method:append#
    ContextMenuAppendMethodInfo             ,
    contextMenuAppend                       ,


-- ** first #method:first#
    ContextMenuFirstMethodInfo              ,
    contextMenuFirst                        ,


-- ** getItemAtPosition #method:getItemAtPosition#
    ContextMenuGetItemAtPositionMethodInfo  ,
    contextMenuGetItemAtPosition            ,


-- ** getItems #method:getItems#
    ContextMenuGetItemsMethodInfo           ,
    contextMenuGetItems                     ,


-- ** getNItems #method:getNItems#
    ContextMenuGetNItemsMethodInfo          ,
    contextMenuGetNItems                    ,


-- ** getUserData #method:getUserData#
    ContextMenuGetUserDataMethodInfo        ,
    contextMenuGetUserData                  ,


-- ** insert #method:insert#
    ContextMenuInsertMethodInfo             ,
    contextMenuInsert                       ,


-- ** last #method:last#
    ContextMenuLastMethodInfo               ,
    contextMenuLast                         ,


-- ** moveItem #method:moveItem#
    ContextMenuMoveItemMethodInfo           ,
    contextMenuMoveItem                     ,


-- ** new #method:new#
    contextMenuNew                          ,


-- ** newWithItems #method:newWithItems#
    contextMenuNewWithItems                 ,


-- ** prepend #method:prepend#
    ContextMenuPrependMethodInfo            ,
    contextMenuPrepend                      ,


-- ** remove #method:remove#
    ContextMenuRemoveMethodInfo             ,
    contextMenuRemove                       ,


-- ** removeAll #method:removeAll#
    ContextMenuRemoveAllMethodInfo          ,
    contextMenuRemoveAll                    ,


-- ** setUserData #method:setUserData#
    ContextMenuSetUserDataMethodInfo        ,
    contextMenuSetUserData                  ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.ContextMenuItem as WebKit2WebExtension.ContextMenuItem

newtype ContextMenu = ContextMenu (ManagedPtr ContextMenu)
foreign import ccall "webkit_context_menu_get_type"
    c_webkit_context_menu_get_type :: IO GType

instance GObject ContextMenu where
    gobjectType _ = c_webkit_context_menu_get_type
    

class GObject o => IsContextMenu o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError ContextMenu a) =>
    IsContextMenu a
#endif
instance IsContextMenu ContextMenu
instance GObject.Object.IsObject ContextMenu

toContextMenu :: IsContextMenu o => o -> IO ContextMenu
toContextMenu = unsafeCastTo ContextMenu

noContextMenu :: Maybe ContextMenu
noContextMenu = Nothing

type family ResolveContextMenuMethod (t :: Symbol) (o :: *) :: * where
    ResolveContextMenuMethod "append" o = ContextMenuAppendMethodInfo
    ResolveContextMenuMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveContextMenuMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveContextMenuMethod "first" o = ContextMenuFirstMethodInfo
    ResolveContextMenuMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveContextMenuMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveContextMenuMethod "insert" o = ContextMenuInsertMethodInfo
    ResolveContextMenuMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveContextMenuMethod "last" o = ContextMenuLastMethodInfo
    ResolveContextMenuMethod "moveItem" o = ContextMenuMoveItemMethodInfo
    ResolveContextMenuMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveContextMenuMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveContextMenuMethod "prepend" o = ContextMenuPrependMethodInfo
    ResolveContextMenuMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveContextMenuMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveContextMenuMethod "remove" o = ContextMenuRemoveMethodInfo
    ResolveContextMenuMethod "removeAll" o = ContextMenuRemoveAllMethodInfo
    ResolveContextMenuMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveContextMenuMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveContextMenuMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveContextMenuMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveContextMenuMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveContextMenuMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveContextMenuMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveContextMenuMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveContextMenuMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveContextMenuMethod "getItemAtPosition" o = ContextMenuGetItemAtPositionMethodInfo
    ResolveContextMenuMethod "getItems" o = ContextMenuGetItemsMethodInfo
    ResolveContextMenuMethod "getNItems" o = ContextMenuGetNItemsMethodInfo
    ResolveContextMenuMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveContextMenuMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveContextMenuMethod "getUserData" o = ContextMenuGetUserDataMethodInfo
    ResolveContextMenuMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveContextMenuMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveContextMenuMethod "setUserData" o = ContextMenuSetUserDataMethodInfo
    ResolveContextMenuMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveContextMenuMethod t ContextMenu, O.MethodInfo info ContextMenu p) => O.IsLabelProxy t (ContextMenu -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveContextMenuMethod t ContextMenu, O.MethodInfo info ContextMenu p) => O.IsLabel t (ContextMenu -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

instance O.HasAttributeList ContextMenu
type instance O.AttributeList ContextMenu = ContextMenuAttributeList
type ContextMenuAttributeList = ('[ ] :: [(Symbol, *)])

type instance O.SignalList ContextMenu = ContextMenuSignalList
type ContextMenuSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method ContextMenu::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_new" webkit_context_menu_new :: 
    IO (Ptr ContextMenu)

{- |
Creates a new @/WebKitContextMenu/@ object to be used as a submenu of an existing
@/WebKitContextMenu/@. The context menu of a @/WebKitWebView/@ is created by the view
and passed as an argument of @/WebKitWebView::context-menu/@ signal.
To add items to the menu use 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuPrepend',
'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuAppend' or 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuInsert'.
See also 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuNewWithItems' to create a @/WebKitContextMenu/@ with
a list of initial items.
-}
contextMenuNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m ContextMenu
    {- ^ __Returns:__ The newly created @/WebKitContextMenu/@ object -}
contextMenuNew  = liftIO $ do
    result <- webkit_context_menu_new
    checkUnexpectedReturnNULL "contextMenuNew" result
    result' <- (wrapObject ContextMenu) result
    return result'

-- method ContextMenu::new_with_items
-- method type : Constructor
-- Args : [Arg {argCName = "items", argType = TGList (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GList of #WebKitContextMenuItem", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_new_with_items" webkit_context_menu_new_with_items :: 
    Ptr (GList (Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem)) -> -- items : TGList (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}))
    IO (Ptr ContextMenu)

{- |
Creates a new @/WebKitContextMenu/@ object to be used as a submenu of an existing
@/WebKitContextMenu/@ with the given initial items.
See also 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuNew'
-}
contextMenuNewWithItems ::
    (B.CallStack.HasCallStack, MonadIO m, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem a) =>
    [a]
    {- ^ /@items@/: a 'GI.GLib.Structs.List.List' of @/WebKitContextMenuItem/@ -}
    -> m ContextMenu
    {- ^ __Returns:__ The newly created @/WebKitContextMenu/@ object -}
contextMenuNewWithItems items = liftIO $ do
    items' <- mapM unsafeManagedPtrCastPtr items
    items'' <- packGList items'
    result <- webkit_context_menu_new_with_items items''
    checkUnexpectedReturnNULL "contextMenuNewWithItems" result
    result' <- (wrapObject ContextMenu) result
    mapM_ touchManagedPtr items
    g_list_free items''
    return result'

-- method ContextMenu::append
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "item", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitContextMenuItem 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 "webkit_context_menu_append" webkit_context_menu_append :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem -> -- item : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})
    IO ()

{- |
Adds /@item@/ at the end of the /@menu@/.
-}
contextMenuAppend ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> b
    {- ^ /@item@/: the @/WebKitContextMenuItem/@ to add -}
    -> m ()
contextMenuAppend menu item = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    item' <- unsafeManagedPtrCastPtr item
    webkit_context_menu_append menu' item'
    touchManagedPtr menu
    touchManagedPtr item
    return ()

data ContextMenuAppendMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) => O.MethodInfo ContextMenuAppendMethodInfo a signature where
    overloadedMethod _ = contextMenuAppend

-- method ContextMenu::first
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_first" webkit_context_menu_first :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO (Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem)

{- |
Gets the first item in the /@menu@/.
-}
contextMenuFirst ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m WebKit2WebExtension.ContextMenuItem.ContextMenuItem
    {- ^ __Returns:__ the first @/WebKitContextMenuItem/@ of /@menu@/,
   or 'Nothing' if the @/WebKitContextMenu/@ is empty. -}
contextMenuFirst menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_first menu'
    checkUnexpectedReturnNULL "contextMenuFirst" result
    result' <- (newObject WebKit2WebExtension.ContextMenuItem.ContextMenuItem) result
    touchManagedPtr menu
    return result'

data ContextMenuFirstMethodInfo
instance (signature ~ (m WebKit2WebExtension.ContextMenuItem.ContextMenuItem), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuFirstMethodInfo a signature where
    overloadedMethod _ = contextMenuFirst

-- method ContextMenu::get_item_at_position
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the position of the item, counting from 0", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_get_item_at_position" webkit_context_menu_get_item_at_position :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Word32 ->                               -- position : TBasicType TUInt
    IO (Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem)

{- |
Gets the item at the given position in the /@menu@/.
-}
contextMenuGetItemAtPosition ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> Word32
    {- ^ /@position@/: the position of the item, counting from 0 -}
    -> m WebKit2WebExtension.ContextMenuItem.ContextMenuItem
    {- ^ __Returns:__ the @/WebKitContextMenuItem/@ at position /@position@/ in /@menu@/,
   or 'Nothing' if the position is off the end of the /@menu@/. -}
contextMenuGetItemAtPosition menu position = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_get_item_at_position menu' position
    checkUnexpectedReturnNULL "contextMenuGetItemAtPosition" result
    result' <- (newObject WebKit2WebExtension.ContextMenuItem.ContextMenuItem) result
    touchManagedPtr menu
    return result'

data ContextMenuGetItemAtPositionMethodInfo
instance (signature ~ (Word32 -> m WebKit2WebExtension.ContextMenuItem.ContextMenuItem), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuGetItemAtPositionMethodInfo a signature where
    overloadedMethod _ = contextMenuGetItemAtPosition

-- method ContextMenu::get_items
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TGList (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_get_items" webkit_context_menu_get_items :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO (Ptr (GList (Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem)))

{- |
Returns the item list of /@menu@/.
-}
contextMenuGetItems ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m [WebKit2WebExtension.ContextMenuItem.ContextMenuItem]
    {- ^ __Returns:__ a 'GI.GLib.Structs.List.List' of
   @/WebKitContextMenuItem/@\<!-- -->s -}
contextMenuGetItems menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_get_items menu'
    result' <- unpackGList result
    result'' <- mapM (newObject WebKit2WebExtension.ContextMenuItem.ContextMenuItem) result'
    touchManagedPtr menu
    return result''

data ContextMenuGetItemsMethodInfo
instance (signature ~ (m [WebKit2WebExtension.ContextMenuItem.ContextMenuItem]), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuGetItemsMethodInfo a signature where
    overloadedMethod _ = contextMenuGetItems

-- method ContextMenu::get_n_items
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_get_n_items" webkit_context_menu_get_n_items :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO Word32

{- |
Gets the length of the /@menu@/.
-}
contextMenuGetNItems ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m Word32
    {- ^ __Returns:__ the number of @/WebKitContextMenuItem/@\<!-- -->s in /@menu@/ -}
contextMenuGetNItems menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_get_n_items menu'
    touchManagedPtr menu
    return result

data ContextMenuGetNItemsMethodInfo
instance (signature ~ (m Word32), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuGetNItemsMethodInfo a signature where
    overloadedMethod _ = contextMenuGetNItems

-- method ContextMenu::get_user_data
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just TVariant
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_get_user_data" webkit_context_menu_get_user_data :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO (Ptr GVariant)

{- |
Gets the user data of /@menu@/.
This function can be used from the UI Process to get user data previously set
from the Web Process with 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuSetUserData'.

@since 2.8
-}
contextMenuGetUserData ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m GVariant
    {- ^ __Returns:__ the user data of /@menu@/, or 'Nothing' if /@menu@/ doesn\'t have user data -}
contextMenuGetUserData menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_get_user_data menu'
    checkUnexpectedReturnNULL "contextMenuGetUserData" result
    result' <- newGVariantFromPtr result
    touchManagedPtr menu
    return result'

data ContextMenuGetUserDataMethodInfo
instance (signature ~ (m GVariant), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuGetUserDataMethodInfo a signature where
    overloadedMethod _ = contextMenuGetUserData

-- method ContextMenu::insert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "item", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitContextMenuItem to add", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the position to insert the item", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_insert" webkit_context_menu_insert :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem -> -- item : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})
    Int32 ->                                -- position : TBasicType TInt
    IO ()

{- |
Inserts /@item@/ into the /@menu@/ at the given position.
If /@position@/ is negative, or is larger than the number of items
in the @/WebKitContextMenu/@, the item is added on to the end of
the /@menu@/. The first position is 0.
-}
contextMenuInsert ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> b
    {- ^ /@item@/: the @/WebKitContextMenuItem/@ to add -}
    -> Int32
    {- ^ /@position@/: the position to insert the item -}
    -> m ()
contextMenuInsert menu item position = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    item' <- unsafeManagedPtrCastPtr item
    webkit_context_menu_insert menu' item' position
    touchManagedPtr menu
    touchManagedPtr item
    return ()

data ContextMenuInsertMethodInfo
instance (signature ~ (b -> Int32 -> m ()), MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) => O.MethodInfo ContextMenuInsertMethodInfo a signature where
    overloadedMethod _ = contextMenuInsert

-- method ContextMenu::last
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_last" webkit_context_menu_last :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO (Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem)

{- |
Gets the last item in the /@menu@/.
-}
contextMenuLast ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m WebKit2WebExtension.ContextMenuItem.ContextMenuItem
    {- ^ __Returns:__ the last @/WebKitContextMenuItem/@ of /@menu@/,
   or 'Nothing' if the @/WebKitContextMenu/@ is empty. -}
contextMenuLast menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    result <- webkit_context_menu_last menu'
    checkUnexpectedReturnNULL "contextMenuLast" result
    result' <- (newObject WebKit2WebExtension.ContextMenuItem.ContextMenuItem) result
    touchManagedPtr menu
    return result'

data ContextMenuLastMethodInfo
instance (signature ~ (m WebKit2WebExtension.ContextMenuItem.ContextMenuItem), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuLastMethodInfo a signature where
    overloadedMethod _ = contextMenuLast

-- method ContextMenu::move_item
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "item", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitContextMenuItem to add", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new position to move the item", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_move_item" webkit_context_menu_move_item :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem -> -- item : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})
    Int32 ->                                -- position : TBasicType TInt
    IO ()

{- |
Moves /@item@/ to the given position in the /@menu@/.
If /@position@/ is negative, or is larger than the number of items
in the @/WebKitContextMenu/@, the item is added on to the end of
the /@menu@/.
The first position is 0.
-}
contextMenuMoveItem ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> b
    {- ^ /@item@/: the @/WebKitContextMenuItem/@ to add -}
    -> Int32
    {- ^ /@position@/: the new position to move the item -}
    -> m ()
contextMenuMoveItem menu item position = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    item' <- unsafeManagedPtrCastPtr item
    webkit_context_menu_move_item menu' item' position
    touchManagedPtr menu
    touchManagedPtr item
    return ()

data ContextMenuMoveItemMethodInfo
instance (signature ~ (b -> Int32 -> m ()), MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) => O.MethodInfo ContextMenuMoveItemMethodInfo a signature where
    overloadedMethod _ = contextMenuMoveItem

-- method ContextMenu::prepend
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "item", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitContextMenuItem 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 "webkit_context_menu_prepend" webkit_context_menu_prepend :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem -> -- item : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})
    IO ()

{- |
Adds /@item@/ at the beginning of the /@menu@/.
-}
contextMenuPrepend ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> b
    {- ^ /@item@/: the @/WebKitContextMenuItem/@ to add -}
    -> m ()
contextMenuPrepend menu item = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    item' <- unsafeManagedPtrCastPtr item
    webkit_context_menu_prepend menu' item'
    touchManagedPtr menu
    touchManagedPtr item
    return ()

data ContextMenuPrependMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) => O.MethodInfo ContextMenuPrependMethodInfo a signature where
    overloadedMethod _ = contextMenuPrepend

-- method ContextMenu::remove
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "item", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #WebKitContextMenuItem 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 "webkit_context_menu_remove" webkit_context_menu_remove :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr WebKit2WebExtension.ContextMenuItem.ContextMenuItem -> -- item : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenuItem"})
    IO ()

{- |
Removes /@item@/ from the /@menu@/.
See also 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuRemoveAll' to remove all items.
-}
contextMenuRemove ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> b
    {- ^ /@item@/: the @/WebKitContextMenuItem/@ to remove -}
    -> m ()
contextMenuRemove menu item = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    item' <- unsafeManagedPtrCastPtr item
    webkit_context_menu_remove menu' item'
    touchManagedPtr menu
    touchManagedPtr item
    return ()

data ContextMenuRemoveMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsContextMenu a, WebKit2WebExtension.ContextMenuItem.IsContextMenuItem b) => O.MethodInfo ContextMenuRemoveMethodInfo a signature where
    overloadedMethod _ = contextMenuRemove

-- method ContextMenu::remove_all
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_remove_all" webkit_context_menu_remove_all :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    IO ()

{- |
Removes all items of the /@menu@/.
-}
contextMenuRemoveAll ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> m ()
contextMenuRemoveAll menu = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    webkit_context_menu_remove_all menu'
    touchManagedPtr menu
    return ()

data ContextMenuRemoveAllMethodInfo
instance (signature ~ (m ()), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuRemoveAllMethodInfo a signature where
    overloadedMethod _ = contextMenuRemoveAll

-- method ContextMenu::set_user_data
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "menu", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitContextMenu", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GVariant", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_context_menu_set_user_data" webkit_context_menu_set_user_data :: 
    Ptr ContextMenu ->                      -- menu : TInterface (Name {namespace = "WebKit2WebExtension", name = "ContextMenu"})
    Ptr GVariant ->                         -- user_data : TVariant
    IO ()

{- |
Sets user data to /@menu@/.
This function can be used from a Web Process extension to set user data
that can be retrieved from the UI Process using 'GI.WebKit2WebExtension.Objects.ContextMenu.contextMenuGetUserData'.
If the /@userData@/ 'GVariant' is floating, it is consumed.

@since 2.8
-}
contextMenuSetUserData ::
    (B.CallStack.HasCallStack, MonadIO m, IsContextMenu a) =>
    a
    {- ^ /@menu@/: a @/WebKitContextMenu/@ -}
    -> GVariant
    {- ^ /@userData@/: a 'GVariant' -}
    -> m ()
contextMenuSetUserData menu userData = liftIO $ do
    menu' <- unsafeManagedPtrCastPtr menu
    userData' <- unsafeManagedPtrGetPtr userData
    webkit_context_menu_set_user_data menu' userData'
    touchManagedPtr menu
    touchManagedPtr userData
    return ()

data ContextMenuSetUserDataMethodInfo
instance (signature ~ (GVariant -> m ()), MonadIO m, IsContextMenu a) => O.MethodInfo ContextMenuSetUserDataMethodInfo a signature where
    overloadedMethod _ = contextMenuSetUserData