From bc91b038435f6959ad0cc5bf4f44c17fe9b3f0a7 Mon Sep 17 00:00:00 2001
From: Boris Yumankulov <boria138@altlinux.org>
Date: Thu, 5 Jun 2025 19:37:57 +0500
Subject: [PATCH] fix(main_window): prevent multiple AddGameDialog openings on
 gamepad

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
---
 portprotonqt/main_window.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/portprotonqt/main_window.py b/portprotonqt/main_window.py
index ec24202..9634d2d 100644
--- a/portprotonqt/main_window.py
+++ b/portprotonqt/main_window.py
@@ -60,6 +60,7 @@ class MainWindow(QMainWindow):
         self.games_load_timer.setSingleShot(True)
         self.games_load_timer.timeout.connect(self.finalize_game_loading)
         self.games_loaded.connect(self.on_games_loaded)
+        self.current_add_game_dialog = None
 
         # Добавляем таймер для дебаунсинга сохранения настроек
         self.settingsDebounceTimer = QTimer(self)
@@ -730,7 +731,14 @@ class MainWindow(QMainWindow):
 
     def openAddGameDialog(self, exe_path=None):
         """Открывает диалоговое окно 'Add Game' с текущей темой."""
+        # Проверяем, открыт ли уже диалог
+        if self.current_add_game_dialog is not None and self.current_add_game_dialog.isVisible():
+            self.current_add_game_dialog.activateWindow()  # Активируем существующий диалог
+            self.current_add_game_dialog.raise_()  # Поднимаем окно
+            return
+
         dialog = AddGameDialog(self, self.theme)
+        self.current_add_game_dialog = dialog  # Сохраняем ссылку на диалог
 
         # Предзаполняем путь к .exe при drag-and-drop
         if exe_path:
@@ -738,6 +746,12 @@ class MainWindow(QMainWindow):
             dialog.nameEdit.setText(os.path.splitext(os.path.basename(exe_path))[0])
             dialog.updatePreview()
 
+        # Обработчик закрытия диалога
+        def on_dialog_finished():
+            self.current_add_game_dialog = None  # Сбрасываем ссылку при закрытии
+
+        dialog.finished.connect(on_dialog_finished)
+
         if dialog.exec() == QDialog.DialogCode.Accepted:
             name = dialog.nameEdit.text().strip()
             exe_path = dialog.exeEdit.text().strip()
@@ -774,7 +788,6 @@ class MainWindow(QMainWindow):
             self.games = self.loadGames()
             self.updateGameGrid()
 
-
     def createAutoInstallTab(self):
         """Вкладка 'Auto Install'."""
         self.autoInstallWidget = QWidget()