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,
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());
settings.endGroup();
settings.sync();
+ //listen_port = 0 is ignored
emit connectToHost(QString("vnc://%1").arg(selected_host), quality, 0, viewonly.isChecked());
}
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "mainwindow.h"
+#include "rfb/rfbclient.h"
#include <QApplication>
#include <QString>
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"
QString url;
int quality = 2;
+ int listen_port = 0; //only used if >0
bool view_only = false;
QStringList arguments = QCoreApplication::arguments();
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
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;
}
}
- 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();
}
#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
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);
}
}
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)
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();