packages feed

gi-gtk-declarative-0.6.3: test/GI/Gtk/Declarative/TestUtils.hs

module GI.Gtk.Declarative.TestUtils where

import           Control.Concurrent
import           Control.Monad.IO.Class
import qualified GI.GLib.Constants             as GLib
import qualified GI.Gdk                        as Gdk
import           GI.Gtk.Declarative
import           GI.Gtk.Declarative.State

runUI :: MonadIO m => IO b -> m b
runUI ma = do
  ret <- liftIO newEmptyMVar
  _   <- Gdk.threadsAddIdle GLib.PRIORITY_DEFAULT $ do
    ma >>= putMVar ret
    return False
  liftIO (takeMVar ret)

patch'
  :: Patchable widget => SomeState -> widget e1 -> widget e2 -> IO SomeState
patch' state markup1 markup2 = case patch state markup1 markup2 of
  Keep      -> pure state
  Modify  f -> f
  Replace f -> f