diff options
-rw-r--r-- | source/blender/editors/space_clip/clip_toolbar.c | 27 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_toolbar.c | 39 | ||||
-rw-r--r-- | source/blender/editors/util/undo.c | 1 |
3 files changed, 44 insertions, 23 deletions
diff --git a/source/blender/editors/space_clip/clip_toolbar.c b/source/blender/editors/space_clip/clip_toolbar.c index 1bdf5214192..ad70abf5732 100644 --- a/source/blender/editors/space_clip/clip_toolbar.c +++ b/source/blender/editors/space_clip/clip_toolbar.c @@ -219,23 +219,32 @@ static void clip_panel_operator_redo_operator(const bContext *C, Panel *pa, wmOp static void clip_panel_operator_redo(const bContext *C, Panel *pa) { wmOperator *op = WM_operator_last_redo(C); - uiBlock *block; + ARegion *ar; + ARegion *ar1; if (op == NULL) return; - if (WM_operator_poll((bContext *)C, op->type) == 0) - return; + /* keep in sync with logic in ED_undo_operator_repeat() */ + ar = CTX_wm_region(C); + ar1 = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW); + if (ar1) + CTX_wm_region_set((bContext *)C, ar1); + + if (WM_operator_poll((bContext *)C, op->type)) { + uiBlock *block = uiLayoutGetBlock(pa->layout); - block = uiLayoutGetBlock(pa->layout); + if (!WM_operator_check_ui_enabled(C, op->type->name)) + uiLayoutSetEnabled(pa->layout, FALSE); - if (!WM_operator_check_ui_enabled(C, op->type->name)) - uiLayoutSetEnabled(pa->layout, FALSE); + /* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */ + uiBlockSetHandleFunc(block, ED_undo_operator_repeat_cb_evt, op); - /* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */ - uiBlockSetHandleFunc(block, ED_undo_operator_repeat_cb_evt, op); + clip_panel_operator_redo_operator(C, pa, op); + } - clip_panel_operator_redo_operator(C, pa, op); + /* set region back */ + CTX_wm_region_set((bContext *)C, ar); } void ED_clip_tool_props_register(ARegionType *art) diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index bfeb56036e6..30e6e934d21 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -101,22 +101,33 @@ static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wm static void view3d_panel_operator_redo(const bContext *C, Panel *pa) { wmOperator *op = WM_operator_last_redo(C); - uiBlock *block; - - if (op == NULL) - return; - if (WM_operator_poll((bContext *)C, op->type) == 0) + ARegion *ar; + ARegion *ar1; + + if (op == NULL) { return; - - block = uiLayoutGetBlock(pa->layout); - - if (!WM_operator_check_ui_enabled(C, op->type->name)) - uiLayoutSetEnabled(pa->layout, FALSE); + } - /* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */ - uiBlockSetHandleFunc(block, ED_undo_operator_repeat_cb_evt, op); - - view3d_panel_operator_redo_operator(C, pa, op); + /* keep in sync with logic in ED_undo_operator_repeat() */ + ar = CTX_wm_region(C); + ar1 = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW); + if (ar1) + CTX_wm_region_set((bContext *)C, ar1); + + if (WM_operator_poll((bContext *)C, op->type)) { + uiBlock *block = uiLayoutGetBlock(pa->layout); + + if (!WM_operator_check_ui_enabled(C, op->type->name)) + uiLayoutSetEnabled(pa->layout, FALSE); + + /* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */ + uiBlockSetHandleFunc(block, ED_undo_operator_repeat_cb_evt, op); + + view3d_panel_operator_redo_operator(C, pa, op); + } + + /* set region back */ + CTX_wm_region_set((bContext *)C, ar); } /* ******************* */ diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index 1dc7e0c90e8..e3d35807862 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -339,6 +339,7 @@ int ED_undo_operator_repeat(bContext *C, struct wmOperator *op) wmWindowManager *wm = CTX_wm_manager(C); struct Scene *scene = CTX_data_scene(C); + /* keep in sync with logic in view3d_panel_operator_redo() */ ARegion *ar = CTX_wm_region(C); ARegion *ar1 = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW); |