From: <sv...@op...> - 2024-09-25 21:17:43
|
Author: sagamusix Date: Wed Sep 25 23:17:31 2024 New Revision: 21751 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21751 Log: [Fix] r21750 broke key handling in the bridged plugins themselves. Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp trunk/OpenMPT/mptrack/AbstractVstEditor.h trunk/OpenMPT/mptrack/DialogBase.cpp trunk/OpenMPT/mptrack/DialogBase.h trunk/OpenMPT/mptrack/VSTEditor.h Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.cpp ============================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.cpp Wed Sep 25 19:11:11 2024 (r21750) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.cpp Wed Sep 25 23:17:31 2024 (r21751) @@ -450,7 +450,7 @@ } -bool CAbstractVstEditor::HandleKeyMessage(MSG &msg) +bool CAbstractVstEditor::HandleKeyMessage(MSG &msg, bool handleGlobal) { if(m_VstPlugin.m_passKeypressesToPlug) return false; @@ -467,6 +467,9 @@ if(ih->KeyEvent(kCtxVSTGUI, event, this) != kcNull) return true; + if(handleGlobal && HandleGlobalKeyMessage(msg)) + return true; + // Don't forward key repeats if plug does not listen for keypresses // (avoids system beeps on note hold) if(event.keyEventType == kKeyEventRepeat) Modified: trunk/OpenMPT/mptrack/AbstractVstEditor.h ============================================================================== --- trunk/OpenMPT/mptrack/AbstractVstEditor.h Wed Sep 25 19:11:11 2024 (r21750) +++ trunk/OpenMPT/mptrack/AbstractVstEditor.h Wed Sep 25 23:17:31 2024 (r21751) @@ -112,7 +112,7 @@ protected: BOOL PreTranslateMessage(MSG *msg) override; - bool HandleKeyMessage(MSG &msg); + bool HandleKeyMessage(MSG &msg, bool handleGlobal = false); void UpdatePresetMenu(bool force = false); void GeneratePresetMenu(int32 offset, CMenu &parent); void UpdateInputMenu(); Modified: trunk/OpenMPT/mptrack/DialogBase.cpp ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.cpp Wed Sep 25 19:11:11 2024 (r21750) +++ trunk/OpenMPT/mptrack/DialogBase.cpp Wed Sep 25 23:17:31 2024 (r21751) @@ -17,22 +17,32 @@ BOOL DialogBase::PreTranslateMessage(MSG *pMsg) { + if(pMsg && HandleGlobalKeyMessage(*pMsg)) + return TRUE; + + return CDialog::PreTranslateMessage(pMsg); +} + + +bool DialogBase::HandleGlobalKeyMessage(const MSG &msg) const +{ // We handle keypresses before Windows has a chance to handle them (for alt etc..) - if(pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP || pMsg->message == WM_SYSKEYUP || pMsg->message == WM_SYSKEYDOWN) + if(msg.message == WM_KEYDOWN || msg.message == WM_KEYUP || msg.message == WM_SYSKEYUP || msg.message == WM_SYSKEYDOWN) { if(CInputHandler *ih = CMainFrame::GetInputHandler()) { - const auto event = ih->Translate(*pMsg); + const auto event = ih->Translate(msg); if(ih->KeyEvent(kCtxAllContexts, event) != kcNull) { // Special case: ESC is typically bound to stopping playback, but we also want to allow ESC to close dialogs - if(pMsg->message != WM_KEYDOWN || pMsg->wParam != VK_ESCAPE) - return TRUE; // Mapped to a command, no need to pass message on. + if(msg.message != WM_KEYDOWN || msg.wParam != VK_ESCAPE) + return true; // Mapped to a command, no need to pass message on. } } } - return CDialog::PreTranslateMessage(pMsg); + return false; } + OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/DialogBase.h ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.h Wed Sep 25 19:11:11 2024 (r21750) +++ trunk/OpenMPT/mptrack/DialogBase.h Wed Sep 25 23:17:31 2024 (r21751) @@ -21,6 +21,9 @@ using CDialog::CDialog; BOOL PreTranslateMessage(MSG *pMsg) override; + +protected: + bool HandleGlobalKeyMessage(const MSG &msg) const; }; OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/VSTEditor.h ============================================================================== --- trunk/OpenMPT/mptrack/VSTEditor.h Wed Sep 25 19:11:11 2024 (r21750) +++ trunk/OpenMPT/mptrack/VSTEditor.h Wed Sep 25 23:17:31 2024 (r21751) @@ -50,7 +50,7 @@ LRESULT HandlePreTranslateMessage(UINT message, WPARAM wParam, LPARAM lParam) { MSG msg = {m_plugWindow, message, wParam, lParam, 0, {}}; - return PreTranslateMessage(&msg); + return HandleKeyMessage(msg, true); } DECLARE_MESSAGE_MAP() |