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.hs13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/Phi/Widget.hs b/lib/Phi/Widget.hs
index d28c21d..e0d051b 100644
--- a/lib/Phi/Widget.hs
+++ b/lib/Phi/Widget.hs
@@ -1,6 +1,7 @@
{-# LANGUAGE ExistentialQuantification, TypeFamilies, StandaloneDeriving, FlexibleContexts #-}
-module Phi.Widget ( Display
+module Phi.Widget ( Display(..)
+ , withDisplay
, Widget(..)
, WidgetClass(..)
, WidgetState(..)
@@ -11,7 +12,6 @@ module Phi.Widget ( Display
, handleMessageWidgets
) where
-import Control.Concurrent
import Control.Monad
import Data.Traversable
@@ -23,7 +23,14 @@ import Graphics.Rendering.Cairo
import Phi.Phi
-type Display = MVar Graphics.X11.Xlib.Display
+newtype Display = Display Graphics.X11.Xlib.Display
+
+withDisplay :: Display -> (Graphics.X11.Xlib.Display -> IO a) -> IO a
+withDisplay (Display disp) f = do
+ Graphics.X11.Xlib.lockDisplay disp
+ a <- f disp
+ Graphics.X11.Xlib.unlockDisplay disp
+ return a
class Show a => WidgetClass a where