summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Widgets/Systray.hs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-08-21 19:34:16 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-08-21 19:34:16 +0200
commit42c14fa1ca9d47ae32766aaa2aa995c684b7e9cb (patch)
tree7c12e75cf89573c2d3ecb8c0c4fcc4ccbc56b24d /lib/Phi/Widgets/Systray.hs
parentddca7c3ec59a5b7c62a11afe225de40edbde85ff (diff)
downloadphi-42c14fa1ca9d47ae32766aaa2aa995c684b7e9cb.tar
phi-42c14fa1ca9d47ae32766aaa2aa995c684b7e9cb.zip
Make render function return cachable surface slices
Diffstat (limited to 'lib/Phi/Widgets/Systray.hs')
-rw-r--r--lib/Phi/Widgets/Systray.hs19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/Phi/Widgets/Systray.hs b/lib/Phi/Widgets/Systray.hs
index 6812018..662c6a7 100644
--- a/lib/Phi/Widgets/Systray.hs
+++ b/lib/Phi/Widgets/Systray.hs
@@ -47,7 +47,7 @@ data SystrayMessage = AddIcon !Window !Window | RemoveIcon !Window | RenderIcon
deriving (Show, Typeable)
-instance Widget Systray SystrayState where
+instance Widget Systray SystrayState () where
initWidget (Systray) phi dispvar = do
phi' <- dupPhi phi
forkIO $ systrayRunner phi' dispvar
@@ -61,15 +61,20 @@ instance Widget Systray SystrayState where
weight _ = 0
- render Systray (SystrayState phi systrayScreen reset lastResetRef icons) x y w h screen = case True of
- _ | screen == systrayScreen -> do
- lastReset <- liftIO $ readIORef lastResetRef
- liftIO $ writeIORef lastResetRef reset
+ render Systray (SystrayState phi systrayScreen reset lastResetRef icons) x y w h screen = do
+ when (screen == systrayScreen) $ do
+ lastReset <- readIORef lastResetRef
+ writeIORef lastResetRef reset
forM_ (zip [0..] icons) $ \(i, SystrayIconState midParent window) -> do
let x' = x + i*(h+2)
sendMessage phi $ RenderIcon midParent window x' y h h (lastReset /= reset)
-
- | otherwise -> return ()
+
+ surface <- createImageSurface FormatARGB32 w h
+ renderWith surface $ do
+ setOperator OperatorClear
+ paint
+ return [(True, SurfaceSlice 0 surface)]
+
handleMessage _ priv@(SystrayState phi screen reset lastReset icons) m = case (fromMessage m) of
Just (AddIcon midParent window) -> SystrayState phi screen reset lastReset ((SystrayIconState midParent window):icons)