[X2Go-Commits] [x2goclient] 01/01: Add possibility to suspend and terminate sessions from session selection dialog in broker mode.

git-admin at x2go.org git-admin at x2go.org
Tue Oct 29 13:51:58 CET 2019


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goclient.

commit d3e1f850d6cde233d94e24b0ce6c59f77a848c60
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Tue Oct 29 13:51:10 2019 +0100

    Add possibility to suspend and terminate sessions from session selection dialog in broker mode.
---
 debian/changelog     |   1 +
 src/onmainwindow.cpp | 126 ++++++++++++++++++++++++++++++++++++---------------
 src/onmainwindow.h   |  15 +++++-
 3 files changed, 105 insertions(+), 37 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 490b0b6..6272987 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -39,6 +39,7 @@ x2goclient (4.1.2.2-0x2go1) UNRELEASED; urgency=medium
       format. Supporting both Windows and Linux path in automount format. Check if path exists before mounting.
     - Do not show Pulseaudio warning on Windows, if Pulseaudio is disabled in settings or by command line.
     - Improve request handling in HTTP broker.
+    - Add possibility to suspend and terminate sessions from session selection dialog in broker mode.
 
   [ Mihai Moldovan ]
   * New upstream version (4.1.2.2):
diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp
index 13c69cd..823fd81 100644
--- a/src/onmainwindow.cpp
+++ b/src/onmainwindow.cpp
@@ -221,6 +221,8 @@ ONMainWindow::ONMainWindow ( QWidget *parent ) :QMainWindow ( parent )
 #endif /* defined (Q_OS_DARWIN) || defined (Q_OS_WIN) */
 
 
+    connectionType=DEFAULT;
+
     hide();
     kdeIconsPath=getKdeIconsPath();
 
@@ -2943,7 +2945,21 @@ void ONMainWindow::slotSshConnectionOk()
         continueLDAPSession();
     }
     else
-        continueNormalSession();
+    {
+        if(brokerMode && (connectionType != DEFAULT))
+        {
+            if(connectionType==SUSPEND)
+            {
+                suspendSession(suspendTerminateSessionFromBroker);
+            }
+            else
+            {
+                termSession(suspendTerminateSessionFromBroker, false);
+            }
+        }
+        else
+            continueNormalSession();
+    }
 }
 
 void ONMainWindow::cleanServerSshConnections()
@@ -3619,8 +3635,9 @@ QString ONMainWindow::findSshKeyForServer(QString user, QString server, QString
 }
 
 
-bool ONMainWindow::startSession ( const QString& sid )
+bool ONMainWindow::startSession ( const QString& sid, CONTYPE conType )
 {
+    connectionType=conType;
     setEnabled ( false );
 #ifdef Q_OS_LINUX
     directRDP=false;
@@ -3664,7 +3681,10 @@ bool ONMainWindow::startSession ( const QString& sid )
     passForm->setEnabled ( false );
     if(brokerMode)
     {
-        host=config.serverIp;
+        if(connectionType==DEFAULT)
+            host=config.serverIp;
+        else
+            host=suspendTerminateHostFromBroker;
         sshPort=config.sshport;
         x2goDebug<<"Server: "<<host;
     }
@@ -4990,11 +5010,6 @@ void ONMainWindow::selectSession ( QStringList& sessions )
         }
     }
 
-    if(brokerMode)
-    {
-        bSusp->hide();
-        bTerm->hide();
-    }
 
     sessTv->setCurrentIndex ( sessTv->model()->index ( 0, 0 ) );
     sessTv->setFocus();
@@ -5145,28 +5160,29 @@ void ONMainWindow::slotSuspendSess()
     QString host=sessTv->model()->index (
                      sessTv->currentIndex().row(),
                      S_SERVER ).data().toString();
+
+
     if ( !useLdap )
     {
-        if ( brokerMode )
-        {
-            host=config.serverIp;
-        }
-        if ( embedMode )
-        {
-            host=config.server;
-        }
-        else
+        if ( !brokerMode )
         {
-            X2goSettings st ( "sessions" );
-
-            if (!(sessionExplorer->getLastSession())) {
-                x2goDebug << "No session selected, returning without suspending a session.";
-                return;
+            if ( embedMode )
+            {
+                host=config.server;
             }
+            else
+            {
+                X2goSettings st ( "sessions" );
 
-            QString sid=sessionExplorer->getLastSession()->id();
-            host=st.setting()->value ( sid+"/host",
-                                       ( QVariant ) host ).toString();
+                if (!(sessionExplorer->getLastSession())) {
+                    x2goDebug << "No session selected, returning without suspending a session.";
+                    return;
+                }
+
+                QString sid=sessionExplorer->getLastSession()->id();
+                host=st.setting()->value ( sid+"/host",
+                                           ( QVariant ) host ).toString();
+            }
         }
     }
     else
@@ -5182,8 +5198,14 @@ void ONMainWindow::slotSuspendSess()
         }
     }
 
-
-    suspendSession ( sessId );
+    if(brokerMode)
+    {
+       suspendBrokerSession(sessId, host);
+    }
+    else
+    {
+       suspendSession ( sessId );
+    }
 }
 
 
