{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- /No description available in the introspection data./

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.WebKit2.Objects.FaviconDatabase
    ( 

-- * Exported types
    FaviconDatabase(..)                     ,
    IsFaviconDatabase                       ,
    toFaviconDatabase                       ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [clear]("GI.WebKit2.Objects.FaviconDatabase#g:method:clear"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getFavicon]("GI.WebKit2.Objects.FaviconDatabase#g:method:getFavicon"), [getFaviconFinish]("GI.WebKit2.Objects.FaviconDatabase#g:method:getFaviconFinish"), [getFaviconUri]("GI.WebKit2.Objects.FaviconDatabase#g:method:getFaviconUri"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveFaviconDatabaseMethod            ,
#endif

-- ** clear #method:clear#

#if defined(ENABLE_OVERLOADING)
    FaviconDatabaseClearMethodInfo          ,
#endif
    faviconDatabaseClear                    ,


-- ** getFavicon #method:getFavicon#

#if defined(ENABLE_OVERLOADING)
    FaviconDatabaseGetFaviconMethodInfo     ,
#endif
    faviconDatabaseGetFavicon               ,


-- ** getFaviconFinish #method:getFaviconFinish#

#if defined(ENABLE_OVERLOADING)
    FaviconDatabaseGetFaviconFinishMethodInfo,
#endif
    faviconDatabaseGetFaviconFinish         ,


-- ** getFaviconUri #method:getFaviconUri#

#if defined(ENABLE_OVERLOADING)
    FaviconDatabaseGetFaviconUriMethodInfo  ,
#endif
    faviconDatabaseGetFaviconUri            ,




 -- * Signals


-- ** faviconChanged #signal:faviconChanged#

    C_FaviconDatabaseFaviconChangedCallback ,
    FaviconDatabaseFaviconChangedCallback   ,
#if defined(ENABLE_OVERLOADING)
    FaviconDatabaseFaviconChangedSignalInfo ,
#endif
    afterFaviconDatabaseFaviconChanged      ,
    genClosure_FaviconDatabaseFaviconChanged,
    mk_FaviconDatabaseFaviconChangedCallback,
    noFaviconDatabaseFaviconChangedCallback ,
    onFaviconDatabaseFaviconChanged         ,
    wrap_FaviconDatabaseFaviconChangedCallback,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.Cairo.Structs.Surface as Cairo.Surface
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Callbacks as Gio.Callbacks
import qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import qualified GI.Gio.Objects.Cancellable as Gio.Cancellable

-- | Memory-managed wrapper type.
newtype FaviconDatabase = FaviconDatabase (SP.ManagedPtr FaviconDatabase)
    deriving (FaviconDatabase -> FaviconDatabase -> Bool
(FaviconDatabase -> FaviconDatabase -> Bool)
-> (FaviconDatabase -> FaviconDatabase -> Bool)
-> Eq FaviconDatabase
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FaviconDatabase -> FaviconDatabase -> Bool
$c/= :: FaviconDatabase -> FaviconDatabase -> Bool
== :: FaviconDatabase -> FaviconDatabase -> Bool
$c== :: FaviconDatabase -> FaviconDatabase -> Bool
Eq)

instance SP.ManagedPtrNewtype FaviconDatabase where
    toManagedPtr :: FaviconDatabase -> ManagedPtr FaviconDatabase
toManagedPtr (FaviconDatabase ManagedPtr FaviconDatabase
p) = ManagedPtr FaviconDatabase
p

foreign import ccall "webkit_favicon_database_get_type"
    c_webkit_favicon_database_get_type :: IO B.Types.GType

instance B.Types.TypedObject FaviconDatabase where
    glibType :: IO GType
glibType = IO GType
c_webkit_favicon_database_get_type

instance B.Types.GObject FaviconDatabase

-- | Type class for types which can be safely cast to `FaviconDatabase`, for instance with `toFaviconDatabase`.
class (SP.GObject o, O.IsDescendantOf FaviconDatabase o) => IsFaviconDatabase o
instance (SP.GObject o, O.IsDescendantOf FaviconDatabase o) => IsFaviconDatabase o

instance O.HasParentTypes FaviconDatabase
type instance O.ParentTypes FaviconDatabase = '[GObject.Object.Object]

-- | Cast to `FaviconDatabase`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toFaviconDatabase :: (MIO.MonadIO m, IsFaviconDatabase o) => o -> m FaviconDatabase
toFaviconDatabase :: forall (m :: * -> *) o.
(MonadIO m, IsFaviconDatabase o) =>
o -> m FaviconDatabase
toFaviconDatabase = IO FaviconDatabase -> m FaviconDatabase
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO FaviconDatabase -> m FaviconDatabase)
-> (o -> IO FaviconDatabase) -> o -> m FaviconDatabase
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr FaviconDatabase -> FaviconDatabase)
-> o -> IO FaviconDatabase
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr FaviconDatabase -> FaviconDatabase
FaviconDatabase

-- | Convert 'FaviconDatabase' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe FaviconDatabase) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_webkit_favicon_database_get_type
    gvalueSet_ :: Ptr GValue -> Maybe FaviconDatabase -> IO ()
