From ba339379fe575b59bb16ccaf37144be417e4f424 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 30 Apr 2018 20:07:32 +0200 Subject: [PATCH] Fix linking brushes crashing on load We need to link brushes for all windows that use a workspace. --- .../windowmanager/intern/wm_toolsystem.c | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c index bf9583e3713..66e84406ebb 100644 --- a/source/blender/windowmanager/intern/wm_toolsystem.c +++ b/source/blender/windowmanager/intern/wm_toolsystem.c @@ -38,6 +38,7 @@ #include "BKE_library.h" #include "BKE_main.h" #include "BKE_paint.h" +#include "BKE_workspace.h" #include "RNA_access.h" @@ -79,13 +80,26 @@ void WM_toolsystem_link(bContext *C, WorkSpace *workspace) if (workspace->tool.manipulator_group[0]) { WM_manipulator_group_type_ensure(workspace->tool.manipulator_group); } + if (workspace->tool.data_block[0]) { + Main *bmain = CTX_data_main(C); + /* Currently only brush data-blocks supported. */ - Paint *paint = BKE_paint_get_active_from_context(C); - if (paint) { - struct Brush *brush = (struct Brush *)BKE_libblock_find_name(ID_BR, workspace->tool.data_block); - if (brush) { - BKE_paint_brush_set(paint, brush); + struct Brush *brush = (struct Brush *)BKE_libblock_find_name(ID_BR, workspace->tool.data_block); + + if (brush) { + wmWindowManager *wm = bmain->wm.first; + for (wmWindow *win = wm->windows.first; win; win = win->next) { + if (workspace == WM_window_get_active_workspace(win)) { + Scene *scene = win->scene; + ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene); + Paint *paint = BKE_paint_get_active(scene, view_layer); + if (paint) { + if (brush) { + BKE_paint_brush_set(paint, brush); + } + } + } } } }