Fix T60350: Removed objects that are still in the outliner will crash Blender.
We need to force UI to fully redraw, BKE_id_delete & co won't do that for us.
This commit is contained in:
@@ -118,6 +118,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "WM_api.h"
|
#include "WM_api.h"
|
||||||
|
#include "WM_types.h"
|
||||||
|
|
||||||
|
|
||||||
static void rna_idname_validate(const char *name, char *r_name)
|
static void rna_idname_validate(const char *name, char *r_name)
|
||||||
@@ -135,6 +136,8 @@ static void rna_Main_ID_remove(
|
|||||||
if (do_unlink) {
|
if (do_unlink) {
|
||||||
BKE_id_delete(bmain, id);
|
BKE_id_delete(bmain, id);
|
||||||
RNA_POINTER_INVALIDATE(id_ptr);
|
RNA_POINTER_INVALIDATE(id_ptr);
|
||||||
|
/* Force full redraw, mandatory to avoid crashes when running this from UI... */
|
||||||
|
WM_main_add_notifier(NC_WINDOW, NULL);
|
||||||
}
|
}
|
||||||
else if (ID_REAL_USERS(id) <= 0) {
|
else if (ID_REAL_USERS(id) <= 0) {
|
||||||
const int flag = (do_id_user ? 0 : LIB_ID_FREE_NO_USER_REFCOUNT) |
|
const int flag = (do_id_user ? 0 : LIB_ID_FREE_NO_USER_REFCOUNT) |
|
||||||
|
|||||||
@@ -44,6 +44,9 @@
|
|||||||
#include "DNA_object_types.h"
|
#include "DNA_object_types.h"
|
||||||
#include "DNA_key_types.h"
|
#include "DNA_key_types.h"
|
||||||
|
|
||||||
|
#include "WM_api.h"
|
||||||
|
#include "WM_types.h"
|
||||||
|
|
||||||
#include "bpy_capi_utils.h"
|
#include "bpy_capi_utils.h"
|
||||||
#include "bpy_rna_id_collection.h"
|
#include "bpy_rna_id_collection.h"
|
||||||
|
|
||||||
@@ -351,6 +354,8 @@ static PyObject *bpy_batch_remove(PyObject *UNUSED(self), PyObject *args, PyObje
|
|||||||
Py_DECREF(ids_fast);
|
Py_DECREF(ids_fast);
|
||||||
|
|
||||||
BKE_id_multi_tagged_delete(bmain);
|
BKE_id_multi_tagged_delete(bmain);
|
||||||
|
/* Force full redraw, mandatory to avoid crashes when running this from UI... */
|
||||||
|
WM_main_add_notifier(NC_WINDOW, NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
goto error;
|
goto error;
|
||||||
|
|||||||
Reference in New Issue
Block a user