From 5a9f9af9ad29e02e4eabeb10d1de389fdf2edad7 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 7 Jun 2024 22:43:01 +0200 Subject: [PATCH] UI: Unify filters clipboard of main window and filters menu Previously, the filters window and the main window had separate clipboards where copied filters would live. With previous changes to how filters are copied in the main window, we can now easily unify the two. --- UI/window-basic-filters.cpp | 21 ++++----------------- UI/window-basic-main.cpp | 1 - UI/window-basic-main.hpp | 7 +++---- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index fcab696d6..4c9446937 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -945,7 +945,7 @@ void OBSBasicFilters::CustomContextMenu(const QPoint &pos, bool async) } QAction *pasteAction = new QAction(QTStr("Paste")); - pasteAction->setEnabled(main->copyFilter); + pasteAction->setEnabled(!main->filtersClipboard.empty()); connect(pasteAction, &QAction::triggered, this, &OBSBasicFilters::PasteFilter); pasteAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_V)); @@ -1165,26 +1165,13 @@ void OBSBasicFilters::CopyFilter() else filter = GetFilter(ui->effectFilters->currentRow(), false); - main->copyFilter = OBSGetWeakRef(filter); + main->filtersClipboard.clear(); + main->filtersClipboard.push_back(OBSGetWeakRef(filter)); } void OBSBasicFilters::PasteFilter() { - OBSSource filter = OBSGetStrongRef(main->copyFilter); - if (!filter) - return; - - OBSDataArrayAutoRelease undo_array = obs_source_backup_filters(source); - obs_source_copy_single_filter(source, filter); - OBSDataArrayAutoRelease redo_array = obs_source_backup_filters(source); - - const char *filterName = obs_source_get_name(filter); - const char *sourceName = obs_source_get_name(source); - QString text = - QTStr("Undo.Filters.Paste.Single").arg(filterName, sourceName); - - main->CreateFilterPasteUndoRedoAction(text, source, undo_array, - redo_array); + main->SourcePasteFilters(source); } void OBSBasicFilters::delete_filter(OBSSource filter) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 9f5b3a1a3..c8789cafb 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5104,7 +5104,6 @@ void OBSBasic::ClearSceneData() clipboard.clear(); filtersClipboard.clear(); - copyFilter = nullptr; auto cb = [](void *, obs_source_t *source) { obs_source_remove(source); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index b291a31c7..03c660108 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -245,7 +245,6 @@ private: ContextBarSize contextBarSize = ContextBarSize_Normal; std::deque clipboard; - std::vector filtersClipboard; bool copyVisible = true; obs_transform_info copiedTransformInfo; obs_sceneitem_crop copiedCropInfo; @@ -807,8 +806,6 @@ private slots: void on_actionPasteFilters_triggered(); void AudioMixerCopyFilters(); void AudioMixerPasteFilters(); - void SourceCopyFilters(OBSSource source); - void SourcePasteFilters(OBSSource dstSource); void ColorChange(); @@ -1016,7 +1013,9 @@ public: QIcon GetGroupIcon() const; QIcon GetSceneIcon() const; - OBSWeakSource copyFilter; + std::vector filtersClipboard; + void SourceCopyFilters(OBSSource source); + void SourcePasteFilters(OBSSource dstSource); void ShowStatusBarMessage(const QString &message);