Focus and popup improvements for macOS
authorDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Sun, 5 Jan 2020 15:25:32 +0000 (16:25 +0100)
committerDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Sun, 5 Jan 2020 15:25:32 +0000 (16:25 +0100)
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
src/gui/owncloudgui.cpp
src/gui/systray.cpp
src/gui/systray.h
src/gui/tray/Window.qml

index a8c4a7f3491d3adcf9aa7d3542ab3c511f1fcbe0..24eb9aea9d3e4b4e6d8fa45344726c4989ee81c5 100644 (file)
@@ -176,6 +176,8 @@ void ownCloudGui::slotTrayClicked(QSystemTrayIcon::ActivationReason reason)
                 Q_ASSERT(shareDialog.data());
                 raiseDialog(shareDialog);
             }
+        } else if (_tray->isOpen()) {
+            _tray->hideWindow();
         } else {
             _tray->showWindow();
         }
index 82673db4743ba3f92858f355e8d095cc2425ec82..db61cfa82715f641056257e4016b8ab37228cdbc 100644 (file)
@@ -37,7 +37,8 @@
 namespace OCC {
 
 Systray::Systray() // TODO: make singleton, provide ::instance()
-    : _trayComponent(nullptr)
+    : _isOpen(false)
+    , _trayComponent(nullptr)
     , _trayContext(nullptr)
 {
     // Create QML tray engine, build component, set C++ backend context used in window.qml
@@ -70,6 +71,21 @@ void Systray::slotChangeActivityModel()
     emit currentUserChanged();
 }
 
+bool Systray::isOpen()
+{
+    return _isOpen;
+}
+
+Q_INVOKABLE void Systray::setOpened()
+{
+    _isOpen = true;
+}
+
+Q_INVOKABLE void Systray::setClosed()
+{
+    _isOpen = false;
+}
+
 void Systray::showMessage(const QString &title, const QString &message, MessageIcon icon, int millisecondsTimeoutHint)
 {
 #ifdef USE_FDO_NOTIFICATIONS
index b2254841c1f63e2e13943d7ffed3f20c28c10fda..6fe451c00c0fe6e4800509c14a6693ce785018b9 100644 (file)
@@ -47,9 +47,12 @@ public:
     ~Systray();
     void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int millisecondsTimeoutHint = 10000);
     void setToolTip(const QString &tip);
+    bool isOpen();
 
     Q_INVOKABLE int calcTrayWindowX();
     Q_INVOKABLE int calcTrayWindowY();
+    Q_INVOKABLE void setOpened();
+    Q_INVOKABLE void setClosed();
 
 signals:
     void currentUserChanged();
@@ -63,6 +66,7 @@ private slots:
     void slotChangeActivityModel();
 
 private:
+    bool _isOpen;
     QQmlEngine *_trayEngine;
     QQmlComponent *_trayComponent;
     QQmlContext *_trayContext;
index 42a63a9bc8ea3f3f0cc0935ec797bb327a001121..a761885b7753b06f537cadbabc504a43e116e32f 100644 (file)
@@ -17,6 +17,7 @@ Window {
     onActiveChanged: {\r
         if(!active) {\r
             trayWindow.hide();\r
+            systrayBackend.setClosed();\r
         }\r
     }\r
 \r
@@ -45,13 +46,17 @@ Window {
     Connections {\r
         target: systrayBackend\r
         onShowWindow: {\r
+            accountMenu.close();\r
             trayWindow.show();\r
+            trayWindow.raise();\r
             trayWindow.requestActivate();\r
             trayWindow.setX( systrayBackend.calcTrayWindowX());\r
             trayWindow.setY( systrayBackend.calcTrayWindowY());\r
+            systrayBackend.setOpened();\r
         }\r
         onHideWindow: {\r
             trayWindow.hide();\r
+            systrayBackend.setClosed();\r
         }\r
     }\r
 \r
@@ -138,6 +143,11 @@ Window {
 \r
                             MenuSeparator { id: otherMenuSeparator }\r
 \r
+                            MenuItem {\r
+                                text: systrayBackend.syncIsPaused() ? "Resume syncing" : "Pause syncing"\r
+                                onClicked: systrayBackend.pauseResumeSync()\r
+                            }\r
+\r
                             MenuItem {\r
                                 text: "Open settings"\r
                                 onClicked: systrayBackend.openSettings()\r