diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 5976e092be..3149ab877e 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -390,6 +390,7 @@ void GMainWindow::OnDisplayTitleBars(bool show) {
}
void GMainWindow::OnCheckForUpdates() {
+ explicit_update_check = true;
CheckForUpdates();
}
@@ -409,10 +410,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?
"
@@ -425,6 +445,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();
}
@@ -584,6 +609,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 fe7ff6c4ae..878b2becf7 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -83,6 +83,8 @@ private:
void ShowCallouts();
void ShowUpdaterWidgets();
+ void ShowUpdatePrompt();
+ void ShowNoUpdatePrompt();
void CheckForUpdates();
/**
@@ -173,6 +175,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: