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

module GI.Notify.Objects.Notification
    ( 

-- * Exported types
    Notification(..)                        ,
    IsNotification                          ,
    toNotification                          ,
    noNotification                          ,


 -- * Methods
-- ** addAction #method:addAction#
    NotificationAddActionMethodInfo         ,
    notificationAddAction                   ,


-- ** clearActions #method:clearActions#
    NotificationClearActionsMethodInfo      ,
    notificationClearActions                ,


-- ** clearHints #method:clearHints#
    NotificationClearHintsMethodInfo        ,
    notificationClearHints                  ,


-- ** close #method:close#
    NotificationCloseMethodInfo             ,
    notificationClose                       ,


-- ** getClosedReason #method:getClosedReason#
    NotificationGetClosedReasonMethodInfo   ,
    notificationGetClosedReason             ,


-- ** new #method:new#
    notificationNew                         ,


-- ** setAppName #method:setAppName#
    NotificationSetAppNameMethodInfo        ,
    notificationSetAppName                  ,


-- ** setCategory #method:setCategory#
    NotificationSetCategoryMethodInfo       ,
    notificationSetCategory                 ,


-- ** setHint #method:setHint#
    NotificationSetHintMethodInfo           ,
    notificationSetHint                     ,


-- ** setHintByte #method:setHintByte#
    NotificationSetHintByteMethodInfo       ,
    notificationSetHintByte                 ,


-- ** setHintByteArray #method:setHintByteArray#
    NotificationSetHintByteArrayMethodInfo  ,
    notificationSetHintByteArray            ,


-- ** setHintDouble #method:setHintDouble#
    NotificationSetHintDoubleMethodInfo     ,
    notificationSetHintDouble               ,


-- ** setHintInt32 #method:setHintInt32#
    NotificationSetHintInt32MethodInfo      ,
    notificationSetHintInt32                ,


-- ** setHintString #method:setHintString#
    NotificationSetHintStringMethodInfo     ,
    notificationSetHintString               ,


-- ** setHintUint32 #method:setHintUint32#
    NotificationSetHintUint32MethodInfo     ,
    notificationSetHintUint32               ,


-- ** setIconFromPixbuf #method:setIconFromPixbuf#
    NotificationSetIconFromPixbufMethodInfo ,
    notificationSetIconFromPixbuf           ,


-- ** setImageFromPixbuf #method:setImageFromPixbuf#
    NotificationSetImageFromPixbufMethodInfo,
    notificationSetImageFromPixbuf          ,


-- ** setTimeout #method:setTimeout#
    NotificationSetTimeoutMethodInfo        ,
    notificationSetTimeout                  ,


-- ** setUrgency #method:setUrgency#
    NotificationSetUrgencyMethodInfo        ,
    notificationSetUrgency                  ,


-- ** show #method:show#
    NotificationShowMethodInfo              ,
    notificationShow                        ,


-- ** update #method:update#
    NotificationUpdateMethodInfo            ,
    notificationUpdate                      ,




 -- * Properties
-- ** appName #attr:appName#
    NotificationAppNamePropertyInfo         ,
    constructNotificationAppName            ,
    getNotificationAppName                  ,
    notificationAppName                     ,
    setNotificationAppName                  ,


-- ** body #attr:body#
    NotificationBodyPropertyInfo            ,
    clearNotificationBody                   ,
    constructNotificationBody               ,
    getNotificationBody                     ,
    notificationBody                        ,
    setNotificationBody                     ,


-- ** closedReason #attr:closedReason#
    NotificationClosedReasonPropertyInfo    ,
    getNotificationClosedReason             ,
    notificationClosedReason                ,


-- ** iconName #attr:iconName#
    NotificationIconNamePropertyInfo        ,
    clearNotificationIconName               ,
    constructNotificationIconName           ,
    getNotificationIconName                 ,
    notificationIconName                    ,
    setNotificationIconName                 ,


-- ** id #attr:id#
    NotificationIdPropertyInfo              ,
    constructNotificationId                 ,
    getNotificationId                       ,
    notificationId                          ,
    setNotificationId                       ,


-- ** summary #attr:summary#
    NotificationSummaryPropertyInfo         ,
    clearNotificationSummary                ,
    constructNotificationSummary            ,
    getNotificationSummary                  ,
    notificationSummary                     ,
    setNotificationSummary                  ,




 -- * Signals
-- ** closed #signal:closed#
    C_NotificationClosedCallback            ,
    NotificationClosedCallback              ,
    NotificationClosedSignalInfo            ,
    afterNotificationClosed                 ,
    genClosure_NotificationClosed           ,
    mk_NotificationClosedCallback           ,
    noNotificationClosedCallback            ,
    onNotificationClosed                    ,
    wrap_NotificationClosedCallback         ,




    ) 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.GLib.Callbacks as GLib.Callbacks
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.GdkPixbuf.Objects.Pixbuf as GdkPixbuf.Pixbuf
import qualified GI.Notify.Callbacks as Notify.Callbacks
import {-# SOURCE #-} qualified GI.Notify.Enums as Notify.Enums

newtype Notification = Notification (ManagedPtr Notification)
foreign import ccall "notify_notification_get_type"
    c_notify_notification_get_type :: IO GType

instance GObject Notification where
    gobjectType _ = c_notify_notification_get_type
    

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

toNotification :: IsNotification o => o -> IO Notification
toNotification = unsafeCastTo Notification

noNotification :: Maybe Notification
noNotification = Nothing

type family ResolveNotificationMethod (t :: Symbol) (o :: *) :: * where
    ResolveNotificationMethod "addAction" o = NotificationAddActionMethodInfo
    ResolveNotificationMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveNotificationMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveNotificationMethod "clearActions" o = NotificationClearActionsMethodInfo
    ResolveNotificationMethod "clearHints" o = NotificationClearHintsMethodInfo
    ResolveNotificationMethod "close" o = NotificationCloseMethodInfo
    ResolveNotificationMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveNotificationMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveNotificationMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveNotificationMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveNotificationMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveNotificationMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveNotificationMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveNotificationMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveNotificationMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveNotificationMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveNotificationMethod "show" o = NotificationShowMethodInfo
    ResolveNotificationMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveNotificationMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveNotificationMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveNotificationMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveNotificationMethod "update" o = NotificationUpdateMethodInfo
    ResolveNotificationMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveNotificationMethod "getClosedReason" o = NotificationGetClosedReasonMethodInfo
    ResolveNotificationMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveNotificationMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveNotificationMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveNotificationMethod "setAppName" o = NotificationSetAppNameMethodInfo
    ResolveNotificationMethod "setCategory" o = NotificationSetCategoryMethodInfo
    ResolveNotificationMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveNotificationMethod "setHint" o = NotificationSetHintMethodInfo
    ResolveNotificationMethod "setHintByte" o = NotificationSetHintByteMethodInfo
    ResolveNotificationMethod "setHintByteArray" o = NotificationSetHintByteArrayMethodInfo
    ResolveNotificationMethod "setHintDouble" o = NotificationSetHintDoubleMethodInfo
    ResolveNotificationMethod "setHintInt32" o = NotificationSetHintInt32MethodInfo
    ResolveNotificationMethod "setHintString" o = NotificationSetHintStringMethodInfo
    ResolveNotificationMethod "setHintUint32" o = NotificationSetHintUint32MethodInfo
    ResolveNotificationMethod "setIconFromPixbuf" o = NotificationSetIconFromPixbufMethodInfo
    ResolveNotificationMethod "setImageFromPixbuf" o = NotificationSetImageFromPixbufMethodInfo
    ResolveNotificationMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveNotificationMethod "setTimeout" o = NotificationSetTimeoutMethodInfo
    ResolveNotificationMethod "setUrgency" o = NotificationSetUrgencyMethodInfo
    ResolveNotificationMethod l o = O.MethodResolutionFailed l o

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

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

-- signal Notification::closed
type NotificationClosedCallback =
    IO ()

noNotificationClosedCallback :: Maybe NotificationClosedCallback
noNotificationClosedCallback = Nothing

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

foreign import ccall "wrapper"
    mk_NotificationClosedCallback :: C_NotificationClosedCallback -> IO (FunPtr C_NotificationClosedCallback)

genClosure_NotificationClosed :: NotificationClosedCallback -> IO Closure
genClosure_NotificationClosed cb = do
    let cb' = wrap_NotificationClosedCallback cb
    mk_NotificationClosedCallback cb' >>= newCClosure


wrap_NotificationClosedCallback ::
    NotificationClosedCallback ->
    Ptr () ->
    Ptr () ->
    IO ()
wrap_NotificationClosedCallback _cb _ _ = do
    _cb 


onNotificationClosed :: (GObject a, MonadIO m) => a -> NotificationClosedCallback -> m SignalHandlerId
onNotificationClosed obj cb = liftIO $ connectNotificationClosed obj cb SignalConnectBefore
afterNotificationClosed :: (GObject a, MonadIO m) => a -> NotificationClosedCallback -> m SignalHandlerId
afterNotificationClosed obj cb = connectNotificationClosed obj cb SignalConnectAfter

connectNotificationClosed :: (GObject a, MonadIO m) =>
                             a -> NotificationClosedCallback -> SignalConnectMode -> m SignalHandlerId
connectNotificationClosed obj cb after = liftIO $ do
    let cb' = wrap_NotificationClosedCallback cb
    cb'' <- mk_NotificationClosedCallback cb'
    connectSignalFunPtr obj "closed" cb'' after

-- VVV Prop "app-name"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Just False)

