summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHayden Hamilton <hayden@hhvn.uk>2026-05-28 21:43:18 +0100
committerHayden Hamilton <hayden@hhvn.uk>2026-05-28 21:43:18 +0100
commit4af147be6f35e2bf39174a5db88148c7efdda9bd (patch)
tree6c135f72f4efa10a5109ea67cdf17586c342f904
parent612e4fbeb14001d5eef0bb0e3e19ea65eb47cef2 (diff)
Don't fix X issues as events
This change was made years ago. IDK why. I just remember there being an issue
-rw-r--r--drw/x.go14
-rw-r--r--main.go36
2 files changed, 27 insertions, 23 deletions
diff --git a/drw/x.go b/drw/x.go
index 910262a..01e3e1d 100644
--- a/drw/x.go
+++ b/drw/x.go
@@ -2,6 +2,7 @@ package drw // import "hhvn.uk/hbspbar/drw"
import (
"os"
+ "log"
"image"
"hhvn.uk/hbspbar/config"
@@ -22,7 +23,7 @@ type eventwrap struct {
}
var InitErr error
-var Events chan *eventwrap
+var XClosed chan bool
var xc *xgb.Conn
var xu *xgbutil.XUtil
@@ -59,12 +60,17 @@ func init() {
return
}
- Events := make(chan *eventwrap)
+ XClosed = make(chan bool)
go func() { for {
ev, err := xc.WaitForEvent()
- w := eventwrap{ev, err}
- Events <- &w
+ if ev == nil && err == nil {
+ XClosed <- true
+ return
+ }
+ if err != nil {
+ log.Printf("X.WaitForEvents: %v\n", err)
+ }
}}()
}
diff --git a/main.go b/main.go
index bc4e0d4..7d7b037 100644
--- a/main.go
+++ b/main.go
@@ -45,23 +45,8 @@ func main() {
case s := <-signals:
common.Error("%s\n", s)
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 <- drw.XClosed:
+ break mainloop
case err := <-bspc.EvErr:
common.Error("Couldn't read event: %s\n", err)
break mainloop
@@ -91,9 +76,22 @@ func main() {
common.Error("Couldn't load bspwm state: %s\n", err)
break mainloop
case blocks = <- status.NewBlocks:
- Redraw(state, blocks)
+ select {
+ case <- drw.XClosed:
+ break mainloop
+ default:
+ // Will hang if X is closed
+ Redraw(state, blocks)
+ }
case state = <- bspc.NewState:
- Redraw(state, blocks)
+ // Would've used a fallthrough,
+ // but go doesn't allow it
+ select {
+ case <- drw.XClosed:
+ break mainloop
+ default:
+ Redraw(state, blocks)
+ }
}
}