wm/src/bsp/loop.go

93 lines
1.9 KiB
Go
Raw Normal View History

2023-06-11 10:24:15 +00:00
package bsp
import (
"context"
2023-06-15 03:20:55 +00:00
"github.com/jezek/xgb/xproto"
2023-06-11 10:24:15 +00:00
"github.com/jezek/xgbutil"
2023-06-15 03:20:55 +00:00
"github.com/jezek/xgbutil/keybind"
"github.com/jezek/xgbutil/mousebind"
"github.com/jezek/xgbutil/xevent"
"tuxpa.in/a/zlog/log"
2023-06-11 10:24:15 +00:00
)
type XWM struct {
2023-06-11 14:11:36 +00:00
W *WM
X *xgbutil.XUtil
2023-06-11 10:24:15 +00:00
}
func NewXWM(w *WM, x *xgbutil.XUtil) *XWM {
xwm := &XWM{
2023-06-11 14:11:36 +00:00
W: w,
X: x,
2023-06-11 10:24:15 +00:00
}
return xwm
}
func (xwm *XWM) Start(ctx context.Context) error {
2023-06-15 03:20:55 +00:00
keybind.Initialize(xwm.X)
mousebind.Initialize(xwm.X)
captureCombos := []string{
"Mod4-1",
"Mod3-1",
"Mod2-1",
"Mod1-1",
}
for _, combo := range captureCombos {
err := mousebind.ButtonPressFun(func(xu *xgbutil.XUtil, event xevent.ButtonPressEvent) {
log.Trace().Str("name", event.String()).Str("mod", combo).Msg("press")
}).Connect(xwm.X, xwm.X.RootWin(), combo, false, true)
2023-06-11 10:24:15 +00:00
if err != nil {
return err
}
2023-06-15 03:20:55 +00:00
err = mousebind.ButtonReleaseFun(func(xu *xgbutil.XUtil, event xevent.ButtonReleaseEvent) {
log.Trace().Str("name", event.String()).Str("mod", combo).Msg("depress")
}).Connect(xwm.X, xwm.X.RootWin(), combo, false, true)
if err != nil {
return err
}
}
tree, err := xproto.QueryTree(xwm.X.Conn(), xwm.X.RootWin()).Reply()
if err != nil {
return err
}
for _, v := range tree.Children {
if v == xwm.X.Dummy() {
continue
}
attrs, err := xproto.GetWindowAttributes(xwm.X.Conn(), v).Reply()
if err != nil {
continue
}
if attrs.MapState == xproto.MapStateUnmapped {
continue
}
log.Trace().
Uint16("class", attrs.Class).
Msg("found existing window")
log.Println(attrs)
2023-06-11 10:24:15 +00:00
}
2023-06-15 03:20:55 +00:00
xevent.ConfigureNotifyFun(func(xu *xgbutil.XUtil, event xevent.ConfigureNotifyEvent) {
log.Trace().Str("name", event.String()).Msg("notify event")
}).Connect(xwm.X, xwm.X.RootWin())
xevent.Main(xwm.X)
// for {
// err := xwm.run(ctx)
// if err != nil {
// return err
// }
// }
return nil
2023-06-11 10:24:15 +00:00
}
func (xwm *XWM) run(ctx context.Context) error {
2023-06-15 03:20:55 +00:00
2023-06-11 10:24:15 +00:00
return nil
}