[X2Go-Commits] [x2goclient] 01/02: Fix multimonitor support on Linux.
git-admin at x2go.org
git-admin at x2go.org
Tue Feb 4 14:35:20 CET 2014
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 at 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 at 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
More information about the x2go-commits
mailing list