BurntSushi / xgbutil

A utility library to make use of the X Go Binding easier. (Implements EWMH and ICCCM specs, key binding support, etc.)
Do What The F*ck You Want To Public License
195 stars 45 forks source link

[Newbie] Strange behavior on events #39

Open nlamirault opened 7 years ago

nlamirault commented 7 years ago

i've got this code :

x, err := xgbutil.NewConnDisplay(os.Getenv(displayEnv))
    if err != nil {
        return nil, err
    }

    wm := &WindowManager{
        X:                x,
        WorkspaceManager: newWorkspaceManager(len(conf.Workspaces)),
    }
    wm.WorkspaceManager.Add(x, conf)
    wm.WorkspaceManager.Activate(0)

    panel, err := newPanel(x, wm)
    if err != nil {
        return nil, err
    }
    panel.Run()

    root := xwindow.New(x, x.RootWin())
    evMasks := xproto.EventMaskPropertyChange |
        xproto.EventMaskFocusChange |
        xproto.EventMaskButtonPress |
        xproto.EventMaskButtonRelease |
        xproto.EventMaskStructureNotify |
        xproto.EventMaskSubstructureRedirect |
        xproto.EventMaskSubstructureRedirect

    if err := root.Listen(evMasks); err != nil {
        return nil, err
    }

    keybind.Initialize(x)

    xevent.MapRequestFun(wm.handleMapRequest).Connect(x, x.RootWin())
    xevent.ConfigureRequestFun(wm.handleConfigureRequest).Connect(x, x.RootWin())
    xevent.ConfigureNotifyFun(wm.handleConfigureNotify).Connect(x, x.RootWin())
    if err := keybind.KeyPressFun(wm.handleActivateNextWorkspace).Connect(x, x.RootWin(), conf.Keybindings.NextWorkspace, true); err != nil {
        return nil, err
    }
    if err := keybind.KeyPressFun(wm.handleActivatePreviousWorkspace).Connect(x, x.RootWin(), conf.Keybindings.PreviousWorkspace, true); err != nil {
        return nil, err
    }

    return wm, nil
}

func (wm *WindowManager) handleMapRequest(x *xgbutil.XUtil, ev xevent.MapRequestEvent) {
    glog.V(2).Infof("Event: map request: %s", ev)
    x.Grab()
    defer x.Ungrab()

    w, err := newWindow(x, wm.activeWorkspace().WindowId(), ev.Window)
    if err != nil {
        glog.Errorf("Can't create windows: %s", err)
        return
    }
    w.Draw()
}

func (wm *WindowManager) handleConfigureRequest(x *xgbutil.XUtil, ev xevent.ConfigureRequestEvent) {
    glog.V(2).Infof("Event: configure request: %s", ev)
    xwindow.New(x, ev.Window).Configure(int(ev.ValueMask), int(ev.X), int(ev.Y), int(ev.Width)*2, int(ev.Height)*2, ev.Sibling, ev.StackMode)
}

func (wm *WindowManager) handleConfigureNotify(x *xgbutil.XUtil, ev xevent.ConfigureNotifyEvent) {
    glog.V(2).Infof("Event: configure notify: %s", ev)
}

When i add a termite application, i've got this log :

I0616 16:57:28.694279   28127 wm.go:137] Event: configure notify: ConfigureNotify {Sequence: 106, Event: 621, Window: 621, AboveSibling: 0, X: 0, Y: 0, Width: 1024, Height: 748, BorderWidth: 0, OverrideRedirect: false}
I0616 16:57:28.815842   28127 wm.go:132] Event: configure request: ConfigureRequest {Sequence: 106, StackMode: 0, Parent: 621, Window: 4194307, Sibling: 0, X: 0, Y: 0, Width: 722, Height: 434, BorderWidth: 0, ValueMask: 64}
I0616 16:57:28.815913   28127 wm.go:119] Event: map request: MapRequest {Sequence: 106, Parent: 621, Window: 4194307}

Do you know why i've got different width and height on configureNotify and configureRequest events ? Thanks