commit 4af147be6f35e2bf39174a5db88148c7efdda9bd
parent 612e4fbeb14001d5eef0bb0e3e19ea65eb47cef2
Author: Hayden Hamilton <hayden@hhvn.uk>
Date: Thu, 28 May 2026 21:43:18 +0100
Don't fix X issues as events
This change was made years ago. IDK why. I just remember there being an
issue
Diffstat:
| M | drw/x.go | | | 14 | ++++++++++---- |
| M | main.go | | | 36 | +++++++++++++++++------------------- |
2 files changed, 27 insertions(+), 23 deletions(-)
diff --git 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
@@ -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)
+ }
}
}