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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-02 17:09:26 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-05-02 17:09:26 +0400
commit4fd18b5d3c211b153cfab0996b616df019527f68 (patch)
tree9cc9aa22629a64c4f7d56c5c1195055671d7216e /source/blender/makesrna/intern/rna_screen.c
parent4d10642e8bd7a85256f26952283dda97cfd1b22a (diff)
Fix crash setting area.type from a context that not include the right window,
ideally this function should become context free, for now just trick it to execute in the right context.
Diffstat (limited to 'source/blender/makesrna/intern/rna_screen.c')
-rw-r--r--source/blender/makesrna/intern/rna_screen.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index 67a4bafb8ee..db43db273bd 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -111,10 +111,31 @@ static void rna_Area_type_set(PointerRNA *ptr, int value)
static void rna_Area_type_update(bContext *C, PointerRNA *ptr)
{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *win;
+ bScreen *sc = (bScreen*)ptr->id.data;
ScrArea *sa = (ScrArea*)ptr->data;
- ED_area_newspace(C, sa, sa->butspacetype); /* XXX - this uses the window */
- ED_area_tag_redraw(sa);
+ /* XXX this call still use context, so we trick it to work in the right context */
+ for(win=wm->windows.first; win; win=win->next) {
+ if(sc == win->screen) {
+ wmWindow *prevwin = CTX_wm_window(C);
+ ScrArea *prevsa = CTX_wm_area(C);
+ ARegion *prevar = CTX_wm_region(C);
+
+ CTX_wm_window_set(C, win);
+ CTX_wm_area_set(C, sa);
+ CTX_wm_region_set(C, NULL);
+
+ ED_area_newspace(C, sa, sa->butspacetype);
+ ED_area_tag_redraw(sa);
+
+ CTX_wm_window_set(C, prevwin);
+ CTX_wm_area_set(C, prevsa);
+ CTX_wm_region_set(C, prevar);
+ break;
+ }
+ }
}
#else