mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-18 17:10:05 +02:00
Disallow AutoSelect on dangerous commands.
Commands flagged with NoAutoSelect will not auto select, even if the user has asked for it. This is used for Cut and 3 different kinds of delete. We later might extend it to fades and repair.
This commit is contained in:
parent
64a28861a0
commit
7341bff9e0
@ -443,9 +443,11 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
// Basic Edit coomands
|
||||
/* i18n-hint: (verb)*/
|
||||
c->AddItem(wxT("Cut"), _("Cu&t"), FN(OnCut), wxT("Ctrl+X"),
|
||||
AudioIONotBusyFlag | CutCopyAvailableFlag,
|
||||
AudioIONotBusyFlag | CutCopyAvailableFlag | NoAutoSelect,
|
||||
AudioIONotBusyFlag | CutCopyAvailableFlag);
|
||||
c->AddItem(wxT("Delete"), _("&Delete"), FN(OnDelete), wxT("Ctrl+K"));
|
||||
c->AddItem(wxT("Delete"), _("&Delete"), FN(OnDelete), wxT("Ctrl+K"),
|
||||
AudioIONotBusyFlag | NoAutoSelect,
|
||||
AudioIONotBusyFlag );
|
||||
/* i18n-hint: (verb)*/
|
||||
c->AddItem(wxT("Copy"), _("&Copy"), FN(OnCopy), wxT("Ctrl+C"),
|
||||
AudioIONotBusyFlag | CutCopyAvailableFlag,
|
||||
@ -1313,11 +1315,11 @@ void AudacityProject::CreateMenusAndCommands()
|
||||
c->BeginSubMenu("&Edit");
|
||||
|
||||
c->AddItem(wxT("DeleteKey"), _("&DeleteKey"), FN(OnDelete), wxT("Backspace"),
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag,
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag | NoAutoSelect,
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
||||
|
||||
c->AddItem(wxT("DeleteKey2"), _("DeleteKey&2"), FN(OnDelete), wxT("Delete"),
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag,
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag | NoAutoSelect,
|
||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
||||
c->EndSubMenu();
|
||||
|
||||
|
@ -2327,6 +2327,10 @@ bool AudacityProject::TryToMakeActionAllowed
|
||||
if( mWhatIfNoSelection != 1 )
|
||||
return false;
|
||||
|
||||
// Some effects disallow autoselection.
|
||||
if( flagsRqd & NoAutoSelect )
|
||||
return false;
|
||||
|
||||
// Why is action still not allowed?
|
||||
// 0's wherever a required flag is missing (or is don't care)
|
||||
MissingFlags = (flags & ~flagsRqd) & mask;
|
||||
|
@ -56,6 +56,7 @@ enum CommandFlag : unsigned long long
|
||||
HasWaveDataFlag = 0x800000000ULL, // jkc
|
||||
PlayableTracksExistFlag = 0x1000000000ULL,
|
||||
AudioTracksSelectedFlag = 0x2000000000ULL,
|
||||
NoAutoSelect = 0x4000000000ULL, // jkc
|
||||
|
||||
NoFlagsSpecifed = ~0ULL
|
||||
};
|
||||
|
@ -1336,8 +1336,11 @@ bool CommandManager::HandleCommandEntry(const CommandListEntry * entry,
|
||||
// NB: The call may have the side effect of changing flags.
|
||||
bool allowed = proj->ReportIfActionNotAllowed(
|
||||
NiceName, flags, entry->flags, combinedMask );
|
||||
// If the function was disallowed, it STILL should count as having been
|
||||
// handled (by doing nothing or by telling the user of the problem).
|
||||
// Otherwise we may get other handlers having a go at obeying the command.
|
||||
if (!allowed)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
(*(entry->callback))(entry->index, evt);
|
||||
|
Loading…
x
Reference in New Issue
Block a user