{-# LANGUAGE MultiParamTypeClasses #-}
-- | Publishes the main elements of a status icon
module Graphics.UI.Gtk.Reactive.StatusIcon where
import Control.Monad
import Control.Monad.Trans(liftIO)
import Data.ReactiveValue
import Graphics.UI.Gtk
statusIconActivateField :: StatusIcon -> ReactiveFieldActivatable IO
statusIconActivateField m = mkActivatable op
where op f = void (m `on` statusIconActivate $ liftIO f)
instance ReactiveValueActivatable IO StatusIcon where
defaultActivation = statusIconActivateField
statusIconVisibleReactive :: StatusIcon -> ReactiveFieldReadWrite IO Bool
statusIconVisibleReactive icon = ReactiveFieldReadWrite setter getter notifier
where getter = statusIconGetVisible icon
setter v = postGUIAsync $ do
p <- getter
when (p /= v) $ statusIconSetVisible icon v
notifier _ = return ()