From 71bca8be8baeb3d2e9b11c8ef8e792f0db053bad Mon Sep 17 00:00:00 2001 From: rainmakerv3 <30595646+rainmakerv3@users.noreply.github.com> Date: Sun, 22 Jun 2025 18:13:07 +0800 Subject: [PATCH] Unmap button with escape key --- src/qt_gui/control_settings.cpp | 29 +++++++++++++++++++++-------- src/qt_gui/control_settings.h | 2 ++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/qt_gui/control_settings.cpp b/src/qt_gui/control_settings.cpp index f9638c73b..c850f6706 100644 --- a/src/qt_gui/control_settings.cpp +++ b/src/qt_gui/control_settings.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include +#include #include #include #include "common/logging/log.h" @@ -23,6 +24,7 @@ ControlSettings::ControlSettings(std::shared_ptr game_info_get, Q AddBoxItems(); SetUIValuestoMappings(); UpdateLightbarColor(); + installEventFilter(this); ButtonsList = {ui->CrossButton, ui->CircleButton, @@ -705,17 +707,28 @@ void ControlSettings::CheckMapping(QPushButton*& button) { } } +void ControlSettings::SetMapping(QString input) { + mapping = input; + MappingCompleted = true; + emit gamepadInputEvent(); + if (EnableAxisMapping) + emit AxisChanged(); +} + +bool ControlSettings::eventFilter(QObject* obj, QEvent* event) { + if (event->type() == QEvent::KeyPress && EnableButtonMapping) { + QKeyEvent* keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Escape) { + SetMapping("unmapped"); + return true; + } + } + return QDialog::eventFilter(obj, event); +} + void ControlSettings::pollSDLEvents() { SDL_Event event; - auto SetMapping = [&](const QString& input) { - mapping = input; - MappingCompleted = true; - emit gamepadInputEvent(); - if (EnableAxisMapping) - emit AxisChanged(); - }; - while (isRunning) { if (!SDL_WaitEvent(&event)) { return; diff --git a/src/qt_gui/control_settings.h b/src/qt_gui/control_settings.h index 548f1c50c..bd6a626d1 100644 --- a/src/qt_gui/control_settings.h +++ b/src/qt_gui/control_settings.h @@ -34,11 +34,13 @@ private: std::unique_ptr ui; std::shared_ptr m_game_info; + bool eventFilter(QObject* obj, QEvent* event) override; void AddBoxItems(); void SetUIValuestoMappings(); void GetGameTitle(); void CheckGamePad(); void pollSDLEvents(); + void SetMapping(QString input); void DisableMappingButtons(); void EnableMappingButtons();