getNotificationAppName :: (MonadIO m, IsNotification o) => o -> m (Maybe T.Text)
getNotificationAppName obj = liftIO $ getObjectPropertyString obj "app-name"

setNotificationAppName :: (MonadIO m, IsNotification o) => o -> T.Text -> m ()
setNotificationAppName obj val = liftIO $ setObjectPropertyString obj "app-name" (Just val)

constructNotificationAppName :: (IsNotification o) => T.Text -> IO (GValueConstruct o)
constructNotificationAppName val = constructObjectPropertyString "app-name" (Just val)

data NotificationAppNamePropertyInfo
instance AttrInfo NotificationAppNamePropertyInfo where
    type AttrAllowedOps NotificationAppNamePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint NotificationAppNamePropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint NotificationAppNamePropertyInfo = IsNotification
    type AttrGetType NotificationAppNamePropertyInfo = (Maybe T.Text)
    type AttrLabel NotificationAppNamePropertyInfo = "app-name"
    type AttrOrigin NotificationAppNamePropertyInfo = Notification
    attrGet _ = getNotificationAppName
    attrSet _ = setNotificationAppName
    attrConstruct _ = constructNotificationAppName
    attrClear _ = undefined

-- VVV Prop "body"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getNotificationBody :: (MonadIO m, IsNotification o) => o -> m (Maybe T.Text)
getNotificationBody obj = liftIO $ getObjectPropertyString obj "body"

