diff --git a/src/Menus.cpp b/src/Menus.cpp index 63b44600e..544ee6ce6 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -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(); diff --git a/src/Project.cpp b/src/Project.cpp index 1e4916936..ba3c99b71 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -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; diff --git a/src/commands/CommandFlag.h b/src/commands/CommandFlag.h index 6dc04c48b..2c59f6b04 100644 --- a/src/commands/CommandFlag.h +++ b/src/commands/CommandFlag.h @@ -56,6 +56,7 @@ enum CommandFlag : unsigned long long HasWaveDataFlag = 0x800000000ULL, // jkc PlayableTracksExistFlag = 0x1000000000ULL, AudioTracksSelectedFlag = 0x2000000000ULL, + NoAutoSelect = 0x4000000000ULL, // jkc NoFlagsSpecifed = ~0ULL }; diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index d14f31ed9..7642e8250 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -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);