summaryrefslogtreecommitdiff
path: root/bar
diff options
context:
space:
mode:
Diffstat (limited to 'bar')
-rw-r--r--bar/bar.go75
1 files changed, 8 insertions, 67 deletions
diff --git a/bar/bar.go b/bar/bar.go
index 11ac49e..185a42e 100644
--- a/bar/bar.go
+++ b/bar/bar.go
@@ -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
}