gvalueSet_ Ptr GValue
gv Maybe FaviconDatabase
P.Nothing = Ptr GValue -> Ptr FaviconDatabase -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr FaviconDatabase
forall a. Ptr a
FP.nullPtr :: FP.Ptr FaviconDatabase)
    gvalueSet_ Ptr GValue
gv (P.Just FaviconDatabase
obj) = FaviconDatabase -> (Ptr FaviconDatabase -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr FaviconDatabase
obj (Ptr GValue -> Ptr FaviconDatabase -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe FaviconDatabase)
gvalueGet_ Ptr GValue
gv = do
        Ptr FaviconDatabase
ptr <- Ptr GValue -> IO (Ptr FaviconDatabase)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr FaviconDatabase)
        if Ptr FaviconDatabase
ptr Ptr FaviconDatabase -> Ptr FaviconDatabase -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr FaviconDatabase
forall a. Ptr a
FP.nullPtr
        then FaviconDatabase -> Maybe FaviconDatabase
forall a. a -> Maybe a
P.Just (FaviconDatabase -> Maybe FaviconDatabase)
-> IO FaviconDatabase -> IO (Maybe FaviconDatabase)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr FaviconDatabase -> FaviconDatabase)
-> Ptr FaviconDatabase -> IO FaviconDatabase
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr FaviconDatabase -> FaviconDatabase
FaviconDatabase Ptr FaviconDatabase
ptr
        else Maybe FaviconDatabase -> IO (Maybe FaviconDatabase)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe FaviconDatabase
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveFaviconDatabaseMethod (t :: Symbol) (o :: *) :: * where
    ResolveFaviconDatabaseMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveFaviconDatabaseMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveFaviconDatabaseMethod "clear" o = FaviconDatabaseClearMethodInfo
    ResolveFaviconDatabaseMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveFaviconDatabaseMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveFaviconDatabaseMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveFaviconDatabaseMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveFaviconDatabaseMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveFaviconDatabaseMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveFaviconDatabaseMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveFaviconDatabaseMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveFaviconDatabaseMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveFaviconDatabaseMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveFaviconDatabaseMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveFaviconDatabaseMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveFaviconDatabaseMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveFaviconDatabaseMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveFaviconDatabaseMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveFaviconDatabaseMethod "getFavicon" o = FaviconDatabaseGetFaviconMethodInfo
    ResolveFaviconDatabaseMethod "getFaviconFinish" o = FaviconDatabaseGetFaviconFinishMethodInfo
    ResolveFaviconDatabaseMethod "getFaviconUri" o = FaviconDatabaseGetFaviconUriMethodInfo
    ResolveFaviconDatabaseMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveFaviconDatabaseMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveFaviconDatabaseMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveFaviconDatabaseMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveFaviconDatabaseMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveFaviconDatabaseMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveFaviconDatabaseMethod t FaviconDatabase, O.OverloadedMethod info FaviconDatabase p) => OL.IsLabel t (FaviconDatabase -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveFaviconDatabaseMethod t FaviconDatabase, O.OverloadedMethod info FaviconDatabase p, R.HasField t FaviconDatabase p) => R.HasField t FaviconDatabase p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveFaviconDatabaseMethod t FaviconDatabase, O.OverloadedMethodInfo info FaviconDatabase) => OL.IsLabel t (O.MethodProxy info FaviconDatabase) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- signal FaviconDatabase::favicon-changed
