[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