diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -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 } } } |