This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch feature/kdrive_support in repository x2goclient. from 1e9d573 Second update round of Czech translation + add it to x2goclient.pro. new f64df18 x2gokdrive support for X2GoClient. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: 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(-) -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch feature/kdrive_support in repository x2goclient. commit f64df182e60a67a857c2f4a45f1051a556bdef12 Author: Oleksandr Shneyder <o.shneyder@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 dbdefaa..ec3623c 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) { @@ -11100,6 +11234,7 @@ bool ONMainWindow::startSshd(ONMainWindow::key_types key_type) void ONMainWindow::setProxyWinTitle() { + if (embedMode) return; @@ -11362,7 +11497,7 @@ void ONMainWindow::slotFindProxyWin() setProxyWinTitle(); proxyWinTimer->stop(); - if (!embedMode) + if (!embedMode && !(resumingSession.sessionType==x2goSession::KDRIVE)) { if (!useLdap) { @@ -11430,7 +11565,7 @@ void ONMainWindow::slotFindProxyWin() #ifdef Q_OS_WIN x2goDebug<<"Maximize proxy window: "<<maximizeProxyWin; - if ( !startEmbedded ) + if ( !startEmbedded &&!(resumingSession.sessionType==x2goSession::KDRIVE)) { if ( maximizeProxyWin ) { @@ -12072,7 +12207,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) @@ -12261,8 +12396,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 @@ -12515,10 +12650,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 3fa35dd..b8d04d7 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