From 906dc08d3e415835422daf1dcdf03a2b6edda1c3 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 22 Jul 2011 11:42:22 +0200 Subject: Fix crash when no root pixmap is set --- lib/Phi/X11.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/Phi/X11.hs b/lib/Phi/X11.hs index f0cf62c..23c6c62 100644 --- a/lib/Phi/X11.hs +++ b/lib/Phi/X11.hs @@ -252,6 +252,7 @@ updateRootImage disp = do rootwin = defaultRootWindow disp pixmap <- liftM (fromIntegral . fromMaybe 0 . listToMaybe . join . catMaybes) $ forM [atom_XROOTPMAP_ID atoms, atom_XROOTMAP_ID atoms] $ \atom -> liftIO $ getWindowProperty32 disp atom rootwin + (_, _, _, rootWidth, rootHeight, _, _) <- liftIO $ getGeometry disp rootwin -- update surface size @@ -264,13 +265,15 @@ updateRootImage disp = do modify $ \state -> state { phiRootImage = newBg } bg <- gets phiRootImage - rootSurface <- liftIO $ Util.createXlibSurface disp pixmap visual (fromIntegral rootWidth) (fromIntegral rootHeight) - - renderWith bg $ withPatternForSurface rootSurface $ \pattern -> do - setSource pattern - paint - surfaceFinish rootSurface + when (pixmap /= 0) $ do + rootSurface <- liftIO $ Util.createXlibSurface disp pixmap visual (fromIntegral rootWidth) (fromIntegral rootHeight) + + renderWith bg $ withPatternForSurface rootSurface $ \pattern -> do + setSource pattern + paint + + surfaceFinish rootSurface createPanel :: Display -> Window -> [Widget.WidgetState] -> Rectangle -> PhiX PanelState -- cgit v1.2.3