Fix #145206: Outliner not using the sequencer scene to show strips

The outliner was still using the active scene to show the sequencer
strips in the VSE mode.

This adds the workspace to the `TreeSourceData` so that
the `TreeDisplaySequencer` can read the sequencer
scene.

Note that more places need to be fixed to make this mode
work correctly again.

Pull Request: https://projects.blender.org/blender/blender/pulls/145247
This commit is contained in:
Falk David
2025-08-29 10:38:11 +02:00
committed by Falk David
parent 38b13f7aa8
commit 1fe5096101
6 changed files with 19 additions and 6 deletions

View File

@@ -242,6 +242,7 @@ static TreeTraversalAction collection_find_selected_to_add(TreeElement *te, void
static wmOperatorStatus collection_new_exec(bContext *C, wmOperator *op)
{
WorkSpace *workspace = CTX_wm_workspace(C);
SpaceOutliner *space_outliner = CTX_wm_space_outliner(C);
ARegion *region = CTX_wm_region(C);
Main *bmain = CTX_data_main(C);
@@ -251,7 +252,7 @@ static wmOperatorStatus collection_new_exec(bContext *C, wmOperator *op)
CollectionNewData data{};
if (RNA_boolean_get(op->ptr, "nested")) {
outliner_build_tree(bmain, scene, view_layer, space_outliner, region);
outliner_build_tree(bmain, workspace, scene, view_layer, space_outliner, region);
outliner_tree_traverse(space_outliner,
&space_outliner->tree,

View File

@@ -4014,6 +4014,7 @@ static void outliner_update_viewable_area(ARegion *region,
void draw_outliner(const bContext *C, bool do_rebuild)
{
Main *mainvar = CTX_data_main(C);
WorkSpace *workspace = CTX_wm_workspace(C);
ARegion *region = CTX_wm_region(C);
View2D *v2d = &region->v2d;
SpaceOutliner *space_outliner = CTX_wm_space_outliner(C);
@@ -4032,7 +4033,8 @@ void draw_outliner(const bContext *C, bool do_rebuild)
* See `USE_OUTLINER_DRAW_CLAMPS_SCROLL_HACK` & #128346 for a full description. */
if (do_rebuild) {
outliner_build_tree(mainvar, tvc.scene, tvc.view_layer, space_outliner, region); /* Always. */
outliner_build_tree(
mainvar, workspace, tvc.scene, tvc.view_layer, space_outliner, region); /* Always. */
/* If global sync select is dirty, flag other outliners. */
if (ED_outliner_select_sync_is_dirty(C)) {

View File

@@ -38,6 +38,7 @@ struct bPoseChannel;
struct View2D;
struct wmKeyConfig;
struct wmOperatorType;
struct WorkSpace;
namespace blender::bke::outliner::treehash {
class TreeHash;
@@ -275,6 +276,7 @@ void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree);
* Main entry point for building the tree data-structure that the outliner represents.
*/
void outliner_build_tree(Main *mainvar,
WorkSpace *workspace,
Scene *scene,
ViewLayer *view_layer,
SpaceOutliner *space_outliner,

View File

@@ -1145,6 +1145,7 @@ static void outliner_clear_newid_from_main(Main *bmain)
* \{ */
void outliner_build_tree(Main *mainvar,
WorkSpace *workspace,
Scene *scene,
ViewLayer *view_layer,
SpaceOutliner *space_outliner,
@@ -1192,7 +1193,7 @@ void outliner_build_tree(Main *mainvar,
/* All tree displays should be created as sub-classes of AbstractTreeDisplay. */
BLI_assert(space_outliner->runtime->tree_display != nullptr);
TreeSourceData source_data{*mainvar, *scene, *view_layer};
TreeSourceData source_data{*mainvar, *workspace, *scene, *view_layer};
space_outliner->tree = space_outliner->runtime->tree_display->build_tree(source_data);
if ((space_outliner->flag & SO_SKIP_SORT_ALPHA) == 0) {

View File

@@ -34,6 +34,7 @@ struct Scene;
struct Strip;
struct SpaceOutliner;
struct ViewLayer;
struct WorkSpace;
namespace blender::ed::outliner {
@@ -45,11 +46,12 @@ class TreeElementID;
*/
struct TreeSourceData {
Main *bmain;
WorkSpace *workspace;
Scene *scene;
ViewLayer *view_layer;
TreeSourceData(Main &bmain, Scene &scene, ViewLayer &view_layer)
: bmain(&bmain), scene(&scene), view_layer(&view_layer)
TreeSourceData(Main &bmain, WorkSpace &workspace, Scene &scene, ViewLayer &view_layer)
: bmain(&bmain), workspace(&workspace), scene(&scene), view_layer(&view_layer)
{
}
};

View File

@@ -13,6 +13,7 @@
#include "DNA_sequence_types.h"
#include "DNA_space_types.h"
#include "DNA_workspace_types.h"
#include "SEQ_sequencer.hh"
@@ -31,8 +32,12 @@ TreeDisplaySequencer::TreeDisplaySequencer(SpaceOutliner &space_outliner)
ListBase TreeDisplaySequencer::build_tree(const TreeSourceData &source_data)
{
ListBase tree = {nullptr};
Scene *sequencer_scene = source_data.workspace->sequencer_scene;
if (!sequencer_scene) {
return tree;
}
Editing *ed = seq::editing_get(source_data.scene);
Editing *ed = seq::editing_get(sequencer_scene);
if (ed == nullptr) {
return tree;
}