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:
@@ -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,
|
||||
|
||||
@@ -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 = ®ion->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)) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user