diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index f63f14baa..23543cf02 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -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()