diff options
| author | hhvn <dev@hhvn.uk> | 2023-11-18 15:02:35 +0000 |
|---|---|---|
| committer | hhvn <dev@hhvn.uk> | 2023-11-18 19:55:19 +0000 |
| commit | 6a1ca4bae672d7b6edc50c9a31b0404467714edb (patch) | |
| tree | 265f534184fa2b0a5fcbc8f5f0c0da7d6df58d0b /bar | |
| parent | 6117c8a98a39cd8bc1ca6b2436b6dab8873053f9 (diff) | |
Move all xgb using functions to drw
Diffstat (limited to 'bar')
| -rw-r--r-- | bar/bar.go | 75 |
1 files changed, 8 insertions, 67 deletions
@@ -10,23 +10,14 @@ import ( "hhvn.uk/hbspbar/common" "hhvn.uk/hbspbar/bspc" "hhvn.uk/hbspbar/drw" - - "github.com/jezek/xgb" - "github.com/jezek/xgb/xproto" - - "github.com/jezek/xgbutil" - "github.com/jezek/xgbutil/icccm" - "github.com/jezek/xgbutil/ewmh" - "github.com/jezek/xgbutil/xgraphics" ) var bars map[int]*bar -var stoploop chan bool type bar struct { Mon *bspc.Monitor - w xproto.Window + w *drw.Window i *image.RGBA drawing sync.Mutex } @@ -36,29 +27,10 @@ func (b *bar) init() error { go b.Mon.TopPadding(config.H) - b.w, err = xproto.NewWindowId(drw.X) - if err != nil { - return common.Perror("xproto.NewWindowId", err) - } - geom := b.Mon.Rectangle - xproto.CreateWindow(drw.X, drw.Screen.RootDepth, b.w, drw.Screen.Root, - int16(geom.X), int16(geom.Y), uint16(geom.Width), uint16(config.H), 0, - xproto.WindowClassInputOutput, drw.Screen.RootVisual, - xproto.CwBackPixel|xproto.CwEventMask, []uint32{ - config.Bg, - xproto.EventMaskStructureNotify }) - - class := icccm.WmClass{"hbspbar", "hbspbar"} - icccm.WmClassSet(drw.XU, b.w, &class) - - ewmh.WmWindowTypeSet(drw.XU, b.w, []string{"_NET_WM_WINDOW_TYPE_DOCK"}) - ewmh.WmStateSet(drw.XU, b.w, []string{"_NET_WM_STATE_STICKY", "_NET_WM_STATE_ABOVE"}) - - err = xproto.MapWindowChecked(drw.X, b.w).Check() - if err != nil { - return common.Perror("xproto.MapWindow", err) - } + + b.w, err = drw.WindowCreate(geom.X, geom.Y, geom.Width, config.H) + if err != nil { return err } b.i = image.NewRGBA(b.rect()) @@ -136,11 +108,7 @@ func (b *bar) draw() { } cx += 5 - xgr := xgraphics.NewConvert(drw.XU, b.i) - - xgr.XSurfaceSet(b.w) - xgr.XDraw() - xgr.XPaint(b.w) + b.w.Paint(b.i) b.drawing.Unlock() } @@ -149,12 +117,6 @@ func (b *bar) destroy() { if (b.Mon != nil) { b.Mon.TopPadding(0) } - xproto.DestroyWindow(drw.X, b.w) -} - -type eventwrap struct { - Ev xgb.Event - Err error } // External interface @@ -176,25 +138,8 @@ func init() { Handle.NewState = make(chan *bspc.State) Handle.Err = make(chan error) - events := make(chan *eventwrap) - stoploop = make(chan bool, 1) - xstop := make(chan bool, 1) - - go func() { for { - ev, err := drw.X.WaitForEvent() - w := eventwrap{ev, err} - - select { - case <- xstop: - return - default: - events <- &w - } - }}() - go func() { defer func() { - xstop <- true close(Handle.Create) close(Handle.Destroy) close(Handle.NewState) @@ -203,7 +148,7 @@ func init() { for { select { - case e := <- events: + case e := <- drw.Events: if e.Ev == nil && e.Err == nil { Handle.Err <- fmt.Errorf("X connection clossed") return @@ -229,7 +174,7 @@ func init() { return } if _, ok := bars[id]; ok { break } - if err := create(drw.X, drw.XU, drw.Screen, state.GetMon(id)); err != nil { + if err := create(state.GetMon(id)); err != nil { Handle.Err <- fmt.Errorf("Couldn't create window: %s\n", err) return } @@ -240,15 +185,12 @@ func init() { go b.draw() } } - case <- stoploop: - return } } }() } -func create(x *xgb.Conn, xu *xgbutil.XUtil, - scr *xproto.ScreenInfo, m *bspc.Monitor) (error) { +func create(m *bspc.Monitor) (error) { var b bar b.Mon = m @@ -272,5 +214,4 @@ func Cleanup() { for _, b := range bars { b.destroy() } - stoploop <- true } |