diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp index 8058a0f322..d27610990f 100644 --- a/Telegram/SourceFiles/core/application.cpp +++ b/Telegram/SourceFiles/core/application.cpp @@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_user.h" #include "base/timer.h" #include "base/concurrent_timer.h" +#include "base/qt_signal_producer.h" #include "base/unixtime.h" #include "core/update_checker.h" #include "core/shortcuts.h" @@ -245,11 +246,15 @@ void Application::run() { }, _window->widget()->lifetime()); QCoreApplication::instance()->installEventFilter(this); - connect( - static_cast(QCoreApplication::instance()), - &QGuiApplication::applicationStateChanged, - this, - &Application::stateChanged); + + appDeactivated( + ) | rpl::start_with_next([=](bool deactivated) { + if (deactivated) { + handleAppDeactivated(); + } else { + handleAppActivated(); + } + }, _lifetime); DEBUG_LOG(("Application Info: window created...")); @@ -633,14 +638,6 @@ void Application::checkLocalTime() { } } -void Application::stateChanged(Qt::ApplicationState state) { - if (state == Qt::ApplicationActive) { - handleAppActivated(); - } else { - handleAppDeactivated(); - } -} - void Application::handleAppActivated() { checkLocalTime(); if (_window) { @@ -655,6 +652,15 @@ void Application::handleAppDeactivated() { Ui::Tooltip::Hide(); } +rpl::producer Application::appDeactivated() const { + return base::qt_signal_producer( + static_cast(QCoreApplication::instance()), + &QGuiApplication::applicationStateChanged + ) | rpl::map([=](Qt::ApplicationState state) { + return (state != Qt::ApplicationActive); + }); +} + void Application::call_handleObservables() { base::HandleObservables(); } diff --git a/Telegram/SourceFiles/core/application.h b/Telegram/SourceFiles/core/application.h index aba9460c67..059e33bf4f 100644 --- a/Telegram/SourceFiles/core/application.h +++ b/Telegram/SourceFiles/core/application.h @@ -271,6 +271,7 @@ public: void handleAppActivated(); void handleAppDeactivated(); + [[nodiscard]] rpl::producer appDeactivated() const; void switchDebugMode(); void switchFreeType();