The branch, master has been updated
via b9e0f3498b4b681341f6bb4bfad28a64d2afee37 (commit)
from 4adfcbf0aa5f34283089786032b47727530e5d78 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b9e0f3498b4b681341f6bb4bfad28a64d2afee37
Author: Oleksandr Shneyder <oleksandr.shneyder(a)obviously-nice.de>
Date: Tue Sep 4 12:14:43 2012 +0200
Implement direct RDP connection using standalone client
-----------------------------------------------------------------------
Summary of changes:
debian/changelog | 5 +-
onmainwindow.cpp | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++-
onmainwindow.h | 2 +
sessionbutton.cpp | 35 +++++++++++--
settingswidget.cpp | 2 +-
5 files changed, 173 insertions(+), 10 deletions(-)
The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 753b008..3dfcf1d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-x2goclient (3.99.2.3-0~x2go2) UNRELEASED; urgency=low
+x2goclient (3.99.2.3-0~x2go3) UNRELEASED; urgency=low
[ Mike Gabriel ]
* New upstream version (3.99.2.2):
@@ -10,8 +10,9 @@ x2goclient (3.99.2.3-0~x2go2) UNRELEASED; urgency=low
[ Oleksandr Shneyder ]
* Add settings for direct RDP connection
+ * Implement direct RDP connection using standalone client
- -- Oleksandr Shneyder <oleksandr.shneyder(a)obviously-nice.de> Thu, 30 Aug 2012 18:10:57 +0300
+ -- Oleksandr Shneyder <oleksandr.shneyder(a)obviously-nice.de> Tue, 04 Sep 2012 12:13:43 +0200
x2goclient (3.99.2.2-0~x2go2) unstable; urgency=low
diff --git a/onmainwindow.cpp b/onmainwindow.cpp
index 1bded10..7294d56 100644
--- a/onmainwindow.cpp
+++ b/onmainwindow.cpp
@@ -2950,6 +2950,7 @@ void ONMainWindow::slotSshUserAuthError ( QString error )
void ONMainWindow::slotSessEnter()
{
+
if ( useLdap )
{
slotPassEnter();
@@ -3005,10 +3006,102 @@ void ONMainWindow::continueLDAPSession()
proc->startNormal ( "x2gogetservers" );
}
+void ONMainWindow::startDirectRDP()
+{
+
+ X2goSettings st ( "sessions" );
+ QString sid;
+ if ( !embedMode )
+ sid=lastSession->id();
+ else
+ sid="embedded";
+
+
+ bool fullscreen=st.setting()->value ( sid+"/fullscreen",
+ ( QVariant )
+ defaultFullscreen ).toBool();
+ bool maxRes=st.setting()->value ( sid+"/maxdim",
+ ( QVariant )
+ false ).toBool();
+ int height=st.setting()->value ( sid+"/height",
+ ( QVariant ) defaultHeight ).toInt();
+ int width=st.setting()->value ( sid+"/width",
+ ( QVariant ) defaultWidth ).toInt();
+
+ QString client=st.setting()->value ( sid+"/rdpclient",
+ ( QVariant ) "rdesktop").toString();
+ QString host=st.setting()->value ( sid+"/host",
+ ( QVariant ) "").toString();
+ QString port=st.setting()->value ( sid+"/rdpport",
+ ( QVariant ) "3389").toString();
+ QString params=st.setting()->value ( sid+"/directrdpsettings",
+ ( QVariant ) "").toString();
+ QString user=login->text();
+ QString password=pass->text();
+
+ nxproxy=new QProcess;
+ connect ( nxproxy,SIGNAL ( error ( QProcess::ProcessError ) ),this,
+ SLOT ( slotProxyError ( QProcess::ProcessError ) ) );
+ connect ( nxproxy,SIGNAL ( finished ( int,QProcess::ExitStatus ) ),this,
+ SLOT ( slotProxyFinished ( int,QProcess::ExitStatus ) ) );
+ connect ( nxproxy,SIGNAL ( readyReadStandardError() ),this,
+ SLOT ( slotProxyStderr() ) );
+ connect ( nxproxy,SIGNAL ( readyReadStandardOutput() ),this,
+ SLOT ( slotProxyStdout() ) );
+
+
+ QString userOpt;
+ if (user.length()>0)
+ {
+ userOpt=" -u ";
+ userOpt+=user+" ";
+ }
+
+ QString passOpt;
+ if (password.length()>0)
+ {
+ passOpt=" -p \"";
+ passOpt+=password+"\" ";
+ }
+
+ QString grOpt;
+
+ if (fullscreen)
+ {
+ grOpt=" -f ";
+ }
+ else if (maxRes)
+ {
+ QDesktopWidget wd;
+ grOpt=" -D -g "+QString::number( wd.screenGeometry().width())+"x"+QString::number(wd.screenGeometry().height())+" ";
+ }
+ else
+ {
+ grOpt=" -g "+QString::number(width)+"x"+QString::number(height);
+ }
+
+ QString proxyCmd=client +" "+params+ grOpt +userOpt+passOpt + host +":"+port ;
+ nxproxy->start ( proxyCmd );
+
+ resumingSession.display="RDP";
+ resumingSession.server=host;
+ resumingSession.sessionId=lastSession->name();
+ resumingSession.crTime=QDateTime::currentDateTime().toString("dd.MM.yy HH:mm:ss");
+
+ showSessionStatus();
+// QTimer::singleShot ( 30000,this,SLOT ( slotRestartProxy() ) );
+
+}
+
+
+
+
+
bool ONMainWindow::startSession ( const QString& sid )
{
setEnabled ( false );
+ directRDP=false;
QString passwd;
QString user;
QString host;
@@ -3040,6 +3133,13 @@ bool ONMainWindow::startSession ( const QString& sid )
( QVariant ) false ).toBool();
krblogin=st.setting()->value ( sid+"/krblogin",
( QVariant ) false ).toBool();
+ directRDP=st.setting()->value ( sid+"/directrdp",
+ ( QVariant ) false ).toBool();
+ if (cmd =="RDP" && directRDP)
+ {
+ startDirectRDP();
+ return true;
+ }
if ( cmd=="SHADOW" )
shadowSession=true;
}
@@ -4021,6 +4121,12 @@ void ONMainWindow::slotResumeSess()
void ONMainWindow::slotSuspendSess()
{
+ if (directRDP)
+ {
+ nxproxy->terminate();
+ return;
+ }
+
QString passwd;
QString user=getCurrentUname();
@@ -4069,6 +4175,12 @@ void ONMainWindow::slotSuspendSess()
void ONMainWindow::slotSuspendSessFromSt()
{
+ x2goDebug<<"suspend from st";
+ if (directRDP)
+ {
+ nxproxy->terminate();
+ return;
+ }
QString passwd;
QString user=getCurrentUname();
passwd=getCurrentPass();
@@ -4085,7 +4197,12 @@ void ONMainWindow::slotSuspendSessFromSt()
void ONMainWindow::slotTermSessFromSt()
{
-
+ x2goDebug<<"term from st";
+ if (directRDP)
+ {
+ nxproxy->terminate();
+ return;
+ }
/* x2goDebug <<"disconnect export"<<endl;
disconnect ( sbExp,SIGNAL ( clicked() ),this,
SLOT ( slot_exportDirectory() ) );*/
@@ -4147,6 +4264,13 @@ void ONMainWindow::slotRetSuspSess ( bool result, QString output,
void ONMainWindow::slotTermSess()
{
+ if (directRDP)
+ {
+ nxproxy->terminate();
+ return;
+ }
+
+
selectSessionDlg->setEnabled ( false );
@@ -4950,7 +5074,10 @@ void ONMainWindow::slotProxyFinished ( int,QProcess::ExitStatus )
}
}
x2goDebug<<"nxproxy not running"<<endl;
- delete nxproxy;
+ if (!directRDP)
+ delete nxproxy;
+ else
+ nxproxy=0;
}
#endif
x2goDebug<<"proxy deleted"<<endl;
@@ -4960,6 +5087,14 @@ void ONMainWindow::slotProxyFinished ( int,QProcess::ExitStatus )
nxproxy=0l;
proxyWinId=0;
+ if (directRDP)
+ {
+ pass->setText ( "" );
+ QTimer::singleShot ( 2000,this,
+ SLOT ( slotShowPassForm() ) );
+ return;
+ }
+
if ( !shadowSession && !usePGPCard && ! ( embedMode &&
( config.checkexitstatus==false ) ) )
check_cmd_status();
diff --git a/onmainwindow.h b/onmainwindow.h
index 2d75273..2fadcfd 100644
--- a/onmainwindow.h
+++ b/onmainwindow.h
@@ -670,6 +670,7 @@ private:
bool ldapOnly;
bool isScDaemonOk;
bool parecTunnelOk;
+ bool directRDP;
bool startSessSound;
@@ -1027,6 +1028,7 @@ private:
void printSshDError();
void loadPulseModuleNativeProtocol();
void initEmbedToolBar();
+ void startDirectRDP();
bool isServerRunning ( int port );
void filterDesktops ( const QString& filter,
bool strict=false );
diff --git a/sessionbutton.cpp b/sessionbutton.cpp
index f53d82a..4ece426 100644
--- a/sessionbutton.cpp
+++ b/sessionbutton.cpp
@@ -345,6 +345,7 @@ void SessionButton::redraw()
cmdBox->addItems ( par->transApplicationsNames() );
+ bool directRDP=false;
QPixmap cmdpix;
if ( command=="KDE" )
{
@@ -374,6 +375,9 @@ void SessionButton::redraw()
}
else if ( command =="RDP" )
{
+ if (st->setting()->value ( sid+"/directrdp",
+ ( QVariant ) false ).toBool())
+ directRDP=true;
cmdpix.load ( par->iconsPath ( "/16x16/rdp.png" ) );
cmdBox->setCurrentIndex ( RDP );
command=tr ( "RDP connection" );
@@ -413,10 +417,11 @@ void SessionButton::redraw()
geomBox->clear();
geomBox->addItem ( tr ( "fullscreen" ) );
uint displays=QApplication::desktop()->numScreens();
- for (uint i=0;i<displays;++i)
- {
- geomBox->addItem ( tr( "Display " )+QString::number(i+1));
- }
+ if (!directRDP)
+ for (uint i=0;i<displays;++i)
+ {
+ geomBox->addItem ( tr( "Display " )+QString::number(i+1));
+ }
#ifndef Q_WS_HILDON
geomBox->addItem ( "1440x900" );
geomBox->addItem ( "1280x1024" );
@@ -432,7 +437,7 @@ void SessionButton::redraw()
}
else
if (st->setting()->value ( sid+"/multidisp",
- ( QVariant ) false ).toBool())
+ ( QVariant ) false ).toBool() && !directRDP)
{
uint disp=st->setting()->value ( sid+"/display",
( QVariant ) 1 ).toUInt();
@@ -468,6 +473,17 @@ void SessionButton::redraw()
#endif
}
+ if (directRDP)
+ {
+ geomBox->addItem ( tr("Maximum") );
+ if (st->setting()->value ( sid+"/maxdim",
+ ( QVariant ) false ).toBool())
+ {
+ geom->setText ( tr("Maximum") );
+ geomBox->setCurrentIndex ( geomBox->findText ( tr("Maximum") ));
+ }
+ }
+
snd=st->setting()->value ( sid+"/sound", ( QVariant ) true ).toBool();
if ( snd )
@@ -710,6 +726,13 @@ void SessionButton::slot_geom_change ( const QString& new_g )
{
st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) true );
st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false );
+ st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false );
+ }
+ else if ( new_g==tr ( "Maximum" ))
+ {
+ st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false );
+ st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false );
+ st.setting()->setValue ( sid+"/maxdim", ( QVariant ) true );
}
else
if (new_g.indexOf(tr("Display "))==0)
@@ -719,6 +742,7 @@ void SessionButton::slot_geom_change ( const QString& new_g )
st.setting()->setValue ( sid+"/multidisp", ( QVariant ) true );
st.setting()->setValue ( sid+"/display", ( QVariant ) g.toUInt());
st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false );
+ st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false );
}
else
{
@@ -728,6 +752,7 @@ void SessionButton::slot_geom_change ( const QString& new_g )
#endif
st.setting()->setValue ( sid+"/fullscreen", ( QVariant ) false );
st.setting()->setValue ( sid+"/multidisp", ( QVariant ) false );
+ st.setting()->setValue ( sid+"/maxdim", ( QVariant ) false );
QStringList lst=new_geom.split ( 'x' );
st.setting()->setValue ( sid+"/width", ( QVariant ) lst[0] );
st.setting()->setValue ( sid+"/height", ( QVariant ) lst[1] );
diff --git a/settingswidget.cpp b/settingswidget.cpp
index 5439059..2529a76 100644
--- a/settingswidget.cpp
+++ b/settingswidget.cpp
@@ -739,7 +739,7 @@ void SettingsWidget::updateCmdLine()
}
if (maxRes->isChecked())
{
- grOpt=" -g <maxW>x<maxH>";
+ grOpt=" -D -g <maxW>x<maxH>";
}
if (custom->isChecked())
{
hooks/post-receive
--
x2goclient.git (X2Go Client)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "x2goclient.git" (X2Go Client).