diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index 2dede3f8c..ae6931fb7 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -24,9 +24,15 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv) + , m_mainWindow(Q_NULLPTR) { } +void Application::setMainWindow(QWidget* mainWindow) +{ + m_mainWindow = mainWindow; +} + bool Application::event(QEvent* event) { // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) @@ -34,6 +40,16 @@ bool Application::event(QEvent* event) Q_EMIT openFile(static_cast(event)->file()); return true; } +#ifdef Q_OS_MAC + // restore main window when clicking on the docker icon + else if ((event->type() == QEvent::ApplicationActivate) && m_mainWindow) { + m_mainWindow->ensurePolished(); + m_mainWindow->setWindowState(m_mainWindow->windowState() & ~Qt::WindowMinimized); + m_mainWindow->show(); + m_mainWindow->raise(); + m_mainWindow->activateWindow(); + } +#endif return QApplication::event(event); } diff --git a/src/gui/Application.h b/src/gui/Application.h index a5f55d4dd..2b789984d 100644 --- a/src/gui/Application.h +++ b/src/gui/Application.h @@ -29,6 +29,7 @@ class Application : public QApplication public: Application(int& argc, char** argv); + void setMainWindow(QWidget* mainWindow); bool event(QEvent* event) Q_DECL_OVERRIDE; #ifdef Q_WS_X11 @@ -37,6 +38,9 @@ public: Q_SIGNALS: void openFile(const QString& filename); + +private: + QWidget* m_mainWindow; }; #endif // KEEPASSX_APPLICATION_H diff --git a/src/main.cpp b/src/main.cpp index 288392c0e..df8493acf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,6 +82,7 @@ int main(int argc, char** argv) MainWindow mainWindow; mainWindow.show(); + app.setMainWindow(&mainWindow); QObject::connect(&app, SIGNAL(openFile(QString)), &mainWindow, SLOT(openDatabase(QString)));