Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJulian Eisel <eiseljulian@gmail.com>2018-04-09 20:24:31 +0300
committerJulian Eisel <eiseljulian@gmail.com>2018-04-09 20:31:39 +0300
commit77e9193c23176a8143c1a01434b57594e0b0a8f4 (patch)
treeed56e1d888fff91b2d9b0fa142f31d594982100a /source
parentec91948dd708391017d884904fda7daaa90fba2d (diff)
Fix invalid context when refreshing popups
Patch D2759 by @raa, with minor edits by me.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/interface/interface_region_popup.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c
index 15053f0d8ca..4714efdb4a7 100644
--- a/source/blender/editors/interface/interface_region_popup.c
+++ b/source/blender/editors/interface/interface_region_popup.c
@@ -303,19 +303,36 @@ static void ui_block_position(wmWindow *window, ARegion *butregion, uiBut *but,
static void ui_block_region_draw(const bContext *C, ARegion *ar)
{
+ ScrArea *ctx_area = CTX_wm_area(C);
+ ARegion *ctx_region = CTX_wm_region(C);
uiBlock *block;
if (ar->do_draw & RGN_DRAW_REFRESH_UI) {
+ ScrArea *handle_ctx_area;
+ ARegion *handle_ctx_region;
uiBlock *block_next;
+
ar->do_draw &= ~RGN_DRAW_REFRESH_UI;
for (block = ar->uiblocks.first; block; block = block_next) {
block_next = block->next;
if (block->handle->can_refresh) {
+ handle_ctx_area = block->handle->ctx_area;
+ handle_ctx_region = block->handle->ctx_region;
+
+ if (handle_ctx_area) {
+ CTX_wm_area_set((bContext *)C, handle_ctx_area);
+ }
+ if (handle_ctx_region) {
+ CTX_wm_region_set((bContext *)C, handle_ctx_region);
+ }
ui_popup_block_refresh((bContext *)C, block->handle, NULL, NULL);
}
}
}
+ CTX_wm_area_set((bContext *)C, ctx_area);
+ CTX_wm_region_set((bContext *)C, ctx_region);
+
for (block = ar->uiblocks.first; block; block = block->next)
UI_block_draw(C, block);
}