diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 58 |
1 files changed, 31 insertions, 27 deletions
@@ -38,38 +38,38 @@ func reloadState(current *bspc.State) (*bspc.State, error) { } } -func handleEvent(events *bspc.Subscriber, state *bspc.State, bar *bar.Handle) (bool) { +func handleEvents(events *bspc.Subscriber, bar *bar.Handle) (chan error, chan bool) { var event *bspc.Event - select { - case event = <-events.Event: - break - default: - return false - } + errors := make(chan error) + reload := make(chan bool) - if event.Err != nil { - common.Error("Couldn't read event: %s\n", event.Err) - return false - } + go func(){ for { + event = <-events.Event - if strings.HasPrefix(event.Name, "monitor_") { - 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 + if event.Err != nil { + errors <- event.Err + return + } + + if strings.HasPrefix(event.Name, "monitor_") { + 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 + } } } - } - for i := 0; i < len(reloadEvents); i++ { - if event.Name == reloadEvents[i] { - return true + for i := 0; i < len(reloadEvents); i++ { + if event.Name == reloadEvents[i] { + reload <- true + } } - } + }}() - return false + return errors, reload } func main() { @@ -103,24 +103,28 @@ func main() { } defer bar.Cleanup() + everr, evreload := handleEvents(events, barhandle) + for { - if reload := handleEvent(events, state, barhandle); reload { + + select { + case <- evreload: state, err = reloadState(state) if err != nil { common.Error("Couldn't reload bspwm state: %s\n", err) } barhandle.NewState <- state - } - select { + case err := <- everr: + common.Error("Couldn't read event: %s\n", err) + return case s := <- signals: common.Error("%s\n", s) return case err := <- barhandle.Err: common.Error("%s\n", err) return - default: } } } |