setNotificationBody :: (MonadIO m, IsNotification o) => o -> T.Text -> m ()
setNotificationBody obj val = liftIO $ setObjectPropertyString obj "body" (Just val)

constructNotificationBody :: (IsNotification o) => T.Text -> IO (GValueConstruct o)
constructNotificationBody val = constructObjectPropertyString "body" (Just val)

clearNotificationBody :: (MonadIO m, IsNotification o) => o -> m ()
clearNotificationBody obj = liftIO $ setObjectPropertyString obj "body" (Nothing :: Maybe T.Text)

data NotificationBodyPropertyInfo
instance AttrInfo NotificationBodyPropertyInfo where
    type AttrAllowedOps NotificationBodyPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint NotificationBodyPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint NotificationBodyPropertyInfo = IsNotification
    type AttrGetType NotificationBodyPropertyInfo = (Maybe T.Text)
    type AttrLabel NotificationBodyPropertyInfo = "body"
    type AttrOrigin NotificationBodyPropertyInfo = Notification
    attrGet _ = getNotificationBody
    attrSet _ = setNotificationBody
    attrConstruct _ = constructNotificationBody
    attrClear _ = clearNotificationBody

-- VVV Prop "closed-reason"
   -- Type: TBasicType TInt
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

getNotificationClosedReason :: (MonadIO m, IsNotification o) => o -> m Int32
getNotificationClosedReason obj = liftIO $ getObjectPropertyInt32 obj "closed-reason"

data NotificationClosedReasonPropertyInfo
instance AttrInfo NotificationClosedReasonPropertyInfo where
    type AttrAllowedOps NotificationClosedReasonPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint NotificationClosedReasonPropertyInfo = (~) ()
    type AttrBaseTypeConstraint NotificationClosedReasonPropertyInfo = IsNotification
    type AttrGetType NotificationClosedReasonPropertyInfo = Int32
    type AttrLabel NotificationClosedReasonPropertyInfo = "closed-reason"
    type AttrOrigin NotificationClosedReasonPropertyInfo = Notification
    attrGet _ = getNotificationClosedReason
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

-- VVV Prop "icon-name"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getNotificationIconName :: (MonadIO m, IsNotification o) => o -> m (Maybe T.Text)
getNotificationIconName obj = liftIO $ getObjectPropertyString obj "icon-name"

setNotificationIconName :: (MonadIO m, IsNotification o) => o -> T.Text -> m ()
setNotificationIconName obj val = liftIO $ setObjectPropertyString obj "icon-name" (Just val)

constructNotificationIconName :: (IsNotification o) => T.Text -> IO (GValueConstruct o)
constructNotificationIconName val = constructObjectPropertyString "icon-name" (Just val)

clearNotificationIconName :: (MonadIO m, IsNotification o) => o -> m ()
clearNotificationIconName obj = liftIO $ setObjectPropertyString obj "icon-name" (Nothing :: Maybe T.Text)

data NotificationIconNamePropertyInfo
instance AttrInfo NotificationIconNamePropertyInfo where
    type AttrAllowedOps NotificationIconNamePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint NotificationIconNamePropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint NotificationIconNamePropertyInfo = IsNotification
    type AttrGetType NotificationIconNamePropertyInfo = (Maybe T.Text)
    type AttrLabel NotificationIconNamePropertyInfo = "icon-name"
    type AttrOrigin NotificationIconNamePropertyInfo = Notification
    attrGet _ = getNotificationIconName
    attrSet _ = setNotificationIconName
    attrConstruct _ = constructNotificationIconName
    attrClear _ = clearNotificationIconName

