diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index c6b79309c58e3825a95148ab4b87b52cfcf0944e..98b43cdd7d00059b8c4e1b2edd9035a61c9596df 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -102,11 +102,9 @@ void OBSBasic::InitDefaultTransitions() ui->transitions->blockSignals(false); } -int OBSBasic::AddTransitionBeforeSeparator(const QString &name, - obs_source_t *source) +int OBSBasic::TransitionCount() { - int idx = -1; - + int idx = 0; for (int i = 0; i < ui->transitions->count(); i++) { QVariant v = ui->transitions->itemData(i); if (!v.toString().isEmpty()) { @@ -115,11 +113,21 @@ int OBSBasic::AddTransitionBeforeSeparator(const QString &name, } } + /* should always have at least fade and cut due to them being + * defaults */ + assert(idx != 0); + return idx - 1; /* remove separator from equation */ +} + +int OBSBasic::AddTransitionBeforeSeparator(const QString &name, + obs_source_t *source) +{ + int idx = TransitionCount(); ui->transitions->blockSignals(true); - ui->transitions->insertItem(idx - 1, name, + ui->transitions->insertItem(idx, name, QVariant::fromValue(OBSSource(source))); ui->transitions->blockSignals(false); - return idx - 1; + return idx; } void OBSBasic::AddQuickTransitionHotkey(QuickTransition *qt) @@ -577,7 +585,15 @@ void OBSBasic::on_transitionRemove_clicked() } } + ui->transitions->blockSignals(true); ui->transitions->removeItem(idx); + ui->transitions->setCurrentIndex(-1); + ui->transitions->blockSignals(false); + + int bottomIdx = TransitionCount() - 1; + if (idx > bottomIdx) + idx = bottomIdx; + ui->transitions->setCurrentIndex(idx); if (api) api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 77c987de9908b2dc54ee5099e81903e7109cc8f5..0d8cdc49bec94ac9ef880aafcbec13656ea53217 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -401,6 +401,7 @@ private: void CreateProgramDisplay(); void CreateProgramOptions(); + int TransitionCount(); int AddTransitionBeforeSeparator(const QString &name, obs_source_t *source); void AddQuickTransitionId(int id);