{-# 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                       ,
    noFaviconDatabase                       ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded methods#

#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.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL

import qualified GI.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 (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)
foreign import ccall "webkit_favicon_database_get_type"
    c_webkit_favicon_database_get_type :: IO GType

instance GObject FaviconDatabase where
    gobjectType :: IO GType
gobjectType = IO GType
c_webkit_favicon_database_get_type
    

-- | Convert 'FaviconDatabase' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue FaviconDatabase where
    toGValue :: FaviconDatabase -> IO GValue
toGValue o :: FaviconDatabase
o = do
        GType
gtype <- IO GType
c_webkit_favicon_database_get_type
        FaviconDatabase -> (Ptr FaviconDatabase -> IO GValue) -> IO GValue
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr FaviconDatabase
o (GType
-> (GValue -> Ptr FaviconDatabase -> IO ())
-> Ptr FaviconDatabase
-> IO GValue
forall a. GType -> (GValue -> a -> IO ()) -> a -> IO GValue
B.GValue.buildGValue GType
gtype GValue -> Ptr FaviconDatabase -> IO ()
forall a. GObject a => GValue -> Ptr a -> IO ()
B.GValue.set_object)
        
    fromGValue :: GValue -> IO FaviconDatabase
fromGValue gv :: GValue
gv = do
        Ptr FaviconDatabase
ptr <- GValue -> IO (Ptr FaviconDatabase)
forall b. GObject b => GValue -> IO (Ptr b)
B.GValue.get_object GValue
gv :: IO (Ptr FaviconDatabase)
        (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
        
    

-- | Type class for types which can be safely cast to `FaviconDatabase`, for instance with `toFaviconDatabase`.
class (GObject o, O.IsDescendantOf FaviconDatabase o) => IsFaviconDatabase o
instance (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 :: (MonadIO m, IsFaviconDatabase o) => o -> m FaviconDatabase
toFaviconDatabase :: o -> m FaviconDatabase
toFaviconDatabase = IO FaviconDatabase -> m FaviconDatabase
forall (m :: * -> *) a. MonadIO m => IO a -> m a
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, GObject o, GObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
unsafeCastTo ManagedPtr FaviconDatabase -> FaviconDatabase
FaviconDatabase

-- | A convenience alias for `Nothing` :: `Maybe` `FaviconDatabase`.
noFaviconDatabase :: Maybe FaviconDatabase
noFaviconDatabase :: Maybe FaviconDatabase
noFaviconDatabase = Maybe FaviconDatabase
forall a. Maybe a
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.MethodInfo 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

#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 :: FaviconDatabaseFaviconChangedCallback
-> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
genClosure_FaviconDatabaseFaviconChanged cb :: 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 _cb :: FaviconDatabaseFaviconChangedCallback
_cb _ pageUri :: CString
pageUri faviconUri :: CString
faviconUri _ = 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 :: a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
onFaviconDatabaseFaviconChanged obj :: a
obj cb :: 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 "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 :: a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
afterFaviconDatabaseFaviconChanged obj :: a
obj cb :: 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 "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 :: a -> m ()
faviconDatabaseClear database :: 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.MethodInfo FaviconDatabaseClearMethodInfo a signature where
    overloadedMethod = 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 :: a -> Text -> Maybe b -> Maybe AsyncReadyCallback -> m ()
faviconDatabaseGetFavicon database :: a
database pageUri :: Text
pageUri cancellable :: Maybe b
cancellable callback :: 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
        Nothing -> Ptr Cancellable -> IO (Ptr Cancellable)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Cancellable
forall a. Ptr a
nullPtr
        Just jCancellable :: 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
        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 jCallback :: 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.MethodInfo FaviconDatabaseGetFaviconMethodInfo a signature where
    overloadedMethod = 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 :: a -> b -> m Surface
faviconDatabaseGetFaviconFinish database :: a
database result_ :: 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 "faviconDatabaseGetFaviconFinish" Ptr Surface
result
        Surface
result' <- ((ManagedPtr Surface -> Surface) -> Ptr Surface -> IO Surface
forall a.
(HasCallStack, BoxedObject 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.MethodInfo FaviconDatabaseGetFaviconFinishMethodInfo a signature where
    overloadedMethod = 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 :: a -> Text -> m (Maybe Text)
faviconDatabaseGetFaviconUri database :: a
database pageUri :: 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
$ \result' :: 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.MethodInfo FaviconDatabaseGetFaviconUriMethodInfo a signature where
    overloadedMethod = faviconDatabaseGetFaviconUri

#endif