diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 6369209aa..5acef8da0 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -386,6 +386,7 @@ void GMainWindow::OnDisplayTitleBars(bool show) { } void GMainWindow::OnCheckForUpdates() { + explicit_update_check = true; CheckForUpdates(); } @@ -405,10 +406,29 @@ void GMainWindow::OnUpdateFound(bool found, bool error) { if (!found) { LOG_INFO(Frontend, "No updates found"); + + // If the user explicitly clicked the "Check for Updates" button, we are + // going to want to show them a prompt anyway. + if (explicit_update_check) { + explicit_update_check = false; + ShowNoUpdatePrompt(); + } + return; + } + + if (emulation_running && !explicit_update_check) { + LOG_INFO(Frontend, "Update found, deferring as game is running"); + defer_update_prompt = true; return; } LOG_INFO(Frontend, "Update found!"); + explicit_update_check = false; + + ShowUpdatePrompt(); +} + +void GMainWindow::ShowUpdatePrompt() { auto result = QMessageBox::question( this, tr("Update available!"), tr("An update for Citra is available. Do you wish to install it now?

" @@ -421,6 +441,11 @@ void GMainWindow::OnUpdateFound(bool found, bool error) { } } +void GMainWindow::ShowNoUpdatePrompt() { + QMessageBox::information(this, tr("No update found"), tr("No update has been found for Citra."), + QMessageBox::Ok, QMessageBox::Ok); +} + void GMainWindow::OnOpenUpdater() { updater->LaunchUI(); } @@ -580,6 +605,11 @@ void GMainWindow::ShutdownGame() { emu_frametime_label->setVisible(false); emulation_running = false; + + if (defer_update_prompt) { + defer_update_prompt = false; + ShowUpdatePrompt(); + } } void GMainWindow::StoreRecentFile(const QString& filename) { diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index 59558644f..7df60974c 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -82,6 +82,8 @@ private: void ShowCallouts(); void ShowUpdaterWidgets(); + void ShowUpdatePrompt(); + void ShowNoUpdatePrompt(); void CheckForUpdates(); /** @@ -170,6 +172,9 @@ private: WaitTreeWidget* waitTreeWidget; Updater* updater; + bool explicit_update_check = false; + bool defer_update_prompt = false; + QAction* actions_recent_files[max_recent_files_item]; protected: