{-# LANGUAGE CPP #-}
module Termonad.Gtk where
import Termonad.Prelude
import Data.GI.Base (ManagedPtr, withManagedPtr)
import GHC.Stack (HasCallStack)
import GI.Gdk
( GObject
, castTo
)
import GI.Gio (ApplicationFlags)
import GI.Gtk (Application, IsWidget, Widget(Widget), applicationNew, builderGetObject, toWidget)
import qualified GI.Gtk as Gtk
objFromBuildUnsafe ::
GObject o => Gtk.Builder -> Text -> (ManagedPtr o -> o) -> IO o
objFromBuildUnsafe builder name constructor = do
maybePlainObj <- builderGetObject builder name
case maybePlainObj of
Nothing -> error $ "Couldn't get " <> unpack name <> " from builder!"
Just plainObj -> do
maybeNewObj <- castTo constructor plainObj
case maybeNewObj of
Nothing ->
error $
"Got " <>
unpack name <>
" from builder, but couldn't convert to object!"
Just obj -> pure obj
appNew ::
(HasCallStack, MonadIO m)
=> Maybe Text
-> [ApplicationFlags]
-> m Application
appNew appName appFlags = do
maybeApp <- applicationNew appName appFlags
case maybeApp of
Nothing -> fail "Could not create application for some reason!"
Just app -> pure app
widgetEq :: (MonadIO m, IsWidget a, IsWidget b) => a -> b -> m Bool
widgetEq a b = do
Widget managedPtrA <- toWidget a
Widget managedPtrB <- toWidget b
liftIO $
withManagedPtr managedPtrA $ \ptrA ->
withManagedPtr managedPtrB $ \ptrB ->
pure (ptrA == ptrB)