This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit b3b56338600315afca5805ad45034a3d5e4605e1 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Tue Feb 4 14:32:42 2014 +0100 Fix multimonitor support on Linux. --- debian/changelog | 1 + onmainwindow.cpp | 47 ++++++++++++++++++++++++++++++++++++++++------- onmainwindow.h | 1 + 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index b597a28..da1ddd7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,7 @@ x2goclient (4.0.2.0-0x2go1) UNRELEASED; urgency=low - Set modmap timer timeout to 10 sec on Mac. - Fix running xmodmap if X2Go Client not started from terminal. - Setting keyboard modifiers with xmodmap. + - Fix multimonitor support on Linux. -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 22 Jan 2014 09:20:08 +0100 diff --git a/onmainwindow.cpp b/onmainwindow.cpp index fd19e32..9f306f8 100644 --- a/onmainwindow.cpp +++ b/onmainwindow.cpp @@ -3753,12 +3753,21 @@ void ONMainWindow::startNewSession() ( QVariant ) defaultFullscreen ).toBool(); - //if multidisplay = true or maxdim = true we set maximun display area available for the selected monitor - if (st->setting()->value(sid + "/multidisp", (QVariant) false).toBool() || st->setting()->value(sid + "/maxdim", (QVariant) false).toBool()) { + //if maxdim = true we set maximun display area available for the selected monitor + if ( st->setting()->value(sid + "/maxdim", (QVariant) false).toBool()) + { int selectedScreen = st->setting()->value(sid + "/display", (QVariant) -1).toInt(); height=QApplication::desktop()->availableGeometry(selectedScreen).height(); width=QApplication::desktop()->availableGeometry(selectedScreen).width(); - } else { + } + else if(st->setting()->value(sid + "/multidisp", (QVariant) false).toBool()) + { + //workaround to avoid wm set windows maximized, which will break moving and resizing of window + width=800; + height=600; + } + else + { height=st->setting()->value ( sid+"/height", ( QVariant ) defaultHeight ).toInt(); width=st->setting()->value ( sid+"/width", @@ -9861,9 +9870,19 @@ void ONMainWindow::slotSetProxyWinFullscreen() { #ifdef Q_OS_LINUX + + QRect geom=QApplication::desktop()->screenGeometry(localDisplayNumber-1); + Atom atom = XInternAtom ( QX11Info::display(), "_NET_WM_STATE_FULLSCREEN", True ); + XChangeProperty ( + QX11Info::display(), proxyWinId, + XInternAtom ( QX11Info::display(), "_NET_WM_STATE", True ), + XA_ATOM, 32, PropModeReplace, + (unsigned char*) &atom, 1 ); + + XMapWindow(QX11Info::display(), proxyWinId); + XSync(QX11Info::display(),false); XEvent event; - long emask = StructureNotifyMask | ResizeRedirectMask; event.xclient.type = ClientMessage; event.xclient.serial = 0; event.xclient.send_event = True; @@ -9874,12 +9893,23 @@ void ONMainWindow::slotSetProxyWinFullscreen() event.xclient.data.l[0] = 1; event.xclient.data.l[1] = XInternAtom(QX11Info::display(),"_NET_WM_STATE_FULLSCREEN",False); event.xclient.data.l[2] = 0; - event.xclient.data.l[3] = 0; + event.xclient.data.l[3] = 1; event.xclient.data.l[4] = 0; Status st; st=XSendEvent(QX11Info::display(), DefaultRootWindow(QX11Info::display()), - False, emask,&event); + False, SubstructureNotifyMask ,&event); + if(!st) + { + x2goDebug<<"Couldn't get fullscreen"; + } XSync(QX11Info::display(),false); + XMapWindow(QX11Info::display(), proxyWinId); + + QString geoStr = QString("%1").arg(geom.width()) + "x"+ QString("%1").arg(geom.height()); + + + + sshConnection->executeCommand("DISPLAY=:"+resumingSession.display+" xrandr --output default --mode "+geoStr); #endif #ifdef Q_OS_WIN wapiSetFSWindow ( ( HWND ) proxyWinId, @@ -9902,7 +9932,9 @@ void ONMainWindow::resizeProxyWinOnDisplay(int disp) #ifdef Q_OS_LINUX XSync(QX11Info::display(),false); - XMoveWindow(QX11Info::display(), proxyWinId,geom.x(),geom.y()); + XMoveResizeWindow(QX11Info::display(), proxyWinId, geom.x(), geom.y(), 800, 600); + XMapWindow(QX11Info::display(), proxyWinId); + XFlush(QX11Info::display()); #endif #ifdef Q_OS_WIN dispGeometry=geom; @@ -10056,6 +10088,7 @@ void ONMainWindow::slotFindProxyWin() { disp=1; } + localDisplayNumber=disp; resizeProxyWinOnDisplay(disp); return; } diff --git a/onmainwindow.h b/onmainwindow.h index 8db82ec..fa535d7 100644 --- a/onmainwindow.h +++ b/onmainwindow.h @@ -793,6 +793,7 @@ private: QString lastFreeServer; QString cardLogin; QTextEdit* stInfo; + int localDisplayNumber; SVGFrame* ln; int tunnel; -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git