mirror of
https://github.com/xmonad/xmonad.git
synced 2025-07-26 09:41:53 -07:00
30 lines
1.0 KiB
Plaintext
30 lines
1.0 KiB
Plaintext
- think about the statusbar/multithreading.
|
|
Three shared TVars:
|
|
windowTitle :: TVar String
|
|
workspace :: TVar Int
|
|
statusText :: TVar String
|
|
Three threads:
|
|
Main thread, handles all of the events that it handles now. When
|
|
necessary, it writes to workspace or windowTitle
|
|
|
|
Status IO thread, the algorithm is something like this:
|
|
forever $ do
|
|
s <- getLine
|
|
atomic (writeTVar statusText s)
|
|
|
|
Statusbar drawing thread, waits for changes in all three TVars, and
|
|
redraws whenever it finds a change.
|
|
|
|
- Notes on new StackSet:
|
|
|
|
The actors: screens, workspaces, windows
|
|
|
|
Invariants:
|
|
- There is exactly one screen in focus at any given time.
|
|
- A screen views exactly one workspace.
|
|
- A workspace is visible on one or zero screens.
|
|
- A workspace has zero or more windows.
|
|
- A workspace has either one or zero windows in focus. Zero if the
|
|
workspace has no windows, one in all other cases.
|
|
- A window is a member of only one workspace.
|