-- | This signal is emitted when the favicon URI of /@pageUri@/ has
-- been changed to /@faviconUri@/ in the database. You can connect
-- to this signal and call 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon'
-- to get the favicon. If you are interested in the favicon of a
-- t'GI.WebKit2.Objects.WebView.WebView' it\'s easier to use the t'GI.WebKit2.Objects.WebView.WebView':@/favicon/@
-- property. See 'GI.WebKit2.Objects.WebView.webViewGetFavicon' for more details.
type FaviconDatabaseFaviconChangedCallback =
    T.Text
    -- ^ /@pageUri@/: the URI of the Web page containing the icon
    -> T.Text
    -- ^ /@faviconUri@/: the URI of the favicon
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `FaviconDatabaseFaviconChangedCallback`@.
noFaviconDatabaseFaviconChangedCallback :: Maybe FaviconDatabaseFaviconChangedCallback
noFaviconDatabaseFaviconChangedCallback :: Maybe FaviconDatabaseFaviconChangedCallback
noFaviconDatabaseFaviconChangedCallback = Maybe FaviconDatabaseFaviconChangedCallback
forall a. Maybe a
Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_FaviconDatabaseFaviconChangedCallback =
    Ptr () ->                               -- object
    CString ->
    CString ->
    Ptr () ->                               -- user_data
    IO ()

-- | Generate a function pointer callable from C code, from a `C_FaviconDatabaseFaviconChangedCallback`.
foreign import ccall "wrapper"
    mk_FaviconDatabaseFaviconChangedCallback :: C_FaviconDatabaseFaviconChangedCallback -> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)

-- | Wrap the callback into a `GClosure`.
genClosure_FaviconDatabaseFaviconChanged :: MonadIO m => FaviconDatabaseFaviconChangedCallback -> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
genClosure_FaviconDatabaseFaviconChanged :: forall (m :: * -> *).
MonadIO m =>
FaviconDatabaseFaviconChangedCallback
-> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
genClosure_FaviconDatabaseFaviconChanged FaviconDatabaseFaviconChangedCallback
cb = IO (GClosure C_FaviconDatabaseFaviconChangedCallback)
-> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_FaviconDatabaseFaviconChangedCallback)
 -> m (GClosure C_FaviconDatabaseFaviconChangedCallback))
-> IO (GClosure C_FaviconDatabaseFaviconChangedCallback)
-> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_FaviconDatabaseFaviconChangedCallback
cb' = FaviconDatabaseFaviconChangedCallback
-> C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback FaviconDatabaseFaviconChangedCallback
cb
    C_FaviconDatabaseFaviconChangedCallback
-> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)
mk_FaviconDatabaseFaviconChangedCallback C_FaviconDatabaseFaviconChangedCallback
cb' IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)
-> (FunPtr C_FaviconDatabaseFaviconChangedCallback
    -> IO (GClosure C_FaviconDatabaseFaviconChangedCallback))
