Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/undo/ed_undo.c
| Context not available. | |||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_layer.h" | #include "BKE_layer.h" | ||||
| #include "BKE_undo_system.h" | #include "BKE_undo_system.h" | ||||
| #include "BKE_workspace.h" | |||||
| #include "BKE_paint.h" | |||||
| #include "ED_gpencil.h" | #include "ED_gpencil.h" | ||||
| #include "ED_render.h" | #include "ED_render.h" | ||||
| #include "ED_object.h" | |||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "ED_undo.h" | #include "ED_undo.h" | ||||
| Context not available. | |||||
| wmWindow *win = CTX_wm_window(C); | wmWindow *win = CTX_wm_window(C); | ||||
| // Main *bmain = CTX_data_main(C); | // Main *bmain = CTX_data_main(C); | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| ScrArea *sa = CTX_wm_area(C); | |||||
| /* undo during jobs are running can easily lead to freeing data using by jobs, | /* undo during jobs are running can easily lead to freeing data using by jobs, | ||||
| * or they can just lead to freezing job in some other cases */ | * or they can just lead to freezing job in some other cases */ | ||||
| Context not available. | |||||
| if (ED_gpencil_session_active()) { | if (ED_gpencil_session_active()) { | ||||
| return ED_undo_gpencil_step(C, step, undoname); | return ED_undo_gpencil_step(C, step, undoname); | ||||
| } | } | ||||
| if (sa && (sa->spacetype == SPACE_VIEW3D)) { | |||||
| Object *obact = CTX_data_active_object(C); | |||||
| if (obact && (obact->type == OB_GPENCIL)) { | |||||
| ED_gpencil_toggle_brush_cursor(C, false, NULL); | |||||
| } | |||||
| } | |||||
| /* Undo System */ | /* Undo System */ | ||||
| { | { | ||||
| Context not available. | |||||
| else { | else { | ||||
| BKE_undosys_step_undo_compat_only(wm->undo_stack, C, step); | BKE_undosys_step_undo_compat_only(wm->undo_stack, C, step); | ||||
| } | } | ||||
| /* Set special modes for grease pencil */ | |||||
| if (sa && (sa->spacetype == SPACE_VIEW3D)) { | |||||
| Object *obact = CTX_data_active_object(C); | |||||
| if (obact && (obact->type == OB_GPENCIL)) { | |||||
| /* set cursor */ | |||||
| if (ELEM(obact->mode, OB_MODE_GPENCIL_PAINT, OB_MODE_GPENCIL_SCULPT, OB_MODE_GPENCIL_WEIGHT)) { | |||||
| ED_gpencil_toggle_brush_cursor(C, true, NULL); | |||||
| } | |||||
| else { | |||||
| ED_gpencil_toggle_brush_cursor(C, false, NULL); | |||||
| } | |||||
| /* set workspace mode */ | |||||
| Base *basact = CTX_data_active_base(C); | |||||
| ED_object_base_activate(C, basact); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| WM_event_add_notifier(C, NC_WINDOW, NULL); | WM_event_add_notifier(C, NC_WINDOW, NULL); | ||||
| WM_event_add_notifier(C, NC_WM | ND_UNDO, NULL); | WM_event_add_notifier(C, NC_WM | ND_UNDO, NULL); | ||||
| if (win) { | if (win) { | ||||
| win->addmousemove = true; | win->addmousemove = true; | ||||
| } | } | ||||
| Context not available. | |||||