Browse Source

UI: Correctly disable "Paste Duplicate" if required

gxalpha 3 years ago
parent
commit
9f15a58483
1 changed files with 12 additions and 9 deletions
  1. 12 9
      UI/window-basic-main.cpp

+ 12 - 9
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()