-> IO (GClosure C_FaviconDatabaseFaviconChangedCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_FaviconDatabaseFaviconChangedCallback
-> IO (GClosure C_FaviconDatabaseFaviconChangedCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `FaviconDatabaseFaviconChangedCallback` into a `C_FaviconDatabaseFaviconChangedCallback`.
wrap_FaviconDatabaseFaviconChangedCallback ::
    FaviconDatabaseFaviconChangedCallback ->
    C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback :: FaviconDatabaseFaviconChangedCallback
-> C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback FaviconDatabaseFaviconChangedCallback
_cb Ptr ()
_ CString
pageUri CString
faviconUri Ptr ()
_ = do
    Text
pageUri' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
pageUri
    Text
faviconUri' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
faviconUri
    FaviconDatabaseFaviconChangedCallback
_cb  Text
pageUri' Text
faviconUri'


-- | Connect a signal handler for the [faviconChanged](#signal:faviconChanged) signal, to be run before the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.on' faviconDatabase #faviconChanged callback
-- @
-- 
-- 
onFaviconDatabaseFaviconChanged :: (IsFaviconDatabase a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
onFaviconDatabaseFaviconChanged :: forall a (m :: * -> *).
(IsFaviconDatabase a, MonadIO m) =>
a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
onFaviconDatabaseFaviconChanged a
obj FaviconDatabaseFaviconChangedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_FaviconDatabaseFaviconChangedCallback
cb' = FaviconDatabaseFaviconChangedCallback
-> C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback FaviconDatabaseFaviconChangedCallback
cb
    FunPtr C_FaviconDatabaseFaviconChangedCallback
cb'' <- C_FaviconDatabaseFaviconChangedCallback
-> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)
mk_FaviconDatabaseFaviconChangedCallback C_FaviconDatabaseFaviconChangedCallback
cb'
    a
-> Text
-> FunPtr C_FaviconDatabaseFaviconChangedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"favicon-changed" FunPtr C_FaviconDatabaseFaviconChangedCallback
cb'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [faviconChanged](#signal:faviconChanged) signal, to be run after the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.after' faviconDatabase #faviconChanged callback
-- @
-- 
-- 
afterFaviconDatabaseFaviconChanged :: (IsFaviconDatabase a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
afterFaviconDatabaseFaviconChanged :: forall a (m :: * -> *).
(IsFaviconDatabase a, MonadIO m) =>
a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
afterFaviconDatabaseFaviconChanged a
obj FaviconDatabaseFaviconChangedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_FaviconDatabaseFaviconChangedCallback
cb' = FaviconDatabaseFaviconChangedCallback
-> C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback FaviconDatabaseFaviconChangedCallback
cb
    FunPtr C_FaviconDatabaseFaviconChangedCallback
cb'' <- C_FaviconDatabaseFaviconChangedCallback
-> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)
mk_FaviconDatabaseFaviconChangedCallback C_FaviconDatabaseFaviconChangedCallback
cb'
    a
-> Text
-> FunPtr C_FaviconDatabaseFaviconChangedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"favicon-changed" FunPtr C_FaviconDatabaseFaviconChangedCallback
cb'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data FaviconDatabaseFaviconChangedSignalInfo
instance SignalInfo FaviconDatabaseFaviconChangedSignalInfo where
    type HaskellCallbackType FaviconDatabaseFaviconChangedSignalInfo = FaviconDatabaseFaviconChangedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
        cb'' <- mk_FaviconDatabaseFaviconChangedCallback cb'
        connectSignalFunPtr obj "favicon-changed" cb'' connectMode detail

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList FaviconDatabase
type instance O.AttributeList FaviconDatabase = FaviconDatabaseAttributeList
type FaviconDatabaseAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList FaviconDatabase = FaviconDatabaseSignalList
type FaviconDatabaseSignalList = ('[ '("faviconChanged", FaviconDatabaseFaviconChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method FaviconDatabase::clear
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "database"
--           , argType =
--               TInterface
--                 Name { namespace = "WebKit2" , name = "FaviconDatabase" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitFaviconDatabase"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_favicon_database_clear" webkit_favicon_database_clear :: 
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    IO ()

-- | Clears all icons from the database.
faviconDatabaseClear ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a) =>
    a
    -- ^ /@database@/: a t'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
    -> m ()
faviconDatabaseClear :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsFaviconDatabase a) =>
a -> m ()
faviconDatabaseClear a
database = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr FaviconDatabase
database' <- a -> IO (Ptr FaviconDatabase)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
database
    Ptr FaviconDatabase -> IO ()
webkit_favicon_database_clear Ptr FaviconDatabase
database'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
database
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data FaviconDatabaseClearMethodInfo
instance (signature ~ (m ()), MonadIO m, IsFaviconDatabase a) => O.OverloadedMethod FaviconDatabaseClearMethodInfo a signature where
    overloadedMethod = faviconDatabaseClear

instance O.OverloadedMethodInfo FaviconDatabaseClearMethodInfo a where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseClear",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-webkit2-4.0.27/docs/GI-WebKit2-Objects-FaviconDatabase.html#v:faviconDatabaseClear"
        }


#endif

-- method FaviconDatabase::get_favicon
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "database"
--           , argType =
--               TInterface
--                 Name { namespace = "WebKit2" , name = "FaviconDatabase" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitFaviconDatabase"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "page_uri"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just "URI of the page for which we want to retrieve the favicon"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cancellable"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "Cancellable" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "A #GCancellable or %NULL."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "callback"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "AsyncReadyCallback" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "A #GAsyncReadyCallback to call when the request is\n           satisfied or %NULL if you don't care about the result."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeAsync
--           , argClosure = 4
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "user_data"
--           , argType = TBasicType TPtr
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "The data to pass to @callback."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_favicon_database_get_favicon" webkit_favicon_database_get_favicon :: 
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    CString ->                              -- page_uri : TBasicType TUTF8
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

-- | Asynchronously obtains a t'GI.Cairo.Structs.Surface.Surface' of the favicon for the
-- given page URI. It returns the cached icon if it\'s in the database
-- asynchronously waiting for the icon to be read from the database.
-- 
-- This is an asynchronous method. When the operation is finished, callback will
-- be invoked. You can then call 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconFinish'
-- to get the result of the operation.
-- 
-- You must call 'GI.WebKit2.Objects.WebContext.webContextSetFaviconDatabaseDirectory' for
-- the t'GI.WebKit2.Objects.WebContext.WebContext' associated with this t'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
-- before attempting to use this function; otherwise,
-- 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconFinish' will return
-- 'GI.WebKit2.Enums.FaviconDatabaseErrorNotInitialized'.
faviconDatabaseGetFavicon ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a, Gio.Cancellable.IsCancellable b) =>
    a
    -- ^ /@database@/: a t'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
    -> T.Text
    -- ^ /@pageUri@/: URI of the page for which we want to retrieve the favicon
    -> Maybe (b)
    -- ^ /@cancellable@/: A t'GI.Gio.Objects.Cancellable.Cancellable' or 'P.Nothing'.
    -> Maybe (Gio.Callbacks.AsyncReadyCallback)
    -- ^ /@callback@/: A t'GI.Gio.Callbacks.AsyncReadyCallback' to call when the request is
    --            satisfied or 'P.Nothing' if you don\'t care about the result.
    -> m ()
faviconDatabaseGetFavicon :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsFaviconDatabase a, IsCancellable b) =>
a -> Text -> Maybe b -> Maybe AsyncReadyCallback -> m ()
faviconDatabaseGetFavicon a
database Text
pageUri Maybe b
cancellable Maybe AsyncReadyCallback
callback = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr FaviconDatabase
database' <- a -> IO (Ptr FaviconDatabase)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
database
    CString
pageUri' <- Text -> IO CString
textToCString Text
pageUri
    Ptr Cancellable
maybeCancellable <- case Maybe b
cancellable of
        Maybe b
Nothing -> Ptr Cancellable -> IO (Ptr Cancellable)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Cancellable
forall a. Ptr a
nullPtr
        Just b
jCancellable -> do
            Ptr Cancellable
jCancellable' <- b -> IO (Ptr Cancellable)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
jCancellable
            Ptr Cancellable -> IO (Ptr Cancellable)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Cancellable
jCancellable'
    FunPtr C_AsyncReadyCallback
maybeCallback <- case Maybe AsyncReadyCallback
callback of
        Maybe AsyncReadyCallback
Nothing -> FunPtr C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr Any -> FunPtr C_AsyncReadyCallback
forall a b. Ptr a -> FunPtr b
castPtrToFunPtr Ptr Any
forall a. Ptr a
nullPtr)
        Just AsyncReadyCallback
jCallback -> do
            Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback <- IO (Ptr (FunPtr C_AsyncReadyCallback))
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
            FunPtr C_AsyncReadyCallback
jCallback' <- C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
Gio.Callbacks.mk_AsyncReadyCallback (Maybe (Ptr (FunPtr C_AsyncReadyCallback))
-> AsyncReadyCallback_WithClosures -> C_AsyncReadyCallback
Gio.Callbacks.wrap_AsyncReadyCallback (Ptr (FunPtr C_AsyncReadyCallback)
-> Maybe (Ptr (FunPtr C_AsyncReadyCallback))
forall a. a -> Maybe a
Just Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback) (AsyncReadyCallback -> AsyncReadyCallback_WithClosures
Gio.Callbacks.drop_closures_AsyncReadyCallback AsyncReadyCallback
jCallback))
            Ptr (FunPtr C_AsyncReadyCallback)
-> FunPtr C_AsyncReadyCallback -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback FunPtr C_AsyncReadyCallback
jCallback'
            FunPtr C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
forall (m :: * -> *) a. Monad m => a -> m a
return FunPtr C_AsyncReadyCallback
jCallback'
    let userData :: Ptr a
userData = Ptr a
forall a. Ptr a
nullPtr
    Ptr FaviconDatabase
-> CString
-> Ptr Cancellable
-> FunPtr C_AsyncReadyCallback
-> Ptr ()
-> IO ()
webkit_favicon_database_get_favicon Ptr FaviconDatabase
database' CString
pageUri' Ptr Cancellable
maybeCancellable FunPtr C_AsyncReadyCallback
maybeCallback Ptr ()
forall a. Ptr a
userData
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
database
    Maybe b -> (b -> IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust Maybe b
cancellable b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
pageUri'
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data FaviconDatabaseGetFaviconMethodInfo
instance (signature ~ (T.Text -> Maybe (b) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsFaviconDatabase a, Gio.Cancellable.IsCancellable b) => O.OverloadedMethod FaviconDatabaseGetFaviconMethodInfo a signature where
    overloadedMethod = faviconDatabaseGetFavicon

instance O.OverloadedMethodInfo FaviconDatabaseGetFaviconMethodInfo a where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-webkit2-4.0.27/docs/GI-WebKit2-Objects-FaviconDatabase.html#v:faviconDatabaseGetFavicon"
        }


#endif

-- method FaviconDatabase::get_favicon_finish
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "database"
--           , argType =
--               TInterface
--                 Name { namespace = "WebKit2" , name = "FaviconDatabase" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitFaviconDatabase"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "result"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "AsyncResult" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "A #GAsyncResult obtained from the #GAsyncReadyCallback passed to webkit_favicon_database_get_favicon()"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "cairo" , name = "Surface" })
-- throws : True
-- Skip return : False

foreign import ccall "webkit_favicon_database_get_favicon_finish" webkit_favicon_database_get_favicon_finish :: 
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    Ptr Gio.AsyncResult.AsyncResult ->      -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr Cairo.Surface.Surface)

-- | Finishes an operation started with 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon'.
faviconDatabaseGetFaviconFinish ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a, Gio.AsyncResult.IsAsyncResult b) =>
    a
    -- ^ /@database@/: a t'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
    -> b
    -- ^ /@result@/: A t'GI.Gio.Interfaces.AsyncResult.AsyncResult' obtained from the t'GI.Gio.Callbacks.AsyncReadyCallback' passed to 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon'
    -> m Cairo.Surface.Surface
    -- ^ __Returns:__ a new reference to a t'GI.Cairo.Structs.Surface.Surface', or
    -- 'P.Nothing' in case of error. /(Can throw 'Data.GI.Base.GError.GError')/
faviconDatabaseGetFaviconFinish :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsFaviconDatabase a, IsAsyncResult b) =>
a -> b -> m Surface
faviconDatabaseGetFaviconFinish a
database b
result_ = IO Surface -> m Surface
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Surface -> m Surface) -> IO Surface -> m Surface
forall a b. (a -> b) -> a -> b
$ do
    Ptr FaviconDatabase
