[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37232] trunk/blender/source/blender: fix for crash opening the file selector twice with multiple windows open ( when the mouse was over the inactive window).

Campbell Barton ideasman42 at gmail.com
Mon Jun 6 02:42:37 CEST 2011


Revision: 37232
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37232
Author:   campbellbarton
Date:     2011-06-06 00:42:36 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
fix for crash opening the file selector twice with multiple windows open (when the mouse was over the inactive window).

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/render/render_view.c
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-06-05 23:38:11 UTC (rev 37231)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-06-06 00:42:36 UTC (rev 37232)
@@ -1738,7 +1738,7 @@
 				data->coefficients= newdataadr(fd, data->coefficients);
 
 				if(fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
-					unsigned a;
+					unsigned int a;
 					for(a = 0; a < data->arraysize; a++)
 						SWITCH_INT(data->coefficients[a]);
 				}

Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h	2011-06-05 23:38:11 UTC (rev 37231)
+++ trunk/blender/source/blender/editors/include/ED_screen.h	2011-06-06 00:42:36 UTC (rev 37232)
@@ -107,7 +107,7 @@
 void	ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
 void	ED_screen_animation_timer(struct bContext *C, int redraws, int refresh, int sync, int enable);
 void	ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int refresh);
-int		ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
+ScrArea *ED_screen_full_newspace(struct bContext *C, ScrArea *sa, int type);
 void	ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
 void	ED_screen_full_restore(struct bContext *C, ScrArea *sa);
 struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);

Modified: trunk/blender/source/blender/editors/render/render_view.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_view.c	2011-06-05 23:38:11 UTC (rev 37231)
+++ trunk/blender/source/blender/editors/render/render_view.c	2011-06-06 00:42:36 UTC (rev 37232)
@@ -184,8 +184,7 @@
 			area_was_image = 1;
 
 		/* this function returns with changed context */
-		ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
-		sa= CTX_wm_area(C);
+		sa= ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
 	}
 
 	if(!sa) {

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2011-06-05 23:38:11 UTC (rev 37231)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2011-06-06 00:42:36 UTC (rev 37232)
@@ -1513,7 +1513,7 @@
 	unlink_scene(bmain, scene, newscene);
 }
 
-int ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
+ScrArea *ED_screen_full_newspace(bContext *C, ScrArea *sa, int type)
 {
 	wmWindow *win= CTX_wm_window(C);
 	bScreen *screen= CTX_wm_screen(C);
@@ -1538,7 +1538,7 @@
 	
 	ED_area_newspace(C, newsa, type);
 	
-	return 1;
+	return newsa;
 }
 
 void ED_screen_full_prevspace(bContext *C, ScrArea *sa)

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2011-06-05 23:38:11 UTC (rev 37231)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2011-06-06 00:42:36 UTC (rev 37232)
@@ -1289,16 +1289,23 @@
 				if (handler->op_area == NULL) {
 					bScreen *screen = CTX_wm_screen(C);
 					sa = (ScrArea *)screen->areabase.first;
-				} else
+				}
+				else {
 					sa = handler->op_area;
+				}
 					
-				if(event->val==EVT_FILESELECT_OPEN)
-					ED_area_newspace(C, sa, SPACE_FILE);
-				else
-					ED_screen_full_newspace(C, sa, SPACE_FILE);	/* sets context */
-				
+				if(event->val==EVT_FILESELECT_OPEN) {
+					ED_area_newspace(C, sa, SPACE_FILE); /* 'sa' is modified in-place */
+				}
+				else {
+					sa= ED_screen_full_newspace(C, sa, SPACE_FILE);	/* sets context */
+				}
+
+				/* note, getting the 'sa' back from the context causes a nasty bug where the newly created
+				 * 'sa' != CTX_wm_area(C). removed the line below and set 'sa' in the 'if' above */
+				/* sa = CTX_wm_area(C); */
+
 				/* settings for filebrowser, sfile is not operator owner but sends events */
-				sa = CTX_wm_area(C);
 				sfile= (SpaceFile*)sa->spacedata.first;
 				sfile->op= handler->op;
 




More information about the Bf-blender-cvs mailing list