From 2d4191f8ce57e2d1c7a3a5b000cbd30c9f989117 Mon Sep 17 00:00:00 2001
From: Stenzek <stenzek@gmail.com>
Date: Mon, 18 Dec 2023 13:34:12 +1000
Subject: [PATCH] Qt: Fix game properties dialogs keeping app open

---
 src/duckstation-qt/mainwindow.cpp     | 2 ++
 src/duckstation-qt/settingswindow.cpp | 9 +++++++++
 src/duckstation-qt/settingswindow.h   | 1 +
 3 files changed, 12 insertions(+)

diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp
index 8b39fb84a..c7d31c943 100644
--- a/src/duckstation-qt/mainwindow.cpp
+++ b/src/duckstation-qt/mainwindow.cpp
@@ -770,6 +770,8 @@ void MainWindow::destroySubWindows()
     m_settings_window->deleteLater();
     m_settings_window = nullptr;
   }
+
+  SettingsWindow::closeGamePropertiesDialogs();
 }
 
 void MainWindow::populateGameListContextMenu(const GameList::Entry* entry, QWidget* parent_window, QMenu* menu)
diff --git a/src/duckstation-qt/settingswindow.cpp b/src/duckstation-qt/settingswindow.cpp
index a04588c1c..d467901c3 100644
--- a/src/duckstation-qt/settingswindow.cpp
+++ b/src/duckstation-qt/settingswindow.cpp
@@ -520,3 +520,12 @@ void SettingsWindow::openGamePropertiesDialog(const std::string& path, const std
   dialog->setWindowTitle(window_title);
   dialog->show();
 }
+
+void SettingsWindow::closeGamePropertiesDialogs()
+{
+  for (SettingsWindow* dialog : s_open_game_properties_dialogs)
+  {
+    dialog->close();
+    dialog->deleteLater();
+  }
+}
diff --git a/src/duckstation-qt/settingswindow.h b/src/duckstation-qt/settingswindow.h
index 1a050f3db..90612010f 100644
--- a/src/duckstation-qt/settingswindow.h
+++ b/src/duckstation-qt/settingswindow.h
@@ -44,6 +44,7 @@ public:
   ~SettingsWindow();
 
   static void openGamePropertiesDialog(const std::string& path, const std::string& serial, DiscRegion region);
+  static void closeGamePropertiesDialogs();
 
   ALWAYS_INLINE bool isPerGameSettings() const { return static_cast<bool>(m_sif); }
   ALWAYS_INLINE SettingsInterface* getSettingsInterface() const { return m_sif.get(); }