From: Christian Pulvermacher Date: Wed, 8 Dec 2010 19:41:28 +0000 (+0100) Subject: add --listen command line option X-Git-Tag: 0.8~36 X-Git-Url: http://git.maemo.org/git/?p=presencevnc;a=commitdiff_plain;h=7903bfaabb569a181590d944a3491de03bd59265 add --listen command line option --- diff --git a/src/connectdialog.cpp b/src/connectdialog.cpp index 1caba92..c817fdd 100644 --- a/src/connectdialog.cpp +++ b/src/connectdialog.cpp @@ -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()); } diff --git a/src/main.cpp b/src/main.cpp index bb24fae..4c5e2bb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,6 +17,7 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "mainwindow.h" +#include "rfb/rfbclient.h" #include #include @@ -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(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e042805..13bdd90 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -33,12 +33,12 @@ #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) diff --git a/src/mainwindow.h b/src/mainwindow.h index 1e97352..c56364d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -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();