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
|
// Basic Edit coomands
|
||||||
/* i18n-hint: (verb)*/
|
/* i18n-hint: (verb)*/
|
||||||
c->AddItem(wxT("Cut"), _("Cu&t"), FN(OnCut), wxT("Ctrl+X"),
|
c->AddItem(wxT("Cut"), _("Cu&t"), FN(OnCut), wxT("Ctrl+X"),
|
||||||
AudioIONotBusyFlag | CutCopyAvailableFlag,
|
AudioIONotBusyFlag | CutCopyAvailableFlag | NoAutoSelect,
|
||||||
AudioIONotBusyFlag | CutCopyAvailableFlag);
|
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)*/
|
/* i18n-hint: (verb)*/
|
||||||
c->AddItem(wxT("Copy"), _("&Copy"), FN(OnCopy), wxT("Ctrl+C"),
|
c->AddItem(wxT("Copy"), _("&Copy"), FN(OnCopy), wxT("Ctrl+C"),
|
||||||
AudioIONotBusyFlag | CutCopyAvailableFlag,
|
AudioIONotBusyFlag | CutCopyAvailableFlag,
|
||||||
@ -1313,11 +1315,11 @@ void AudacityProject::CreateMenusAndCommands()
|
|||||||
c->BeginSubMenu("&Edit");
|
c->BeginSubMenu("&Edit");
|
||||||
|
|
||||||
c->AddItem(wxT("DeleteKey"), _("&DeleteKey"), FN(OnDelete), wxT("Backspace"),
|
c->AddItem(wxT("DeleteKey"), _("&DeleteKey"), FN(OnDelete), wxT("Backspace"),
|
||||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag,
|
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag | NoAutoSelect,
|
||||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
||||||
|
|
||||||
c->AddItem(wxT("DeleteKey2"), _("DeleteKey&2"), FN(OnDelete), wxT("Delete"),
|
c->AddItem(wxT("DeleteKey2"), _("DeleteKey&2"), FN(OnDelete), wxT("Delete"),
|
||||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag,
|
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag | NoAutoSelect,
|
||||||
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag);
|
||||||
c->EndSubMenu();
|
c->EndSubMenu();
|
||||||
|
|
||||||
|
@ -2327,6 +2327,10 @@ bool AudacityProject::TryToMakeActionAllowed
|
|||||||
if( mWhatIfNoSelection != 1 )
|
if( mWhatIfNoSelection != 1 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Some effects disallow autoselection.
|
||||||
|
if( flagsRqd & NoAutoSelect )
|
||||||
|
return false;
|
||||||
|
|
||||||
// Why is action still not allowed?
|
// Why is action still not allowed?
|
||||||
// 0's wherever a required flag is missing (or is don't care)
|
// 0's wherever a required flag is missing (or is don't care)
|
||||||
MissingFlags = (flags & ~flagsRqd) & mask;
|
MissingFlags = (flags & ~flagsRqd) & mask;
|
||||||
|
@ -56,6 +56,7 @@ enum CommandFlag : unsigned long long
|
|||||||
HasWaveDataFlag = 0x800000000ULL, // jkc
|
HasWaveDataFlag = 0x800000000ULL, // jkc
|
||||||
PlayableTracksExistFlag = 0x1000000000ULL,
|
PlayableTracksExistFlag = 0x1000000000ULL,
|
||||||
AudioTracksSelectedFlag = 0x2000000000ULL,
|
AudioTracksSelectedFlag = 0x2000000000ULL,
|
||||||
|
NoAutoSelect = 0x4000000000ULL, // jkc
|
||||||
|
|
||||||
NoFlagsSpecifed = ~0ULL
|
NoFlagsSpecifed = ~0ULL
|
||||||
};
|
};
|
||||||
|
@ -1336,8 +1336,11 @@ bool CommandManager::HandleCommandEntry(const CommandListEntry * entry,
|
|||||||
// NB: The call may have the side effect of changing flags.
|
// NB: The call may have the side effect of changing flags.
|
||||||
bool allowed = proj->ReportIfActionNotAllowed(
|
bool allowed = proj->ReportIfActionNotAllowed(
|
||||||
NiceName, flags, entry->flags, combinedMask );
|
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)
|
if (!allowed)
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*(entry->callback))(entry->index, evt);
|
(*(entry->callback))(entry->index, evt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user