add --viewonly comand line option
authorChristian Pulvermacher <christian@christian-laptop.(none)>
Mon, 1 Nov 2010 15:17:50 +0000 (16:17 +0100)
committerChristian Pulvermacher <christian@christian-laptop.(none)>
Mon, 1 Nov 2010 15:17:50 +0000 (16:17 +0100)
src/main.cpp
src/mainwindow.cpp
src/mainwindow.h
src/vncview.cpp

index 0a1c6ab..eca1c1c 100644 (file)
@@ -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();
 }
index e62ae7a..d0d8787 100644 (file)
 #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();
index 6e71b0d..970dc11 100644 (file)
@@ -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;
 };
index 556daa6..12db619 100644 (file)
@@ -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);
 }