[Bf-blender-cvs] [b0ecd2eaaab] blender2.8: Fix crash when deleting workspace active in multiple windows

Julian Eisel noreply at git.blender.org
Fri Oct 6 18:06:36 CEST 2017


Commit: b0ecd2eaaabf89dd749e9500a7a1ff4900065d45
Author: Julian Eisel
Date:   Fri Oct 6 18:01:40 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBb0ecd2eaaabf89dd749e9500a7a1ff4900065d45

Fix crash when deleting workspace active in multiple windows

===================================================================

M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/screen/workspace_edit.c

===================================================================

diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 524ee01c30f..7ebf0e921ac 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -140,7 +140,7 @@ struct WorkSpace *ED_workspace_duplicate(
 bool ED_workspace_delete(
         struct WorkSpace *workspace,
         struct Main *bmain, struct bContext *C,
-        struct wmWindowManager *wm, struct wmWindow *win) ATTR_NONNULL();
+        struct wmWindowManager *wm) ATTR_NONNULL();
 void ED_workspace_scene_data_sync(
         struct WorkSpaceInstanceHook *hook, Scene *scene) ATTR_NONNULL();
 void ED_workspace_render_layer_unset(
diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c
index 34def82f16e..00a965beae7 100644
--- a/source/blender/editors/screen/workspace_edit.c
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -239,7 +239,7 @@ WorkSpace *ED_workspace_duplicate(
  * \return if succeeded.
  */
 bool ED_workspace_delete(
-        WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm, wmWindow *win)
+        WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm)
 {
 	ID *workspace_id = (ID *)workspace;
 
@@ -247,7 +247,7 @@ bool ED_workspace_delete(
 		return false;
 	}
 
-	if (WM_window_get_active_workspace(win) == workspace) {
+	for (wmWindow *win = wm->windows.first; win; win = win->next) {
 		WorkSpace *prev = workspace_id->prev;
 		WorkSpace *next = workspace_id->next;
 
@@ -315,7 +315,7 @@ static int workspace_delete_exec(bContext *C, wmOperator *UNUSED(op))
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win = CTX_wm_window(C);
 
-	ED_workspace_delete(WM_window_get_active_workspace(win), bmain, C, wm, win);
+	ED_workspace_delete(WM_window_get_active_workspace(win), bmain, C, wm);
 
 	return OPERATOR_FINISHED;
 }



More information about the Bf-blender-cvs mailing list