diff options
Diffstat (limited to 'lib/Phi/Widget.hs')
-rw-r--r-- | lib/Phi/Widget.hs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/Phi/Widget.hs b/lib/Phi/Widget.hs index 9534c8c..218dea1 100644 --- a/lib/Phi/Widget.hs +++ b/lib/Phi/Widget.hs @@ -2,6 +2,7 @@ module Phi.Widget ( Display(..) , withDisplay + , getAtoms , Widget(..) , WidgetClass(..) , WidgetState(..) @@ -14,6 +15,7 @@ module Phi.Widget ( Display(..) import Control.Concurrent.MVar import Control.Monad +import Control.Monad.IO.Class import Data.Traversable @@ -21,17 +23,21 @@ import qualified Graphics.X11.Xlib import Graphics.Rendering.Cairo import Phi.Phi +import Phi.X11.Atoms -newtype Display = Display (MVar Graphics.X11.Xlib.Display) +data Display = Display (MVar Graphics.X11.Xlib.Display) Atoms -withDisplay :: Display -> (Graphics.X11.Xlib.Display -> IO a) -> IO a -withDisplay (Display dispvar) f = do - disp <- takeMVar dispvar +withDisplay :: MonadIO m => Display -> (Graphics.X11.Xlib.Display -> m a) -> m a +withDisplay (Display dispvar _) f = do + disp <- liftIO $ takeMVar dispvar a <- f disp - putMVar dispvar disp + liftIO $ putMVar dispvar disp return a +getAtoms :: Display -> Atoms +getAtoms (Display _ atoms) = atoms + class Show a => WidgetClass a where type WidgetData a :: * |