From 1e15a0851030d770119f4472d5d12e8650938055 Mon Sep 17 00:00:00 2001 From: Christian Pulvermacher Date: Mon, 1 Nov 2010 16:17:50 +0100 Subject: [PATCH] add --viewonly comand line option --- src/main.cpp | 17 +++++++++++------ src/mainwindow.cpp | 25 +++++++++++++++---------- src/mainwindow.h | 3 ++- src/vncview.cpp | 6 +++++- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 0a1c6ab..eca1c1c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -33,8 +33,9 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); - QString url(""); + QString url; int quality = 2; + bool view_only = false; QStringList arguments = QCoreApplication::arguments(); for(int i = 1; i < arguments.count(); i++) { @@ -42,24 +43,28 @@ int main(int argc, char *argv[]) std::cout << "Usage: " << qPrintable(arguments.at(0)) << " [options] [URL [quality]]\n" << "\nOptions:\n" - << " --help\t This text\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" << "\nURLs:\n" - << " vnc://:password@server:display\n" + << " vnc://:password@server:display\n\n" << " Password and display can be omitted, e.g. vnc://server is a valid URL.\n" << " Optionally, you can define the quality as a second argument (1-3, where 1 is the best). Default is 2.\n"; return 0; + } else if(arguments.at(i) == "--viewonly") { + view_only = true; } else { //not a valid command line option, should be the url url = arguments.at(i); + if(arguments.count() > i+1) { //having a --quality option would make more sense. - quality = arguments.at(i+1).toInt(); - i++; + quality = arguments.at(i+1).toInt(); + i++; } } } - MainWindow main(url, quality); + MainWindow main(url, quality, view_only); main.show(); return app.exec(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e62ae7a..d0d8787 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -33,15 +33,16 @@ #endif -MainWindow::MainWindow(QString url, int quality): +MainWindow::MainWindow(QString url, int quality, bool view_only): QMainWindow(0), vnc_view(0), scroll_area(new ScrollArea(0)), + input_toolbuttons(new QActionGroup(this)), key_menu(new KeyMenu(this)) { setWindowTitle("Presence VNC"); - setContextMenuPolicy(Qt::NoContextMenu); #ifdef Q_WS_MAEMO_5 + setContextMenuPolicy(Qt::NoContextMenu); setAttribute(Qt::WA_Maemo5StackedWindow); #endif @@ -49,14 +50,14 @@ MainWindow::MainWindow(QString url, int quality): //set up toolbar toolbar = new QToolBar(0); - toolbar->addAction(QChar(0x2026), this, SLOT(showKeyMenu())); //"..." button - toolbar->addAction(tr("Tab"), this, SLOT(sendTab())); - toolbar->addAction(tr("Esc"), this, SLOT(sendEsc())); - toolbar->addAction(tr("PgUp"), this, SLOT(sendPgUp())); - toolbar->addAction(tr("PgDn"), this, SLOT(sendPgDn())); + input_toolbuttons->addAction(toolbar->addAction(QChar(0x2026), this, SLOT(showKeyMenu()))); //"..." button + input_toolbuttons->addAction(toolbar->addAction(tr("Tab"), this, SLOT(sendTab()))); + input_toolbuttons->addAction(toolbar->addAction(tr("Esc"), this, SLOT(sendEsc()))); + input_toolbuttons->addAction(toolbar->addAction(tr("PgUp"), this, SLOT(sendPgUp()))); + input_toolbuttons->addAction(toolbar->addAction(tr("PgDn"), this, SLOT(sendPgDn()))); #ifdef Q_WS_MAEMO_5 - toolbar->addAction(QIcon("/usr/share/icons/hicolor/48x48/hildon/chat_enter.png"), "", this, SLOT(sendReturn())); - toolbar->addAction(QIcon("/usr/share/icons/hicolor/48x48/hildon/control_keyboard.png"), "", this, SLOT(showInputPanel())); + input_toolbuttons->addAction(toolbar->addAction(QIcon("/usr/share/icons/hicolor/48x48/hildon/chat_enter.png"), "", this, SLOT(sendReturn()))); + input_toolbuttons->addAction(toolbar->addAction(QIcon("/usr/share/icons/hicolor/48x48/hildon/control_keyboard.png"), "", this, SLOT(showInputPanel()))); #endif QSettings settings; @@ -127,7 +128,7 @@ MainWindow::MainWindow(QString url, int quality): grabZoomKeys(true); reloadSettings(); - if(url.isNull()) { + if(url.isEmpty()) { disconnect_action->setEnabled(false); showConnectDialog(); } else { @@ -135,6 +136,7 @@ MainWindow::MainWindow(QString url, int 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(); } } @@ -232,6 +234,9 @@ void MainWindow::statusChanged(RemoteView::RemoteStatus status) #endif toolbar->setEnabled(true); + //disable key input buttons in view only mode + input_toolbuttons->setEnabled(!vnc_view->viewOnly()); + vnc_view->setZoomLevel(zoom_slider->value()); vnc_view->useFastTransformations(false); vnc_view->repaint(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 6e71b0d..970dc11 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); + MainWindow(QString url, int quality, bool view_only); public slots: void about(); void showConnectDialog(); @@ -62,6 +62,7 @@ private: QToolBar *toolbar; QSlider *zoom_slider; QAction *scaling, *show_toolbar, *disconnect_action; + QActionGroup *input_toolbuttons; KeyMenu *key_menu; bool zoom_to_cursor; }; diff --git a/src/vncview.cpp b/src/vncview.cpp index 556daa6..12db619 100644 --- a/src/vncview.cpp +++ b/src/vncview.cpp @@ -114,9 +114,13 @@ bool VncView::eventFilter(QObject *obj, QEvent *event) event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease || event->type() == QEvent::Wheel || - event->type() == QEvent::MouseMove) + event->type() == QEvent::MouseMove) { + + event->ignore(); return true; + } } + return RemoteView::eventFilter(obj, event); } -- 1.7.9.5