UI: Correctly disable "Paste Duplicate" if required

This commit is contained in:
gxalpha 2022-01-02 21:13:57 +01:00 committed by Jim
parent 8298f040fe
commit 9f15a58483

View file

@ -7782,11 +7782,20 @@ void OBSBasic::UpdateEditMenu()
filter_count = obs_source_filter_count(source);
}
bool allowPastingDuplicate = !!clipboard.size();
for (size_t i = clipboard.size(); i > 0; i--) {
const size_t idx = i - 1;
OBSWeakSource &weak = clipboard[idx].weak_source;
if (obs_weak_source_expired(weak))
if (obs_weak_source_expired(weak)) {
clipboard.erase(clipboard.begin() + idx);
continue;
}
OBSSourceAutoRelease strong =
obs_weak_source_get_source(weak.Get());
if (allowPastingDuplicate &&
obs_source_get_output_flags(source) &
OBS_SOURCE_DO_NOT_DUPLICATE)
allowPastingDuplicate = false;
}
ui->actionCopySource->setEnabled(idx != -1);
@ -7796,7 +7805,7 @@ void OBSBasic::UpdateEditMenu()
ui->actionPasteFilters->setEnabled(
!obs_weak_source_expired(copyFiltersSource) && idx != -1);
ui->actionPasteRef->setEnabled(!!clipboard.size());
ui->actionPasteDup->setEnabled(!!clipboard.size());
ui->actionPasteDup->setEnabled(allowPastingDuplicate);
ui->actionMoveUp->setEnabled(idx != -1);
ui->actionMoveDown->setEnabled(idx != -1);
@ -9053,7 +9062,6 @@ void OBSBasic::on_actionMainRedo_triggered()
void OBSBasic::on_actionCopySource_triggered()
{
clipboard.clear();
bool allowPastingDuplicate = true;
for (auto &selectedSource : GetAllSelectedSourceItems()) {
OBSSceneItem item = ui->sources->Get(selectedSource.row());
@ -9072,14 +9080,9 @@ void OBSBasic::on_actionCopySource_triggered()
copyInfo.visible = obs_sceneitem_visible(item);
clipboard.push_back(copyInfo);
uint32_t output_flags = obs_source_get_output_flags(source);
if (output_flags & OBS_SOURCE_DO_NOT_DUPLICATE)
allowPastingDuplicate = false;
}
ui->actionPasteRef->setEnabled(true);
ui->actionPasteDup->setEnabled(allowPastingDuplicate);
UpdateEditMenu();
}
void OBSBasic::on_actionPasteRef_triggered()