From 518bdc7af17b7f18f6b4e8d1180fa9cf6c66ea45 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 11 Aug 2023 17:38:19 +0200 Subject: [PATCH] UI: Fix transform shortcuts with multiple items selected Firstly, removes the UpdateTransformShortcuts() method introduced in c33fa8b which was trying to re-implement the behavior of UpdateEditMenu(). Secondly, updates UpdateEditMenu() to account for sources without video. Sources without video shouldn't be able to have their transform edited, copied, pasted, or changed in any other way (because they don't have one). --- UI/window-basic-main.cpp | 86 ++++++++++++++++++---------------------- UI/window-basic-main.hpp | 2 - 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index ebd8f1903..a7579654c 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3395,28 +3395,9 @@ void OBSBasic::SourceToolBarActionsSetEnabled() RefreshToolBarStyling(ui->sourcesToolbar); } -void OBSBasic::UpdateTransformShortcuts() -{ - bool hasVideo = false; - - OBSSource source = obs_sceneitem_get_source(GetCurrentSceneItem()); - - if (source) { - uint32_t flags = obs_source_get_output_flags(source); - hasVideo = (flags & OBS_SOURCE_VIDEO) != 0; - } - - ui->actionEditTransform->setEnabled(hasVideo); - ui->actionCopyTransform->setEnabled(hasVideo); - ui->actionPasteTransform->setEnabled(hasVideo ? hasCopiedTransform - : false); - ui->actionResetTransform->setEnabled(hasVideo); -} - void OBSBasic::UpdateContextBar(bool force) { SourceToolBarActionsSetEnabled(); - UpdateTransformShortcuts(); if (!ui->contextContainer->isVisible() && !force) return; @@ -8541,10 +8522,10 @@ void OBSBasic::DeleteYouTubeAppDock() void OBSBasic::UpdateEditMenu() { QModelIndexList items = GetAllSelectedSourceItems(); - int count = items.count(); + int totalCount = items.count(); size_t filter_count = 0; - if (count == 1) { + if (totalCount == 1) { OBSSceneItem sceneItem = ui->sources->Get(GetTopSelectedSourceItem()); OBSSource source = obs_sceneitem_get_source(sceneItem); @@ -8567,39 +8548,48 @@ void OBSBasic::UpdateEditMenu() allowPastingDuplicate = false; } - ui->actionCopySource->setEnabled(count > 0); - ui->actionEditTransform->setEnabled(count == 1); - ui->actionCopyTransform->setEnabled(count == 1); - ui->actionPasteTransform->setEnabled(hasCopiedTransform && count > 0); + int videoCount = 0; + bool canTransformMultiple = false; + for (int i = 0; i < totalCount; i++) { + OBSSceneItem item = ui->sources->Get(items.value(i).row()); + OBSSource source = obs_sceneitem_get_source(item); + const uint32_t flags = obs_source_get_output_flags(source); + const bool hasVideo = (flags & OBS_SOURCE_VIDEO) != 0; + if (hasVideo && !obs_sceneitem_locked(item)) + canTransformMultiple = true; + + if (hasVideo) + videoCount++; + } + const bool canTransformSingle = videoCount == 1 && totalCount == 1; + + ui->actionCopySource->setEnabled(totalCount > 0); + ui->actionEditTransform->setEnabled(canTransformSingle); + ui->actionCopyTransform->setEnabled(canTransformSingle); + ui->actionPasteTransform->setEnabled(hasCopiedTransform && + videoCount > 0); ui->actionCopyFilters->setEnabled(filter_count > 0); ui->actionPasteFilters->setEnabled( - !obs_weak_source_expired(copyFiltersSource) && count > 0); + !obs_weak_source_expired(copyFiltersSource) && totalCount > 0); ui->actionPasteRef->setEnabled(!!clipboard.size()); ui->actionPasteDup->setEnabled(allowPastingDuplicate); - ui->actionMoveUp->setEnabled(count > 0); - ui->actionMoveDown->setEnabled(count > 0); - ui->actionMoveToTop->setEnabled(count > 0); - ui->actionMoveToBottom->setEnabled(count > 0); + ui->actionMoveUp->setEnabled(totalCount > 0); + ui->actionMoveDown->setEnabled(totalCount > 0); + ui->actionMoveToTop->setEnabled(totalCount > 0); + ui->actionMoveToBottom->setEnabled(totalCount > 0); - bool canTransform = false; - for (int i = 0; i < count; i++) { - OBSSceneItem item = ui->sources->Get(items.value(i).row()); - if (!obs_sceneitem_locked(item)) - canTransform = true; - } - - ui->actionResetTransform->setEnabled(canTransform); - ui->actionRotate90CW->setEnabled(canTransform); - ui->actionRotate90CCW->setEnabled(canTransform); - ui->actionRotate180->setEnabled(canTransform); - ui->actionFlipHorizontal->setEnabled(canTransform); - ui->actionFlipVertical->setEnabled(canTransform); - ui->actionFitToScreen->setEnabled(canTransform); - ui->actionStretchToScreen->setEnabled(canTransform); - ui->actionCenterToScreen->setEnabled(canTransform); - ui->actionVerticalCenter->setEnabled(canTransform); - ui->actionHorizontalCenter->setEnabled(canTransform); + ui->actionResetTransform->setEnabled(canTransformMultiple); + ui->actionRotate90CW->setEnabled(canTransformMultiple); + ui->actionRotate90CCW->setEnabled(canTransformMultiple); + ui->actionRotate180->setEnabled(canTransformMultiple); + ui->actionFlipHorizontal->setEnabled(canTransformMultiple); + ui->actionFlipVertical->setEnabled(canTransformMultiple); + ui->actionFitToScreen->setEnabled(canTransformMultiple); + ui->actionStretchToScreen->setEnabled(canTransformMultiple); + ui->actionCenterToScreen->setEnabled(canTransformMultiple); + ui->actionVerticalCenter->setEnabled(canTransformMultiple); + ui->actionHorizontalCenter->setEnabled(canTransformMultiple); } void OBSBasic::on_actionEditTransform_triggered() diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 6ea2c9542..c09689d96 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -672,8 +672,6 @@ private: bool restartingVCam = false; - void UpdateTransformShortcuts(); - public slots: void DeferSaveBegin(); void DeferSaveEnd();