aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2012-02-26 22:27:25 -0800
committerWladimir J. van der Laan <laanwj@gmail.com>2012-02-26 22:27:25 -0800
commitfbbd42a535813b2d7e30dba44c5c36b70833fe55 (patch)
treeae14e0705713a62a2cec226d0a829a09568da058
parent3d2b5c53cbae7ee6a2be0610e3826a5aec11b5f3 (diff)
parent17690ea5a74005bd8c9e99702f75d690e70c7b2f (diff)
downloadbitcoin-fbbd42a535813b2d7e30dba44c5c36b70833fe55.tar.xz
Merge pull request #853 from laanwj/2012_02_altminimizetray
Yet another alternative "minimize to tray" implementation Fixes problems with window positioning.
-rw-r--r--src/qt/bitcoingui.cpp49
-rw-r--r--src/qt/bitcoingui.h7
2 files changed, 27 insertions, 29 deletions
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 2a725e7576..abf2c381a5 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<QWindowStateChangeEvent*>(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 a522429000..dbc32640b8 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