-- VVV Prop "id"
   -- Type: TBasicType TInt
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getNotificationId :: (MonadIO m, IsNotification o) => o -> m Int32
getNotificationId obj = liftIO $ getObjectPropertyInt32 obj "id"

setNotificationId :: (MonadIO m, IsNotification o) => o -> Int32 -> m ()
setNotificationId obj val = liftIO $ setObjectPropertyInt32 obj "id" val

constructNotificationId :: (IsNotification o) => Int32 -> IO (GValueConstruct o)
constructNotificationId val = constructObjectPropertyInt32 "id" val

data NotificationIdPropertyInfo
instance AttrInfo NotificationIdPropertyInfo where
    type AttrAllowedOps NotificationIdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint NotificationIdPropertyInfo = (~) Int32
    type AttrBaseTypeConstraint NotificationIdPropertyInfo = IsNotification
    type AttrGetType NotificationIdPropertyInfo = Int32
    type AttrLabel NotificationIdPropertyInfo = "id"
    type AttrOrigin NotificationIdPropertyInfo = Notification
    attrGet _ = getNotificationId
    attrSet _ = setNotificationId
    attrConstruct _ = constructNotificationId
    attrClear _ = undefined

-- VVV Prop "summary"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Nothing,Nothing)

getNotificationSummary :: (MonadIO m, IsNotification o) => o -> m (Maybe T.Text)
getNotificationSummary obj = liftIO $ getObjectPropertyString obj "summary"

setNotificationSummary :: (MonadIO m, IsNotification o) => o -> T.Text -> m ()
setNotificationSummary obj val = liftIO $ setObjectPropertyString obj "summary" (Just val)

constructNotificationSummary :: (IsNotification o) => T.Text -> IO (GValueConstruct o)
constructNotificationSummary val = constructObjectPropertyString "summary" (Just val)

clearNotificationSummary :: (MonadIO m, IsNotification o) => o -> m ()
clearNotificationSummary obj = liftIO $ setObjectPropertyString obj "summary" (Nothing :: Maybe T.Text)

data NotificationSummaryPropertyInfo
instance AttrInfo NotificationSummaryPropertyInfo where
    type AttrAllowedOps NotificationSummaryPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint NotificationSummaryPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint NotificationSummaryPropertyInfo = IsNotification
    type AttrGetType NotificationSummaryPropertyInfo = (Maybe T.Text)
    type AttrLabel NotificationSummaryPropertyInfo = "summary"
    type AttrOrigin NotificationSummaryPropertyInfo = Notification
    attrGet _ = getNotificationSummary
    attrSet _ = setNotificationSummary
    attrConstruct _ = constructNotificationSummary
    attrClear _ = clearNotificationSummary

