obs-studio
obs-studio copied to clipboard
Scene transitions are grayed out when scene collection is changed
Operating System Info
Windows 10
Other OS
No response
OBS Studio Version
28.0.0
OBS Studio Version (Other)
28.0.1
OBS Studio Log URL
https://obsproject.com/logs/jf8KR4FuHCoRqgss
OBS Studio Crash Log URL
No response
Expected Behavior
Scene transitions can be changed even after changing the scene collection.
Current Behavior
Scene transitions are grayed out.
Steps to Reproduce
- change the scene collection
- Scene transitions are grayed out
28.0-rc2
https://user-images.githubusercontent.com/1337354/188270494-c5e9a288-cf17-4477-9433-92f0c6cf3a54.mp4
28.0.1
https://user-images.githubusercontent.com/1337354/188270496-55ec9e91-32fa-4531-86ee-e62e8ae044e9.mp4
Anything else we should know?
It does not occur until 28.0 rc2. Changing the scene cures the gray out. (It will be grayed out only when changing scene collections.)
Replicated on linux.
I also reproduced the bug and investigated it using Visual Studio's debugger. I found that the following pull request produces this bug. https://github.com/obsproject/obs-studio/pull/7200/
This might be a complicated bug, so I cannot fix this bug... I left my investigation notes. I hope it will help!
Investigation notes
After this pull request merged, changing the scene collection became invoking the scene transition.
i.e. OBSBasic::SetCurrentScene()
is called.
And when this function is called, OBSBasic::EnableTransitionWidgets(false)
is called,
which disables the scene transition combo box.
And when this occurs, there is no path to re-enable the scene transition combo box.
Here is the stack trace:
obs64.exe!OBSBasic::EnableTransitionWidgets(bool enable) line 1549 C++
obs64.exe!OBSBasic::TransitionToScene(OBSSafeRef<obs_source *,&obs_source_get_ref,&obs_source_release> source, bool force, bool quickTransition, int quickDuration, bool black, bool manual) line 387 C++
obs64.exe!OBSBasic::SetCurrentScene(OBSSafeRef<obs_source *,&obs_source_get_ref,&obs_source_release> scene, bool force) line 676 C++
obs64.exe!OBSBasic::on_scenes_currentItemChanged(QListWidgetItem * current, QListWidgetItem * prev) line 5025 C++
The observation is correct - the change introduced by that commit forces a scene item to be selected even though we purposefully clear the selection before importing the new scene selection.
This leads to a forced scene transition twice, which starts a transition (disabling the transition dock), but as no actual transition takes place, the dock is not activated again until users interact with the scene setup.