diff options
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.cc | 3 | ||||
-rw-r--r-- | source/blender/editors/util/ed_util.c | 13 |
2 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc index 7b3ce499929..e6098631a68 100644 --- a/source/blender/editors/space_outliner/outliner_tree.cc +++ b/source/blender/editors/space_outliner/outliner_tree.cc @@ -1682,6 +1682,9 @@ void outliner_build_tree(Main *mainvar, space_outliner->storeflag &= ~SO_TREESTORE_REBUILD; if (region->do_draw & RGN_DRAW_NO_REBUILD) { + BLI_assert_msg(space_outliner->runtime->tree_display != nullptr, + "Skipping rebuild before tree was built properly, a full redraw should be " + "triggered instead"); return; } diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index e7b3bce700e..3cfe6bd61a4 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -41,6 +41,7 @@ #include "ED_mesh.h" #include "ED_object.h" #include "ED_paint.h" +#include "ED_screen.h" #include "ED_space_api.h" #include "ED_util.h" @@ -187,6 +188,18 @@ void ED_editors_init(bContext *C) ED_space_image_paint_update(bmain, wm, scene); } + /* Enforce a full redraw for the first time areas/regions get drawn. Further region init/refresh + * just triggers non-rebuild redraws (#RGN_DRAW_NO_REBUILD). Usually a full redraw would be + * triggered by a `NC_WM | ND_FILEREAD` notifier, but if a startup script calls an operator that + * redraws the window, notifiers are not handled before the operator runs. See T98461. */ + LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { + const bScreen *screen = WM_window_get_active_screen(win); + + ED_screen_areas_iter (win, screen, area) { + ED_area_tag_redraw(area); + } + } + ED_assetlist_storage_tag_main_data_dirty(); SWAP(int, reports->flag, reports_flag_prev); |