Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <eiseljulian@gmail.com>2017-10-06 19:01:40 +0300
committerJulian Eisel <eiseljulian@gmail.com>2017-10-06 19:02:15 +0300
commitb0ecd2eaaabf89dd749e9500a7a1ff4900065d45 (patch)
treec7c34e4b434136ac7c8e0685c8dec1668600cec3
parent5ec270c20c83e0e0fd8a0d10be8235b905bf8fd8 (diff)
Fix crash when deleting workspace active in multiple windows
-rw-r--r--source/blender/editors/include/ED_screen.h2
-rw-r--r--source/blender/editors/screen/workspace_edit.c6
2 files changed, 4 insertions, 4 deletions
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;
}