[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46186] trunk/blender/source/blender/ makesrna/intern/rna_screen.c: Fix crash setting area. type from a context that not include the right window,

Brecht Van Lommel brechtvanlommel at pandora.be
Wed May 2 15:09:26 CEST 2012


Revision: 46186
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46186
Author:   blendix
Date:     2012-05-02 13:09:26 +0000 (Wed, 02 May 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/rna_screen.c

Modified: trunk/blender/source/blender/makesrna/intern/rna_screen.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_screen.c	2012-05-02 12:14:27 UTC (rev 46185)
+++ trunk/blender/source/blender/makesrna/intern/rna_screen.c	2012-05-02 13:09:26 UTC (rev 46186)
@@ -111,10 +111,31 @@
 
 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




More information about the Bf-blender-cvs mailing list