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: