[X2Go-Commits] [x2goclient] 01/07: x2gokdrive support for X2GoClient.
git-admin at x2go.org
git-admin at x2go.org
Fri Jun 14 16:57:32 CEST 2019
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2goclient.
commit 65e2b8304f3f11f5bd094e28b65afebb444a4813
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date: Fri Jan 18 11:38:47 2019 +0100
x2gokdrive support for X2GoClient.
---
src/InteractionDialog.cpp | 2 +
src/onmainwindow.cpp | 169 +++++++++++++++++++++++++++++++++++++++++-----
src/onmainwindow.h | 2 +-
src/sessionexplorer.cpp | 2 +-
src/sessionwidget.cpp | 20 ++++--
src/sessionwidget.h | 1 +
src/wapi.cpp | 1 +
7 files changed, 172 insertions(+), 25 deletions(-)
diff --git a/src/InteractionDialog.cpp b/src/InteractionDialog.cpp
index 6ab5d45..d0efa3f 100644
--- a/src/InteractionDialog.cpp
+++ b/src/InteractionDialog.cpp
@@ -29,6 +29,8 @@
#ifndef Q_OS_LINUX
#if QT_VERSION < 0x050000
#include <QPlastiqueStyle>
+#else
+#include <QStyleFactory>
#endif
#endif
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index 7c7c1ba..1982757 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -18,6 +18,9 @@
#include "onmainwindow_privat.h"
#include "help.h"
+
+#include <QStyleFactory>
+
void x2goSession::operator = ( const x2goSession& s )
{
agentPid=s.agentPid;
@@ -31,6 +34,7 @@ void x2goSession::operator = ( const x2goSession& s )
sndPort=s.sndPort;
fsPort=s.fsPort;
status=s.status;
+ sessionType=s.sessionType;
}
bool ONMainWindow::portable=false;
@@ -3998,6 +4002,10 @@ x2goSession ONMainWindow::getSessionFromString ( const QString& string )
s.sessionType=x2goSession::ROOTLESS;
if ( st=='S' )
s.sessionType=x2goSession::SHADOW;
+ if ( st=='K' )
+ {
+ s.sessionType=x2goSession::KDRIVE;
+ }
QString command=cmdinfo.mid ( 1 );
if ( command.length() >0 )
s.command=command;
@@ -4071,6 +4079,7 @@ void ONMainWindow::startNewSession()
QString user=getCurrentUname();
QString pack;
+ bool kdrive=false;
bool fullscreen;
int height;
int width;
@@ -4214,6 +4223,10 @@ void ONMainWindow::startNewSession()
{
command=st->setting()->value ( sid+"/command",
( QVariant ) defaultCmd ).toString();
+
+ kdrive=st->setting()->value ( sid+"/kdrive",
+ ( QVariant ) false ).toBool();
+
host=st->setting()->value (
sid+"/host",
( QVariant )
@@ -4308,7 +4321,12 @@ void ONMainWindow::startNewSession()
}
localDisplayNumber=disp;
}
- if (! startXorgOnStart)
+ if(kdrive)
+ {
+ x2goDebug<<"KDRIVE session don't start X Server";
+ slotSetWinServersReady();
+ }
+ if (! startXorgOnStart && ! kdrive)
startXOrg();
#endif
delete st;
@@ -4319,6 +4337,7 @@ void ONMainWindow::startNewSession()
runRemoteCommand=false;
}
+
resumingSession.server=host;
if (defaultLayout.size()>0)
@@ -4413,6 +4432,8 @@ void ONMainWindow::startNewSession()
sessTypeStr="P ";
command="PUBLISHED";
}
+ if(kdrive)
+ sessTypeStr="K ";
QString dpiEnv;
QString xdmcpEnv;
QString xinerama_env = "X2GO_XINERAMA=";
@@ -4625,7 +4646,12 @@ void ONMainWindow::resumeSession ( const x2goSession& s )
xorgMode=SAPP;
xorgWidth=QString::number(width);
xorgHeight=QString::number(height);
- if (! startXorgOnStart)
+ if(s.sessionType == x2goSession::KDRIVE)
+ {
+ x2goDebug<<"KDRIVE session, don't start X-Server";
+ slotSetWinServersReady();
+ }
+ if (! startXorgOnStart && (s.sessionType != x2goSession::KDRIVE))
startXOrg();
// #endif
#else /* defined (Q_OS_WIN) */
@@ -4839,6 +4865,9 @@ void ONMainWindow::selectSession ( QStringList& sessions )
type=tr ( "single application" );
if ( s.sessionType==x2goSession::SHADOW )
type=tr ( "shadow session" );
+ if ( s.sessionType==x2goSession::KDRIVE )
+ type=tr ( "X2GoKDrive session" );
+
item= new QStandardItem ( type );
model->setItem ( row,S_TYPE,item );
@@ -5357,6 +5386,7 @@ void ONMainWindow::slotRetResumeSess ( bool result,
QString host;
bool sound=true;
+ bool kdrive=false;
int sndSystem=PULSE;
QString sndPort;
#if !defined (Q_OS_WIN) && !defined (Q_OS_DARWIN)
@@ -5395,6 +5425,8 @@ void ONMainWindow::slotRetResumeSess ( bool result,
else
st= new X2goSettings(config.iniFile,QSettings::IniFormat);
+ kdrive=st->setting()->value ( sid+"/kdrive",
+ ( QVariant ) false ).toBool();
sound=st->setting()->value ( sid+"/sound",
( QVariant ) true ).toBool();
QString sndsys=st->setting()->value (
@@ -5473,6 +5505,10 @@ void ONMainWindow::slotRetResumeSess ( bool result,
sString.replace ( '\n','|' );
host=resumingSession.server;
resumingSession=getNewSessionFromString ( sString );
+ if(kdrive)
+ {
+ resumingSession.sessionType=x2goSession::KDRIVE;
+ }
resumingSession.server=host;
resumingSession.crTime=QDateTime::currentDateTime().toString (
"dd.MM.yy HH:mm:ss" );
@@ -5505,6 +5541,15 @@ void ONMainWindow::slotRetResumeSess ( bool result,
}
else
{
+
+ if(resumingSession.sessionType==x2goSession::KDRIVE)
+ {
+ qDebug()<<"resuming kdrive session";
+ }
+ else
+ {
+ qDebug()<<"resuming normal session";
+ }
host=resumingSession.server;
QStringList outputLines=output.split("\n",QString::SkipEmptyParts);
foreach(QString line,outputLines)
@@ -5830,6 +5875,8 @@ void ONMainWindow::slotTunnelOk(int)
xmodExecuted=false;
+ qDebug()<<"RESUMING SESSION is KDRIVE: "<<(resumingSession.sessionType== x2goSession::KDRIVE);
+
nxproxy=new QProcess;
proxyErrString="";
QStringList env = QProcess::systemEnvironment();
@@ -5853,11 +5900,16 @@ void ONMainWindow::slotTunnelOk(int)
// On Mac OS X, we want to make sure that DISPLAY is set to a proper value,
// but at the same time don't want to set the value ourselves but keep
// the provided one.
- QString disp=getXDisplay();
- if ( disp==QString::null )
+
+ QString disp="0";
+ if(resumingSession.sessionType!= x2goSession::KDRIVE)
{
- //slotProxyerror ( QProcess::FailedToStart );
- return;
+ disp=getXDisplay();
+ if ( disp==QString::null )
+ {
+ //slotProxyerror ( QProcess::FailedToStart );
+ return;
+ }
}
#endif // Q_OS_WIN || Q_OS_DARWIN
#if defined ( Q_OS_WIN )
@@ -5911,6 +5963,7 @@ void ONMainWindow::slotTunnelOk(int)
QString proxyCmd="nxproxy -S nx/nx,options="+dirpath+"/options:"+
resumingSession.display;
+
#ifdef Q_OS_DARWIN
//run nxproxy from bundle
QDir dir ( appDir );
@@ -5919,9 +5972,90 @@ void ONMainWindow::slotTunnelOk(int)
proxyCmd="\""+dir.absolutePath() +"/\""+proxyCmd;
#endif //Q_OS_DARWIN
- x2goDebug<<"Starting NX proxy, command: " + proxyCmd;
- nxproxy->start ( proxyCmd );
+ if(resumingSession.sessionType==x2goSession::KDRIVE)
+ {
+ bool randr=false;
+ bool fs=false;
+ QString width;
+ QString height;
+ bool multidisp=false;
+ QString dispNumber="1";
+
+ if (!embedMode )
+ {
+ if (!useLdap)
+ {
+ X2goSettings *st;
+ QString sid;
+ if ( !embedMode ) {
+ if (!(sessionExplorer->getLastSession())) {
+ x2goDebug << "No session selected, not searching for proxy window.";
+ return;
+ }
+
+ sid=sessionExplorer->getLastSession()->id();
+ }
+ else
+ sid="embedded";
+
+ if (brokerMode)
+ st=new X2goSettings(config.iniFile,QSettings::IniFormat);
+ else
+ st= new X2goSettings( "sessions" );
+ randr=st->setting()->value ( sid+"/xinerama",
+ ( QVariant ) defaultXinerama ).toBool();
+ fs=st->setting()->value ( sid+"/fullscreen", ( QVariant ) defaultFullscreen).toBool();
+
+ width=st->setting()->value ( sid+"/width", ( QVariant ) "800").toString();
+ height=st->setting()->value ( sid+"/height", ( QVariant ) "600").toString();
+
+
+ if (st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool())
+ {
+ dispNumber=st->setting()->value ( sid+"/display", (QVariant ) "1").toString();
+ multidisp=st->setting()->value ( sid+"/multidisp", ( QVariant ) false ).toBool();
+ }
+ delete st;
+ }
+ }
+
+ QStringList options;
+#ifdef Q_OS_WIN
+ //restore real path, as we not using cygwin for x2gokdriveclient
+ nxroot=homeDir +"/.x2go";
+ dirpath=nxroot+"/S-"+resumingSession.sessionId;
+#endif
+ proxyCmd="x2gokdriveclient";
+ options<<"--connect"<<"localhost"<<"--port"<<localGraphicPort<<"--title"<<resumingSession.sessionId<<"-S"<<"nx/nx,options="+dirpath+
+ "/options:"+resumingSession.display;
+ if(randr)
+ {
+ options<<"--randr";
+ }
+ if(fs)
+ {
+ options<<"--fs";
+ }
+ else
+ if(multidisp)
+ {
+ options<<"--screen"<<dispNumber;
+ }
+ else
+ {
+ options<<"--width"<<width<<"--height"<<height;
+ }
+
+ x2goDebug<<"Starting NX proxy, command: " + proxyCmd<<options;
+ nxproxy->start ( proxyCmd, options );
+ }
+ else
+ {
+ x2goDebug<<"Starting NX proxy, command: " + proxyCmd;
+ nxproxy->start ( proxyCmd);
+ }
+
proxyRunning=true;
if(brokerMode)
{
@@ -11116,6 +11250,7 @@ bool ONMainWindow::startSshd(ONMainWindow::key_types key_type)
void ONMainWindow::setProxyWinTitle()
{
+
if (embedMode)
return;
@@ -11378,7 +11513,7 @@ void ONMainWindow::slotFindProxyWin()
setProxyWinTitle();
proxyWinTimer->stop();
- if (!embedMode)
+ if (!embedMode && !(resumingSession.sessionType==x2goSession::KDRIVE))
{
if (!useLdap)
{
@@ -11446,7 +11581,7 @@ void ONMainWindow::slotFindProxyWin()
#ifdef Q_OS_WIN
x2goDebug<<"Maximize proxy window: "<<maximizeProxyWin;
- if ( !startEmbedded )
+ if ( !startEmbedded &&!(resumingSession.sessionType==x2goSession::KDRIVE))
{
if ( maximizeProxyWin )
{
@@ -12088,7 +12223,7 @@ void ONMainWindow::initPassDlg()
cancel->setEnabled ( false );
#ifdef Q_OS_WIN
QRect r;
- wapiWindowRect ( ok->winId(),r );
+ wapiWindowRect ( (HWND)ok->winId(),r );
#endif
}
if (defaultLayout.size()>1)
@@ -12277,8 +12412,8 @@ void ONMainWindow::initStatusDlg()
if ( embedMode )
{
QRect r;
- wapiWindowRect ( sbAdv->winId(),r );
- wapiWindowRect ( stInfo->verticalScrollBar ()->winId(),r );
+ wapiWindowRect ( (HWND)sbAdv->winId(),r );
+ wapiWindowRect ( (HWND)stInfo->verticalScrollBar ()->winId(),r );
}
#endif
@@ -12531,10 +12666,10 @@ void ONMainWindow::initSelectSessDlg()
if ( embedMode )
{
QRect r;
- wapiWindowRect ( sOk->winId(),r );
- wapiWindowRect ( sessTv->verticalScrollBar ()->winId(),r );
- wapiWindowRect ( sessTv->horizontalScrollBar ()->winId(),r );
- wapiWindowRect ( sessTv->header ()->viewport()->winId(),r );
+ wapiWindowRect ( (HWND)sOk->winId(),r );
+ wapiWindowRect ( (HWND)sessTv->verticalScrollBar ()->winId(),r );
+ wapiWindowRect ( (HWND)sessTv->horizontalScrollBar ()->winId(),r );
+ wapiWindowRect ( (HWND)sessTv->header ()->viewport()->winId(),r );
}
#endif
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index 1896b1a..345f2e6 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -150,7 +150,7 @@ struct x2goSession
bool published;
int colorDepth;
bool fullscreen;
- enum {DESKTOP,ROOTLESS,SHADOW} sessionType;
+ enum {DESKTOP,ROOTLESS,SHADOW, KDRIVE} sessionType;
QString command;
void operator = ( const x2goSession& s );
};
diff --git a/src/sessionexplorer.cpp b/src/sessionexplorer.cpp
index fe884f6..ec29106 100644
--- a/src/sessionexplorer.cpp
+++ b/src/sessionexplorer.cpp
@@ -237,7 +237,7 @@ void SessionExplorer::slotCreateDesktopIcon ( SessionButton* bt )
"link.WorkingDirectory = \""<<workDir<<"\"\n"<<
"link.Save\n";
file.close();
- system ( scrname.toAscii() );
+ system ( scrname.toLatin1() );
QFile::remove ( scrname );
#endif
}
diff --git a/src/sessionwidget.cpp b/src/sessionwidget.cpp
index e72e30e..4ead112 100644
--- a/src/sessionwidget.cpp
+++ b/src/sessionwidget.cpp
@@ -207,6 +207,7 @@ SessionWidget::SessionWidget ( bool newSession, QString id, ONMainWindow * mw,
QHBoxLayout* cmdLay=new QHBoxLayout ();
cmdLay->addWidget ( new QLabel ( tr ( "Session type:" ),this ) );
#endif
+ cbKdrive=new QCheckBox(tr("Run in X2GoKDrive (experimental)"));
sessBox=new QComboBox ( deskSess );
cmd=new QLineEdit ( deskSess );
cmdCombo=new QComboBox ( deskSess );
@@ -228,14 +229,15 @@ SessionWidget::SessionWidget ( bool newSession, QString id, ONMainWindow * mw,
sessBox->addItem ( tr ( "Custom desktop" ) );
sessBox->addItem ( tr ( "Single application" ) );
sessBox->addItem ( tr ( "Published applications" ) );
- cmdLay->addWidget ( sessBox,0,1,Qt::AlignLeft );
+ cmdLay->addWidget ( cbKdrive,0,1,Qt::AlignLeft );
+ cmdLay->addWidget ( sessBox,1,1,Qt::AlignLeft );
leCmdIp=new QLabel ( tr ( "Command:" ),deskSess );
pbAdvanced=new QPushButton ( tr ( "Advanced options..." ),deskSess );
- cmdLay->addWidget ( leCmdIp,0,2 );
+ cmdLay->addWidget ( leCmdIp,1,2 );
cmdLay->setColumnStretch(6,1);
- cmdLay->addWidget ( cmd ,0,3);
- cmdLay->addWidget ( cmdCombo,0,4 );
- cmdLay->addWidget ( pbAdvanced ,0,5);
+ cmdLay->addWidget ( cmd ,1,3);
+ cmdLay->addWidget ( cmdCombo,1,4 );
+ cmdLay->addWidget ( pbAdvanced ,1,5);
cmdCombo->setSizePolicy ( QSizePolicy::Expanding,
QSizePolicy::Preferred );
cmdCombo->hide();
@@ -254,7 +256,7 @@ SessionWidget::SessionWidget ( bool newSession, QString id, ONMainWindow * mw,
sessLay->addWidget ( deskSess );
#ifdef Q_OS_LINUX
cbDirectRDP=new QCheckBox(tr("Direct RDP connection"), deskSess);
- cmdLay->addWidget(cbDirectRDP,1,0,1,6);
+ cmdLay->addWidget(cbDirectRDP,2,0,1,6);
cbDirectRDP->hide();
connect(cbDirectRDP,SIGNAL(clicked()), this, SLOT(slot_rdpDirectClicked()));
#endif
@@ -799,6 +801,9 @@ void SessionWidget::readConfig()
sessName->selectAll();
sessName->setFocus();
}
+
+ cbKdrive->setChecked(st.setting()->value (sessionId+"/kdrive", false).toBool() );
+
#ifdef Q_OS_LINUX
slot_rdpDirectClicked();
#endif
@@ -811,6 +816,7 @@ void SessionWidget::setDefaults()
sessBox->setCurrentIndex ( KDE );
cmdCombo->clear();
cmdCombo->addItem ( "" );
+ cbKdrive->setChecked(false);
cmdCombo->addItems ( mainWindow->transApplicationsNames() );
cbAutoLogin->setChecked(false);
cbKrbLogin->setChecked(false);
@@ -883,6 +889,8 @@ void SessionWidget::saveSettings()
st.setting()->setValue(sessionId+"/directrdp",( QVariant ) cbDirectRDP->isChecked());
st.setting()->setValue(sessionId+"/directxdmcp",( QVariant ) cbDirectRDP->isChecked());
#endif
+
+ st.setting()->setValue(sessionId+"/kdrive",( QVariant ) cbKdrive->isChecked());
QString command;
bool rootless=false;
bool published=false;
diff --git a/src/sessionwidget.h b/src/sessionwidget.h
index bbc940e..294885a 100644
--- a/src/sessionwidget.h
+++ b/src/sessionwidget.h
@@ -103,6 +103,7 @@ private:
QCheckBox* cbProxySamePass;
QCheckBox* cbProxyAutologin;
QCheckBox* cbProxyKrbLogin;
+ QCheckBox* cbKdrive;
QLineEdit* proxyKey;
QPushButton* pbOpenProxyKey;
QLabel* proxyKeyLabel;
diff --git a/src/wapi.cpp b/src/wapi.cpp
index b5d485b..182ffc2 100644
--- a/src/wapi.cpp
+++ b/src/wapi.cpp
@@ -24,6 +24,7 @@
#ifdef Q_OS_WIN
#include <winsock2.h>
#include <windows.h>
+#include <winerror.h>
#include <sddl.h>
#include "wapi.h"
#include "x2gologdebug.h"
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
More information about the x2go-commits
mailing list