mirror of
https://github.com/stenzek/duckstation.git
synced 2025-07-18 16:10:07 +00:00
Qt: Fix updater crash while game running
Or while fullscreen.
This commit is contained in:
parent
1667179f78
commit
461c51ff6a
@ -275,25 +275,32 @@ void AutoUpdaterDialog::lockAndExec()
|
|||||||
{
|
{
|
||||||
// pause+unfullscreen system. annoyingly, need to reparent if we were fullscreen
|
// pause+unfullscreen system. annoyingly, need to reparent if we were fullscreen
|
||||||
MainWindow::SystemLock lock = g_main_window->pauseAndLockSystem();
|
MainWindow::SystemLock lock = g_main_window->pauseAndLockSystem();
|
||||||
QWidget* prev_parent = qobject_cast<QWidget*>(parent());
|
const Qt::WindowFlags prev_flags = windowFlags();
|
||||||
|
QWidget* const prev_parent = qobject_cast<QWidget*>(parent());
|
||||||
const bool needs_parent_change = (prev_parent && lock.getDialogParent() != prev_parent);
|
const bool needs_parent_change = (prev_parent && lock.getDialogParent() != prev_parent);
|
||||||
if (needs_parent_change)
|
if (needs_parent_change)
|
||||||
{
|
{
|
||||||
setParent(lock.getDialogParent());
|
setParent(lock.getDialogParent());
|
||||||
|
setWindowFlags(prev_flags);
|
||||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||||
|
|
||||||
// ensure we're at the front
|
// ensure we're at the front
|
||||||
QTimer::singleShot(20, Qt::TimerType::CoarseTimer, this, SLOT(raise()));
|
QTimer::singleShot(20, Qt::TimerType::CoarseTimer, parent(), SLOT(raise()));
|
||||||
}
|
}
|
||||||
|
|
||||||
const int result = exec();
|
const int result = exec();
|
||||||
|
|
||||||
if (needs_parent_change)
|
if (needs_parent_change)
|
||||||
|
{
|
||||||
setParent(prev_parent);
|
setParent(prev_parent);
|
||||||
|
setWindowFlags(prev_flags);
|
||||||
|
}
|
||||||
|
|
||||||
// cancel resume if we're exiting anyway
|
// cancel resume if we're exiting anyway
|
||||||
if (result)
|
if (result)
|
||||||
lock.cancelResume();
|
lock.cancelResume();
|
||||||
|
|
||||||
|
emit updateCheckCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdaterDialog::queueUpdateCheck(bool display_errors)
|
void AutoUpdaterDialog::queueUpdateCheck(bool display_errors)
|
||||||
@ -443,6 +450,7 @@ void AutoUpdaterDialog::getLatestReleaseComplete(s32 status_code, const Error& e
|
|||||||
|
|
||||||
// We have to defer this, because it comes back through the timer/HTTP callback...
|
// We have to defer this, because it comes back through the timer/HTTP callback...
|
||||||
QMetaObject::invokeMethod(this, "lockAndExec", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "lockAndExec", Qt::QueuedConnection);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user