Fix T56331: Undo crash w/ sculpt on hidden layer
authorCampbell Barton <ideasman42@gmail.com>
Mon, 3 Dec 2018 06:42:26 +0000 (17:42 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 3 Dec 2018 06:42:26 +0000 (17:42 +1100)
source/blender/editors/object/object_modes.c
source/blender/editors/sculpt_paint/sculpt.c
source/blender/editors/sculpt_paint/sculpt_undo.c

index d70a69e30f8dce1dbaa99bf073874b48153906cf..04d6ad641edf196eb3775f0329d69ac5518a264a 100644 (file)
@@ -150,7 +150,8 @@ void ED_object_mode_set(bContext *C, eObjectMode mode)
        WM_operator_name_call_ptr(C, ot, WM_OP_EXEC_DEFAULT, &ptr);
        WM_operator_properties_free(&ptr);
 #else
-       Object *ob = CTX_data_active_object(C);
+       Scene *scene = CTX_data_scene(C);
+       Object *ob = OBACT;
        if (ob == NULL) {
                return;
        }
index 80e9aef4a40b5cf96a4bcfbf9bc8a874789791c5..309a7aa21023cd6f0484e3735443608a9826e296 100644 (file)
@@ -5789,7 +5789,7 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
-       Object *ob = CTX_data_active_object(C);
+       Object *ob = OBACT;
        const int mode_flag = OB_MODE_SCULPT;
        const bool is_mode_set = (ob->mode & mode_flag) != 0;
 
index 62e548f661cb97bb0f127ce98ad34a96acf81936..aab3e009a9db223f5ab5999b65929e96658e68cb 100644 (file)
@@ -138,8 +138,8 @@ static bool sculpt_undo_restore_deformed(
 static bool sculpt_undo_restore_coords(bContext *C, DerivedMesh *dm, SculptUndoNode *unode)
 {
        Scene *scene = CTX_data_scene(C);
-       Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
-       Object *ob = CTX_data_active_object(C);
+       Object *ob = OBACT;
+       Sculpt *sd = scene->toolsettings->sculpt;
        SculptSession *ss = ob->sculpt;
        MVert *mvert;
        int *index;
@@ -254,7 +254,8 @@ static bool sculpt_undo_restore_hidden(
         bContext *C, DerivedMesh *dm,
         SculptUndoNode *unode)
 {
-       Object *ob = CTX_data_active_object(C);
+       Scene *scene = CTX_data_scene(C);
+       Object *ob = OBACT;
        SculptSession *ss = ob->sculpt;
        int i;
 
@@ -286,7 +287,8 @@ static bool sculpt_undo_restore_hidden(
 
 static bool sculpt_undo_restore_mask(bContext *C, DerivedMesh *dm, SculptUndoNode *unode)
 {
-       Object *ob = CTX_data_active_object(C);
+       Scene *scene = CTX_data_scene(C);
+       Object *ob = OBACT;
        SculptSession *ss = ob->sculpt;
        MVert *mvert;
        float *vmask;
@@ -471,7 +473,7 @@ static void sculpt_undo_restore_list(bContext *C, ListBase *lb)
 {
        Scene *scene = CTX_data_scene(C);
        Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
-       Object *ob = CTX_data_active_object(C);
+       Object *ob = OBACT;
        DerivedMesh *dm;
        SculptSession *ss = ob->sculpt;
        SculptUndoNode *unode;
@@ -637,7 +639,8 @@ static void sculpt_undo_free_list(ListBase *lb)
 #if 0
 static bool sculpt_undo_cleanup(bContext *C, ListBase *lb)
 {
-       Object *ob = CTX_data_active_object(C);
+       Scene *scene = CTX_data_scene(C);
+       Object *ob = OBACT;
        SculptUndoNode *unode;
 
        unode = lb->first;
@@ -1015,7 +1018,8 @@ static bool sculpt_undosys_poll(bContext *C)
 {
        ScrArea *sa = CTX_wm_area(C);
        if (sa && (sa->spacetype == SPACE_VIEW3D)) {
-               Object *obact = CTX_data_active_object(C);
+               Scene *scene = CTX_data_scene(C);
+               Object *obact = OBACT;
                if (obact && (obact->mode & OB_MODE_SCULPT)) {
                        return true;
                }