summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go54
1 files changed, 38 insertions, 16 deletions
diff --git a/main.go b/main.go
index cac7c6c..4bef201 100644
--- a/main.go
+++ b/main.go
@@ -6,12 +6,16 @@ import (
"strings"
"syscall"
- "hhvn.uk/hbspbar/bar"
"hhvn.uk/hbspbar/bspc"
"hhvn.uk/hbspbar/common"
"hhvn.uk/hbspbar/drw"
+ "hhvn.uk/hbspbar/status"
)
+// Store the state for when bar.Cleanup() is called
+// This is a bit hacky but I don't really see any alternative
+var finalstate *bspc.State = nil
+
func main() {
signals := make(chan os.Signal, 1)
signal.Notify(signals,
@@ -19,8 +23,6 @@ func main() {
syscall.SIGHUP,
syscall.SIGTERM)
- defer bar.Cleanup()
-
if drw.InitErr != nil {
common.Error("Couldn't initialize X: %s\n", drw.InitErr)
return
@@ -33,22 +35,37 @@ func main() {
defer bspc.Cleanup()
state := <- bspc.NewState
- bar.NewState <- state
for _, m := range state.Monitors {
- bar.Create <- m.ID
+ Create(state, m.ID)
}
- for {
+ var blocks []*status.Block = nil
+
+ mainloop: for {
select {
case s := <-signals:
common.Error("%s\n", s)
- return
- case err := <-bar.Err:
- common.Error("%s\n", err)
- return
+ break mainloop
+ case e := <- drw.Events:
+ if e.Ev == nil && e.Err == nil {
+ common.Error("X connection clossed\n")
+ break mainloop
+ }
+
+ if e.Err != nil {
+ common.Perror("X.WaitForEvents", e.Err)
+ continue
+ }
+
+ // switch e.Ev.(type) {
+ // case xproto.DestroyNotifyEvent:
+ // Err <- fmt.Errorf("Window destroyed")
+ // return
+ // default:
+ // }
case err := <-bspc.EvErr:
common.Error("Couldn't read event: %s\n", err)
- return
+ break mainloop
case event := <-bspc.Event:
if strings.HasPrefix(event.Name, "monitor_") {
id, err := common.Intify(event.Tokens[0])
@@ -56,17 +73,22 @@ func main() {
switch event.Name {
case "monitor_add":
case "monitor_geometry":
- bar.Create <- id
+ Create(state, id)
case "monitor_remove":
- bar.Destroy <- id
+ Destroy(state, id)
}
}
}
case err := <-bspc.StErr:
common.Error("Couldn't load bspwm state: %s\n", err)
- return
- case s := <-bspc.NewState:
- bar.NewState <- s
+ break mainloop
+ case blocks = <- status.NewBlocks:
+ Redraw(state, blocks)
+ case state = <- bspc.NewState:
+ finalstate = state
+ Redraw(state, blocks)
}
}
+
+ Cleanup(finalstate)
}