@@ -779,7 +779,6 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
779779{
780780 OBSSource scene = GetCurrentSceneSource ();
781781 QMenu *menu = new QMenu (QTStr (" TransitionOverride" ));
782- QAction *action;
783782
784783 OBSDataAutoRelease data = obs_source_get_private_settings (scene);
785784
@@ -796,23 +795,24 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
796795 duration->setValue (curDuration);
797796
798797 auto setTransition = [this ](QAction *action) {
799- int idx = action->property (" transition_index " ).toInt ();
798+ std::string uuid = action->property (" transition_uuid " ).toString (). toStdString ();
800799 OBSSource scene = GetCurrentSceneSource ();
801800 OBSDataAutoRelease data = obs_source_get_private_settings (scene);
802- auto transitionIter = transitions.find (transitionUuids[idx]);
801+ auto transitionIter = transitions.find (uuid);
802+ OBSSource transition;
803803
804- if (idx == - 1 ) {
804+ if (uuid. empty () ) {
805805 obs_data_set_string (data, " transition" , " " );
806806 return ;
807807 }
808808
809809 if (transitionIter == transitions.end ())
810810 return ;
811811
812- OBSSource tr = transitionIter->second ;
812+ transition = transitionIter->second ;
813813
814- if (tr ) {
815- const char *name = obs_source_get_name (tr );
814+ if (transition ) {
815+ const char *name = obs_source_get_name (transition );
816816 obs_data_set_string (data, " transition" , name);
817817 }
818818 };
@@ -826,20 +826,15 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
826826
827827 connect (duration, (void (QSpinBox::*)(int )) & QSpinBox::valueChanged, setDuration);
828828
829- for ( int i = - 1 ; i < ( int )transitionUuids. size (); i++ ) {
829+ auto addAction = [&]( const std::string &uuid = " " ) {
830830 const char *name = " " ;
831+ QAction *action;
831832
832- if (i >= 0 ) {
833- auto transitionIter = transitions.find (transitionUuids[i]);
834- OBSSource tr;
835-
836- if (transitionIter == transitions.end ())
837- continue ;
838-
839- tr = transitionIter->second ;
840- if (!tr)
841- continue ;
842- name = obs_source_get_name (tr);
833+ if (!uuid.empty ()) {
834+ auto transition = transitions.find (uuid);
835+ if (transition == transitions.end ())
836+ return ;
837+ name = obs_source_get_name (transition->second );
843838 }
844839
845840 bool match = (name && strcmp (name, curTransition) == 0 );
@@ -848,12 +843,16 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
848843 name = Str (" None" );
849844
850845 action = menu->addAction (QT_UTF8 (name));
851- action->setProperty (" transition_index " , i );
846+ action->setProperty (" transition_uuid " , QString::fromStdString (uuid) );
852847 action->setCheckable (true );
853848 action->setChecked (match);
854849
855850 connect (action, &QAction::triggered, std::bind (setTransition, action));
856- }
851+ };
852+
853+ addAction ();
854+ for (const auto &[uuid, transition] : transitions)
855+ addAction (uuid);
857856
858857 QWidgetAction *durationAction = new QWidgetAction (menu);
859858 durationAction->setDefaultWidget (duration);
@@ -1059,7 +1058,6 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10591058{
10601059 QMenu *menu = new QMenu (parent);
10611060 QAction *action;
1062- OBSSource tr;
10631061
10641062 if (qt) {
10651063 action = menu->addAction (QTStr (" Remove" ));
@@ -1083,8 +1081,6 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10831081 &OBSBasic::QuickTransitionChangeDuration);
10841082 }
10851083
1086- tr = fadeTransition;
1087-
10881084 action = menu->addAction (QTStr (" FadeToBlack" ));
10891085 action->setProperty (" fadeToBlack" , true );
10901086
@@ -1096,19 +1092,12 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10961092 connect (action, &QAction::triggered, this , &OBSBasic::AddQuickTransition);
10971093 }
10981094
1099- for (int i = 0 ; i < (int )transitionUuids.size (); i++) {
1100- auto transitionIter = transitions.find (transitionUuids[i]);
1101-
1102- if (transitionIter == transitions.end ())
1103- continue ;
1104-
1105- tr = transitionIter->second ;
1106-
1107- if (!tr)
1095+ for (const auto &[uuid, transition] : transitions) {
1096+ if (!transition)
11081097 continue ;
11091098
1110- action = menu->addAction (obs_source_get_name (tr ));
1111- action->setProperty (" transition_index " , i );
1099+ action = menu->addAction (obs_source_get_name (transition ));
1100+ action->setProperty (" transition_uuid " , QString::fromStdString (uuid) );
11121101
11131102 if (qt) {
11141103 action->setProperty (" id" , qt->id );
@@ -1168,10 +1157,10 @@ void OBSBasic::AddQuickTransitionId(int id)
11681157
11691158void OBSBasic::AddQuickTransition ()
11701159{
1171- int trIdx = sender ()->property (" transition_index " ).toInt ();
1160+ std::string transitionUuid = sender ()->property (" transition_uuid " ).toString (). toStdString ();
11721161 QSpinBox *duration = sender ()->property (" duration" ).value <QSpinBox *>();
11731162 bool fadeToBlack = sender ()->property (" fadeToBlack" ).value <bool >();
1174- auto transitionIter = transitions.find (transitionUuids[trIdx] );
1163+ auto transitionIter = transitions.find (transitionUuid );
11751164 OBSSource transition;
11761165
11771166 if (!fadeToBlack && (transitionIter == transitions.end ()))
@@ -1228,12 +1217,12 @@ void OBSBasic::QuickTransitionClicked()
12281217void OBSBasic::QuickTransitionChange ()
12291218{
12301219 int id = sender ()->property (" id" ).toInt ();
1231- int trIdx = sender ()->property (" transition_index " ).toInt ();
1220+ std::string transitionUuid = sender ()->property (" transition_uuid " ).toString (). toStdString ();
12321221 bool fadeToBlack = sender ()->property (" fadeToBlack" ).value <bool >();
12331222 QuickTransition *qt = GetQuickTransition (id);
12341223
12351224 if (qt) {
1236- auto transitionIter = transitions.find (transitionUuids[trIdx] );
1225+ auto transitionIter = transitions.find (transitionUuid );
12371226 OBSSource tr;
12381227
12391228 if (!fadeToBlack && (transitionIter == transitions.end ()))
0 commit comments