diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Xmobar/EventLoop.hs | 3 | ||||
-rw-r--r-- | src/lib/Xmobar/Plugins/EWMH.hs | 2 | ||||
-rw-r--r-- | src/lib/Xmobar/Plugins/Kbd.hsc | 2 | ||||
-rw-r--r-- | src/lib/Xmobar/Plugins/Locks.hs | 2 | ||||
-rw-r--r-- | src/lib/Xmobar/Plugins/XMonadLog.hs | 2 | ||||
-rw-r--r-- | src/lib/Xmobar/Utils.hs | 20 | ||||
-rw-r--r-- | src/lib/Xmobar/XUtil.hs | 15 |
7 files changed, 24 insertions, 22 deletions
diff --git a/src/lib/Xmobar/EventLoop.hs b/src/lib/Xmobar/EventLoop.hs index 27fcf6d..00f7465 100644 --- a/src/lib/Xmobar/EventLoop.hs +++ b/src/lib/Xmobar/EventLoop.hs @@ -45,6 +45,7 @@ import Xmobar.Runnable import Xmobar.Signal import Xmobar.Window import Xmobar.XUtil +import Xmobar.Utils import Xmobar.Draw import Xmobar.Types @@ -56,8 +57,6 @@ import Graphics.X11.Xft import Xmobar.IPC.DBus #endif --- $main - -- | Starts the main event loop and threads startLoop :: XConf -> TMVar SignalType -> [[([Async ()], TVar String)]] -> IO () diff --git a/src/lib/Xmobar/Plugins/EWMH.hs b/src/lib/Xmobar/Plugins/EWMH.hs index 363ec90..d4e9c88 100644 --- a/src/lib/Xmobar/Plugins/EWMH.hs +++ b/src/lib/Xmobar/Plugins/EWMH.hs @@ -29,7 +29,7 @@ import Codec.Binary.UTF8.String as UTF8 #define UTF8 #endif import Foreign.C (CChar, CLong) -import Xmobar.XUtil (nextEvent') +import Xmobar.Utils (nextEvent') import Data.List (intersperse, intercalate) diff --git a/src/lib/Xmobar/Plugins/Kbd.hsc b/src/lib/Xmobar/Plugins/Kbd.hsc index 372386e..24f07a3 100644 --- a/src/lib/Xmobar/Plugins/Kbd.hsc +++ b/src/lib/Xmobar/Plugins/Kbd.hsc @@ -22,7 +22,7 @@ import Foreign.C.Types import Foreign.C.String import Xmobar.Plugins import Control.Monad (forever) -import Xmobar.XUtil (nextEvent') +import Xmobar.Utils (nextEvent') import Data.List (isPrefixOf, findIndex) import Data.Maybe (fromJust) diff --git a/src/lib/Xmobar/Plugins/Locks.hs b/src/lib/Xmobar/Plugins/Locks.hs index 9a971e5..63a7297 100644 --- a/src/lib/Xmobar/Plugins/Locks.hs +++ b/src/lib/Xmobar/Plugins/Locks.hs @@ -21,7 +21,7 @@ import Control.Monad import Graphics.X11.Xlib.Extras import Xmobar.Plugins import Xmobar.Plugins.Kbd -import Xmobar.XUtil (nextEvent') +import Xmobar.Utils (nextEvent') data Locks = Locks deriving (Read, Show) diff --git a/src/lib/Xmobar/Plugins/XMonadLog.hs b/src/lib/Xmobar/Plugins/XMonadLog.hs index 6bbba59..95dc558 100644 --- a/src/lib/Xmobar/Plugins/XMonadLog.hs +++ b/src/lib/Xmobar/Plugins/XMonadLog.hs @@ -27,7 +27,7 @@ import Codec.Binary.UTF8.String as UTF8 #define UTF8 #endif import Foreign.C (CChar) -import Xmobar.XUtil (nextEvent') +import Xmobar.Utils (nextEvent') import Xmobar.Actions (stripActions) data XMonadLog = XMonadLog diff --git a/src/lib/Xmobar/Utils.hs b/src/lib/Xmobar/Utils.hs index ce8c4ad..eeb03f6 100644 --- a/src/lib/Xmobar/Utils.hs +++ b/src/lib/Xmobar/Utils.hs @@ -17,15 +17,21 @@ ------------------------------------------------------------------------------ -module Xmobar.Utils (expandHome, changeLoop, safeHead, hGetLineSafe) where +module Xmobar.Utils (expandHome, changeLoop, safeHead, hGetLineSafe, nextEvent') +where import Control.Monad +import Control.Concurrent import Control.Concurrent.STM +import System.Posix.Types (Fd(..)) import System.Environment import System.FilePath import System.IO +import Graphics.X11.Xlib ( + Display(..), XEventPtr, nextEvent, pending, connectionNumber) + #if defined XFT || defined UTF8 import qualified System.IO as S (hGetLine) #endif @@ -55,3 +61,15 @@ changeLoop s f = atomically s >>= go safeHead :: [a] -> Maybe a safeHead [] = Nothing safeHead (x:_) = Just x + +-- | A version of nextEvent that does not block in foreign calls. +nextEvent' :: Display -> XEventPtr -> IO () +nextEvent' d p = do + pend <- pending d + if pend /= 0 + then nextEvent d p + else do + threadWaitRead (Fd fd) + nextEvent' d p + where + fd = connectionNumber d diff --git a/src/lib/Xmobar/XUtil.hs b/src/lib/Xmobar/XUtil.hs index c4b4531..e70612b 100644 --- a/src/lib/Xmobar/XUtil.hs +++ b/src/lib/Xmobar/XUtil.hs @@ -21,10 +21,8 @@ module Xmobar.XUtil , textExtents , textWidth , printString - , nextEvent' ) where -import Control.Concurrent import Control.Monad (when) import Control.Monad.Trans import Control.Exception (SomeException, handle) @@ -34,7 +32,6 @@ import Graphics.X11.Xlib hiding (textExtents, textWidth) import qualified Graphics.X11.Xlib as Xlib (textExtents, textWidth) import Graphics.X11.Xlib.Extras import System.Mem.Weak ( addFinalizer ) -import System.Posix.Types (Fd(..)) #if defined XFT import Xmobar.MinXft @@ -161,15 +158,3 @@ printString dpy drw fs@(Xft fonts) _ fc bc x y s al = drawXftRect draw bc' x (y - a) (1 + xglyphinfo_xOff gi) (a + d + 2) drawXftString' draw fc' fonts (toInteger x) (toInteger y) s #endif - --- | A version of nextEvent that does not block in foreign calls. -nextEvent' :: Display -> XEventPtr -> IO () -nextEvent' d p = do - pend <- pending d - if pend /= 0 - then nextEvent d p - else do - threadWaitRead (Fd fd) - nextEvent' d p - where - fd = connectionNumber d |