{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE CApiFFI #-} {-# LANGUAGE BlockArguments #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Stopgap.System.GLib.Signal where import Foreign.Ptr import Foreign.C.String import Control.Monad.ST import Data.String import Data.CairoContext import Stopgap.Data.Ptr import Stopgap.System.GLib.Object qualified as G.Object import Stopgap.System.GLib.Callback qualified as G.Callback import Stopgap.Graphics.UI.Gdk.Event.Button qualified as Gdk.Event.Button import Stopgap.Graphics.UI.Gdk.Event.Motion qualified as Gdk.Event.Motion newtype Signal = Signal String deriving Show instance IsString Signal where fromString = Signal connect_ab :: (G.Object.IsO a, IsPtr b) => a -> Signal -> (a -> b -> IO ()) -> b -> IO () connect_ab o (Signal sig) h ud = withCString sig \csig -> do ch <- G.Callback.c_ab h c_g_signal_connect (toPtr o) csig ch (toPtr ud) connect_ab_bool :: (G.Object.IsO a, IsPtr b) => a -> Signal -> (a -> b -> IO Bool) -> b -> IO () connect_ab_bool o (Signal sig) h ud = withCString sig \csig -> do ch <- G.Callback.c_ab_bool h c_g_signal_connect (toPtr o) csig ch (toPtr ud) connect_void_void :: G.Object.IsO a => a -> Signal -> IO () -> Null -> IO () connect_void_void o (Signal sig) h Null = withCString sig \csig -> do ch <- G.Callback.c_void_void h c_g_signal_connect (toPtr o) csig ch nullPtr connect_self_cairo_ud :: (G.Object.IsO a, IsPtr b) => a -> Signal -> (a -> CairoT r RealWorld -> b -> IO Bool) -> b -> IO () connect_self_cairo_ud o (Signal sig) h ud = withCString sig \csig -> do ch <- G.Callback.c_self_cairo_ud h c_g_signal_connect (toPtr o) csig ch (toPtr ud) connect_self_button_ud :: (G.Object.IsO a, IsPtr b) => a -> Signal -> (a -> Gdk.Event.Button.B -> b -> IO Bool) -> b -> IO () connect_self_button_ud o (Signal sig) h ud = withCString sig \csig -> do ch <- G.Callback.c_self_button_ud h c_g_signal_connect (toPtr o) csig ch (toPtr ud) connect_self_motion_ud :: (G.Object.IsO a, IsPtr b) => a -> Signal -> (a -> Gdk.Event.Motion.M -> b -> IO Bool) -> b -> IO () connect_self_motion_ud o (Signal sig) h ud = withCString sig \csig -> do ch <- G.Callback.c_self_motion_ud h c_g_signal_connect (toPtr o) csig ch (toPtr ud) foreign import capi "gtk/gtk.h g_signal_connect" c_g_signal_connect :: Ptr a -> CString -> G.Callback.C fun -> Ptr b -> IO ()