{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- t'GI.Gtk.Objects.GestureClick.GestureClick' is a t'GI.Gtk.Objects.Gesture.Gesture' implementation able to recognize
-- multiple clicks on a nearby zone, which can be listened for through
-- the [pressed]("GI.Gtk.Objects.GestureClick#g:signal:pressed") signal. Whenever time or distance
-- between clicks exceed the GTK defaults, [stopped]("GI.Gtk.Objects.GestureClick#g:signal:stopped")
-- is emitted, and the click counter is reset.

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

module GI.Gtk.Objects.GestureClick
    ( 

-- * Exported types
    GestureClick(..)                        ,
    IsGestureClick                          ,
    toGestureClick                          ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [group]("GI.Gtk.Objects.Gesture#g:method:group"), [handlesSequence]("GI.Gtk.Objects.Gesture#g:method:handlesSequence"), [isActive]("GI.Gtk.Objects.Gesture#g:method:isActive"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [isGroupedWith]("GI.Gtk.Objects.Gesture#g:method:isGroupedWith"), [isRecognized]("GI.Gtk.Objects.Gesture#g:method:isRecognized"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [reset]("GI.Gtk.Objects.EventController#g:method:reset"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [ungroup]("GI.Gtk.Objects.Gesture#g:method:ungroup"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getBoundingBox]("GI.Gtk.Objects.Gesture#g:method:getBoundingBox"), [getBoundingBoxCenter]("GI.Gtk.Objects.Gesture#g:method:getBoundingBoxCenter"), [getButton]("GI.Gtk.Objects.GestureSingle#g:method:getButton"), [getCurrentButton]("GI.Gtk.Objects.GestureSingle#g:method:getCurrentButton"), [getCurrentEvent]("GI.Gtk.Objects.EventController#g:method:getCurrentEvent"), [getCurrentEventDevice]("GI.Gtk.Objects.EventController#g:method:getCurrentEventDevice"), [getCurrentEventState]("GI.Gtk.Objects.EventController#g:method:getCurrentEventState"), [getCurrentEventTime]("GI.Gtk.Objects.EventController#g:method:getCurrentEventTime"), [getCurrentSequence]("GI.Gtk.Objects.GestureSingle#g:method:getCurrentSequence"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getDevice]("GI.Gtk.Objects.Gesture#g:method:getDevice"), [getExclusive]("GI.Gtk.Objects.GestureSingle#g:method:getExclusive"), [getGroup]("GI.Gtk.Objects.Gesture#g:method:getGroup"), [getLastEvent]("GI.Gtk.Objects.Gesture#g:method:getLastEvent"), [getLastUpdatedSequence]("GI.Gtk.Objects.Gesture#g:method:getLastUpdatedSequence"), [getName]("GI.Gtk.Objects.EventController#g:method:getName"), [getPoint]("GI.Gtk.Objects.Gesture#g:method:getPoint"), [getPropagationLimit]("GI.Gtk.Objects.EventController#g:method:getPropagationLimit"), [getPropagationPhase]("GI.Gtk.Objects.EventController#g:method:getPropagationPhase"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getSequenceState]("GI.Gtk.Objects.Gesture#g:method:getSequenceState"), [getSequences]("GI.Gtk.Objects.Gesture#g:method:getSequences"), [getTouchOnly]("GI.Gtk.Objects.GestureSingle#g:method:getTouchOnly"), [getWidget]("GI.Gtk.Objects.EventController#g:method:getWidget").
-- 
-- ==== Setters
-- [setButton]("GI.Gtk.Objects.GestureSingle#g:method:setButton"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setExclusive]("GI.Gtk.Objects.GestureSingle#g:method:setExclusive"), [setName]("GI.Gtk.Objects.EventController#g:method:setName"), [setPropagationLimit]("GI.Gtk.Objects.EventController#g:method:setPropagationLimit"), [setPropagationPhase]("GI.Gtk.Objects.EventController#g:method:setPropagationPhase"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty"), [setSequenceState]("GI.Gtk.Objects.Gesture#g:method:setSequenceState"), [setState]("GI.Gtk.Objects.Gesture#g:method:setState"), [setTouchOnly]("GI.Gtk.Objects.GestureSingle#g:method:setTouchOnly").

#if defined(ENABLE_OVERLOADING)
    ResolveGestureClickMethod               ,
#endif

-- ** new #method:new#

    gestureClickNew                         ,




 -- * Signals


-- ** pressed #signal:pressed#

    C_GestureClickPressedCallback           ,
    GestureClickPressedCallback             ,
#if defined(ENABLE_OVERLOADING)
    GestureClickPressedSignalInfo           ,
#endif
    afterGestureClickPressed                ,
    genClosure_GestureClickPressed          ,
    mk_GestureClickPressedCallback          ,
    noGestureClickPressedCallback           ,
    onGestureClickPressed                   ,
    wrap_GestureClickPressedCallback        ,


-- ** released #signal:released#

    C_GestureClickReleasedCallback          ,
    GestureClickReleasedCallback            ,
#if defined(ENABLE_OVERLOADING)
    GestureClickReleasedSignalInfo          ,
#endif
    afterGestureClickReleased               ,
    genClosure_GestureClickReleased         ,
    mk_GestureClickReleasedCallback         ,
    noGestureClickReleasedCallback          ,
    onGestureClickReleased                  ,
    wrap_GestureClickReleasedCallback       ,


-- ** stopped #signal:stopped#

    C_GestureClickStoppedCallback           ,
    GestureClickStoppedCallback             ,
#if defined(ENABLE_OVERLOADING)
    GestureClickStoppedSignalInfo           ,
#endif
    afterGestureClickStopped                ,
    genClosure_GestureClickStopped          ,
    mk_GestureClickStoppedCallback          ,
    noGestureClickStoppedCallback           ,
    onGestureClickStopped                   ,
    wrap_GestureClickStoppedCallback        ,


-- ** unpairedRelease #signal:unpairedRelease#

    C_GestureClickUnpairedReleaseCallback   ,
    GestureClickUnpairedReleaseCallback     ,
#if defined(ENABLE_OVERLOADING)
    GestureClickUnpairedReleaseSignalInfo   ,
#endif
    afterGestureClickUnpairedRelease        ,
    genClosure_GestureClickUnpairedRelease  ,
    mk_GestureClickUnpairedReleaseCallback  ,
    noGestureClickUnpairedReleaseCallback   ,
    onGestureClickUnpairedRelease           ,
    wrap_GestureClickUnpairedReleaseCallback,




    ) where

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

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gdk.Structs.EventSequence as Gdk.EventSequence
import {-# SOURCE #-} qualified GI.Gtk.Objects.EventController as Gtk.EventController
import {-# SOURCE #-} qualified GI.Gtk.Objects.Gesture as Gtk.Gesture
import {-# SOURCE #-} qualified GI.Gtk.Objects.GestureSingle as Gtk.GestureSingle

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

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

foreign import ccall "gtk_gesture_click_get_type"
    c_gtk_gesture_click_get_type :: IO B.Types.GType

instance B.Types.TypedObject GestureClick where
    glibType :: IO GType
glibType = IO GType
c_gtk_gesture_click_get_type

instance B.Types.GObject GestureClick

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

instance O.HasParentTypes GestureClick
type instance O.ParentTypes GestureClick = '[Gtk.GestureSingle.GestureSingle, Gtk.Gesture.Gesture, Gtk.EventController.EventController, GObject.Object.Object]

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

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

#if defined(ENABLE_OVERLOADING)
type family ResolveGestureClickMethod (t :: Symbol) (o :: *) :: * where
    ResolveGestureClickMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveGestureClickMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveGestureClickMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveGestureClickMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveGestureClickMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveGestureClickMethod "group" o = Gtk.Gesture.GestureGroupMethodInfo
    ResolveGestureClickMethod "handlesSequence" o = Gtk.Gesture.GestureHandlesSequenceMethodInfo
    ResolveGestureClickMethod "isActive" o = Gtk.Gesture.GestureIsActiveMethodInfo
    ResolveGestureClickMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveGestureClickMethod "isGroupedWith" o = Gtk.Gesture.GestureIsGroupedWithMethodInfo
    ResolveGestureClickMethod "isRecognized" o = Gtk.Gesture.GestureIsRecognizedMethodInfo
    ResolveGestureClickMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveGestureClickMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveGestureClickMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveGestureClickMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveGestureClickMethod "reset" o = Gtk.EventController.EventControllerResetMethodInfo
    ResolveGestureClickMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveGestureClickMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveGestureClickMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveGestureClickMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveGestureClickMethod "ungroup" o = Gtk.Gesture.GestureUngroupMethodInfo
    ResolveGestureClickMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveGestureClickMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveGestureClickMethod "getBoundingBox" o = Gtk.Gesture.GestureGetBoundingBoxMethodInfo
    ResolveGestureClickMethod "getBoundingBoxCenter" o = Gtk.Gesture.GestureGetBoundingBoxCenterMethodInfo
    ResolveGestureClickMethod "getButton" o = Gtk.GestureSingle.GestureSingleGetButtonMethodInfo
    ResolveGestureClickMethod "getCurrentButton" o = Gtk.GestureSingle.GestureSingleGetCurrentButtonMethodInfo
    ResolveGestureClickMethod "getCurrentEvent" o = Gtk.EventController.EventControllerGetCurrentEventMethodInfo
    ResolveGestureClickMethod "getCurrentEventDevice" o = Gtk.EventController.EventControllerGetCurrentEventDeviceMethodInfo
    ResolveGestureClickMethod "getCurrentEventState" o = Gtk.EventController.EventControllerGetCurrentEventStateMethodInfo
    ResolveGestureClickMethod "getCurrentEventTime" o = Gtk.EventController.EventControllerGetCurrentEventTimeMethodInfo
    ResolveGestureClickMethod "getCurrentSequence" o = Gtk.GestureSingle.GestureSingleGetCurrentSequenceMethodInfo
    ResolveGestureClickMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveGestureClickMethod "getDevice" o = Gtk.Gesture.GestureGetDeviceMethodInfo
    ResolveGestureClickMethod "getExclusive" o = Gtk.GestureSingle.GestureSingleGetExclusiveMethodInfo
    ResolveGestureClickMethod "getGroup" o = Gtk.Gesture.GestureGetGroupMethodInfo
    ResolveGestureClickMethod "getLastEvent" o = Gtk.Gesture.GestureGetLastEventMethodInfo
    ResolveGestureClickMethod "getLastUpdatedSequence" o = Gtk.Gesture.GestureGetLastUpdatedSequenceMethodInfo
    ResolveGestureClickMethod "getName" o = Gtk.EventController.EventControllerGetNameMethodInfo
    ResolveGestureClickMethod "getPoint" o = Gtk.Gesture.GestureGetPointMethodInfo
    ResolveGestureClickMethod "getPropagationLimit" o = Gtk.EventController.EventControllerGetPropagationLimitMethodInfo
    ResolveGestureClickMethod "getPropagationPhase" o = Gtk.EventController.EventControllerGetPropagationPhaseMethodInfo
    ResolveGestureClickMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveGestureClickMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveGestureClickMethod "getSequenceState" o = Gtk.Gesture.GestureGetSequenceStateMethodInfo
    ResolveGestureClickMethod "getSequences" o = Gtk.Gesture.GestureGetSequencesMethodInfo
    ResolveGestureClickMethod "getTouchOnly" o = Gtk.GestureSingle.GestureSingleGetTouchOnlyMethodInfo
    ResolveGestureClickMethod "getWidget" o = Gtk.EventController.EventControllerGetWidgetMethodInfo
    ResolveGestureClickMethod "setButton" o = Gtk.GestureSingle.GestureSingleSetButtonMethodInfo
    ResolveGestureClickMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveGestureClickMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveGestureClickMethod "setExclusive" o = Gtk.GestureSingle.GestureSingleSetExclusiveMethodInfo
    ResolveGestureClickMethod "setName" o = Gtk.EventController.EventControllerSetNameMethodInfo
    ResolveGestureClickMethod "setPropagationLimit" o = Gtk.EventController.EventControllerSetPropagationLimitMethodInfo
    ResolveGestureClickMethod "setPropagationPhase" o = Gtk.EventController.EventControllerSetPropagationPhaseMethodInfo
    ResolveGestureClickMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveGestureClickMethod "setSequenceState" o = Gtk.Gesture.GestureSetSequenceStateMethodInfo
    ResolveGestureClickMethod "setState" o = Gtk.Gesture.GestureSetStateMethodInfo
    ResolveGestureClickMethod "setTouchOnly" o = Gtk.GestureSingle.GestureSingleSetTouchOnlyMethodInfo
    ResolveGestureClickMethod l o = O.MethodResolutionFailed l o

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

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

#endif

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

#endif

-- signal GestureClick::pressed
-- | This signal is emitted whenever a button or touch press happens.
type GestureClickPressedCallback =
    Int32
    -- ^ /@nPress@/: how many touch\/button presses happened with this one
    -> Double
    -- ^ /@x@/: The X coordinate, in widget allocation coordinates
    -> Double
    -- ^ /@y@/: The Y coordinate, in widget allocation coordinates
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `GestureClickPressedCallback`@.
noGestureClickPressedCallback :: Maybe GestureClickPressedCallback
noGestureClickPressedCallback :: Maybe GestureClickPressedCallback
noGestureClickPressedCallback = Maybe GestureClickPressedCallback
forall a. Maybe a
Nothing

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

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

-- | Wrap the callback into a `GClosure`.
genClosure_GestureClickPressed :: MonadIO m => GestureClickPressedCallback -> m (GClosure C_GestureClickPressedCallback)
genClosure_GestureClickPressed :: forall (m :: * -> *).
MonadIO m =>
GestureClickPressedCallback
-> m (GClosure C_GestureClickPressedCallback)
genClosure_GestureClickPressed GestureClickPressedCallback
cb = IO (GClosure C_GestureClickPressedCallback)
-> m (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_GestureClickPressedCallback)
 -> m (GClosure C_GestureClickPressedCallback))
-> IO (GClosure C_GestureClickPressedCallback)
-> m (GClosure C_GestureClickPressedCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickPressedCallback GestureClickPressedCallback
cb
    C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickPressedCallback C_GestureClickPressedCallback
cb' IO (FunPtr C_GestureClickPressedCallback)
-> (FunPtr C_GestureClickPressedCallback
    -> IO (GClosure C_GestureClickPressedCallback))
-> IO (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_GestureClickPressedCallback
-> IO (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `GestureClickPressedCallback` into a `C_GestureClickPressedCallback`.
wrap_GestureClickPressedCallback ::
    GestureClickPressedCallback ->
    C_GestureClickPressedCallback
wrap_GestureClickPressedCallback :: GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickPressedCallback GestureClickPressedCallback
_cb Ptr ()
_ Int32
nPress CDouble
x CDouble
y Ptr ()
_ = do
    let x' :: Double
x' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
x
    let y' :: Double
y' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
y
    GestureClickPressedCallback
_cb  Int32
nPress Double
x' Double
y'


-- | Connect a signal handler for the [pressed](#signal:pressed) 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' gestureClick #pressed callback
-- @
-- 
-- 
onGestureClickPressed :: (IsGestureClick a, MonadIO m) => a -> GestureClickPressedCallback -> m SignalHandlerId
onGestureClickPressed :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickPressedCallback -> m SignalHandlerId
onGestureClickPressed a
obj GestureClickPressedCallback
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_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickPressedCallback GestureClickPressedCallback
cb
    FunPtr C_GestureClickPressedCallback
cb'' <- C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickPressedCallback C_GestureClickPressedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickPressedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"pressed" FunPtr C_GestureClickPressedCallback
cb'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [pressed](#signal:pressed) 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' gestureClick #pressed callback
-- @
-- 
-- 
afterGestureClickPressed :: (IsGestureClick a, MonadIO m) => a -> GestureClickPressedCallback -> m SignalHandlerId
afterGestureClickPressed :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickPressedCallback -> m SignalHandlerId
afterGestureClickPressed a
obj GestureClickPressedCallback
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_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickPressedCallback GestureClickPressedCallback
cb
    FunPtr C_GestureClickPressedCallback
cb'' <- C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickPressedCallback C_GestureClickPressedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickPressedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"pressed" FunPtr C_GestureClickPressedCallback
cb'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data GestureClickPressedSignalInfo
instance SignalInfo GestureClickPressedSignalInfo where
    type HaskellCallbackType GestureClickPressedSignalInfo = GestureClickPressedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_GestureClickPressedCallback cb
        cb'' <- mk_GestureClickPressedCallback cb'
        connectSignalFunPtr obj "pressed" cb'' connectMode detail

#endif

-- signal GestureClick::released
-- | This signal is emitted when a button or touch is released. /@nPress@/
-- will report the number of press that is paired to this event, note
-- that [stopped]("GI.Gtk.Objects.GestureClick#g:signal:stopped") may have been emitted between the
-- press and its release, /@nPress@/ will only start over at the next press.
type GestureClickReleasedCallback =
    Int32
    -- ^ /@nPress@/: number of press that is paired with this release
    -> Double
    -- ^ /@x@/: The X coordinate, in widget allocation coordinates
    -> Double
    -- ^ /@y@/: The Y coordinate, in widget allocation coordinates
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `GestureClickReleasedCallback`@.
noGestureClickReleasedCallback :: Maybe GestureClickReleasedCallback
noGestureClickReleasedCallback :: Maybe GestureClickPressedCallback
noGestureClickReleasedCallback = Maybe GestureClickPressedCallback
forall a. Maybe a
Nothing

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

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

-- | Wrap the callback into a `GClosure`.
genClosure_GestureClickReleased :: MonadIO m => GestureClickReleasedCallback -> m (GClosure C_GestureClickReleasedCallback)
genClosure_GestureClickReleased :: forall (m :: * -> *).
MonadIO m =>
GestureClickPressedCallback
-> m (GClosure C_GestureClickPressedCallback)
genClosure_GestureClickReleased GestureClickPressedCallback
cb = IO (GClosure C_GestureClickPressedCallback)
-> m (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_GestureClickPressedCallback)
 -> m (GClosure C_GestureClickPressedCallback))
-> IO (GClosure C_GestureClickPressedCallback)
-> m (GClosure C_GestureClickPressedCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickReleasedCallback GestureClickPressedCallback
cb
    C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickReleasedCallback C_GestureClickPressedCallback
cb' IO (FunPtr C_GestureClickPressedCallback)
-> (FunPtr C_GestureClickPressedCallback
    -> IO (GClosure C_GestureClickPressedCallback))
-> IO (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_GestureClickPressedCallback
-> IO (GClosure C_GestureClickPressedCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `GestureClickReleasedCallback` into a `C_GestureClickReleasedCallback`.
wrap_GestureClickReleasedCallback ::
    GestureClickReleasedCallback ->
    C_GestureClickReleasedCallback
wrap_GestureClickReleasedCallback :: GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickReleasedCallback GestureClickPressedCallback
_cb Ptr ()
_ Int32
nPress CDouble
x CDouble
y Ptr ()
_ = do
    let x' :: Double
x' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
x
    let y' :: Double
y' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
y
    GestureClickPressedCallback
_cb  Int32
nPress Double
x' Double
y'


-- | Connect a signal handler for the [released](#signal:released) 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' gestureClick #released callback
-- @
-- 
-- 
onGestureClickReleased :: (IsGestureClick a, MonadIO m) => a -> GestureClickReleasedCallback -> m SignalHandlerId
onGestureClickReleased :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickPressedCallback -> m SignalHandlerId
onGestureClickReleased a
obj GestureClickPressedCallback
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_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickReleasedCallback GestureClickPressedCallback
cb
    FunPtr C_GestureClickPressedCallback
cb'' <- C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickReleasedCallback C_GestureClickPressedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickPressedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"released" FunPtr C_GestureClickPressedCallback
cb'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [released](#signal:released) 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' gestureClick #released callback
-- @
-- 
-- 
afterGestureClickReleased :: (IsGestureClick a, MonadIO m) => a -> GestureClickReleasedCallback -> m SignalHandlerId
afterGestureClickReleased :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickPressedCallback -> m SignalHandlerId
afterGestureClickReleased a
obj GestureClickPressedCallback
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_GestureClickPressedCallback
cb' = GestureClickPressedCallback -> C_GestureClickPressedCallback
wrap_GestureClickReleasedCallback GestureClickPressedCallback
cb
    FunPtr C_GestureClickPressedCallback
cb'' <- C_GestureClickPressedCallback
-> IO (FunPtr C_GestureClickPressedCallback)
mk_GestureClickReleasedCallback C_GestureClickPressedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickPressedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"released" FunPtr C_GestureClickPressedCallback
cb'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data GestureClickReleasedSignalInfo
instance SignalInfo GestureClickReleasedSignalInfo where
    type HaskellCallbackType GestureClickReleasedSignalInfo = GestureClickReleasedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_GestureClickReleasedCallback cb
        cb'' <- mk_GestureClickReleasedCallback cb'
        connectSignalFunPtr obj "released" cb'' connectMode detail

#endif

-- signal GestureClick::stopped
-- | This signal is emitted whenever any time\/distance threshold has
-- been exceeded.
type GestureClickStoppedCallback =
    IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `GestureClickStoppedCallback`@.
noGestureClickStoppedCallback :: Maybe GestureClickStoppedCallback
noGestureClickStoppedCallback :: Maybe (IO ())
noGestureClickStoppedCallback = Maybe (IO ())
forall a. Maybe a
Nothing

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

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

-- | Wrap the callback into a `GClosure`.
genClosure_GestureClickStopped :: MonadIO m => GestureClickStoppedCallback -> m (GClosure C_GestureClickStoppedCallback)
genClosure_GestureClickStopped :: forall (m :: * -> *).
MonadIO m =>
IO () -> m (GClosure C_GestureClickStoppedCallback)
genClosure_GestureClickStopped IO ()
cb = IO (GClosure C_GestureClickStoppedCallback)
-> m (GClosure C_GestureClickStoppedCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_GestureClickStoppedCallback)
 -> m (GClosure C_GestureClickStoppedCallback))
-> IO (GClosure C_GestureClickStoppedCallback)
-> m (GClosure C_GestureClickStoppedCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_GestureClickStoppedCallback
cb' = IO () -> C_GestureClickStoppedCallback
wrap_GestureClickStoppedCallback IO ()
cb
    C_GestureClickStoppedCallback
-> IO (FunPtr C_GestureClickStoppedCallback)
mk_GestureClickStoppedCallback C_GestureClickStoppedCallback
cb' IO (FunPtr C_GestureClickStoppedCallback)
-> (FunPtr C_GestureClickStoppedCallback
    -> IO (GClosure C_GestureClickStoppedCallback))
-> IO (GClosure C_GestureClickStoppedCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_GestureClickStoppedCallback
-> IO (GClosure C_GestureClickStoppedCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `GestureClickStoppedCallback` into a `C_GestureClickStoppedCallback`.
wrap_GestureClickStoppedCallback ::
    GestureClickStoppedCallback ->
    C_GestureClickStoppedCallback
wrap_GestureClickStoppedCallback :: IO () -> C_GestureClickStoppedCallback
wrap_GestureClickStoppedCallback IO ()
_cb Ptr ()
_ Ptr ()
_ = do
    IO ()
_cb 


-- | Connect a signal handler for the [stopped](#signal:stopped) 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' gestureClick #stopped callback
-- @
-- 
-- 
onGestureClickStopped :: (IsGestureClick a, MonadIO m) => a -> GestureClickStoppedCallback -> m SignalHandlerId
onGestureClickStopped :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> IO () -> m SignalHandlerId
onGestureClickStopped a
obj IO ()
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_GestureClickStoppedCallback
cb' = IO () -> C_GestureClickStoppedCallback
wrap_GestureClickStoppedCallback IO ()
cb
    FunPtr C_GestureClickStoppedCallback
cb'' <- C_GestureClickStoppedCallback
-> IO (FunPtr C_GestureClickStoppedCallback)
mk_GestureClickStoppedCallback C_GestureClickStoppedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickStoppedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stopped" FunPtr C_GestureClickStoppedCallback
cb'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [stopped](#signal:stopped) 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' gestureClick #stopped callback
-- @
-- 
-- 
afterGestureClickStopped :: (IsGestureClick a, MonadIO m) => a -> GestureClickStoppedCallback -> m SignalHandlerId
afterGestureClickStopped :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> IO () -> m SignalHandlerId
afterGestureClickStopped a
obj IO ()
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_GestureClickStoppedCallback
cb' = IO () -> C_GestureClickStoppedCallback
wrap_GestureClickStoppedCallback IO ()
cb
    FunPtr C_GestureClickStoppedCallback
cb'' <- C_GestureClickStoppedCallback
-> IO (FunPtr C_GestureClickStoppedCallback)
mk_GestureClickStoppedCallback C_GestureClickStoppedCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickStoppedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"stopped" FunPtr C_GestureClickStoppedCallback
cb'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data GestureClickStoppedSignalInfo
instance SignalInfo GestureClickStoppedSignalInfo where
    type HaskellCallbackType GestureClickStoppedSignalInfo = GestureClickStoppedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_GestureClickStoppedCallback cb
        cb'' <- mk_GestureClickStoppedCallback cb'
        connectSignalFunPtr obj "stopped" cb'' connectMode detail

#endif

-- signal GestureClick::unpaired-release
-- | This signal is emitted whenever the gesture receives a release
-- event that had no previous corresponding press. Due to implicit
-- grabs, this can only happen on situations where input is grabbed
-- elsewhere mid-press or the pressed widget voluntarily relinquishes
-- its implicit grab.
type GestureClickUnpairedReleaseCallback =
    Double
    -- ^ /@x@/: X coordinate of the event
    -> Double
    -- ^ /@y@/: Y coordinate of the event
    -> Word32
    -- ^ /@button@/: Button being released
    -> Gdk.EventSequence.EventSequence
    -- ^ /@sequence@/: Sequence being released
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `GestureClickUnpairedReleaseCallback`@.
noGestureClickUnpairedReleaseCallback :: Maybe GestureClickUnpairedReleaseCallback
noGestureClickUnpairedReleaseCallback :: Maybe GestureClickUnpairedReleaseCallback
noGestureClickUnpairedReleaseCallback = Maybe GestureClickUnpairedReleaseCallback
forall a. Maybe a
Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_GestureClickUnpairedReleaseCallback =
    Ptr () ->                               -- object
    CDouble ->
    CDouble ->
    Word32 ->
    Ptr Gdk.EventSequence.EventSequence ->
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_GestureClickUnpairedRelease :: MonadIO m => GestureClickUnpairedReleaseCallback -> m (GClosure C_GestureClickUnpairedReleaseCallback)
genClosure_GestureClickUnpairedRelease :: forall (m :: * -> *).
MonadIO m =>
GestureClickUnpairedReleaseCallback
-> m (GClosure C_GestureClickUnpairedReleaseCallback)
genClosure_GestureClickUnpairedRelease GestureClickUnpairedReleaseCallback
cb = IO (GClosure C_GestureClickUnpairedReleaseCallback)
-> m (GClosure C_GestureClickUnpairedReleaseCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_GestureClickUnpairedReleaseCallback)
 -> m (GClosure C_GestureClickUnpairedReleaseCallback))
-> IO (GClosure C_GestureClickUnpairedReleaseCallback)
-> m (GClosure C_GestureClickUnpairedReleaseCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: C_GestureClickUnpairedReleaseCallback
cb' = GestureClickUnpairedReleaseCallback
-> C_GestureClickUnpairedReleaseCallback
wrap_GestureClickUnpairedReleaseCallback GestureClickUnpairedReleaseCallback
cb
    C_GestureClickUnpairedReleaseCallback
-> IO (FunPtr C_GestureClickUnpairedReleaseCallback)
mk_GestureClickUnpairedReleaseCallback C_GestureClickUnpairedReleaseCallback
cb' IO (FunPtr C_GestureClickUnpairedReleaseCallback)
-> (FunPtr C_GestureClickUnpairedReleaseCallback
    -> IO (GClosure C_GestureClickUnpairedReleaseCallback))
-> IO (GClosure C_GestureClickUnpairedReleaseCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_GestureClickUnpairedReleaseCallback
-> IO (GClosure C_GestureClickUnpairedReleaseCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `GestureClickUnpairedReleaseCallback` into a `C_GestureClickUnpairedReleaseCallback`.
wrap_GestureClickUnpairedReleaseCallback ::
    GestureClickUnpairedReleaseCallback ->
    C_GestureClickUnpairedReleaseCallback
wrap_GestureClickUnpairedReleaseCallback :: GestureClickUnpairedReleaseCallback
-> C_GestureClickUnpairedReleaseCallback
wrap_GestureClickUnpairedReleaseCallback GestureClickUnpairedReleaseCallback
_cb Ptr ()
_ CDouble
x CDouble
y Word32
button Ptr EventSequence
sequence Ptr ()
_ = do
    let x' :: Double
x' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
x
    let y' :: Double
y' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
y
    (ManagedPtr EventSequence -> EventSequence)
-> Ptr EventSequence -> (EventSequence -> IO ()) -> IO ()
forall a b.
(HasCallStack, ManagedPtrNewtype a) =>
(ManagedPtr a -> a) -> Ptr a -> (a -> IO b) -> IO b
B.ManagedPtr.withTransient ManagedPtr EventSequence -> EventSequence
Gdk.EventSequence.EventSequence Ptr EventSequence
sequence ((EventSequence -> IO ()) -> IO ())
-> (EventSequence -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \EventSequence
sequence' -> do
        GestureClickUnpairedReleaseCallback
_cb  Double
x' Double
y' Word32
button EventSequence
sequence'


-- | Connect a signal handler for the [unpairedRelease](#signal:unpairedRelease) 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' gestureClick #unpairedRelease callback
-- @
-- 
-- 
onGestureClickUnpairedRelease :: (IsGestureClick a, MonadIO m) => a -> GestureClickUnpairedReleaseCallback -> m SignalHandlerId
onGestureClickUnpairedRelease :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickUnpairedReleaseCallback -> m SignalHandlerId
onGestureClickUnpairedRelease a
obj GestureClickUnpairedReleaseCallback
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_GestureClickUnpairedReleaseCallback
cb' = GestureClickUnpairedReleaseCallback
-> C_GestureClickUnpairedReleaseCallback
wrap_GestureClickUnpairedReleaseCallback GestureClickUnpairedReleaseCallback
cb
    FunPtr C_GestureClickUnpairedReleaseCallback
cb'' <- C_GestureClickUnpairedReleaseCallback
-> IO (FunPtr C_GestureClickUnpairedReleaseCallback)
mk_GestureClickUnpairedReleaseCallback C_GestureClickUnpairedReleaseCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickUnpairedReleaseCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"unpaired-release" FunPtr C_GestureClickUnpairedReleaseCallback
cb'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [unpairedRelease](#signal:unpairedRelease) 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' gestureClick #unpairedRelease callback
-- @
-- 
-- 
afterGestureClickUnpairedRelease :: (IsGestureClick a, MonadIO m) => a -> GestureClickUnpairedReleaseCallback -> m SignalHandlerId
afterGestureClickUnpairedRelease :: forall a (m :: * -> *).
(IsGestureClick a, MonadIO m) =>
a -> GestureClickUnpairedReleaseCallback -> m SignalHandlerId
afterGestureClickUnpairedRelease a
obj GestureClickUnpairedReleaseCallback
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_GestureClickUnpairedReleaseCallback
cb' = GestureClickUnpairedReleaseCallback
-> C_GestureClickUnpairedReleaseCallback
wrap_GestureClickUnpairedReleaseCallback GestureClickUnpairedReleaseCallback
cb
    FunPtr C_GestureClickUnpairedReleaseCallback
cb'' <- C_GestureClickUnpairedReleaseCallback
-> IO (FunPtr C_GestureClickUnpairedReleaseCallback)
mk_GestureClickUnpairedReleaseCallback C_GestureClickUnpairedReleaseCallback
cb'
    a
-> Text
-> FunPtr C_GestureClickUnpairedReleaseCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"unpaired-release" FunPtr C_GestureClickUnpairedReleaseCallback
cb'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data GestureClickUnpairedReleaseSignalInfo
instance SignalInfo GestureClickUnpairedReleaseSignalInfo where
    type HaskellCallbackType GestureClickUnpairedReleaseSignalInfo = GestureClickUnpairedReleaseCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_GestureClickUnpairedReleaseCallback cb
        cb'' <- mk_GestureClickUnpairedReleaseCallback cb'
        connectSignalFunPtr obj "unpaired-release" cb'' connectMode detail

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList GestureClick
type instance O.AttributeList GestureClick = GestureClickAttributeList
type GestureClickAttributeList = ('[ '("button", Gtk.GestureSingle.GestureSingleButtonPropertyInfo), '("exclusive", Gtk.GestureSingle.GestureSingleExclusivePropertyInfo), '("nPoints", Gtk.Gesture.GestureNPointsPropertyInfo), '("name", Gtk.EventController.EventControllerNamePropertyInfo), '("propagationLimit", Gtk.EventController.EventControllerPropagationLimitPropertyInfo), '("propagationPhase", Gtk.EventController.EventControllerPropagationPhasePropertyInfo), '("touchOnly", Gtk.GestureSingle.GestureSingleTouchOnlyPropertyInfo), '("widget", Gtk.EventController.EventControllerWidgetPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList GestureClick = GestureClickSignalList
type GestureClickSignalList = ('[ '("begin", Gtk.Gesture.GestureBeginSignalInfo), '("cancel", Gtk.Gesture.GestureCancelSignalInfo), '("end", Gtk.Gesture.GestureEndSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("pressed", GestureClickPressedSignalInfo), '("released", GestureClickReleasedSignalInfo), '("sequenceStateChanged", Gtk.Gesture.GestureSequenceStateChangedSignalInfo), '("stopped", GestureClickStoppedSignalInfo), '("unpairedRelease", GestureClickUnpairedReleaseSignalInfo), '("update", Gtk.Gesture.GestureUpdateSignalInfo)] :: [(Symbol, *)])

#endif

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

foreign import ccall "gtk_gesture_click_new" gtk_gesture_click_new :: 
    IO (Ptr GestureClick)

-- | Returns a newly created t'GI.Gtk.Objects.Gesture.Gesture' that recognizes single and multiple
-- presses.
gestureClickNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m GestureClick
    -- ^ __Returns:__ a newly created t'GI.Gtk.Objects.GestureClick.GestureClick'
gestureClickNew :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m GestureClick
gestureClickNew  = IO GestureClick -> m GestureClick
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO GestureClick -> m GestureClick)
-> IO GestureClick -> m GestureClick
forall a b. (a -> b) -> a -> b
$ do
    Ptr GestureClick
result <- IO (Ptr GestureClick)
gtk_gesture_click_new
    Text -> Ptr GestureClick -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"gestureClickNew" Ptr GestureClick
result
    GestureClick
result' <- ((ManagedPtr GestureClick -> GestureClick)
-> Ptr GestureClick -> IO GestureClick
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
wrapObject ManagedPtr GestureClick -> GestureClick
GestureClick) Ptr GestureClick
result
    GestureClick -> IO GestureClick
forall (m :: * -> *) a. Monad m => a -> m a
return GestureClick
result'

#if defined(ENABLE_OVERLOADING)
#endif