diff options
Diffstat (limited to 'lib/Phi/Widget.hs')
-rw-r--r-- | lib/Phi/Widget.hs | 13 |
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 |