|
|
|
@ -1498,7 +1498,7 @@ void GMainWindow::SetupSigInterrupts() { |
|
|
|
|
|
|
|
void GMainWindow::HandleSigInterrupt(int sig) { |
|
|
|
if (sig == SIGINT) { |
|
|
|
exit(1); |
|
|
|
_exit(1); |
|
|
|
} |
|
|
|
|
|
|
|
// Calling into Qt directly from a signal handler is not safe,
|
|
|
|
@ -1794,15 +1794,16 @@ void GMainWindow::ShutdownGame() { |
|
|
|
Settings::values.use_speed_limit.SetValue(true); |
|
|
|
|
|
|
|
system->SetShuttingDown(true); |
|
|
|
system->DetachDebugger(); |
|
|
|
discord_rpc->Pause(); |
|
|
|
|
|
|
|
RequestGameExit(); |
|
|
|
emu_thread->disconnect(); |
|
|
|
emu_thread->SetRunning(true); |
|
|
|
|
|
|
|
emit EmulationStopping(); |
|
|
|
|
|
|
|
// Wait for emulation thread to complete and delete it
|
|
|
|
if (!emu_thread->wait(5000)) { |
|
|
|
if (system->DebuggerEnabled() || !emu_thread->wait(5000)) { |
|
|
|
emu_thread->ForceStop(); |
|
|
|
emu_thread->wait(); |
|
|
|
} |
|
|
|
@ -2919,8 +2920,6 @@ void GMainWindow::OnStartGame() { |
|
|
|
|
|
|
|
emu_thread->SetRunning(true); |
|
|
|
|
|
|
|
connect(emu_thread.get(), &EmuThread::ErrorThrown, this, &GMainWindow::OnCoreError); |
|
|
|
|
|
|
|
UpdateMenuState(); |
|
|
|
OnTasStateChanged(); |
|
|
|
|
|
|
|
@ -3904,79 +3903,6 @@ void GMainWindow::OnMouseActivity() { |
|
|
|
mouse_center_timer.stop(); |
|
|
|
} |
|
|
|
|
|
|
|
void GMainWindow::OnCoreError(Core::SystemResultStatus result, std::string details) { |
|
|
|
QMessageBox::StandardButton answer; |
|
|
|
QString status_message; |
|
|
|
const QString common_message = |
|
|
|
tr("The game you are trying to load requires additional files from your Switch to be " |
|
|
|
"dumped " |
|
|
|
"before playing.<br/><br/>For more information on dumping these files, please see the " |
|
|
|
"following wiki page: <a " |
|
|
|
"href='https://yuzu-emu.org/wiki/" |
|
|
|
"dumping-system-archives-and-the-shared-fonts-from-a-switch-console/'>Dumping System " |
|
|
|
"Archives and the Shared Fonts from a Switch Console</a>.<br/><br/>Would you like to " |
|
|
|
"quit " |
|
|
|
"back to the game list? Continuing emulation may result in crashes, corrupted save " |
|
|
|
"data, or other bugs."); |
|
|
|
switch (result) { |
|
|
|
case Core::SystemResultStatus::ErrorSystemFiles: { |
|
|
|
QString message; |
|
|
|
if (details.empty()) { |
|
|
|
message = |
|
|
|
tr("yuzu was unable to locate a Switch system archive. %1").arg(common_message); |
|
|
|
} else { |
|
|
|
message = tr("yuzu was unable to locate a Switch system archive: %1. %2") |
|
|
|
.arg(QString::fromStdString(details), common_message); |
|
|
|
} |
|
|
|
|
|
|
|
answer = QMessageBox::question(this, tr("System Archive Not Found"), message, |
|
|
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No); |
|
|
|
status_message = tr("System Archive Missing"); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
case Core::SystemResultStatus::ErrorSharedFont: { |
|
|
|
const QString message = |
|
|
|
tr("yuzu was unable to locate the Switch shared fonts. %1").arg(common_message); |
|
|
|
answer = QMessageBox::question(this, tr("Shared Fonts Not Found"), message, |
|
|
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No); |
|
|
|
status_message = tr("Shared Font Missing"); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
answer = QMessageBox::question( |
|
|
|
this, tr("Fatal Error"), |
|
|
|
tr("yuzu has encountered a fatal error, please see the log for more details. " |
|
|
|
"For more information on accessing the log, please see the following page: " |
|
|
|
"<a href='https://community.citra-emu.org/t/how-to-upload-the-log-file/296'>How " |
|
|
|
"to " |
|
|
|
"Upload the Log File</a>.<br/><br/>Would you like to quit back to the game " |
|
|
|
"list? " |
|
|
|
"Continuing emulation may result in crashes, corrupted save data, or other " |
|
|
|
"bugs."), |
|
|
|
QMessageBox::Yes | QMessageBox::No, QMessageBox::No); |
|
|
|
status_message = tr("Fatal Error encountered"); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (answer == QMessageBox::Yes) { |
|
|
|
if (emu_thread) { |
|
|
|
ShutdownGame(); |
|
|
|
|
|
|
|
Settings::RestoreGlobalState(system->IsPoweredOn()); |
|
|
|
system->HIDCore().ReloadInputDevices(); |
|
|
|
UpdateStatusButtons(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// Only show the message if the game is still running.
|
|
|
|
if (emu_thread) { |
|
|
|
emu_thread->SetRunning(true); |
|
|
|
message_label->setText(status_message); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) { |
|
|
|
if (behavior == ReinitializeKeyBehavior::Warning) { |
|
|
|
const auto res = QMessageBox::information( |
|
|
|
|