[X2Go-Dev] Question about x2goclient xinerama

Ulrich Sibiller ulrich.sibiller at gmail.com
Thu May 14 23:32:03 CEST 2015


Hello,

while testing my xinerama re-implementation I noticed that x2goclient
reports a wrong width sometimes when simply moving the window without
changing the size. The reported size differs by one pixel  (too much
or too little). When running x2goclient --debug you can see this:

x2go-DEBUG-../src/onmainwindow.cpp:10160> "New proxy geometry: (x:
329, y: 214, w: 1440, h: 900"
x2go-DEBUG-../src/onmainwindow.cpp:10160> "New proxy geometry: (x:
365, y: 213, w: 1440, h: 900"
x2go-DEBUG-../src/onmainwindow.cpp:10160> "New proxy geometry: (x:
825, y: 190, w: 1440, h: 900"
x2go-DEBUG-../src/sshprocess.cpp:189> executing remote command via
SshProcess object (24): "export DISPLAY=:50;printf '\''1095 0 345
900\n0 0 1095 900'\'' >
$HOME/.x2go/C-uli-50-1431636769_stDKDE_dp24/xinerama.conf"

-> here the 345 should have been a 344.

Interestingly my patched x2goagent (that completely ignores
xinerama.conf) sees that value. So I conclude that x2goclient is
manipulating the nxproxy window size by one pixel itself. Disabling
xinerama in the session's configuration fixes the problem.

That off-by-one behaviour is caused by this code in onmainwindow.cpp:

void ONMainWindow::slotXineramaConfigured()
{
    if (resumingSession.fullscreen)
        return;
    if (xinSizeInc == -1)
        xinSizeInc=1;
    else
        xinSizeInc=-1;
#ifdef Q_OS_LINUX
    lastDisplayGeometry.setWidth(lastDisplayGeometry.width()+xinSizeInc);
    XSync(QX11Info::display(),false);
    XResizeWindow(QX11Info::display(), proxyWinId,
                  lastDisplayGeometry.width(),lastDisplayGeometry.height());
    XSync(QX11Info::display(),false);
#endif
#ifdef Q_OS_WIN
    QRect geom;
    wapiWindowRect ( (HWND) proxyWinId, geom );
    wapiMoveWindow( (HWND) proxyWinId, geom.x(), geom.y(),
geom.width()+xinSizeInc, geom.height(),true);
    lastDisplayGeometry=proxyWinGeometry();
#endif
    xineramaTimer->start(500);
}

If I set xinSizeInc to zero in all cases the off-by-one behaviour is
completely gone. Why does xinSizeInc exist at all?

Uli


More information about the x2go-dev mailing list