From: Wladimir J. van der Laan Date: Mon, 27 Feb 2012 06:27:25 +0000 (-0800) Subject: Merge pull request #853 from laanwj/2012_02_altminimizetray X-Git-Tag: v0.4.0-unstable~129^2~179 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=fbbd42a535813b2d7e30dba44c5c36b70833fe55;hp=3d2b5c53cbae7ee6a2be0610e3826a5aec11b5f3 Merge pull request #853 from laanwj/2012_02_altminimizetray Yet another alternative "minimize to tray" implementation Fixes problems with window positioning. --- diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 2a725e7..abf2c38 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -58,7 +58,6 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), clientModel(0), walletModel(0), - dummyWidget(0), encryptWalletAction(0), changePassphraseAction(0), aboutQtAction(0), @@ -88,9 +87,6 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): // Create the tray icon (or setup the dock icon) createTrayIcon(); - // Dummy widget used when restoring window state after minimization - dummyWidget = new QWidget(); - // Create tabs overviewPage = new OverviewPage(); @@ -170,7 +166,6 @@ BitcoinGUI::~BitcoinGUI() #ifdef Q_WS_MAC delete appMenuBar; #endif - delete dummyWidget; } void BitcoinGUI::createActions() @@ -214,17 +209,17 @@ void BitcoinGUI::createActions() #endif tabGroup->addAction(messageAction); - connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage())); - connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); - connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage())); - connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); - connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage())); - connect(messageAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(messageAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(messageAction, SIGNAL(triggered()), this, SLOT(gotoMessagePage())); quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); @@ -256,7 +251,7 @@ void BitcoinGUI::createActions() connect(optionsAction, SIGNAL(triggered()), this, SLOT(optionsClicked())); connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked())); connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(encryptWalletAction, SIGNAL(triggered(bool)), this, SLOT(encryptWallet(bool))); connect(backupWalletAction, SIGNAL(triggered()), this, SLOT(backupWallet())); connect(changePassphraseAction, SIGNAL(triggered()), this, SLOT(changePassphrase())); @@ -422,14 +417,6 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) } #endif -void BitcoinGUI::showNormal() -{ - // Reparent window to the desktop (in case it was hidden on minimize) - if(parent() != NULL) - setParent(NULL, Qt::Window); - QMainWindow::showNormal(); -} - void BitcoinGUI::optionsClicked() { if(!clientModel || !clientModel->getOptionsModel()) @@ -576,15 +563,19 @@ void BitcoinGUI::changeEvent(QEvent *e) { if(clientModel && clientModel->getOptionsModel()->getMinimizeToTray()) { - if(isMinimized()) + QWindowStateChangeEvent *wsevt = static_cast(e); + bool wasMinimized = wsevt->oldState() & Qt::WindowMinimized; + bool isMinimized = windowState() & Qt::WindowMinimized; + if(!wasMinimized && isMinimized) { - // Hiding the window from taskbar - setParent(dummyWidget, Qt::SubWindow); + // Minimized, hide the window from taskbar + setWindowFlags(windowFlags() | Qt::Tool); return; } - else + else if(wasMinimized && !isMinimized) { - showNormal(); + // Unminimized, show the window in taskbar + setWindowFlags(windowFlags() &~ Qt::Tool); } } } @@ -822,3 +813,11 @@ void BitcoinGUI::unlockWallet() dlg.exec(); } } + +void BitcoinGUI::showNormalIfMinimized() +{ + if(!isVisible()) // Show, if hidden + show(); + if(isMinimized()) // Unminimize, if minimized + showNormal(); +} diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index a522429..dbc3264 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -58,8 +58,6 @@ private: QStackedWidget *centralWidget; - QWidget *dummyWidget; - OverviewPage *overviewPage; QWidget *transactionsPage; AddressBookPage *addressBookPage; @@ -134,8 +132,6 @@ public slots: void gotoMessagePage(); void gotoMessagePage(QString); - void showNormal(); - private slots: /** Switch to overview (home) page */ void gotoOverviewPage(); @@ -169,6 +165,9 @@ private slots: void changePassphrase(); /** Ask for pass phrase to unlock wallet temporarily */ void unlockWallet(); + + /** Show window if hidden, unminimize when minimized */ + void showNormalIfMinimized(); }; #endif