diff options
Diffstat (limited to 'src/Xmobar/App/EventLoop.hs')
-rw-r--r-- | src/Xmobar/App/EventLoop.hs | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/src/Xmobar/App/EventLoop.hs b/src/Xmobar/App/EventLoop.hs index f046647..1764b1d 100644 --- a/src/Xmobar/App/EventLoop.hs +++ b/src/Xmobar/App/EventLoop.hs @@ -16,13 +16,7 @@ -- ------------------------------------------------------------------------------ - -module Xmobar.App.EventLoop - ( startLoop - , startCommand - , newRefreshLock - , refreshLock - ) where +module Xmobar.App.EventLoop (startLoop) where import Prelude hiding (lookup) import Graphics.X11.Xlib hiding (textExtents, textWidth) @@ -33,18 +27,22 @@ import Graphics.X11.Xrandr import Control.Arrow ((&&&)) import Control.Monad.Reader import Control.Concurrent -import Control.Concurrent.Async (Async, async) +import Control.Concurrent.Async (Async) import Control.Concurrent.STM -import Control.Exception (bracket_, handle, SomeException(..)) +import Control.Exception (handle, SomeException(..)) import Data.Bits import Data.Map hiding (foldr, map, filter) import Data.Maybe (fromJust, isJust) import qualified Data.List.NonEmpty as NE import Xmobar.System.Signal -import Xmobar.Config.Types (persistent, position, iconRoot, Config, Align(..), XPosition(..)) -import Xmobar.Run.Exec -import Xmobar.Run.Runnable +import Xmobar.Config.Types (persistent + , position + , iconRoot + , Config + , Align(..) + , XPosition(..)) + import Xmobar.X11.Actions import Xmobar.X11.Parsers import Xmobar.X11.Window @@ -54,6 +52,8 @@ import Xmobar.X11.Bitmap as Bitmap import Xmobar.X11.Types import Xmobar.System.Utils (safeIndex) +import Xmobar.App.CommandThreads (refreshLockT) + #ifndef THREADED_RUNTIME import Xmobar.X11.Events(nextEvent') #endif @@ -69,22 +69,6 @@ import Xmobar.System.DBus runX :: XConf -> X () -> IO () runX xc f = runReaderT f xc -newRefreshLock :: IO (TMVar ()) -newRefreshLock = newTMVarIO () - -refreshLock :: TMVar () -> IO a -> IO a -refreshLock var = bracket_ lock unlock - where - lock = atomically $ takeTMVar var - unlock = atomically $ putTMVar var () - -refreshLockT :: TMVar () -> STM a -> STM a -refreshLockT var action = do - takeTMVar var - r <- action - putTMVar var () - return r - -- | Starts the main event loop and threads startLoop :: XConf -> TMVar SignalType @@ -230,25 +214,6 @@ eventLoop tv xc@(XConf d r w fs vos is cfg) as signal = do filter (\(_, from, to) -> x >= from && x <= to) as eventLoop tv xc as signal --- $command - --- | Runs a command as an independent thread and returns its Async handles --- and the TVar the command will be writing to. -startCommand :: TMVar SignalType - -> (Runnable,String,String) - -> IO ([Async ()], TVar String) -startCommand sig (com,s,ss) - | alias com == "" = do var <- newTVarIO is - atomically $ writeTVar var (s ++ ss) - return ([], var) - | otherwise = do var <- newTVarIO is - let cb str = atomically $ writeTVar var (s ++ str ++ ss) - a1 <- async $ start com cb - a2 <- async $ trigger com $ maybe (return ()) - (atomically . putTMVar sig) - return ([a1, a2], var) - where is = s ++ "Updating..." ++ ss - updateString :: Config -> TVar [String] -> IO [[(Widget, TextRenderInfo, Int, Maybe [Action])]] |