summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorhhvn <dev@hhvn.uk>2023-10-31 11:36:24 +0000
committerhhvn <dev@hhvn.uk>2023-10-31 11:36:24 +0000
commit76dc78859b31cd15c8327e64b7684fbc2063a0b4 (patch)
tree3bfb42ba66e00a053facb263e5936f842eab42e6 /main.go
parentc20f2aa6185c8ac1f7f309c469ea43acd8e8719c (diff)
Successfully destroys and recreates windows upon bspwm reload
Diffstat (limited to 'main.go')
-rw-r--r--main.go32
1 files changed, 22 insertions, 10 deletions
diff --git a/main.go b/main.go
index 2699c68..2eb1272 100644
--- a/main.go
+++ b/main.go
@@ -15,6 +15,8 @@ var reloadEvents = []string{
"monitor_rename",
"monitor_swap",
"monitor_focus",
+ "monitor_remove",
+ "monitor_geometry", // only event we get for monitors on restart
"desktop_add",
"desktop_rename",
"desktop_remove",
@@ -56,8 +58,11 @@ func handleEvents(events *bspc.Subscriber, bar *bar.Handle) (chan error, chan bo
id, err := common.Intify(event.Tokens[0])
if err == nil {
switch (event.Name) {
- case "monitor_add": bar.Create <- id
- case "monitor_remove": bar.Destroy <- id
+ case "monitor_add":
+ case "monitor_geometry":
+ bar.Create <- id
+ case "monitor_remove":
+ bar.Destroy <- id
}
}
}
@@ -106,15 +111,7 @@ func main() {
everr, evreload := handleEvents(events, barhandle)
for {
-
select {
- case <- evreload:
- state, err = reloadState(state)
- if err != nil {
- common.Error("Couldn't reload bspwm state: %s\n", err)
- }
-
- barhandle.NewState <- state
case err := <- everr:
common.Error("Couldn't read event: %s\n", err)
return
@@ -124,6 +121,21 @@ func main() {
case err := <- barhandle.Err:
common.Error("%s\n", err)
return
+ case <- evreload:
+ state, err = reloadState(state)
+ if err != nil {
+ common.Error("Couldn't reload bspwm state: %s\n", err)
+ }
+
+ // Check if there's been an error before sending the
+ // new state (or else the program gets stuck)
+ select {
+ case err := <- barhandle.Err:
+ common.Error("%s\n", err)
+ return
+ default:
+ }
+ barhandle.NewState <- state
}
}
}