{-# LINE 2 "./Graphics/UI/Gtk/Abstract/Object.chs" #-}
module Graphics.UI.Gtk.Abstract.Object (
Object,
ObjectClass,
castToObject, gTypeObject,
toObject,
makeNewObject,
GWeakNotify,
objectWeakref,
objectWeakunref,
objectDestroy,
notifyProperty
) where
import Control.Monad (when)
import System.Glib.FFI
import System.Glib.Attributes (ReadWriteAttr)
import Graphics.UI.Gtk.Types
{-# LINE 81 "./Graphics/UI/Gtk/Abstract/Object.chs" #-}
import Graphics.UI.Gtk.Signals
{-# LINE 82 "./Graphics/UI/Gtk/Abstract/Object.chs" #-}
import Data.IORef
{-# LINE 85 "./Graphics/UI/Gtk/Abstract/Object.chs" #-}
makeNewObject :: ObjectClass obj =>
(ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
makeNewObject :: forall obj.
ObjectClass obj =>
(ForeignPtr obj -> obj, FinalizerPtr obj) -> IO (Ptr obj) -> IO obj
makeNewObject (ForeignPtr obj -> obj
constr, FinalizerPtr obj
objectUnref) IO (Ptr obj)
generator = do
Ptr obj
objPtr <- IO (Ptr obj)
generator
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Ptr obj
objPtr Ptr obj -> Ptr obj -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr obj
forall a. Ptr a
nullPtr) (String -> IO ()
forall a. String -> IO a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"makeNewObject: object is NULL")
Ptr obj -> IO ()
forall obj. GObjectClass obj => Ptr obj -> IO ()
objectRefSink Ptr obj
objPtr
ForeignPtr obj
obj <- Ptr obj -> FinalizerPtr obj -> IO (ForeignPtr obj)
forall a. Ptr a -> FinalizerPtr a -> IO (ForeignPtr a)
newForeignPtr Ptr obj
objPtr FinalizerPtr obj
objectUnref
obj -> IO obj
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (obj -> IO obj) -> obj -> IO obj
forall a b. (a -> b) -> a -> b
$! ForeignPtr obj -> obj
constr ForeignPtr obj
obj
type GWeakNotify = FunPtr (((Ptr ()) -> ((Ptr GObject) -> (IO ()))))
{-# LINE 127 "./Graphics/UI/Gtk/Abstract/Object.chs" #-}
foreign import ccall "wrapper" mkDestructor
:: (Ptr () -> Ptr GObject -> IO ()) -> IO GWeakNotify
objectWeakref :: ObjectClass o => o -> IO () -> IO GWeakNotify
objectWeakref :: forall o. ObjectClass o => o -> IO () -> IO GWeakNotify
objectWeakref o
obj IO ()
uFun = do
IORef GWeakNotify
funPtrContainer <- GWeakNotify -> IO (IORef GWeakNotify)
forall a. a -> IO (IORef a)
newIORef GWeakNotify
forall a. FunPtr a
nullFunPtr
GWeakNotify
uFunPtr <- (Ptr () -> Ptr GObject -> IO ()) -> IO GWeakNotify
mkDestructor ((Ptr () -> Ptr GObject -> IO ()) -> IO GWeakNotify)
-> (Ptr () -> Ptr GObject -> IO ()) -> IO GWeakNotify
forall a b. (a -> b) -> a -> b
$ \Ptr ()
_ Ptr GObject
_ -> do
IO ()
uFun
GWeakNotify
funPtr <- IORef GWeakNotify -> IO GWeakNotify
forall a. IORef a -> IO a
readIORef IORef GWeakNotify
funPtrContainer
GWeakNotify -> IO ()
forall a. FunPtr a -> IO ()
freeHaskellFunPtr GWeakNotify
funPtr
IORef GWeakNotify -> GWeakNotify -> IO ()
forall a. IORef a -> a -> IO ()
writeIORef IORef GWeakNotify
funPtrContainer GWeakNotify
uFunPtr
(\(GObject ForeignPtr GObject
arg1) GWeakNotify
arg2 Ptr ()
arg3 -> ForeignPtr GObject -> (Ptr GObject -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr GObject
arg1 ((Ptr GObject -> IO ()) -> IO ())
-> (Ptr GObject -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr GObject
argPtr1 ->Ptr GObject -> GWeakNotify -> Ptr () -> IO ()
g_object_weak_ref Ptr GObject
argPtr1 GWeakNotify
arg2 Ptr ()
arg3) (o -> GObject
forall o. GObjectClass o => o -> GObject
toGObject o
obj) GWeakNotify
uFunPtr Ptr ()
forall a. Ptr a
nullPtr
GWeakNotify -> IO GWeakNotify
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return GWeakNotify
uFunPtr
objectWeakunref :: ObjectClass o => o -> GWeakNotify -> IO ()
objectWeakunref :: forall o. ObjectClass o => o -> GWeakNotify -> IO ()
objectWeakunref o
obj GWeakNotify
fun =
(\(GObject ForeignPtr GObject
arg1) GWeakNotify
arg2 Ptr ()
arg3 -> ForeignPtr GObject -> (Ptr GObject -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr GObject
arg1 ((Ptr GObject -> IO ()) -> IO ())
-> (Ptr GObject -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr GObject
argPtr1 ->Ptr GObject -> GWeakNotify -> Ptr () -> IO ()
g_object_weak_unref Ptr GObject
argPtr1 GWeakNotify
arg2 Ptr ()
arg3) (o -> GObject
forall o. GObjectClass o => o -> GObject
toGObject o
obj) GWeakNotify
fun Ptr ()
forall a. Ptr a
nullPtr
objectDestroy :: ObjectClass self => Signal self (IO ())
objectDestroy :: forall self. ObjectClass self => Signal self (IO ())
objectDestroy = (Bool -> self -> IO () -> IO (ConnectId self))
-> Signal self (IO ())
forall object handler.
(Bool -> object -> handler -> IO (ConnectId object))
-> Signal object handler
Signal (String -> Bool -> self -> IO () -> IO (ConnectId self)
forall obj.
GObjectClass obj =>
String -> Bool -> obj -> IO () -> IO (ConnectId obj)
connect_NONE__NONE String
"destroy")
notifyProperty :: ObjectClass self => ReadWriteAttr self a b -> Signal self (IO ())
notifyProperty :: forall self a b.
ObjectClass self =>
ReadWriteAttr self a b -> Signal self (IO ())
notifyProperty ReadWriteAttr self a b
attr = (Bool -> self -> IO () -> IO (ConnectId self))
-> Signal self (IO ())
forall object handler.
(Bool -> object -> handler -> IO (ConnectId object))
-> Signal object handler
Signal (\Bool
on self
obj IO ()
cb -> String -> Bool -> self -> (Ptr Any -> IO ()) -> IO (ConnectId self)
forall obj a.
GObjectClass obj =>
String -> Bool -> obj -> (Ptr a -> IO ()) -> IO (ConnectId obj)
connect_PTR__NONE (String
"notify::"String -> String -> String
forall a. [a] -> [a] -> [a]
++ReadWriteAttr self a b -> String
forall a. Show a => a -> String
show ReadWriteAttr self a b
attr) Bool
on self
obj (IO () -> Ptr Any -> IO ()
forall a b. a -> b -> a
const IO ()
cb))
foreign import ccall unsafe "g_object_weak_ref"
g_object_weak_ref :: ((Ptr GObject) -> ((FunPtr ((Ptr ()) -> ((Ptr GObject) -> (IO ())))) -> ((Ptr ()) -> (IO ()))))
foreign import ccall unsafe "g_object_weak_unref"
g_object_weak_unref :: ((Ptr GObject) -> ((FunPtr ((Ptr ()) -> ((Ptr GObject) -> (IO ())))) -> ((Ptr ()) -> (IO ()))))