Fix restart before exec on macOS.

This commit is contained in:
John Preston 2021-11-08 17:33:18 +04:00
parent 6eaeb306d6
commit 9b2d080e8e
3 changed files with 20 additions and 2 deletions

View file

@ -1079,7 +1079,7 @@ void Application::QuitAttempt() {
if (!IsAppLaunched()
|| Sandbox::Instance().isSavingSession()
|| App().readyToQuit()) {
QApplication::quit();
Sandbox::QuitWhenStarted();
}
}
@ -1115,7 +1115,7 @@ void Application::quitPreventFinished() {
void Application::quitDelayed() {
if (!_private->quitTimer.isActive()) {
_private->quitTimer.setCallback([] { QApplication::quit(); });
_private->quitTimer.setCallback([] { Sandbox::QuitWhenStarted(); });
_private->quitTimer.callOnce(kQuitPreventTimeoutMs);
}
}

View file

@ -78,6 +78,8 @@ QString _escapeFrom7bit(const QString &str) {
} // namespace
bool Sandbox::QuitOnStartRequested = false;
Sandbox::Sandbox(
not_null<Core::Launcher*> launcher,
int &argc,
@ -155,9 +157,22 @@ int Sandbox::start() {
_localSocket.connectToServer(_localServerName);
}
if (QuitOnStartRequested) {
closeApplication();
return 0;
}
_started = true;
return exec();
}
void Sandbox::QuitWhenStarted() {
if (!QApplication::instance() || !Instance()._started) {
QuitOnStartRequested = true;
} else {
quit();
}
}
void Sandbox::launchApplication() {
InvokeQueued(this, [=] {
if (App::quitting()) {

View file

@ -60,6 +60,7 @@ public:
return *static_cast<Sandbox*>(QCoreApplication::instance());
}
static void QuitWhenStarted();
~Sandbox();
@ -119,6 +120,8 @@ private:
QLocalSocket _localSocket;
LocalClients _localClients;
bool _secondInstance = false;
bool _started = false;
static bool QuitOnStartRequested;
std::unique_ptr<UpdateChecker> _updateChecker;