summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Widget.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Phi/Widget.hs')
-rw-r--r--lib/Phi/Widget.hs16
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 :: *