summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChatPage.cpp23
-rw-r--r--src/ChatPage.h5
-rw-r--r--src/MainWindow.cpp21
-rw-r--r--src/UserSettingsPage.cpp1
4 files changed, 24 insertions, 26 deletions
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 90d542dd..25af8974 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -21,7 +21,6 @@
 #include "encryption/DeviceVerificationFlow.h"
 #include "encryption/Olm.h"
 #include "ui/RoomSummary.h"
-#include "ui/Theme.h"
 #include "ui/UserProfile.h"
 #include "voip/CallManager.h"
 
@@ -29,8 +28,6 @@
 
 #include "timeline/TimelineViewManager.h"
 
-#include "blurhash.hpp"
-
 ChatPage *ChatPage::instance_                    = nullptr;
 static constexpr int CHECK_CONNECTIVITY_INTERVAL = 15'000;
 static constexpr int RETRY_TIMEOUT               = 5'000;
@@ -404,6 +401,19 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
       [](std::function<void()> f) { f(); },
       Qt::QueuedConnection);
 
+    connect(qobject_cast<QGuiApplication *>(QGuiApplication::instance()),
+            &QGuiApplication::focusWindowChanged,
+            this,
+            [this](QWindow *activeWindow) {
+                if (activeWindow) {
+                    nhlog::ui()->debug("Stopping inactive timer.");
+                    lastWindowActive = QDateTime();
+                } else {
+                    nhlog::ui()->debug("Starting inactive timer.");
+                    lastWindowActive = QDateTime::currentDateTime();
+                }
+            });
+
     connectCallMessage<mtx::events::voip::CallInvite>();
     connectCallMessage<mtx::events::voip::CallCandidates>();
     connectCallMessage<mtx::events::voip::CallAnswer>();
@@ -1107,6 +1117,13 @@ ChatPage::currentPresence() const
         return mtx::presence::unavailable;
     case UserSettings::Presence::Offline:
         return mtx::presence::offline;
+    case UserSettings::Presence::AutomaticPresence:
+        if (lastWindowActive.isValid() &&
+            lastWindowActive.addSecs(60 * 5) < QDateTime::currentDateTime())
+            return mtx::presence::unavailable;
+        else
+            return mtx::presence::online;
+
     default:
         return mtx::presence::online;
     }
diff --git a/src/ChatPage.h b/src/ChatPage.h
index fbf4fbce..685b719b 100644
--- a/src/ChatPage.h
+++ b/src/ChatPage.h
@@ -21,8 +21,6 @@
 #include <QSharedPointer>
 #include <QTimer>
 
-#include "CacheCryptoStructs.h"
-#include "CacheStructs.h"
 #include "ui/RoomSummary.h"
 
 class TimelineViewManager;
@@ -225,6 +223,9 @@ private:
     std::unique_ptr<mtx::pushrules::PushRuleEvaluator> pushrules;
 
     QDateTime lastSpacesUpdate = QDateTime::currentDateTime();
+
+    // Stores when our windows lost focus. Invalid when our windows have focus.
+    QDateTime lastWindowActive;
 };
 
 template<class Collection>
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index d06171de..1a0b1e96 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -9,42 +9,23 @@
 #include <mtx/requests.hpp>
 #include <mtx/responses/login.hpp>
 
-#include "AliasEditModel.h"
 #include "BlurhashProvider.h"
-#include "Cache.h"
 #include "Cache_p.h"
 #include "ChatPage.h"
-#include "Clipboard.h"
 #include "ColorImageProvider.h"
-#include "CombinedImagePackModel.h"
-#include "CompletionProxyModel.h"
 #include "Config.h"
-#include "EventAccessors.h"
-#include "GridImagePackModel.h"
-#include "ImagePackListModel.h"
-#include "InviteesModel.h"
 #include "JdenticonProvider.h"
 #include "Logging.h"
 #include "MainWindow.h"
 #include "MatrixClient.h"
-#include "MemberList.h"
 #include "MxcImageProvider.h"
-#include "PowerlevelsEditModels.h"
-#include "SingleImagePackModel.h"
 #include "TrayIcon.h"
-#include "UserDirectoryModel.h"
 #include "UserSettingsPage.h"
 #include "Utils.h"
 #include "dock/Dock.h"
-#include "emoji/Provider.h"
 #include "encryption/DeviceVerificationFlow.h"
-#include "encryption/SelfVerificationStatus.h"
-#include "timeline/DelegateChooser.h"
-#include "timeline/TimelineFilter.h"
 #include "timeline/TimelineViewManager.h"
-#include "ui/NhekoGlobalObject.h"
-#include "ui/RoomSummary.h"
-#include "ui/UIA.h"
+#include "ui/Theme.h"
 #include "voip/CallManager.h"
 #include "voip/WebRTCSession.h"
 
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index 4a25880c..c9c878d0 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -14,7 +14,6 @@
 #include <mtx/secret_storage.hpp>
 
 #include "Cache.h"
-#include "Config.h"
 #include "JdenticonProvider.h"
 #include "MainWindow.h"
 #include "MatrixClient.h"