@@ -5262,6 +5284,7 @@ void ONMainWindow::slotTermSessFromSt()
 void ONMainWindow::slotRetSuspSess ( bool result, QString output,
                                      int )
 {
+    setEnabled ( true );
     if ( result==false )
     {
         QString message=tr ( "<b>Connection failed.</b>\n" ) +output;
@@ -5317,6 +5340,9 @@ void ONMainWindow::slotTermSess()
 
     QString sessId=sessTv->model()->index ( sessTv->currentIndex().row(),
                                             S_ID ).data().toString();
+    QString host=sessTv->model()->index (
+                                            sessTv->currentIndex().row(),
+                                            S_SERVER ).data().toString();
 
     if ( !useLdap )
     {
@@ -5334,9 +5360,6 @@ void ONMainWindow::slotTermSess()
     }
     else
     {
-        QString host=sessTv->model()->index ( sessTv->currentIndex().row(),
-                                              S_SERVER ).data().toString();
-
         sshConnection=findServerSshConnection(host);
         if (!sshConnection)
         {
@@ -5347,8 +5370,14 @@ void ONMainWindow::slotTermSess()
             return;
         }
     }
-
-    termSession ( sessId );
+    if(brokerMode)
+    {
+        termBrokerSession(sessId, host);
+    }
+    else
+    {
+        termSession ( sessId );
+    }
 }
 
 
@@ -5361,6 +5390,7 @@ void ONMainWindow::slotNewSess()
 void ONMainWindow::slotRetTermSess ( bool result,  QString output,
                                      int )
 {
+    setEnabled ( true );
     if ( result==false )
     {
         QString message=tr ( "<b>Connection failed.</b>\n" ) +output;
@@ -6844,6 +6874,33 @@ void ONMainWindow::slotResumeDoubleClick ( const QModelIndex& )
         slotResumeSess();
 }
 
+void ONMainWindow::suspendBrokerSession(const QString& sessId, const QString& host)
+{
+    suspendTerminateHostFromBroker=host;
+    suspendTerminateSessionFromBroker=sessId;
+    startSession(config.session, SUSPEND);
+}
+
+void ONMainWindow::termBrokerSession(const QString& sessId, const QString& host)
+{
+    if(QMessageBox::warning (
+        this,tr ( "Warning" ),
+                                     tr (
+                                         "Are you sure you want to terminate "
+                                         "this session?\n"
+                                         "Unsaved documents will be lost." ),
+                             QMessageBox::Yes,QMessageBox::No )!= QMessageBox::Yes)
+    {
+        setEnabled(true);
+        selectSessionDlg->setEnabled ( true );
+        return;
+    }
+
+    suspendTerminateHostFromBroker=host;
+    suspendTerminateSessionFromBroker=sessId;
+    startSession(config.session, TERMINATE);
+}
+
 
 void ONMainWindow::suspendSession ( QString sessId )
 {
@@ -12678,8 +12735,7 @@ void ONMainWindow::initSelectSessDlg()
     alay->addWidget ( bShadowView );
     alay->addWidget ( bShadow );
     alay->addStretch();
-    if(!brokerMode)
-       alay->addWidget ( bNew );
+    alay->addWidget ( bNew );
     alay->addWidget ( bCancel );
 
     tvlay->addWidget ( sessTv );
@@ -12687,8 +12743,6 @@ void ONMainWindow::initSelectSessDlg()
 
     blay->addStretch();
     blay->addWidget ( sOk );
-    if(brokerMode)
-        blay->addWidget ( bNew );
     blay->addWidget ( sCancel );
     blay->addStretch();
     if ( !miniMode )
diff --git a/src/onmainwindow.h b/src/onmainwindow.h
index 2761c64..7909593 100644
--- a/src/onmainwindow.h
+++ b/src/onmainwindow.h
@@ -325,8 +325,10 @@ public:
     static bool isServerRunning ( int port );
     void startNewSession();
     void suspendSession ( QString sessId );
+    void suspendBrokerSession ( const QString& sessId, const QString& host );
     bool termSession ( QString sessId,
                        bool warn=true );
+    void termBrokerSession ( const QString& sessId, const QString& host );
     InteractionDialog* getInteractionDialog()
     {
       return interDlg;
@@ -915,6 +917,17 @@ private:
     bool trayMinCon;
     bool trayMaxDiscon;
     bool trayAutoHidden;
+
+    //server connection type
+    // DEFAULT - start X2GO session
+    // SUSPEND - open connection to suspend broker session
+    // TERMINATE - open connection to terminate broker session
+    typedef enum {DEFAULT, SUSPEND, TERMINATE} CONTYPE;
+
+    CONTYPE connectionType;
+    QString suspendTerminateHostFromBroker;
+    QString suspendTerminateSessionFromBroker;
+
     void sendEventToBroker(client_events ev);
     void suspendFromBroker(const QString& sid);
     void terminateFromBroker(const QString& sid);
@@ -930,7 +943,7 @@ private:
     QString getKdeIconsPath();
     QString findTheme ( QString theme );
     bool initLdapSession ( bool showBox=true );
-    bool startSession ( const QString& id );
+    bool startSession ( const QString& id, CONTYPE conType=DEFAULT);
     x2goSession getSessionFromString ( const QString& string );
     void resumeSession ( const x2goSession& s );
     void selectSession ( QStringList& sessions );

--
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