module Graphics.UI.Gtk.Reactive.Widget where
import Control.Monad.IO.Class (liftIO)
import Control.Monad (void, when)
import Data.ReactiveValue
import Graphics.UI.Gtk
widgetVisibleReactive :: WidgetClass self => self -> ReactiveFieldReadWrite IO Bool
widgetVisibleReactive e = ReactiveFieldReadWrite setter getter notifier
where getter = get e widgetVisible
setter v = postGUIAsync $ do
p <- getter
when (p /= v) $ set e [ widgetVisible := v ]
notifier p = void (e `on` mapEvent $ liftIO p >> return False)
widgetSensitiveReactive :: WidgetClass self => self -> ReactiveFieldReadWrite IO Bool
widgetSensitiveReactive e = ReactiveFieldReadWrite setter getter notifier
where getter = get e widgetSensitive
setter v = postGUIAsync $ do
p <- getter
when (p /= v) $ set e [ widgetSensitive := v ]
notifier p = void (e `on` mapEvent $ liftIO p >> return False)