diff --git a/Source/Project64-input/InputConfigUI.cpp b/Source/Project64-input/InputConfigUI.cpp index f09d157f3..7c8ef0333 100644 --- a/Source/Project64-input/InputConfigUI.cpp +++ b/Source/Project64-input/InputConfigUI.cpp @@ -327,7 +327,8 @@ void CControllerSettings::EnablePage(bool Enable) void CControllerSettings::RemoveMapping(const BUTTON & Button) { - if (!m_Controller.RemoveDuplicate) + BUTTON EmptyButton = { 0 }; + if (!m_Controller.RemoveDuplicate || memcmp(&Button, &EmptyButton, sizeof(Button)) == 0) { return; } @@ -341,7 +342,6 @@ void CControllerSettings::RemoveMapping(const BUTTON & Button) }; bool Changed = false; - BUTTON EmptyButton = { 0 }; for (size_t b = 0; b < (sizeof(buttons) / sizeof(buttons[0])); b++) { if (buttons[b]->Offset == Button.Offset && diff --git a/Source/Project64-input/wtl-ScanButton.cpp b/Source/Project64-input/wtl-ScanButton.cpp index 2b3f389af..5deb5f6bb 100644 --- a/Source/Project64-input/wtl-ScanButton.cpp +++ b/Source/Project64-input/wtl-ScanButton.cpp @@ -53,6 +53,7 @@ void CScanButton::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == DETECT_KEY_TIMER) { + BUTTON EmptyButton = { 0 }; bool Stop = false, ScanSuccess = false; if (g_InputPlugin) { @@ -60,12 +61,22 @@ void CScanButton::OnTimer(UINT_PTR nIDEvent) CDirectInput::ScanResult Result = g_InputPlugin->ScanDevices(Button); if (Result == CDirectInput::SCAN_SUCCEED && (Button.Offset != m_Button.Offset || Button.AxisID != m_Button.AxisID || Button.BtnType != m_Button.BtnType)) { + m_ScanBtn.KillTimer(DETECT_KEY_TIMER); if (m_ChangeCallback != nullptr) { m_ChangeCallback(m_ChangeCallbackData, Button); } m_Button = Button; } + if (Result == CDirectInput::SCAN_ESCAPE && (EmptyButton.Offset != m_Button.Offset || EmptyButton.AxisID != m_Button.AxisID || EmptyButton.BtnType != m_Button.BtnType)) + { + m_ScanBtn.KillTimer(DETECT_KEY_TIMER); + if (m_ChangeCallback != nullptr) + { + m_ChangeCallback(m_ChangeCallbackData, EmptyButton); + } + m_Button = EmptyButton; + } if (Result == CDirectInput::SCAN_SUCCEED || Result == CDirectInput::SCAN_ESCAPE) { ScanSuccess = Result == CDirectInput::SCAN_SUCCEED; @@ -83,6 +94,12 @@ void CScanButton::OnTimer(UINT_PTR nIDEvent) } else { + if (m_ChangeCallback != nullptr) + { + m_ChangeCallback(m_ChangeCallbackData, EmptyButton); + } + m_Button = EmptyButton; + DisplayButton(); Stop = true; } }