Improve quit prevent management.

This commit is contained in:
John Preston 2020-06-26 11:22:53 +04:00
parent 79a361ba43
commit 70fdc4eb39
2 changed files with 27 additions and 9 deletions

View File

@ -939,18 +939,35 @@ void Application::refreshGlobalProxy() {
}
void Application::QuitAttempt() {
auto prevents = false;
if (IsAppLaunched() && !Sandbox::Instance().isSavingSession()) {
if (const auto session = App().maybeActiveSession()) {
if (session->updates().isQuitPrevent()
|| session->api().isQuitPrevent()
|| App().calls().isQuitPrevent()) {
App().quitDelayed();
return;
if (!IsAppLaunched()
|| Sandbox::Instance().isSavingSession()
|| App().readyToQuit()) {
QApplication::quit();
}
}
bool Application::readyToQuit() {
auto prevented = false;
if (_calls->isQuitPrevent()) {
prevented = true;
}
if (_domain->started()) {
for (const auto &[index, account] : _domain->accounts()) {
if (const auto session = account->maybeSession()) {
if (session->updates().isQuitPrevent()) {
prevented = true;
}
if (session->api().isQuitPrevent()) {
prevented = true;
}
}
}
}
QApplication::quit();
if (prevented) {
quitDelayed();
return false;
}
return true;
}
void Application::quitPreventFinished() {

View File

@ -297,6 +297,7 @@ private:
friend void App::quit();
static void QuitAttempt();
void quitDelayed();
[[nodiscard]] bool readyToQuit();
void clearPasscodeLock();