database' <- a -> IO (Ptr FaviconDatabase)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
database
    Ptr AsyncResult
result_' <- b -> IO (Ptr AsyncResult)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
result_
    IO Surface -> IO () -> IO Surface
forall a b. IO a -> IO b -> IO a
onException (do
        Ptr Surface
result <- (Ptr (Ptr GError) -> IO (Ptr Surface)) -> IO (Ptr Surface)
forall a. (Ptr (Ptr GError) -> IO a) -> IO a
propagateGError ((Ptr (Ptr GError) -> IO (Ptr Surface)) -> IO (Ptr Surface))
-> (Ptr (Ptr GError) -> IO (Ptr Surface)) -> IO (Ptr Surface)
forall a b. (a -> b) -> a -> b
$ Ptr FaviconDatabase
-> Ptr AsyncResult -> Ptr (Ptr GError) -> IO (Ptr Surface)
webkit_favicon_database_get_favicon_finish Ptr FaviconDatabase
database' Ptr AsyncResult
result_'
        Text -> Ptr Surface -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"faviconDatabaseGetFaviconFinish" Ptr Surface
result
        Surface
result' <- ((ManagedPtr Surface -> Surface) -> Ptr Surface -> IO Surface
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr Surface -> Surface
Cairo.Surface.Surface) Ptr Surface
result
        a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
