mirror of
https://github.com/cookiengineer/audacity
synced 2025-09-20 22:31:33 +02:00
ESC key stops play as well as scrub, but not record. Details: ...
... If there is play but also an escapable drag action in TrackPanel, such as a change of selection, then ESC aborts the drag. A second ESC would stop play. The event handling for these ESC actions may be in the wrong place though. If you ctrl-f6 during play so that the selection toolbar gets focus, then ESC does not work to stop play.
This commit is contained in:
parent
d2c8975f8a
commit
d26395029f
@ -1147,13 +1147,15 @@ void TrackPanel::MakeParentRedrawScrollbars()
|
|||||||
|
|
||||||
void TrackPanel::HandleEscapeKey(bool down)
|
void TrackPanel::HandleEscapeKey(bool down)
|
||||||
{
|
{
|
||||||
|
// Note that this dispatches some keystrokes even when track panel is not focused.
|
||||||
|
// So it works as a place for escaping from playing and scrub as well as other
|
||||||
|
// drag actions specific to track panel. If there is a drag and a play at the
|
||||||
|
// same time, the first ESC applies to the drag action only.
|
||||||
|
|
||||||
if (!down)
|
if (!down)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto &scrubber = GetProject()->GetScrubber();
|
switch (mMouseCapture)
|
||||||
if(scrubber.HasStartedScrubbing())
|
|
||||||
scrubber.StopScrubbing();
|
|
||||||
else switch (mMouseCapture)
|
|
||||||
{
|
{
|
||||||
case IsSelecting:
|
case IsSelecting:
|
||||||
{
|
{
|
||||||
@ -1195,10 +1197,28 @@ void TrackPanel::HandleEscapeKey(bool down)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
|
// Stop play, but not record, and only if ESC does
|
||||||
|
// nothing else. See comments at top of function.
|
||||||
|
|
||||||
|
auto project = GetProject();
|
||||||
|
auto token = project->GetAudioIOToken();
|
||||||
|
auto &scrubber = project->GetScrubber();
|
||||||
|
if(scrubber.HasStartedScrubbing())
|
||||||
|
// ESC out of scrubbing
|
||||||
|
scrubber.StopScrubbing();
|
||||||
|
else if(token > 0 &&
|
||||||
|
gAudioIO->IsAudioTokenActive(token) &&
|
||||||
|
gAudioIO->GetNumCaptureChannels() == 0)
|
||||||
|
// ESC out of other play (but not record)
|
||||||
|
GetProject()->OnStop();
|
||||||
|
|
||||||
|
// Not escaping from a mouse drag
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Common part in all cases that do anything
|
// Common part in all cases that escape from a drag
|
||||||
SetCapturedTrack(NULL, IsUncaptured);
|
SetCapturedTrack(NULL, IsUncaptured);
|
||||||
if (HasCapture())
|
if (HasCapture())
|
||||||
ReleaseMouse();
|
ReleaseMouse();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user