Fix crash when deleting workspace active in multiple windows
This commit is contained in:
@@ -140,7 +140,7 @@ struct WorkSpace *ED_workspace_duplicate(
|
|||||||
bool ED_workspace_delete(
|
bool ED_workspace_delete(
|
||||||
struct WorkSpace *workspace,
|
struct WorkSpace *workspace,
|
||||||
struct Main *bmain, struct bContext *C,
|
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(
|
void ED_workspace_scene_data_sync(
|
||||||
struct WorkSpaceInstanceHook *hook, Scene *scene) ATTR_NONNULL();
|
struct WorkSpaceInstanceHook *hook, Scene *scene) ATTR_NONNULL();
|
||||||
void ED_workspace_render_layer_unset(
|
void ED_workspace_render_layer_unset(
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ WorkSpace *ED_workspace_duplicate(
|
|||||||
* \return if succeeded.
|
* \return if succeeded.
|
||||||
*/
|
*/
|
||||||
bool ED_workspace_delete(
|
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;
|
ID *workspace_id = (ID *)workspace;
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ bool ED_workspace_delete(
|
|||||||
return false;
|
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 *prev = workspace_id->prev;
|
||||||
WorkSpace *next = workspace_id->next;
|
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);
|
wmWindowManager *wm = CTX_wm_manager(C);
|
||||||
wmWindow *win = CTX_wm_window(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;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user