diff options
author | Jonas Schnelli <jonasschnelli@Jonass-MacBook-Pro.local> | 2013-04-14 22:11:55 +0200 |
---|---|---|
committer | Jonas Schnelli <jonas.schnelli@include7.ch> | 2013-04-15 12:02:01 +0200 |
commit | 4d17a1b0c29e8fd8510c75db1efb203b9b4f9eb0 (patch) | |
tree | 927cce25f832d04b6ff229d91c4da5bed63437c9 | |
parent | 463a58ae75c817a1f81d439167d1ec9229263312 (diff) |
fix: GUI Disappearing #1522 (Mac OSX)
- this solution works stable on mac and ensures that the window get's reopened when the user clicks the dock icon .
- tested on 10.8 with Qt4.8.4 and Qt5.0.1
Signed-off-by: Jonas Schnelli <jonas.schnelli@include7.ch>
-rw-r--r-- | src/qt/bitcoingui.cpp | 2 | ||||
-rw-r--r-- | src/qt/macdockiconhandler.h | 4 | ||||
-rw-r--r-- | src/qt/macdockiconhandler.mm | 11 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 14d738d9da..f6ea945c79 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -155,6 +155,7 @@ BitcoinGUI::~BitcoinGUI() trayIcon->hide(); #ifdef Q_OS_MAC delete appMenuBar; + MacDockIconHandler::instance()->setMainWindow(NULL); #endif } @@ -382,6 +383,7 @@ void BitcoinGUI::createTrayIconMenu() #else // Note: On Mac, the dock icon is used to provide the tray's functionality. MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance(); + dockIconHandler->setMainWindow((QMainWindow *)this); trayIconMenu = dockIconHandler->dockMenu(); #endif diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index 5018456aa1..765b004750 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -2,6 +2,7 @@ #define MACDOCKICONHANDLER_H #include <QObject> +#include <QMainWindow> QT_BEGIN_NAMESPACE class QMenu; @@ -26,7 +27,7 @@ public: QMenu *dockMenu(); void setIcon(const QIcon &icon); - + void setMainWindow(QMainWindow *window); static MacDockIconHandler *instance(); void handleDockIconClickEvent(); @@ -40,6 +41,7 @@ private: DockIconClickEventHandler *m_dockIconClickEventHandler; QWidget *m_dummyWidget; QMenu *m_dockMenu; + QMainWindow *mainWindow; }; #endif // MACDOCKICONCLICKHANDLER_H diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm index ea868401c0..b6ea8e1d03 100644 --- a/src/qt/macdockiconhandler.mm +++ b/src/qt/macdockiconhandler.mm @@ -37,8 +37,9 @@ extern void qt_mac_set_dock_menu(QMenu*); Q_UNUSED(event) Q_UNUSED(replyEvent) - if (dockIconHandler) + if (dockIconHandler) { dockIconHandler->handleDockIconClickEvent(); + } } @end @@ -54,10 +55,15 @@ MacDockIconHandler::MacDockIconHandler() : QObject() [pool release]; } +void MacDockIconHandler::setMainWindow(QMainWindow *window) { + this->mainWindow = window; +} + MacDockIconHandler::~MacDockIconHandler() { [this->m_dockIconClickEventHandler release]; delete this->m_dummyWidget; + this->setMainWindow(NULL); } QMenu *MacDockIconHandler::dockMenu() @@ -94,5 +100,8 @@ MacDockIconHandler *MacDockIconHandler::instance() void MacDockIconHandler::handleDockIconClickEvent() { + this->mainWindow->activateWindow(); + this->mainWindow->show(); + emit this->dockIconClicked(); } |