module Graphics.UI.AppIndicator.Types (
  AppIndicator (..),
  AppIndicatorClass,
  unAppIndicator,
  mkAppIndicator,
  toAppIndicator
) where

import           Foreign.ForeignPtr       (ForeignPtr, castForeignPtr)
import           Graphics.UI.GtkInternals (objectUnrefFromMainloop)
import           System.Glib.FFI          (FinalizerPtr)
import           System.Glib.GObject      (GObject (..), GObjectClass,
                                           toGObject, unGObject,
                                           unsafeCastGObject)

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