Skip to content

Commit

Permalink
Merge pull request #853 from laanwj/2012_02_altminimizetray
Browse files Browse the repository at this point in the history
Yet another alternative "minimize to tray" implementation

Fixes problems with window positioning.
  • Loading branch information
laanwj committed Feb 27, 2012
2 parents 16cc86b + 8490718 commit 79ce6d5
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 29 deletions.
49 changes: 24 additions & 25 deletions src/qt/bitcoingui.cpp
Expand Up @@ -58,7 +58,6 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
QMainWindow(parent),
clientModel(0),
walletModel(0),
dummyWidget(0),
encryptWalletAction(0),
changePassphraseAction(0),
aboutQtAction(0),
Expand Down Expand Up @@ -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();

Expand Down Expand Up @@ -170,7 +166,6 @@ BitcoinGUI::~BitcoinGUI()
#ifdef Q_WS_MAC
delete appMenuBar;
#endif
delete dummyWidget;
}

void BitcoinGUI::createActions()
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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()));
Expand Down Expand Up @@ -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())
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -822,3 +813,11 @@ void BitcoinGUI::unlockWallet()
dlg.exec();
}
}

void BitcoinGUI::showNormalIfMinimized()
{
if(!isVisible()) // Show, if hidden
show();
if(isMinimized()) // Unminimize, if minimized
showNormal();
}
7 changes: 3 additions & 4 deletions src/qt/bitcoingui.h
Expand Up @@ -58,8 +58,6 @@ class BitcoinGUI : public QMainWindow

QStackedWidget *centralWidget;

QWidget *dummyWidget;

OverviewPage *overviewPage;
QWidget *transactionsPage;
AddressBookPage *addressBookPage;
Expand Down Expand Up @@ -134,8 +132,6 @@ public slots:
void gotoMessagePage();
void gotoMessagePage(QString);

void showNormal();

private slots:
/** Switch to overview (home) page */
void gotoOverviewPage();
Expand Down Expand Up @@ -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

0 comments on commit 79ce6d5

Please sign in to comment.