module Graphics.UI.AppIndicator.Types (
AppIndicator (..),
AppIndicatorClass,
unAppIndicator,
mkAppIndicator,
toAppIndicator,
gTypeAppIndicator,
castToAppIndicator
) where
import Foreign.ForeignPtr (ForeignPtr, castForeignPtr)
import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
import Graphics.UI.GtkInternals (objectUnrefFromMainloop)
import System.Glib.FFI (CULong (..), FinalizerPtr)
import System.Glib.GObject (GObject (..), GObjectClass,
toGObject, unGObject,
unsafeCastGObject)
import System.Glib.GType (GType, typeInstanceIsA)
castTo :: (GObjectClass obj, GObjectClass obj') => GType -> String
-> (obj -> obj')
castTo gtype objTypeName obj =
case toGObject obj of
gobj@(GObject objFPtr)
| typeInstanceIsA ((unsafeForeignPtrToPtr.castForeignPtr) objFPtr) gtype
-> unsafeCastGObject gobj
| otherwise -> error $ "Cannot cast object to " ++ objTypeName
newtype AppIndicator = AppIndicator (ForeignPtr AppIndicator) deriving (Eq,Ord)
unAppIndicator :: AppIndicator -> ForeignPtr AppIndicator
unAppIndicator (AppIndicator o) = o
mkAppIndicator :: (ForeignPtr AppIndicator -> AppIndicator, FinalizerPtr a)
mkAppIndicator = (AppIndicator, objectUnrefFromMainloop)
class GObjectClass o => AppIndicatorClass o
instance AppIndicatorClass AppIndicator
instance GObjectClass AppIndicator where
toGObject = GObject . castForeignPtr . unAppIndicator
unsafeCastGObject = AppIndicator . castForeignPtr . unGObject
toAppIndicator :: AppIndicatorClass o => o -> AppIndicator
toAppIndicator = unsafeCastGObject . toGObject
gTypeAppIndicator :: GType
gTypeAppIndicator = app_indicator_get_type
foreign import ccall unsafe "app_indicator_get_type"
app_indicator_get_type :: CULong
castToAppIndicator :: GObjectClass obj => obj -> AppIndicator
castToAppIndicator = castTo gTypeAppIndicator "AppIndicator"