add --listen command line option
authorChristian Pulvermacher <pulvermacher@gmx.de>
Wed, 8 Dec 2010 19:41:28 +0000 (20:41 +0100)
committerChristian Pulvermacher <pulvermacher@gmx.de>
Wed, 8 Dec 2010 19:42:40 +0000 (20:42 +0100)
src/connectdialog.cpp
src/main.cpp
src/mainwindow.cpp
src/mainwindow.h

index 1caba92..c817fdd 100644 (file)
@@ -130,9 +130,9 @@ void ConnectDialog::accept()
 
        QSettings settings;
        if(!hosts.itemIcon(hosts.currentIndex()).isNull()) {
+               //listen mode selected
                int listen_port = settings.value("listen_port", LISTEN_PORT_OFFSET).toInt();
 
-#if QT_VERSION >= 0x040500
                //ask user if listen_port is correct
                bool ok;
                listen_port = QInputDialog::getInt(this,
@@ -140,9 +140,7 @@ void ConnectDialog::accept()
                        tr("Listen on Port:"),
                        listen_port, 1, 65535, //value, min, max
                        1, &ok);
-#else
-               bool ok = true;
-#endif
+
                if(ok) {
                        settings.setValue("listen_port", listen_port);
                        emit connectToHost("", quality, listen_port, viewonly.isChecked());
@@ -174,5 +172,6 @@ void ConnectDialog::accept()
        settings.endGroup();
        settings.sync();
 
+       //listen_port = 0 is ignored
        emit connectToHost(QString("vnc://%1").arg(selected_host), quality, 0, viewonly.isChecked());
 }
index bb24fae..4c5e2bb 100644 (file)
@@ -17,6 +17,7 @@
     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 #include "mainwindow.h"
+#include "rfb/rfbclient.h"
 
 #include <QApplication>
 #include <QString>
@@ -30,8 +31,9 @@ void printHelp() {
        std::cout << "Usage: " << qPrintable(QCoreApplication::arguments().at(0)) << " [options] [URL [quality]]\n"
 
                << "\nOptions:\n"
-               << " --help\t\t Print this text and exit.\n"
-               << " --viewonly\t Don't send mouse/keyboard input to remote desktop. This is only useful if you also supply a URL.\n"
+               << " --help\t\t\t Print this text and exit.\n"
+               << " --listen [port]\t Listen for incoming connections on given port, or 5500 if omitted. Cannot be used with an URL.\n"
+               << " --viewonly\t\t Don't send mouse/keyboard input to remote desktop. This is only useful if you also supply a URL, or --listen.\n"
 
                << "\nURLs:\n"
                << " vnc://:password@server:display\n\n"
@@ -48,6 +50,7 @@ int main(int argc, char *argv[])
 
        QString url;
        int quality = 2;
+       int listen_port = 0; //only used if >0
        bool view_only = false;
 
        QStringList arguments = QCoreApplication::arguments();
@@ -56,6 +59,21 @@ int main(int argc, char *argv[])
                        printHelp();
 
                        return 0;
+               } else if(arguments.at(i) == "--listen") {
+                       if(arguments.count() <= i+1 or arguments.at(i+1).startsWith("--")) {
+                               //no argument found, use default
+                               listen_port = LISTEN_PORT_OFFSET;
+                       } else {
+                               //next argument should be a port number
+                               listen_port = arguments.at(i+1).toInt();
+                               if(listen_port < 1 or listen_port > 65535) {
+                                       std::cerr << "\"" << qPrintable(arguments.at(i+1)) << "\" is not a valid port number!\n\n";
+                                       return 1;
+                               }
+
+                               //everything ok
+                               i++;
+                       }
                } else if(arguments.at(i) == "--viewonly") {
                        view_only = true;
                } else { //not a valid command line option, should be the url
@@ -69,7 +87,7 @@ int main(int argc, char *argv[])
                                return 1;
                        }
 
-                       if(arguments.count() > i+1) { //having a --quality option would make more sense.
+                       if(arguments.count() > i+1) { //TODO: having a --quality option would make more sense.
                                int arg = arguments.at(i+1).toInt();
                                if(1 <= arg and arg <= 3) { //check if arg is valid, might also be another option
                                        quality = arg;
@@ -79,7 +97,12 @@ int main(int argc, char *argv[])
                }
        }
 
-       MainWindow main(url, quality, view_only);
+       if(!url.isNull() and listen_port > 0) {
+               std::cerr << "--listen cannot be used with an URL!\n";
+               return 1;
+       }
+
+       MainWindow main(url, quality, listen_port, view_only);
        main.show();
        return app.exec();
 }
index e042805..13bdd90 100644 (file)
 #endif
 
 
-MainWindow::MainWindow(QString url, int quality, bool view_only):
+MainWindow::MainWindow(QString url, int quality, int listen_port, bool view_only):
        QMainWindow(0),
        vnc_view(0),
        scroll_area(new ScrollArea(0)),
        input_toolbuttons(new QActionGroup(this)),
-       key_menu(new KeyMenu(this))
+       key_menu(0)
 {
        setWindowTitle("Presence VNC");
 #ifdef Q_WS_MAEMO_5
@@ -128,16 +128,11 @@ MainWindow::MainWindow(QString url, int quality, bool view_only):
        grabZoomKeys(true);
        reloadSettings();
 
-       if(url.isEmpty()) {
+       if(url.isEmpty() and listen_port == 0) {
                disconnect_action->setEnabled(false);
                showConnectDialog();
        } else {
-               vnc_view = new VncView(this, url, RemoteView::Quality(quality));
-               connect(vnc_view, SIGNAL(statusChanged(RemoteView::RemoteStatus)),
-                       this, SLOT(statusChanged(RemoteView::RemoteStatus)));
-               scroll_area->setWidget(vnc_view);
-               vnc_view->setViewOnly(view_only);
-               vnc_view->start();
+               connectToHost(url, quality, listen_port, view_only);
        }
 }
 
@@ -185,6 +180,7 @@ void MainWindow::showConnectDialog()
        connect(connect_dialog, SIGNAL(connectToHost(QString, int, int, bool)),
                this, SLOT(connectToHost(QString, int, int, bool)));
        connect_dialog->exec();
+       //ConnectDialog cleans up after itself
 }
 
 void MainWindow::connectToHost(QString url, int quality, int listen_port, bool view_only)
index 1e97352..c56364d 100644 (file)
@@ -30,7 +30,7 @@ class VncView;
 class MainWindow : public QMainWindow {
        Q_OBJECT
 public:
-       MainWindow(QString url, int quality, bool view_only);
+       MainWindow(QString url, int quality, int listen_port, bool view_only);
 public slots:
        void about();
        void showConnectDialog();