Added ability to handle application deactivating.

This commit is contained in:
23rd 2020-12-03 19:34:18 +03:00
parent 4a20a4d739
commit a57d23f7d9
2 changed files with 20 additions and 13 deletions

View file

@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_user.h" #include "data/data_user.h"
#include "base/timer.h" #include "base/timer.h"
#include "base/concurrent_timer.h" #include "base/concurrent_timer.h"
#include "base/qt_signal_producer.h"
#include "base/unixtime.h" #include "base/unixtime.h"
#include "core/update_checker.h" #include "core/update_checker.h"
#include "core/shortcuts.h" #include "core/shortcuts.h"
@ -245,11 +246,15 @@ void Application::run() {
}, _window->widget()->lifetime()); }, _window->widget()->lifetime());
QCoreApplication::instance()->installEventFilter(this); QCoreApplication::instance()->installEventFilter(this);
connect(
static_cast<QGuiApplication*>(QCoreApplication::instance()), appDeactivated(
&QGuiApplication::applicationStateChanged, ) | rpl::start_with_next([=](bool deactivated) {
this, if (deactivated) {
&Application::stateChanged); handleAppDeactivated();
} else {
handleAppActivated();
}
}, _lifetime);
DEBUG_LOG(("Application Info: window created...")); 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() { void Application::handleAppActivated() {
checkLocalTime(); checkLocalTime();
if (_window) { if (_window) {
@ -655,6 +652,15 @@ void Application::handleAppDeactivated() {
Ui::Tooltip::Hide(); Ui::Tooltip::Hide();
} }
rpl::producer<bool> Application::appDeactivated() const {
return base::qt_signal_producer(
static_cast<QGuiApplication*>(QCoreApplication::instance()),
&QGuiApplication::applicationStateChanged
) | rpl::map([=](Qt::ApplicationState state) {
return (state != Qt::ApplicationActive);
});
}
void Application::call_handleObservables() { void Application::call_handleObservables() {
base::HandleObservables(); base::HandleObservables();
} }

View file

@ -271,6 +271,7 @@ public:
void handleAppActivated(); void handleAppActivated();
void handleAppDeactivated(); void handleAppDeactivated();
[[nodiscard]] rpl::producer<bool> appDeactivated() const;
void switchDebugMode(); void switchDebugMode();
void switchFreeType(); void switchFreeType();