From 59cc42a15c9e70a4f0916c8e7c1d97d013bc32b5 Mon Sep 17 00:00:00 2001 From: Christian Pulvermacher Date: Mon, 30 Jan 2012 22:59:06 +0100 Subject: [PATCH] Indicate state of Win/Alt modifiers by making '...' button appear depressed --- src/keymenu.cpp | 9 +++++---- src/keymenu.h | 13 ++++++++----- src/mainwindow.cpp | 4 +++- src/mainwindow.h | 2 ++ 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/keymenu.cpp b/src/keymenu.cpp index fa78331..d973fba 100644 --- a/src/keymenu.cpp +++ b/src/keymenu.cpp @@ -28,11 +28,11 @@ KeyMenu::KeyMenu(QWidget *parent): //modifiers ActionTab *mod_tab = new ActionTab(this); - QAction *win = new QAction(tr("Win"), this); + win = new QAction(tr("Win"), this); win->setShortcut(Qt::META); win->setCheckable(true); mod_tab->addAction(win); - QAction *alt = new QAction(tr("Alt"), this); + alt = new QAction(tr("Alt"), this); alt->setShortcut(Qt::ALT); alt->setCheckable(true); mod_tab->addAction(alt); @@ -84,8 +84,9 @@ ActionTab::ActionTab(KeyMenu *parent): keymenu(parent) { setWidgetResizable(true); - setWidget(&widget); - widget.setLayout(&layout); + QWidget *widget = new QWidget(this); + setWidget(widget); + widget->setLayout(&layout); } void ActionTab::addAction(QString text, QKeySequence keysequence) diff --git a/src/keymenu.h b/src/keymenu.h index 82d7c6d..2ba0250 100644 --- a/src/keymenu.h +++ b/src/keymenu.h @@ -27,13 +27,17 @@ class KeyMenu : public QDialog { Q_OBJECT public: - KeyMenu(QWidget *parent); - QKeySequence getKeySequence() { return keysequence; } + explicit KeyMenu(QWidget *parent); + const QKeySequence& getKeySequence() const { return keysequence; } + bool isAltChecked() const { return alt->isChecked(); } + bool isWinChecked() const { return win->isChecked(); } public slots: virtual void accept(); virtual int exec() { keysequence = QKeySequence(); return QDialog::exec(); } private: - QKeySequence keysequence; + QKeySequence keysequence; //key sequence last selected + QAction *alt; + QAction *win; }; @@ -41,11 +45,10 @@ class ActionTab : public QScrollArea { Q_OBJECT public: - ActionTab(KeyMenu *parent); + explicit ActionTab(KeyMenu *parent); void addAction(QAction *action); //adds action and connects it to keymenu->accept() void addAction(QString text, QKeySequence keysequence); private: - QWidget widget; QHBoxLayout layout; KeyMenu *keymenu; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d89af5a..5eb80dd 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -54,7 +54,8 @@ MainWindow::MainWindow(QString url, int quality, int listen_port, bool view_only //set up toolbar toolbar = new QToolBar(0); - input_toolbuttons->addAction(toolbar->addAction(QChar(0x2026), this, SLOT(showKeyMenu()))); //"..." button + key_menu_button = input_toolbuttons->addAction(toolbar->addAction(QChar(0x2026), this, SLOT(showKeyMenu()))); //"..." button + key_menu_button->setCheckable(true); //used to indicate wether a modifier key is still pressed 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()))); @@ -321,6 +322,7 @@ void MainWindow::showKeyMenu() { key_menu->exec(); vnc_view->sendKeySequence(key_menu->getKeySequence()); + key_menu_button->setChecked(key_menu->isAltChecked() or key_menu->isWinChecked()); } void MainWindow::showPreferences() diff --git a/src/mainwindow.h b/src/mainwindow.h index f487bf9..c5296a5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -61,11 +61,13 @@ private: VncView *vnc_view; ScrollArea *scroll_area; + QToolBar *toolbar; QSlider *zoom_slider; QAction *scaling, *show_toolbar, *disconnect_action; QActionGroup *input_toolbuttons; KeyMenu *key_menu; + QAction *key_menu_button; bool zoom_to_cursor; }; #endif -- 1.7.9.5