diff options
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 2 | ||||
-rw-r--r-- | source/blender/editors/screen/area.c | 10 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_screen_types.h | 1 |
3 files changed, 9 insertions, 4 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index f3244a63a8b..97e11d57126 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -6183,7 +6183,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype) ar->swinid = 0; ar->type = NULL; ar->swap = 0; - ar->do_draw = FALSE; + ar->do_draw = 0; ar->regiontimer = NULL; memset(&ar->drawrct, 0, sizeof(ar->drawrct)); } diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 2fd3423b7e7..a1daa3b4449 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -419,6 +419,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar) BLI_rcti_isect(&ar->winrct, &ar->drawrct, &ar->drawrct); scissor_pad = false; } + + ar->do_draw |= RGN_DRAWING; /* note; this sets state, so we can use wmOrtho and friends */ wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct, scissor_pad); @@ -453,7 +455,7 @@ void ED_region_do_draw(bContext *C, ARegion *ar) glDisable(GL_BLEND); #endif - ar->do_draw = FALSE; + ar->do_draw = 0; memset(&ar->drawrct, 0, sizeof(ar->drawrct)); uiFreeInactiveBlocks(C, &ar->uiblocks); @@ -469,7 +471,9 @@ void ED_region_do_draw(bContext *C, ARegion *ar) void ED_region_tag_redraw(ARegion *ar) { - if (ar) { + /* don't tag redraw while drawing, it shouldn't happen normally + * but python scripts can cause this to happen indirectly */ + if (ar && !(ar->do_draw & RGN_DRAWING)) { /* zero region means full region redraw */ ar->do_draw = RGN_DRAW; memset(&ar->drawrct, 0, sizeof(ar->drawrct)); @@ -484,7 +488,7 @@ void ED_region_tag_redraw_overlay(ARegion *ar) void ED_region_tag_redraw_partial(ARegion *ar, rcti *rct) { - if (ar) { + if (ar && !(ar->do_draw & RGN_DRAWING)) { if (!ar->do_draw) { /* no redraw set yet, set partial region */ ar->do_draw = RGN_DRAW_PARTIAL; diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index 005b0bda041..d343b2b68fc 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -365,6 +365,7 @@ enum { /* region do_draw */ #define RGN_DRAW 1 #define RGN_DRAW_PARTIAL 2 +#define RGN_DRAWING 4 #endif |