src.hhvn.uk > hbspbar > commit > 4af147be6f35e2bf39174a5db88148c7efdda9bd

custom status bar for bspwm
Log | Files | Refs

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:
Mdrw/x.go | 14++++++++++----
Mmain.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) + } } }