diff --git a/src/MainApplicationWindow.qml b/src/MainApplicationWindow.qml
index d03d75d08f8945b78421f22df614e8d43b53aec2..9dd2360b3eca41866bb5628e7b13973e9670cda6 100644
--- a/src/MainApplicationWindow.qml
+++ b/src/MainApplicationWindow.qml
@@ -150,6 +150,9 @@ ApplicationWindow {
                 // layoutManager to handle as much as possible.
                 layoutManager.restoreWindowSettings()
             }
+            if (Qt.platform.os.toString() === "osx") {
+                MainApplication.setEventFilter()
+            }
 
             // This will trigger `visible = true`.
             windowSettingsLoaded = true
diff --git a/src/mainapplication.cpp b/src/mainapplication.cpp
index 02616e988ff914a74df257d8651e59f752577742..4c9de1c33e45f5275a70996638075627853efc80 100644
--- a/src/mainapplication.cpp
+++ b/src/mainapplication.cpp
@@ -445,3 +445,11 @@ MainApplication::cleanup()
 #endif
     QApplication::exit(0);
 }
+
+#ifdef Q_OS_MACOS
+void
+MainApplication::setEventFilter()
+{
+    installEventFilter(this);
+}
+#endif
diff --git a/src/mainapplication.h b/src/mainapplication.h
index 06597d3b3af26494ddbda51cbe4d51b63c8fe8db..ab899d047a2ec84fbfbc201a7e3e832abf982c0d 100644
--- a/src/mainapplication.h
+++ b/src/mainapplication.h
@@ -83,6 +83,18 @@ public:
         return runOptions_[opt];
     };
 
+#ifdef Q_OS_MACOS
+    Q_INVOKABLE void setEventFilter();
+
+    bool eventFilter(QObject* object, QEvent* event)
+    {
+        if (event->type() == QEvent::ApplicationActivate) {
+            restoreApp();
+        }
+        return QApplication::eventFilter(object, event);
+    }
+#endif // Q_OS_MACOS
+
 Q_SIGNALS:
     void closeRequested();