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, 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