diff --git a/src/qt_gui/control_settings.cpp b/src/qt_gui/control_settings.cpp index 34af98585..a09df3e55 100644 --- a/src/qt_gui/control_settings.cpp +++ b/src/qt_gui/control_settings.cpp @@ -918,7 +918,7 @@ void ControlSettings::pollSDLEvents() { } } -void ControlSettings::cleanup() { +void ControlSettings::Cleanup() { SdlEventWrapper::Wrapper::wrapperActive = false; if (gamepad) SDL_CloseGamepad(gamepad); diff --git a/src/qt_gui/control_settings.h b/src/qt_gui/control_settings.h index c97a891a0..e47a79936 100644 --- a/src/qt_gui/control_settings.h +++ b/src/qt_gui/control_settings.h @@ -44,7 +44,7 @@ private: void SetMapping(QString input); void DisableMappingButtons(); void EnableMappingButtons(); - void cleanup(); + void Cleanup(); QList ButtonsList; QList AxisList; @@ -76,6 +76,6 @@ private: protected: void closeEvent(QCloseEvent* event) override { - cleanup(); + Cleanup(); } }; diff --git a/src/qt_gui/kbm_gui.cpp b/src/qt_gui/kbm_gui.cpp index f966119e6..10c08e391 100644 --- a/src/qt_gui/kbm_gui.cpp +++ b/src/qt_gui/kbm_gui.cpp @@ -7,22 +7,32 @@ #include #include #include +#include #include "common/path_util.h" #include "kbm_config_dialog.h" #include "kbm_gui.h" #include "kbm_help_dialog.h" +#include "sdl_window.h" #include "ui_kbm_gui.h" HelpDialog* HelpWindow; -KBMSettings::KBMSettings(std::shared_ptr game_info_get, QWidget* parent) - : QDialog(parent), m_game_info(game_info_get), ui(new Ui::KBMSettings) { +KBMSettings::KBMSettings(std::shared_ptr game_info_get, bool isGameRunning, + QWidget* parent) + : QDialog(parent), m_game_info(game_info_get), GameRunning(isGameRunning), + ui(new Ui::KBMSettings) { ui->setupUi(this); ui->PerGameCheckBox->setChecked(!Config::GetUseUnifiedInputConfig()); ui->TextEditorButton->setFocus(); this->setFocusPolicy(Qt::StrongFocus); + if (GameRunning) { + SDL_Event pauseGame{}; + pauseGame.type = SDL_EVENT_TOGGLE_PAUSE; + SDL_PushEvent(&pauseGame); + } + ui->MouseJoystickBox->addItem("none"); ui->MouseJoystickBox->addItem("right"); ui->MouseJoystickBox->addItem("left"); @@ -998,8 +1008,15 @@ bool KBMSettings::eventFilter(QObject* obj, QEvent* event) { } } } - return QDialog::eventFilter(obj, event); } +void KBMSettings::Cleanup() { + if (GameRunning) { + SDL_Event resumeGame{}; + resumeGame.type = SDL_EVENT_TOGGLE_PAUSE; + SDL_PushEvent(&resumeGame); + } +} + KBMSettings::~KBMSettings() {} diff --git a/src/qt_gui/kbm_gui.h b/src/qt_gui/kbm_gui.h index 09a9166b9..ddc2b9422 100644 --- a/src/qt_gui/kbm_gui.h +++ b/src/qt_gui/kbm_gui.h @@ -23,7 +23,8 @@ class KBMSettings; class KBMSettings : public QDialog { Q_OBJECT public: - explicit KBMSettings(std::shared_ptr game_info_get, QWidget* parent = nullptr); + explicit KBMSettings(std::shared_ptr game_info_get, bool GameRunning, + QWidget* parent = nullptr); ~KBMSettings(); private Q_SLOTS: @@ -44,8 +45,10 @@ private: void DisableMappingButtons(); void EnableMappingButtons(); void SetMapping(QString input); + void Cleanup(); QSet pressedKeys; + bool GameRunning; bool EnableMapping = false; bool MappingCompleted = false; bool HelpWindowOpen = false; @@ -66,4 +69,9 @@ private: "pad_left", "pad_right", "axis_left_x", "axis_left_y", "axis_right_x", "axis_right_y", "back"}; + +protected: + void closeEvent(QCloseEvent* event) override { + Cleanup(); + } }; diff --git a/src/qt_gui/main_window.cpp b/src/qt_gui/main_window.cpp index 0ecf4b76d..0b2b1e7cd 100644 --- a/src/qt_gui/main_window.cpp +++ b/src/qt_gui/main_window.cpp @@ -478,7 +478,7 @@ void MainWindow::CreateConnects() { }); connect(ui->keyboardButton, &QPushButton::clicked, this, [this]() { - auto kbmWindow = new KBMSettings(m_game_info, this); + auto kbmWindow = new KBMSettings(m_game_info, isGameRunning, this); kbmWindow->exec(); });