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

'GI.WebKit.Objects.SoupAuthDialog.SoupAuthDialog' is a 'GI.Soup.Interfaces.SessionFeature.SessionFeature' that you can attach to your
'GI.Soup.Objects.Session.Session' to provide a simple authentication dialog while
handling HTTP basic auth.
-}

module GI.WebKit.Objects.SoupAuthDialog
    ( 

-- * Exported types
    SoupAuthDialog(..)                      ,
    IsSoupAuthDialog                        ,
    toSoupAuthDialog                        ,
    noSoupAuthDialog                        ,


 -- * Signals
-- ** currentToplevel #signal:currentToplevel#
    C_SoupAuthDialogCurrentToplevelCallback ,
    SoupAuthDialogCurrentToplevelCallback   ,
    SoupAuthDialogCurrentToplevelSignalInfo ,
    afterSoupAuthDialogCurrentToplevel      ,
    genClosure_SoupAuthDialogCurrentToplevel,
    mk_SoupAuthDialogCurrentToplevelCallback,
    noSoupAuthDialogCurrentToplevelCallback ,
    onSoupAuthDialogCurrentToplevel         ,
    wrap_SoupAuthDialogCurrentToplevelCallback,




    ) 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 qualified GI.Gtk.Objects.Widget as Gtk.Widget
import qualified GI.Soup.Interfaces.SessionFeature as Soup.SessionFeature
import qualified GI.Soup.Objects.Message as Soup.Message

newtype SoupAuthDialog = SoupAuthDialog (ManagedPtr SoupAuthDialog)
foreign import ccall "webkit_soup_auth_dialog_get_type"
    c_webkit_soup_auth_dialog_get_type :: IO GType

instance GObject SoupAuthDialog where
    gobjectType _ = c_webkit_soup_auth_dialog_get_type
    

class GObject o => IsSoupAuthDialog o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError SoupAuthDialog a) =>
    IsSoupAuthDialog a
#endif
instance IsSoupAuthDialog SoupAuthDialog
instance GObject.Object.IsObject SoupAuthDialog
instance Soup.SessionFeature.IsSessionFeature SoupAuthDialog

toSoupAuthDialog :: IsSoupAuthDialog o => o -> IO SoupAuthDialog
toSoupAuthDialog = unsafeCastTo SoupAuthDialog

noSoupAuthDialog :: Maybe SoupAuthDialog
noSoupAuthDialog = Nothing

type family ResolveSoupAuthDialogMethod (t :: Symbol) (o :: *) :: * where
    ResolveSoupAuthDialogMethod "addFeature" o = Soup.SessionFeature.SessionFeatureAddFeatureMethodInfo
    ResolveSoupAuthDialogMethod "attach" o = Soup.SessionFeature.SessionFeatureAttachMethodInfo
    ResolveSoupAuthDialogMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveSoupAuthDialogMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveSoupAuthDialogMethod "detach" o = Soup.SessionFeature.SessionFeatureDetachMethodInfo
    ResolveSoupAuthDialogMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveSoupAuthDialogMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveSoupAuthDialogMethod "hasFeature" o = Soup.SessionFeature.SessionFeatureHasFeatureMethodInfo
    ResolveSoupAuthDialogMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveSoupAuthDialogMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveSoupAuthDialogMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveSoupAuthDialogMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveSoupAuthDialogMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveSoupAuthDialogMethod "removeFeature" o = Soup.SessionFeature.SessionFeatureRemoveFeatureMethodInfo
    ResolveSoupAuthDialogMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveSoupAuthDialogMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveSoupAuthDialogMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveSoupAuthDialogMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveSoupAuthDialogMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveSoupAuthDialogMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveSoupAuthDialogMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveSoupAuthDialogMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveSoupAuthDialogMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveSoupAuthDialogMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveSoupAuthDialogMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveSoupAuthDialogMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveSoupAuthDialogMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveSoupAuthDialogMethod l o = O.MethodResolutionFailed l o

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

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

-- signal SoupAuthDialog::current-toplevel
type SoupAuthDialogCurrentToplevelCallback =
    Soup.Message.Message ->
    IO Gtk.Widget.Widget

noSoupAuthDialogCurrentToplevelCallback :: Maybe SoupAuthDialogCurrentToplevelCallback
noSoupAuthDialogCurrentToplevelCallback = Nothing

type C_SoupAuthDialogCurrentToplevelCallback =
    Ptr () ->                               -- object
    Ptr Soup.Message.Message ->
    Ptr () ->                               -- user_data
    IO (Ptr Gtk.Widget.Widget)

foreign import ccall "wrapper"
    mk_SoupAuthDialogCurrentToplevelCallback :: C_SoupAuthDialogCurrentToplevelCallback -> IO (FunPtr C_SoupAuthDialogCurrentToplevelCallback)

genClosure_SoupAuthDialogCurrentToplevel :: SoupAuthDialogCurrentToplevelCallback -> IO Closure
genClosure_SoupAuthDialogCurrentToplevel cb = do
    let cb' = wrap_SoupAuthDialogCurrentToplevelCallback cb
    mk_SoupAuthDialogCurrentToplevelCallback cb' >>= newCClosure


wrap_SoupAuthDialogCurrentToplevelCallback ::
    SoupAuthDialogCurrentToplevelCallback ->
    Ptr () ->
    Ptr Soup.Message.Message ->
    Ptr () ->
    IO (Ptr Gtk.Widget.Widget)
wrap_SoupAuthDialogCurrentToplevelCallback _cb _ message _ = do
    message' <- (newObject Soup.Message.Message) message
    result <- _cb  message'
    result' <- unsafeManagedPtrCastPtr result
    return result'


onSoupAuthDialogCurrentToplevel :: (IsSoupAuthDialog a, MonadIO m) => a -> SoupAuthDialogCurrentToplevelCallback -> m SignalHandlerId
onSoupAuthDialogCurrentToplevel obj cb = liftIO $ do
    let cb' = wrap_SoupAuthDialogCurrentToplevelCallback cb
    cb'' <- mk_SoupAuthDialogCurrentToplevelCallback cb'
    connectSignalFunPtr obj "current-toplevel" cb'' SignalConnectBefore

afterSoupAuthDialogCurrentToplevel :: (IsSoupAuthDialog a, MonadIO m) => a -> SoupAuthDialogCurrentToplevelCallback -> m SignalHandlerId
afterSoupAuthDialogCurrentToplevel obj cb = liftIO $ do
    let cb' = wrap_SoupAuthDialogCurrentToplevelCallback cb
    cb'' <- mk_SoupAuthDialogCurrentToplevelCallback cb'
    connectSignalFunPtr obj "current-toplevel" cb'' SignalConnectAfter


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

data SoupAuthDialogCurrentToplevelSignalInfo
instance SignalInfo SoupAuthDialogCurrentToplevelSignalInfo where
    type HaskellCallbackType SoupAuthDialogCurrentToplevelSignalInfo = SoupAuthDialogCurrentToplevelCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_SoupAuthDialogCurrentToplevelCallback cb
        cb'' <- mk_SoupAuthDialogCurrentToplevelCallback cb'
        connectSignalFunPtr obj "current-toplevel" cb'' connectMode

type instance O.SignalList SoupAuthDialog = SoupAuthDialogSignalList
type SoupAuthDialogSignalList = ('[ '("currentToplevel", SoupAuthDialogCurrentToplevelSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])