diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 249872162..79aa40d8a 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -781,7 +781,7 @@ void Application::checkLocalTime() { base::ConcurrentTimerEnvironment::Adjust(); base::unixtime::http_invalidate(); } - if (const auto session = maybeActiveSession()) { + if (const auto session = maybePrimarySession()) { session->updates().checkLastUpdate(adjusted); } } @@ -797,6 +797,14 @@ void Application::handleAppDeactivated() { if (_primaryWindow) { _primaryWindow->updateIsActiveBlur(); } + if (_domain->started()) { + const auto session = _lastActiveWindow + ? _lastActiveWindow->account().maybeSession() + : nullptr; + if (session) { + session->updates().updateOnline(); + } + } Ui::Tooltip::Hide(); } @@ -854,7 +862,7 @@ Main::Account &Application::activeAccount() const { return _domain->active(); } -Main::Session *Application::maybeActiveSession() const { +Main::Session *Application::maybePrimarySession() const { return _domain->started() ? activeAccount().maybeSession() : nullptr; } @@ -1050,7 +1058,7 @@ bool Application::passcodeLocked() const { void Application::updateNonIdle() { _lastNonIdleTime = crl::now(); - if (const auto session = maybeActiveSession()) { + if (const auto session = maybePrimarySession()) { session->updates().checkIdleFinish(_lastNonIdleTime); } } @@ -1124,11 +1132,9 @@ bool Application::hasActiveWindow(not_null session) const { return false; } else if (_calls->hasActivePanel(session)) { return true; - } else if (const auto controller = _primaryWindow->sessionController()) { - if (&controller->session() == session - && _primaryWindow->widget()->isActive()) { - return true; - } + } else if (const auto window = _lastActiveWindow) { + return (window->account().maybeSession() == session) + && window->widget()->isActive(); } return false; } @@ -1225,7 +1231,20 @@ void Application::closeChatFromWindows(not_null peer) { } void Application::windowActivated(not_null window) { + const auto was = _lastActiveWindow; + const auto now = window; _lastActiveWindow = window; + + const auto wasSession = was ? was->account().maybeSession() : nullptr; + const auto nowSession = now->account().maybeSession(); + if (wasSession != nowSession) { + if (wasSession) { + wasSession->updates().updateOnline(); + } + if (nowSession) { + nowSession->updates().updateOnline(); + } + } if (_mediaView && !_mediaView->isHidden()) { _mediaView->activate(); } diff --git a/Telegram/SourceFiles/core/application.h b/Telegram/SourceFiles/core/application.h index d05aa383a..6958cf222 100644 --- a/Telegram/SourceFiles/core/application.h +++ b/Telegram/SourceFiles/core/application.h @@ -207,7 +207,7 @@ public: [[nodiscard]] bool exportPreventsQuit(); // Main::Session component. - Main::Session *maybeActiveSession() const; + Main::Session *maybePrimarySession() const; [[nodiscard]] int unreadBadge() const; [[nodiscard]] bool unreadBadgeMuted() const; [[nodiscard]] rpl::producer<> unreadBadgeChanges() const; diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 2f7bd50ec..003a8143d 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -718,12 +718,6 @@ void MainWindow::sendPaths() { } } -void MainWindow::activeChangedHook() { - if (const auto controller = sessionController()) { - controller->session().updates().updateOnline(); - } -} - MainWindow::~MainWindow() = default; namespace App { diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index 37d636924..142893ac1 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -114,7 +114,6 @@ protected: void closeEvent(QCloseEvent *e) override; void initHook() override; - void activeChangedHook() override; void clearWidgetsHook() override; private: diff --git a/Telegram/SourceFiles/media/system_media_controls_manager.cpp b/Telegram/SourceFiles/media/system_media_controls_manager.cpp index c6310cdc5..fb37eb4c6 100644 --- a/Telegram/SourceFiles/media/system_media_controls_manager.cpp +++ b/Telegram/SourceFiles/media/system_media_controls_manager.cpp @@ -282,7 +282,7 @@ SystemMediaControlsManager::SystemMediaControlsManager( Core::App().passcodeLockValue( ) | rpl::filter([=](bool locked) { - return locked && Core::App().maybeActiveSession(); + return locked && Core::App().maybePrimarySession(); }) | rpl::start_with_next([=] { _controls->setEnabled(false); }, _lifetime); diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index bb5509556..ebe0977bb 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -402,7 +402,6 @@ void MainWindow::updateIsActive() { const auto isActive = computeIsActive(); if (_isActive != isActive) { _isActive = isActive; - activeChangedHook(); } } diff --git a/Telegram/SourceFiles/window/main_window.h b/Telegram/SourceFiles/window/main_window.h index e2103734e..9bb035df0 100644 --- a/Telegram/SourceFiles/window/main_window.h +++ b/Telegram/SourceFiles/window/main_window.h @@ -149,9 +149,6 @@ protected: virtual void initHook() { } - virtual void activeChangedHook() { - } - virtual void handleVisibleChangedHook(bool visible) { } diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp index 610a742d1..ab04408c9 100644 --- a/Telegram/SourceFiles/window/window_controller.cpp +++ b/Telegram/SourceFiles/window/window_controller.cpp @@ -123,6 +123,8 @@ void Controller::showAccount( }, _sessionController->lifetime()); widget()->setInnerFocus(); + + session->updates().updateOnline(crl::now()); } else { setupIntro(); _widget.updateGlobalMenu();