instance O.HasAttributeList Notification
type instance O.AttributeList Notification = NotificationAttributeList
type NotificationAttributeList = ('[ '("appName", NotificationAppNamePropertyInfo), '("body", NotificationBodyPropertyInfo), '("closedReason", NotificationClosedReasonPropertyInfo), '("iconName", NotificationIconNamePropertyInfo), '("id", NotificationIdPropertyInfo), '("summary", NotificationSummaryPropertyInfo)] :: [(Symbol, *)])

notificationAppName :: AttrLabelProxy "appName"
notificationAppName = AttrLabelProxy

notificationBody :: AttrLabelProxy "body"
notificationBody = AttrLabelProxy

notificationClosedReason :: AttrLabelProxy "closedReason"
notificationClosedReason = AttrLabelProxy

notificationIconName :: AttrLabelProxy "iconName"
notificationIconName = AttrLabelProxy

notificationId :: AttrLabelProxy "id"
notificationId = AttrLabelProxy

notificationSummary :: AttrLabelProxy "summary"
notificationSummary = AttrLabelProxy

data NotificationClosedSignalInfo
instance SignalInfo NotificationClosedSignalInfo where
    type HaskellCallbackType NotificationClosedSignalInfo = NotificationClosedCallback
    connectSignal _ = connectNotificationClosed

type instance O.SignalList Notification = NotificationSignalList
type NotificationSignalList = ('[ '("closed", NotificationClosedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Notification::new
-- method type : Constructor
-- Args : [Arg {argCName = "summary", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The required summary text.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "body", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "The optional body text.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "icon", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "The optional icon theme icon name or filename.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Notify", name = "Notification"}))
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_new" notify_notification_new :: 
    CString ->                              -- summary : TBasicType TUTF8
    CString ->                              -- body : TBasicType TUTF8
    CString ->                              -- icon : TBasicType TUTF8
    IO (Ptr Notification)

{- |
Creates a new 'GI.Notify.Objects.Notification.Notification'. The summary text is required, but
all other parameters are optional.
-}
notificationNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@summary@/: The required summary text. -}
    -> Maybe (T.Text)
    {- ^ /@body@/: The optional body text. -}
    -> Maybe (T.Text)
    {- ^ /@icon@/: The optional icon theme icon name or filename. -}
    -> m Notification
    {- ^ __Returns:__ The new 'GI.Notify.Objects.Notification.Notification'. -}
notificationNew summary body icon = liftIO $ do
    summary' <- textToCString summary
    maybeBody <- case body of
        Nothing -> return nullPtr
        Just jBody -> do
            jBody' <- textToCString jBody
            return jBody'
    maybeIcon <- case icon of
        Nothing -> return nullPtr
        Just jIcon -> do
            jIcon' <- textToCString jIcon
            return jIcon'
    result <- notify_notification_new summary' maybeBody maybeIcon
    checkUnexpectedReturnNULL "notificationNew" result
    result' <- (wrapObject Notification) result
    freeMem summary'
    freeMem maybeBody
    freeMem maybeIcon
    return result'

-- method Notification::add_action
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The action ID.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "label", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The human-readable action label.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Notify", name = "ActionCallback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The action's callback function.", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 4, argDestroy = 5, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional custom data to pass to @callback.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "free_func", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An optional function to free @user_data when the notification\n            is destroyed.", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_add_action" notify_notification_add_action :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- action : TBasicType TUTF8
    CString ->                              -- label : TBasicType TUTF8
    FunPtr Notify.Callbacks.C_ActionCallback -> -- callback : TInterface (Name {namespace = "Notify", name = "ActionCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    FunPtr GLib.Callbacks.C_DestroyNotify -> -- free_func : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
    IO ()

{- |
Adds an action to a notification. When the action is invoked, the
specified callback function will be called, along with the value passed
to /@userData@/.
-}
notificationAddAction ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@action@/: The action ID. -}
    -> T.Text
    {- ^ /@label@/: The human-readable action label. -}
    -> Notify.Callbacks.ActionCallback
    {- ^ /@callback@/: The action\'s callback function. -}
    -> m ()
notificationAddAction notification action label callback = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    action' <- textToCString action
    label' <- textToCString label
    callback' <- Notify.Callbacks.mk_ActionCallback (Notify.Callbacks.wrap_ActionCallback Nothing (Notify.Callbacks.drop_closures_ActionCallback callback))
    let userData = castFunPtrToPtr callback'
    let freeFunc = safeFreeFunPtrPtr
    notify_notification_add_action notification' action' label' callback' userData freeFunc
    touchManagedPtr notification
    freeMem action'
    freeMem label'
    return ()

data NotificationAddActionMethodInfo
instance (signature ~ (T.Text -> T.Text -> Notify.Callbacks.ActionCallback -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationAddActionMethodInfo a signature where
    overloadedMethod _ = notificationAddAction

-- method Notification::clear_actions
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_clear_actions" notify_notification_clear_actions :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    IO ()

{- |
Clears all actions from the notification.
-}
notificationClearActions ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> m ()
notificationClearActions notification = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    notify_notification_clear_actions notification'
    touchManagedPtr notification
    return ()

data NotificationClearActionsMethodInfo
instance (signature ~ (m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationClearActionsMethodInfo a signature where
    overloadedMethod _ = notificationClearActions

-- method Notification::clear_hints
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_clear_hints" notify_notification_clear_hints :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    IO ()

{- |
Clears all hints from the notification.
-}
notificationClearHints ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> m ()
notificationClearHints notification = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    notify_notification_clear_hints notification'
    touchManagedPtr notification
    return ()

data NotificationClearHintsMethodInfo
instance (signature ~ (m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationClearHintsMethodInfo a signature where
    overloadedMethod _ = notificationClearHints

-- method Notification::close
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "notify_notification_close" notify_notification_close :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Synchronously tells the notification server to hide the notification on the screen.
-}
notificationClose ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
notificationClose notification = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    onException (do
        _ <- propagateGError $ notify_notification_close notification'
        touchManagedPtr notification
        return ()
     ) (do
        return ()
     )

data NotificationCloseMethodInfo
instance (signature ~ (m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationCloseMethodInfo a signature where
    overloadedMethod _ = notificationClose

-- method Notification::get_closed_reason
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_get_closed_reason" notify_notification_get_closed_reason :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    IO Int32

{- |
Returns the closed reason code for the notification. This is valid only
after the \"closed\" signal is emitted.
-}
notificationGetClosedReason ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> m Int32
    {- ^ __Returns:__ The closed reason code. -}
notificationGetClosedReason notification = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    result <- notify_notification_get_closed_reason notification'
    touchManagedPtr notification
    return result

data NotificationGetClosedReasonMethodInfo
instance (signature ~ (m Int32), MonadIO m, IsNotification a) => O.MethodInfo NotificationGetClosedReasonMethodInfo a signature where
    overloadedMethod _ = notificationGetClosedReason

-- method Notification::set_app_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #NotifyNotification", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "app_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the localised application name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_app_name" notify_notification_set_app_name :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- app_name : TBasicType TUTF8
    IO ()

{- |
Sets the application name for the notification. If this function is
not called or if /@appName@/ is 'Nothing', the application name will be
set from the value used in 'GI.Notify.Functions.init' or overridden with
'GI.Notify.Functions.setAppName'.

@since 0.7.3
-}
notificationSetAppName ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: a 'GI.Notify.Objects.Notification.Notification' -}
    -> T.Text
    {- ^ /@appName@/: the localised application name -}
    -> m ()
notificationSetAppName notification appName = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    appName' <- textToCString appName
    notify_notification_set_app_name notification' appName'
    touchManagedPtr notification
    freeMem appName'
    return ()

data NotificationSetAppNameMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetAppNameMethodInfo a signature where
    overloadedMethod _ = notificationSetAppName

-- method Notification::set_category
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "category", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The category.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_category" notify_notification_set_category :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- category : TBasicType TUTF8
    IO ()

{- |
Sets the category of this notification. This can be used by the
notification server to filter or display the data in a certain way.
-}
notificationSetCategory ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@category@/: The category. -}
    -> m ()
notificationSetCategory notification category = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    category' <- textToCString category
    notify_notification_set_category notification' category'
    touchManagedPtr notification
    freeMem category'
    return ()

data NotificationSetCategoryMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetCategoryMethodInfo a signature where
    overloadedMethod _ = notificationSetCategory

-- method Notification::set_hint
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #NotifyNotification", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the hint key", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the hint value, or %NULL to unset the hint", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint" notify_notification_set_hint :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    Ptr GVariant ->                         -- value : TVariant
    IO ()

{- |
Sets a hint for /@key@/ with value /@value@/. If /@value@/ is 'Nothing',
a previously set hint for /@key@/ is unset.

If /@value@/ is floating, it is consumed.

@since 0.6
-}
notificationSetHint ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: a 'GI.Notify.Objects.Notification.Notification' -}
    -> T.Text
    {- ^ /@key@/: the hint key -}
    -> Maybe (GVariant)
    {- ^ /@value@/: the hint value, or 'Nothing' to unset the hint -}
    -> m ()
notificationSetHint notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    maybeValue <- case value of
        Nothing -> return nullPtr
        Just jValue -> do
            jValue' <- unsafeManagedPtrGetPtr jValue
            return jValue'
    notify_notification_set_hint notification' key' maybeValue
    touchManagedPtr notification
    whenJust value touchManagedPtr
    freeMem key'
    return ()

data NotificationSetHintMethodInfo
instance (signature ~ (T.Text -> Maybe (GVariant) -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintMethodInfo a signature where
    overloadedMethod _ = notificationSetHint

-- method Notification::set_hint_byte
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_byte" notify_notification_set_hint_byte :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    Word8 ->                                -- value : TBasicType TUInt8
    IO ()

{-# DEPRECATED notificationSetHintByte ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with a byte value.
-}
notificationSetHintByte ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> Word8
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintByte notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    notify_notification_set_hint_byte notification' key' value
    touchManagedPtr notification
    freeMem key'
    return ()

data NotificationSetHintByteMethodInfo
instance (signature ~ (T.Text -> Word8 -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintByteMethodInfo a signature where
    overloadedMethod _ = notificationSetHintByte

-- method Notification::set_hint_byte_array
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The length of the byte array.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "len", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The length of the byte array.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_byte_array" notify_notification_set_hint_byte_array :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    Ptr Word8 ->                            -- value : TCArray False (-1) 3 (TBasicType TUInt8)
    Word64 ->                               -- len : TBasicType TUInt64
    IO ()

{-# DEPRECATED notificationSetHintByteArray ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with a byte array value. The length of /@value@/ must be passed
as /@len@/.
-}
notificationSetHintByteArray ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> ByteString
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintByteArray notification key value = liftIO $ do
    let len = fromIntegral $ B.length value
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    value' <- packByteString value
    notify_notification_set_hint_byte_array notification' key' value' len
    touchManagedPtr notification
    freeMem key'
    freeMem value'
    return ()

data NotificationSetHintByteArrayMethodInfo
instance (signature ~ (T.Text -> ByteString -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintByteArrayMethodInfo a signature where
    overloadedMethod _ = notificationSetHintByteArray

-- method Notification::set_hint_double
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_double" notify_notification_set_hint_double :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    CDouble ->                              -- value : TBasicType TDouble
    IO ()

{-# DEPRECATED notificationSetHintDouble ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with a double value.
-}
notificationSetHintDouble ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> Double
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintDouble notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    let value' = realToFrac value
    notify_notification_set_hint_double notification' key' value'
    touchManagedPtr notification
    freeMem key'
    return ()

data NotificationSetHintDoubleMethodInfo
instance (signature ~ (T.Text -> Double -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintDoubleMethodInfo a signature where
    overloadedMethod _ = notificationSetHintDouble

-- method Notification::set_hint_int32
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_int32" notify_notification_set_hint_int32 :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    Int32 ->                                -- value : TBasicType TInt
    IO ()

{-# DEPRECATED notificationSetHintInt32 ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with a 32-bit integer value.
-}
notificationSetHintInt32 ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> Int32
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintInt32 notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    notify_notification_set_hint_int32 notification' key' value
    touchManagedPtr notification
    freeMem key'
    return ()

data NotificationSetHintInt32MethodInfo
instance (signature ~ (T.Text -> Int32 -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintInt32MethodInfo a signature where
    overloadedMethod _ = notificationSetHintInt32

-- method Notification::set_hint_string
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_string" notify_notification_set_hint_string :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    CString ->                              -- value : TBasicType TUTF8
    IO ()

{-# DEPRECATED notificationSetHintString ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with a string value.
-}
notificationSetHintString ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> T.Text
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintString notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    value' <- textToCString value
    notify_notification_set_hint_string notification' key' value'
    touchManagedPtr notification
    freeMem key'
    freeMem value'
    return ()

data NotificationSetHintStringMethodInfo
instance (signature ~ (T.Text -> T.Text -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintStringMethodInfo a signature where
    overloadedMethod _ = notificationSetHintString

-- method Notification::set_hint_uint32
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "key", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The hint's value.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_hint_uint32" notify_notification_set_hint_uint32 :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- key : TBasicType TUTF8
    Word32 ->                               -- value : TBasicType TUInt
    IO ()

{-# DEPRECATED notificationSetHintUint32 ["(Since version 0.6.)","Use 'GI.Notify.Objects.Notification.notificationSetHint' instead"] #-}
{- |
Sets a hint with an unsigned 32-bit integer value.
-}
notificationSetHintUint32 ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> T.Text
    {- ^ /@key@/: The hint. -}
    -> Word32
    {- ^ /@value@/: The hint\'s value. -}
    -> m ()
notificationSetHintUint32 notification key value = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    key' <- textToCString key
    notify_notification_set_hint_uint32 notification' key' value
    touchManagedPtr notification
    freeMem key'
    return ()

data NotificationSetHintUint32MethodInfo
instance (signature ~ (T.Text -> Word32 -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetHintUint32MethodInfo a signature where
    overloadedMethod _ = notificationSetHintUint32

-- method Notification::set_icon_from_pixbuf
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "icon", argType = TInterface (Name {namespace = "GdkPixbuf", name = "Pixbuf"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The icon.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_icon_from_pixbuf" notify_notification_set_icon_from_pixbuf :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    Ptr GdkPixbuf.Pixbuf.Pixbuf ->          -- icon : TInterface (Name {namespace = "GdkPixbuf", name = "Pixbuf"})
    IO ()

{-# DEPRECATED notificationSetIconFromPixbuf ["use 'GI.Notify.Objects.Notification.notificationSetImageFromPixbuf' instead."] #-}
{- |
Sets the icon in the notification from a 'GI.GdkPixbuf.Objects.Pixbuf.Pixbuf'.
-}
notificationSetIconFromPixbuf ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a, GdkPixbuf.Pixbuf.IsPixbuf b) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> b
    {- ^ /@icon@/: The icon. -}
    -> m ()
notificationSetIconFromPixbuf notification icon = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    icon' <- unsafeManagedPtrCastPtr icon
    notify_notification_set_icon_from_pixbuf notification' icon'
    touchManagedPtr notification
    touchManagedPtr icon
    return ()

data NotificationSetIconFromPixbufMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsNotification a, GdkPixbuf.Pixbuf.IsPixbuf b) => O.MethodInfo NotificationSetIconFromPixbufMethodInfo a signature where
    overloadedMethod _ = notificationSetIconFromPixbuf

-- method Notification::set_image_from_pixbuf
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pixbuf", argType = TInterface (Name {namespace = "GdkPixbuf", name = "Pixbuf"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The image.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_image_from_pixbuf" notify_notification_set_image_from_pixbuf :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    Ptr GdkPixbuf.Pixbuf.Pixbuf ->          -- pixbuf : TInterface (Name {namespace = "GdkPixbuf", name = "Pixbuf"})
    IO ()

{- |
Sets the image in the notification from a 'GI.GdkPixbuf.Objects.Pixbuf.Pixbuf'.
-}
notificationSetImageFromPixbuf ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a, GdkPixbuf.Pixbuf.IsPixbuf b) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> b
    {- ^ /@pixbuf@/: The image. -}
    -> m ()
notificationSetImageFromPixbuf notification pixbuf = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    pixbuf' <- unsafeManagedPtrCastPtr pixbuf
    notify_notification_set_image_from_pixbuf notification' pixbuf'
    touchManagedPtr notification
    touchManagedPtr pixbuf
    return ()

data NotificationSetImageFromPixbufMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsNotification a, GdkPixbuf.Pixbuf.IsPixbuf b) => O.MethodInfo NotificationSetImageFromPixbufMethodInfo a signature where
    overloadedMethod _ = notificationSetImageFromPixbuf

-- method Notification::set_timeout
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timeout", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The timeout in milliseconds.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_timeout" notify_notification_set_timeout :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    Int32 ->                                -- timeout : TBasicType TInt
    IO ()

{- |
Sets the timeout of the notification. To set the default time, pass
'GI.Notify.Constants.EXPIRES_DEFAULT' as /@timeout@/. To set the notification to never
expire, pass 'GI.Notify.Constants.EXPIRES_NEVER'.

Note that the timeout may be ignored by the server.
-}
notificationSetTimeout ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> Int32
    {- ^ /@timeout@/: The timeout in milliseconds. -}
    -> m ()
notificationSetTimeout notification timeout = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    notify_notification_set_timeout notification' timeout
    touchManagedPtr notification
    return ()

data NotificationSetTimeoutMethodInfo
instance (signature ~ (Int32 -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetTimeoutMethodInfo a signature where
    overloadedMethod _ = notificationSetTimeout

-- method Notification::set_urgency
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "urgency", argType = TInterface (Name {namespace = "Notify", name = "Urgency"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The urgency level.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_set_urgency" notify_notification_set_urgency :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CUInt ->                                -- urgency : TInterface (Name {namespace = "Notify", name = "Urgency"})
    IO ()

{- |
Sets the urgency level of this notification.

See: 'GI.Notify.Enums.Urgency'
-}
notificationSetUrgency ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> Notify.Enums.Urgency
    {- ^ /@urgency@/: The urgency level. -}
    -> m ()
notificationSetUrgency notification urgency = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    let urgency' = (fromIntegral . fromEnum) urgency
    notify_notification_set_urgency notification' urgency'
    touchManagedPtr notification
    return ()

data NotificationSetUrgencyMethodInfo
instance (signature ~ (Notify.Enums.Urgency -> m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationSetUrgencyMethodInfo a signature where
    overloadedMethod _ = notificationSetUrgency

-- method Notification::show
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "notify_notification_show" notify_notification_show :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Tells the notification server to display the notification on the screen.
-}
notificationShow ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification. -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
notificationShow notification = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    onException (do
        _ <- propagateGError $ notify_notification_show notification'
        touchManagedPtr notification
        return ()
     ) (do
        return ()
     )

data NotificationShowMethodInfo
instance (signature ~ (m ()), MonadIO m, IsNotification a) => O.MethodInfo NotificationShowMethodInfo a signature where
    overloadedMethod _ = notificationShow

-- method Notification::update
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "notification", argType = TInterface (Name {namespace = "Notify", name = "Notification"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The notification to update.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "summary", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The new required summary text.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "body", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "The optional body text.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "icon", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "The optional icon theme icon name or filename.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "notify_notification_update" notify_notification_update :: 
    Ptr Notification ->                     -- notification : TInterface (Name {namespace = "Notify", name = "Notification"})
    CString ->                              -- summary : TBasicType TUTF8
    CString ->                              -- body : TBasicType TUTF8
    CString ->                              -- icon : TBasicType TUTF8
    IO CInt

{- |
Updates the notification text and icon. This won\'t send the update out
and display it on the screen. For that, you will need to call
'GI.Notify.Objects.Notification.notificationShow'.
-}
notificationUpdate ::
    (B.CallStack.HasCallStack, MonadIO m, IsNotification a) =>
    a
    {- ^ /@notification@/: The notification to update. -}
    -> T.Text
    {- ^ /@summary@/: The new required summary text. -}
    -> Maybe (T.Text)
    {- ^ /@body@/: The optional body text. -}
    -> Maybe (T.Text)
    {- ^ /@icon@/: The optional icon theme icon name or filename. -}
    -> m Bool
    {- ^ __Returns:__ 'True', unless an invalid parameter was passed. -}
notificationUpdate notification summary body icon = liftIO $ do
    notification' <- unsafeManagedPtrCastPtr notification
    summary' <- textToCString summary
    maybeBody <- case body of
        Nothing -> return nullPtr
        Just jBody -> do
            jBody' <- textToCString jBody
            return jBody'
    maybeIcon <- case icon of
        Nothing -> return nullPtr
        Just jIcon -> do
            jIcon' <- textToCString jIcon
            return jIcon'
    result <- notify_notification_update notification' summary' maybeBody maybeIcon
    let result' = (/= 0) result
    touchManagedPtr notification
    freeMem summary'
    freeMem maybeBody
    freeMem maybeIcon
    return result'

data NotificationUpdateMethodInfo
instance (signature ~ (T.Text -> Maybe (T.Text) -> Maybe (T.Text) -> m Bool), MonadIO m, IsNotification a) => O.MethodInfo NotificationUpdateMethodInfo a signature where
    overloadedMethod _ = notificationUpdate