Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/undo/ed_undo.c
| Show First 20 Lines • Show All 585 Lines • ▼ Show 20 Lines | if ((WM_operator_repeat_check(C, op)) && (WM_operator_poll(C, op->type)) && | ||||
| /* note, undo/redo cant run if there are jobs active, | /* note, undo/redo cant run if there are jobs active, | ||||
| * check for screen jobs only so jobs like material/texture/world preview | * check for screen jobs only so jobs like material/texture/world preview | ||||
| * (which copy their data), wont stop redo, see [#29579]], | * (which copy their data), wont stop redo, see [#29579]], | ||||
| * | * | ||||
| * note, - WM_operator_check_ui_enabled() jobs test _must_ stay in sync with this */ | * note, - WM_operator_check_ui_enabled() jobs test _must_ stay in sync with this */ | ||||
| (WM_jobs_test(wm, scene, WM_JOB_TYPE_ANY) == 0)) { | (WM_jobs_test(wm, scene, WM_JOB_TYPE_ANY) == 0)) { | ||||
| int retval; | int retval; | ||||
| if (G.debug & G_DEBUG) { | CLOG_VERBOSE(&LOG, 1, "redo_cb: operator redo %s", op->type->name); | ||||
| printf("redo_cb: operator redo %s\n", op->type->name); | |||||
| } | |||||
| WM_operator_free_all_after(wm, op); | WM_operator_free_all_after(wm, op); | ||||
| ED_undo_pop_op(C, op); | ED_undo_pop_op(C, op); | ||||
| if (op->type->check) { | if (op->type->check) { | ||||
| if (op->type->check(C, op)) { | if (op->type->check(C, op)) { | ||||
| /* check for popup and re-layout buttons */ | /* check for popup and re-layout buttons */ | ||||
| ARegion *region_menu = CTX_wm_menu(C); | ARegion *region_menu = CTX_wm_menu(C); | ||||
| if (region_menu) { | if (region_menu) { | ||||
| ED_region_tag_refresh_ui(region_menu); | ED_region_tag_refresh_ui(region_menu); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| retval = WM_operator_repeat(C, op); | retval = WM_operator_repeat(C, op); | ||||
| if ((retval & OPERATOR_FINISHED) == 0) { | if ((retval & OPERATOR_FINISHED) == 0) { | ||||
| if (G.debug & G_DEBUG) { | CLOG_VERBOSE( | ||||
| printf("redo_cb: operator redo failed: %s, return %d\n", op->type->name, retval); | &LOG, 1, "redo_cb: operator redo failed: %s, return %d", op->type->name, retval); | ||||
| } | |||||
| ED_undo_redo(C); | ED_undo_redo(C); | ||||
| } | } | ||||
| else { | else { | ||||
| ret = 1; | ret = 1; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| if (G.debug & G_DEBUG) { | CLOG_VERBOSE(&LOG, 1, "redo_cb: WM_operator_repeat_check returned false %s", op->type->name); | ||||
| printf("redo_cb: WM_operator_repeat_check returned false %s\n", op->type->name); | |||||
| } | |||||
| } | } | ||||
| /* set region back */ | /* set region back */ | ||||
| CTX_wm_region_set(C, region_orig); | CTX_wm_region_set(C, region_orig); | ||||
| } | } | ||||
| else { | else { | ||||
| CLOG_WARN(&LOG, "called with NULL 'op'"); | CLOG_WARN(&LOG, "called with NULL 'op'"); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 285 Lines • Show Last 20 Lines | |||||