1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-02 16:49:41 +02:00

Move check for ControlToolBar shift key-up from TrackPanel::OnTimer() to new ControlToolBar::OnTimer().

This commit is contained in:
v.audacity 2013-07-30 01:11:36 +00:00
parent c52f2d3b12
commit 522205b056
3 changed files with 38 additions and 18 deletions

View File

@ -936,16 +936,6 @@ void TrackPanel::OnTimer()
wxCommandEvent dummyEvent;
AudacityProject *p = GetProject();
// bug 307 fix:
// Apparently Shift key-up events get swallowed if a command with a Shift
// in its keyboard accelerator opens a dialog.
if (!wxGetKeyState(WXK_SHIFT) && p->GetControlToolBar())
{
wxKeyEvent dummyEvent;
dummyEvent.m_keyCode = WXK_SHIFT;
p->GetControlToolBar()->OnKeyUp(dummyEvent);
}
if ((p->GetAudioIOToken() > 0) &&
gAudioIO->IsStreamActive(p->GetAudioIOToken()))
{

View File

@ -44,6 +44,7 @@
#include <wx/event.h>
#include <wx/image.h>
#include <wx/intl.h>
#include <wx/timer.h>
#endif
#include <wx/tooltip.h>
@ -71,6 +72,7 @@ AudacityProject *ControlToolBar::mBusyProject = NULL;
BEGIN_EVENT_TABLE(ControlToolBar, ToolBar)
EVT_CHAR(ControlToolBar::OnKeyEvent)
EVT_TIMER(wxID_ANY, ControlToolBar::OnTimer)
EVT_BUTTON(ID_PLAY_BUTTON, ControlToolBar::OnPlay)
EVT_BUTTON(ID_STOP_BUTTON, ControlToolBar::OnStop)
EVT_BUTTON(ID_RECORD_BUTTON, ControlToolBar::OnRecord)
@ -88,13 +90,15 @@ END_EVENT_TABLE()
ControlToolBar::ControlToolBar()
: ToolBar(TransportBarID, _("Transport"), wxT("Control"))
{
mPaused = false;
mSizer = NULL;
mShiftKeyTimer.SetOwner(this);
mCutPreviewTracks = NULL;
mPaused = false;
gPrefs->Read(wxT("/GUI/ErgonomicTransportButtons"), &mErgonomicTransportButtons, true);
mStrLocale = gPrefs->Read(wxT("/Locale/Language"), wxT(""));
mSizer = NULL;
mCutPreviewTracks = NULL;
}
ControlToolBar::~ControlToolBar()
@ -675,15 +679,16 @@ void ControlToolBar::OnKeyEvent(wxKeyEvent & event)
event.Skip();
}
void ControlToolBar::OnKeyDown(wxKeyEvent & event)
{
event.Skip();
if (event.GetKeyCode() == WXK_SHIFT ) {
if (event.GetKeyCode() == WXK_SHIFT)
{
// Turn the "Play" button into a "Loop" button
if (!mPlay->IsDown())
mPlay->SetAlternate(true);
mShiftKeyTimer.Start(100);
}
}
@ -691,13 +696,31 @@ void ControlToolBar::OnKeyUp(wxKeyEvent & event)
{
event.Skip();
if (event.GetKeyCode() == WXK_SHIFT ) {
if (event.GetKeyCode() == WXK_SHIFT)
{
// Turn the "Loop" button into a "Play" button
if (!mPlay->IsDown())
mPlay->SetAlternate(false);
}
}
void ControlToolBar::OnTimer(wxTimerEvent & event)
{
event.Skip();
// bug 307 fix:
// Shift key-up events get swallowed if a command with a Shift in its keyboard
// shortcut opens a dialog, and ControlToolBar::OnKeyUp() doesn't get called.
if (!wxGetKeyState(WXK_SHIFT))
{
wxKeyEvent dummyEvent;
dummyEvent.m_keyCode = WXK_SHIFT;
this->OnKeyUp(dummyEvent);
mShiftKeyTimer.Stop();
}
}
void ControlToolBar::OnPlay(wxCommandEvent & WXUNUSED(evt))
{
StopPlaying();

View File

@ -21,6 +21,8 @@ class wxBoxSizer;
class wxCommandEvent;
class wxDC;
class wxKeyEvent;
class wxTimer;
class wxTimerEvent;
class wxWindow;
class AButton;
@ -40,6 +42,10 @@ class ControlToolBar:public ToolBar {
void UpdatePrefs();
virtual void OnKeyEvent(wxKeyEvent & event);
void OnKeyDown(wxKeyEvent & event);
void OnKeyUp(wxKeyEvent & event);
void OnTimer(wxTimerEvent & event);
// msmeyer: These are public, but it's far better to
// call the "real" interface functions like PlayCurrentRegion() and
@ -75,8 +81,6 @@ class ControlToolBar:public ToolBar {
void Populate();
virtual void Repaint(wxDC *dc);
virtual void EnableDisableButtons();
void OnKeyDown(wxKeyEvent & event);
void OnKeyUp(wxKeyEvent & event);
void SetVUMeters(AudacityProject *p);
@ -116,7 +120,10 @@ class ControlToolBar:public ToolBar {
AButton *mStop;
AButton *mFF;
wxTimer mShiftKeyTimer;
static AudacityProject *mBusyProject;
// Maybe button state values shouldn't be duplicated in this toolbar?
bool mPaused; //Play or record is paused or not paused?