From 76dc78859b31cd15c8327e64b7684fbc2063a0b4 Mon Sep 17 00:00:00 2001 From: hhvn Date: Tue, 31 Oct 2023 11:36:24 +0000 Subject: Successfully destroys and recreates windows upon bspwm reload --- main.go | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'main.go') 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 } } } -- cgit v1.2.3