From 2a0f9da32dc4ce6a35e63a262caeb6b8af985453 Mon Sep 17 00:00:00 2001 From: Leland Lucius Date: Sun, 9 Aug 2015 18:23:32 -0500 Subject: [PATCH] Fix keyboard handling in Lyrics and MixerBoard windows Apparently, this hasn't worked for a while. At least back to 2.0.6 anyway. --- src/Lyrics.cpp | 5 +++-- src/MixerBoard.cpp | 15 +++++++++------ src/MixerBoard.h | 1 + src/commands/CommandManager.cpp | 11 ++--------- src/commands/CommandManager.h | 6 +++++- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/Lyrics.cpp b/src/Lyrics.cpp index b5561d1e8..3214ccb38 100644 --- a/src/Lyrics.cpp +++ b/src/Lyrics.cpp @@ -69,7 +69,7 @@ void HighlightTextCtrl::OnMouseEvent(wxMouseEvent& event) //v static const kHighlightTextCtrlID = 7654; BEGIN_EVENT_TABLE(Lyrics, wxPanel) - EVT_CHAR(Lyrics::OnKeyEvent) + EVT_KEY_DOWN(Lyrics::OnKeyEvent) EVT_PAINT(Lyrics::OnPaint) EVT_SIZE(Lyrics::OnSize) @@ -442,7 +442,8 @@ void Lyrics::Update(double t) void Lyrics::OnKeyEvent(wxKeyEvent & event) { - GetActiveProject()->HandleKeyDown(event); + AudacityProject *project = GetActiveProject(); + project->GetCommandManager()->FilterKeyEvent(project, event, true); } void Lyrics::OnPaint(wxPaintEvent & WXUNUSED(event)) diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index b0f9ffaeb..8deac9143 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -140,7 +140,6 @@ enum { }; BEGIN_EVENT_TABLE(MixerTrackCluster, wxPanel) - EVT_CHAR(MixerTrackCluster::OnKeyEvent) EVT_MOUSE_EVENTS(MixerTrackCluster::OnMouseEvent) EVT_PAINT(MixerTrackCluster::OnPaint) @@ -753,11 +752,6 @@ void MixerTrackCluster::HandleSelect(const bool bShiftDown) } } -void MixerTrackCluster::OnKeyEvent(wxKeyEvent & event) -{ - mProject->HandleKeyDown(event); -} - void MixerTrackCluster::OnMouseEvent(wxMouseEvent& event) { if (event.ButtonUp()) @@ -1732,6 +1726,7 @@ void MixerBoard::OnTimer(wxCommandEvent &event) // class MixerBoardFrame BEGIN_EVENT_TABLE(MixerBoardFrame, wxFrame) + EVT_KEY_DOWN(MixerBoardFrame::OnKeyEvent) EVT_CLOSE(MixerBoardFrame::OnCloseWindow) EVT_MAXIMIZE(MixerBoardFrame::OnMaximize) EVT_SIZE(MixerBoardFrame::OnSize) @@ -1796,3 +1791,11 @@ void MixerBoardFrame::OnSize(wxSizeEvent & WXUNUSED(event)) { mMixerBoard->SetSize(this->GetClientSize()); } + +void MixerBoardFrame::OnKeyEvent(wxKeyEvent & event) +{ + AudacityProject *project = GetActiveProject(); + project->GetCommandManager()->FilterKeyEvent(project, event, true); +} + + diff --git a/src/MixerBoard.h b/src/MixerBoard.h index 0d3ead754..0460018a1 100644 --- a/src/MixerBoard.h +++ b/src/MixerBoard.h @@ -308,6 +308,7 @@ private: void OnCloseWindow(wxCloseEvent &WXUNUSED(event)); void OnMaximize(wxMaximizeEvent &event); void OnSize(wxSizeEvent &evt); + void OnKeyEvent(wxKeyEvent &evt); public: MixerBoard* mMixerBoard; diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 3b66f5e79..b45ca596a 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -1042,7 +1042,7 @@ void CommandManager::TellUserWhyDisallowed( wxUint32 flagsGot, wxUint32 flagsReq /// /// /// -bool CommandManager::FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt) +bool CommandManager::FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt, bool permit) { if (HandleMeta(evt)) { @@ -1050,7 +1050,7 @@ bool CommandManager::FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt) } // Any other keypresses must be destined for this project window. - if (wxGetTopLevelParent(wxWindow::FindFocus()) != project) + if (!permit && wxGetTopLevelParent(wxWindow::FindFocus()) != project) { return false; } @@ -1067,13 +1067,6 @@ bool CommandManager::FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt) return true; } - if (project->HandleKeyDown(evt)) - { - wxKeyEvent temp = evt; - temp.SetEventType(wxEVT_KEY_UP); - project->HandleKeyUp(temp); - } - return false; } diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index bb803c068..9422f5824 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -179,13 +179,17 @@ class AUDACITY_DLL_API CommandManager: public XMLTagHandler // // Modifying accelerators // + void SetKeyFromName(wxString name, wxString key); void SetKeyFromIndex(int i, wxString key); // // Executing commands // - bool FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt); + + // "permit" allows filtering even if the active window is a child of the project. + // Lyrics and MixerTrackCluster classes use it. + bool FilterKeyEvent(AudacityProject *project, wxKeyEvent & evt, bool permit = false); bool HandleCommandEntry(CommandListEntry * entry, wxUint32 flags, wxUint32 mask, const wxEvent * evt = NULL); bool HandleMenuID(int id, wxUint32 flags, wxUint32 mask); bool HandleKey(wxKeyEvent &evt, wxUint32 flags, wxUint32 mask);