database
        b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
result_
        Surface -> IO Surface
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
result'
     ) (do
        () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
     )

#if defined(ENABLE_OVERLOADING)
data FaviconDatabaseGetFaviconFinishMethodInfo
instance (signature ~ (b -> m Cairo.Surface.Surface), MonadIO m, IsFaviconDatabase a, Gio.AsyncResult.IsAsyncResult b) => O.OverloadedMethod FaviconDatabaseGetFaviconFinishMethodInfo a signature where
    overloadedMethod = faviconDatabaseGetFaviconFinish

instance O.OverloadedMethodInfo FaviconDatabaseGetFaviconFinishMethodInfo a where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconFinish",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-webkit2-4.0.27/docs/GI-WebKit2-Objects-FaviconDatabase.html#v:faviconDatabaseGetFaviconFinish"
        }


#endif

-- method FaviconDatabase::get_favicon_uri
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "database"
--           , argType =
--               TInterface
--                 Name { namespace = "WebKit2" , name = "FaviconDatabase" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitFaviconDatabase"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "page_uri"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "URI of the page containing the icon"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_favicon_database_get_favicon_uri" webkit_favicon_database_get_favicon_uri :: 
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    CString ->                              -- page_uri : TBasicType TUTF8
    IO CString

-- | Obtains the URI of the favicon for the given /@pageUri@/.
faviconDatabaseGetFaviconUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a) =>
    a
    -- ^ /@database@/: a t'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
    -> T.Text
    -- ^ /@pageUri@/: URI of the page containing the icon
    -> m (Maybe T.Text)
    -- ^ __Returns:__ a newly allocated URI for the favicon, or 'P.Nothing' if the
    -- database doesn\'t have a favicon for /@pageUri@/.
