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:
parent
c52f2d3b12
commit
522205b056
@ -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()))
|
||||
{
|
||||
|
@ -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();
|
||||
|
@ -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?
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user