diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-15 02:51:50 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-15 02:51:50 +0200 |
commit | c6e57070ab4ca1fdaddf816208aef24f38aecaba (patch) | |
tree | 778196ebcd31bbfd5c57c9acdfcfcd205a798920 /lib/Phi/Widget.hs | |
parent | 7da8a9114eecc750a93087d0ec985641ca2a3165 (diff) | |
download | phi-c6e57070ab4ca1fdaddf816208aef24f38aecaba.tar phi-c6e57070ab4ca1fdaddf816208aef24f38aecaba.zip |
It's better not to lock in native code...
Diffstat (limited to 'lib/Phi/Widget.hs')
-rw-r--r-- | lib/Phi/Widget.hs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/Phi/Widget.hs b/lib/Phi/Widget.hs index e0d051b..9534c8c 100644 --- a/lib/Phi/Widget.hs +++ b/lib/Phi/Widget.hs @@ -12,24 +12,24 @@ module Phi.Widget ( Display(..) , handleMessageWidgets ) where +import Control.Concurrent.MVar import Control.Monad import Data.Traversable import qualified Graphics.X11.Xlib - import Graphics.Rendering.Cairo import Phi.Phi -newtype Display = Display Graphics.X11.Xlib.Display +newtype Display = Display (MVar Graphics.X11.Xlib.Display) withDisplay :: Display -> (Graphics.X11.Xlib.Display -> IO a) -> IO a -withDisplay (Display disp) f = do - Graphics.X11.Xlib.lockDisplay disp +withDisplay (Display dispvar) f = do + disp <- takeMVar dispvar a <- f disp - Graphics.X11.Xlib.unlockDisplay disp + putMVar dispvar disp return a @@ -65,7 +65,8 @@ deriving instance Show WidgetState createWidgetState :: Phi -> Display -> Widget -> IO WidgetState createWidgetState phi disp (Widget w) = do - priv <- initWidget w phi disp + phi' <- dupPhi phi + priv <- initWidget w phi' disp return WidgetState { stateWidget = w , stateX = 0 , stateY = 0 |