faviconDatabaseGetFaviconUri :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsFaviconDatabase a) =>
a -> Text -> m (Maybe Text)
faviconDatabaseGetFaviconUri a
database Text
pageUri = IO (Maybe Text) -> m (Maybe Text)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe Text) -> m (Maybe Text))
-> IO (Maybe Text) -> m (Maybe Text)
forall a b. (a -> b) -> a -> b
$ do
    Ptr FaviconDatabase
database' <- a -> IO (Ptr FaviconDatabase)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
database
    CString
pageUri' <- Text -> IO CString
textToCString Text
pageUri
    CString
result <- Ptr FaviconDatabase -> CString -> IO CString
webkit_favicon_database_get_favicon_uri Ptr FaviconDatabase
database' CString
pageUri'
    Maybe Text
maybeResult <- CString -> (CString -> IO Text) -> IO (Maybe Text)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull CString
result ((CString -> IO Text) -> IO (Maybe Text))
-> (CString -> IO Text) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
result' -> do
        Text
result'' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
result'
        CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
result'
        Text -> IO Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
result''
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
database
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
pageUri'
    Maybe Text -> IO (Maybe Text)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Text
maybeResult

#if defined(ENABLE_OVERLOADING)
data FaviconDatabaseGetFaviconUriMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsFaviconDatabase a) => O.OverloadedMethod FaviconDatabaseGetFaviconUriMethodInfo a signature where
    overloadedMethod = faviconDatabaseGetFaviconUri

instance O.OverloadedMethodInfo FaviconDatabaseGetFaviconUriMethodInfo a where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconUri",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-webkit2-4.0.27/docs/GI-WebKit2-Objects-FaviconDatabase.html#v:faviconDatabaseGetFaviconUri"
        }


#endif