summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorhhvn <dev@hhvn.uk>2023-08-22 12:50:03 +0100
committerhhvn <dev@hhvn.uk>2023-08-22 12:50:03 +0100
commit7adfd6e5c641f7543fcf87e4c558579dc652fdf7 (patch)
tree6dc7c3d5f487a4913a61fa5f55b4356ef1a57bf0 /main.go
parent1c3013dfcbbfb33cbfaf616c1b44051e35d7746c (diff)
Drawing desktops
Diffstat (limited to 'main.go')
-rw-r--r--main.go58
1 files changed, 31 insertions, 27 deletions
diff --git a/main.go b/main.go
index b720f98..e2cd130 100644
--- a/main.go
+++ b/main.go
@@ -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:
}
}
}