Skip to content

Commit bed7182

Browse files
authored
Improve feedback for Item: Copy loop of selected area of audio items. (issue #1074, PR #1189)
1 parent fb701fd commit bed7182

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

src/reaper_osara.cpp

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3693,33 +3693,45 @@ void cmdRemoveOrCopyAreaOfItems(Command* command) {
36933693
}
36943694
return count;
36953695
};
3696+
ostringstream s;
36963697
if(start == end) {
3697-
outputMessage(translate("no time selection"));
3698+
s << translate("no time selection");
36983699
} else {
36993700
switch (command->gaccel.accel.cmd) {
3700-
case 40060: // Item: Copy selected area of items
3701-
case 40014: { // Item: Copy loop of selected area of audio items
3701+
case 40060:{ // Item: Copy selected area of items
37023702
if(selItems == 0) {
3703-
outputMessage(translate("no items selected"));
3703+
s << translate("no items selected");
37043704
break;
37053705
}
37063706
int count = countAffected(GetSelectedMediaItem, selItems);
37073707
// Translators: used for "Item: Copy selected area of items".
37083708
// {} is replaced by the number of items affected.
3709-
outputMessage(format(
3710-
translate_plural("selected area of {} item copied", "selected area of {} items copied", count), count));
3709+
s << format(
3710+
translate_plural("selected area of {} item copied", "selected area of {} items copied", count), count);
3711+
break;
3712+
}
3713+
case 40014: { // Item: Copy loop of selected area of audio items
3714+
if(selItems == 0) {
3715+
s << translate("no items selected");
3716+
break;
3717+
}
3718+
int count = countAffected(GetSelectedMediaItem, selItems);
3719+
// Translators: used for "Item: Copy loop of selected area of audio items".
3720+
// {} is replaced by the number of items affected.
3721+
s << format(
3722+
translate_plural("loop of selected area of {} item copied", "loop of selected area of {} items copied", count), count);
37113723
break;
37123724
}
37133725
case 41296: { // Item: Duplicate selected area of items
37143726
if(selItems == 0) {
3715-
outputMessage(translate("no items selected"));
3727+
s << translate("no items selected");
37163728
break;
37173729
}
37183730
int count = countAffected(GetSelectedMediaItem, selItems);
37193731
// Translators: used for "Item: Duplicate selected area of items".
37203732
// {} is replaced by the number of items affected.
3721-
outputMessage(format(
3722-
translate_plural("selected area of {} item duplicated", "selected area of {} items duplicated", count), count));
3733+
s << format(
3734+
translate_plural("selected area of {} item duplicated", "selected area of {} items duplicated", count), count);
37233735
break;
37243736
}
37253737
default: {
@@ -3729,18 +3741,28 @@ void cmdRemoveOrCopyAreaOfItems(Command* command) {
37293741
} else {
37303742
count = countAffected(GetSelectedMediaItem, selItems);
37313743
}
3732-
ostringstream s;
37333744
// Translators: used for "Item: Cut selected area of items" and "Item:
37343745
// Remove selected area of items". {} is replaced by the number of items
37353746
// affected.
37363747
s << format(
37373748
translate_plural("selected area of {} item removed", "selected area of {} items removed", count), count);
37383749
maybeAddRippleMessage(s, command->gaccel.accel.cmd);
3739-
outputMessage(s);
37403750
}
37413751
}
37423752
}
3753+
// the command might show an error, so we need to avoid speaking if the focus changes
3754+
HWND oldFocus = GetFocus();
3755+
bool focusChanged = false;
3756+
auto later = CallLater([&focusChanged, &oldFocus] {
3757+
if(GetFocus() != oldFocus) {
3758+
focusChanged = true;
3759+
}
3760+
}, 100);
37433761
Main_OnCommand(command->gaccel.accel.cmd, 0);
3762+
if(!focusChanged) {
3763+
outputMessage(s);
3764+
}
3765+
later.cancel();
37443766
}
37453767

37463768
void cmdhRemoveItems(int command) {

0 commit comments

Comments
 (0)