diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 03b8fbdde..176d6bba7 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -392,6 +392,9 @@ void OBSBasic::AddTransition() if (api) api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED); + + ClearQuickTransitionWidgets(); + RefreshQuickTransitions(); } } @@ -445,6 +448,9 @@ void OBSBasic::on_transitionRemove_clicked() if (api) api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED); + + ClearQuickTransitionWidgets(); + RefreshQuickTransitions(); } void OBSBasic::RenameTransition() @@ -483,8 +489,11 @@ void OBSBasic::RenameTransition() obs_source_set_name(transition, name.c_str()); int idx = ui->transitions->findData(variant); - if (idx != -1) + if (idx != -1) { ui->transitions->setItemText(idx, QT_UTF8(name.c_str())); + ClearQuickTransitionWidgets(); + RefreshQuickTransitions(); + } } } @@ -919,6 +928,31 @@ void OBSBasic::QuickTransitionRemoveClicked() quickTransitions.erase(quickTransitions.begin() + idx); } +void OBSBasic::ClearQuickTransitionWidgets() +{ + if (!IsPreviewProgramMode()) + return; + + QVBoxLayout *programLayout = + reinterpret_cast(programOptions->layout()); + + for (int idx = 0;; idx++) { + QLayoutItem *item = programLayout->itemAt(idx); + if (!item) + break; + + QWidget *widget = item->widget(); + if (!widget) + continue; + + int id = widget->property("id").toInt(); + if (id != 0) { + delete widget; + idx--; + } + } +} + void OBSBasic::RefreshQuickTransitions() { if (!IsPreviewProgramMode()) diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 98adda36e..582f47c2b 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -282,6 +282,7 @@ private: void RemoveQuickTransitionHotkey(QuickTransition *qt); void LoadQuickTransitions(obs_data_array_t *array); obs_data_array_t *SaveQuickTransitions(); + void ClearQuickTransitionWidgets(); void RefreshQuickTransitions(); void CreateDefaultQuickTransitions();