[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18636] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Fri Jan 23 18:42:38 CET 2009


Revision: 18636
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18636
Author:   ton
Date:     2009-01-23 18:42:36 +0100 (Fri, 23 Jan 2009)

Log Message:
-----------
2.5

File reading of 2.50 files fixed.
- it now exits nicely from queues without using free'd memory
  (checks CTX_wm_window(C) to be NULL)
- code that matched current (ghost) window with new situation
  lacked setting a pointer good.

Overall cleaned some parts too; like context clears now all
wm related pointers when you set a new wm, window or area.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -197,6 +197,10 @@
 void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
 {
 	C->wm.manager= wm;
+	C->wm.window= NULL;
+	C->wm.screen= NULL;
+	C->wm.area= NULL;
+	C->wm.region= NULL;
 }
 
 void CTX_wm_window_set(bContext *C, wmWindow *win)
@@ -204,17 +208,22 @@
 	C->wm.window= win;
 	C->wm.screen= (win)? win->screen: NULL;
 	C->data.scene= (C->wm.screen)? C->wm.screen->scene: NULL;
+	C->wm.area= NULL;
+	C->wm.region= NULL;
 }
 
 void CTX_wm_screen_set(bContext *C, bScreen *screen)
 {
 	C->wm.screen= screen;
 	C->data.scene= (C->wm.screen)? C->wm.screen->scene: NULL;
+	C->wm.area= NULL;
+	C->wm.region= NULL;
 }
 
 void CTX_wm_area_set(bContext *C, ScrArea *area)
 {
 	C->wm.area= area;
+	C->wm.region= NULL;
 }
 
 void CTX_wm_region_set(bContext *C, ARegion *region)

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -100,7 +100,7 @@
 	wmWindowManager *wm= CTX_wm_manager(C);
 	
 	/* wm context */
-	if(CTX_wm_manager(C)==NULL) {
+	if(wm==NULL) {
 		wm= CTX_data_main(C)->wm.first;
 		CTX_wm_manager_set(C, wm);
 	}
@@ -118,6 +118,8 @@
 		
 		ED_screens_initialize(wm);
 		wm->initialized= 1;
+		
+		WM_event_add_notifier(C, NC_WINDOW, NULL);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -135,6 +135,9 @@
 	wmNotifier *note;
 	wmWindow *win;
 	
+	if(wm==NULL)
+		return;
+	
 	/* cache & catch WM level notifiers, such as frame change */
 	/* XXX todo, multiwindow scenes */
 	for(win= wm->windows.first; win; win= win->next) {
@@ -194,7 +197,6 @@
 				ED_area_do_refresh(C, sa);
 			}
 		}
-		CTX_wm_area_set(C, NULL);
 	}
 	CTX_wm_window_set(C, NULL);
 }
@@ -686,6 +688,9 @@
 				break;
 		}
 		
+		/* fileread case */
+		if(CTX_wm_window(C)==NULL)
+			break;
 	}
 	return action;
 }
@@ -794,6 +799,12 @@
 			
 			action= wm_handlers_do(C, event, &win->handlers);
 			
+			/* fileread case */
+			if(CTX_wm_window(C)==NULL) {
+				wm_event_free(event);
+				break;
+			}
+			
 			if(wm_event_always_pass(event) || action==WM_HANDLER_CONTINUE) {
 				ScrArea *sa;
 				ARegion *ar;
@@ -843,6 +854,10 @@
 			CTX_wm_area_set(C, NULL);
 			CTX_wm_region_set(C, NULL);
 		}
+		
+		/* fileread case */
+		if(CTX_wm_window(C)==NULL)
+			break;
 	}
 }
 
@@ -867,12 +882,12 @@
 wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, ListBase *keymap)
 {
 	wmEventHandler *handler;
-	
+
 	/* only allow same keymap once */
 	for(handler= handlers->first; handler; handler= handler->next)
 		if(handler->keymap==keymap)
 			return handler;
-
+	
 	handler= MEM_callocN(sizeof(wmEventHandler), "event keymap handler");
 	BLI_addtail(handlers, handler);
 	handler->keymap= keymap;
@@ -897,9 +912,11 @@
 wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, ListBase *keymap, rcti *bblocal, rcti *bbwin)
 {
 	wmEventHandler *handler= WM_event_add_keymap_handler(handlers, keymap);
-	handler->bblocal= bblocal;
-	handler->bbwin= bbwin;
 	
+	if(handler) {
+		handler->bblocal= bblocal;
+		handler->bbwin= bbwin;
+	}
 	return handler;
 }
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -78,6 +78,8 @@
 #include "ED_screen.h"
 #include "ED_util.h"
 
+#include "GHOST_C-api.h"
+
 #include "UI_interface.h"
 
 // XXX #include "BPY_extern.h"
@@ -462,7 +464,11 @@
 					
 					if(oldwin->winid == win->winid ) {
 						win->ghostwin= oldwin->ghostwin;
+						GHOST_SetWindowUserData(win->ghostwin, win);	/* pointer back */
 						oldwin->ghostwin= NULL;
+						
+						win->eventstate= oldwin->eventstate;
+						oldwin->eventstate= NULL;
 					}
 				}
 			}
@@ -492,6 +498,7 @@
 
 		/* match the read WM with current WM */
 		wm_window_match_do(C, &wmbase); 
+		wm_check(C); /* opens window(s), checks keymaps */
 		
 // XXX		mainwindow_set_filename_to_title(G.main->name);
 //		countall(); <-- will be listener
@@ -549,7 +556,8 @@
 	
 	/* match the read WM with current WM */
 	wm_window_match_do(C, &wmbase); 
-	
+	wm_check(C); /* opens window(s), checks keymaps */
+
 	strcpy(G.sce, scestr); /* restore */
 
 	init_userdef_themes();

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -93,20 +93,6 @@
 #include "GPU_draw.h"
 
 
-static void initbuttons(void)
-{
-	UI_init();
-	
-//	glClearColor(.7f, .7f, .6f, 0.0);
-	
-	G.font= BMF_GetFont(BMF_kHelvetica12);
-	G.fonts= BMF_GetFont(BMF_kHelvetica10);
-	G.fontss= BMF_GetFont(BMF_kHelveticaBold8);
-	
-//	clear_matcopybuf(); /* XXX */
-	
-//	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-}
 
 /* XXX */
 static void sound_init_listener(void)
@@ -135,11 +121,17 @@
 	/* get the default database, plus a wm */
 	WM_read_homefile(C, 0);
 	
-	wm_check(C); /* opens window(s), checks keymaps */
+	UI_init();
 	
-//	initscreen();	/* for (visual) speed, this first, then setscreen */
-	initbuttons();
-//	InitCursorData();
+	/* goes away */
+	G.font= BMF_GetFont(BMF_kHelvetica12);
+	G.fonts= BMF_GetFont(BMF_kHelvetica10);
+	G.fontss= BMF_GetFont(BMF_kHelveticaBold8);
+	
+	//	clear_matcopybuf(); /* XXX */
+	
+	//	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+	
 	sound_init_listener();
 //	init_node_butfuncs();
 	

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-01-23 14:43:25 UTC (rev 18635)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-01-23 17:42:36 UTC (rev 18636)
@@ -102,6 +102,8 @@
 			wm->winactive= NULL;
 		if(CTX_wm_window(C)==win)
 			CTX_wm_window_set(C, NULL);
+		
+		WM_event_remove_handlers(C, &win->handlers);
 	}	
 	
 	if(win->eventstate) MEM_freeN(win->eventstate);
@@ -160,14 +162,13 @@
 	return win;
 }
 
-/* this is event from ghost */
+/* this is event from ghost, or exit-blender op */
 static void wm_window_close(bContext *C, wmWindow *win)
 {
 	wmWindowManager *wm= CTX_wm_manager(C);
 	BLI_remlink(&wm->windows, win);
 	
 	wm_draw_window_clear(win);
-	WM_event_remove_handlers(C, &win->handlers);
 	ED_screen_exit(C, win, win->screen);
 	wm_window_free(C, win);
 	
@@ -203,7 +204,6 @@
 								 0 /* no stereo */);
 	
 	if (ghostwin) {
-		ListBase *keymap;
 		
 		win->ghostwin= ghostwin;
 		GHOST_SetWindowUserData(ghostwin, win);	/* pointer back */
@@ -211,13 +211,6 @@
 		if(win->eventstate==NULL)
 			win->eventstate= MEM_callocN(sizeof(wmEvent), "window event state");
 		
-		/* add keymap handlers (1 handler for all keys in map!) */
-		keymap= WM_keymap_listbase(wm, "Window", 0, 0);
-		WM_event_add_keymap_handler(&win->handlers, keymap);
-
-		keymap= WM_keymap_listbase(wm, "Screen", 0, 0);
-		WM_event_add_keymap_handler(&win->handlers, keymap);
-		
 		/* until screens get drawn, make it nice grey */
 		glClearColor(.55, .55, .55, 0.0);
 		glClear(GL_COLOR_BUFFER_BIT);
@@ -232,8 +225,10 @@
 
 /* for wmWindows without ghostwin, open these and clear */
 /* window size is read from window, if 0 it uses prefsize */
+/* called in wm_check, also inits stuff after file read */
 void wm_window_add_ghostwindows(wmWindowManager *wm)
 {
+	ListBase *keymap;
 	wmWindow *win;
 	
 	/* no commandline prefsize? then we set this */
@@ -264,6 +259,18 @@
 			}
 			wm_window_add_ghostwindow(wm, "Blender", win);
 		}
+		/* happens after fileread */
+		if(win->eventstate==NULL)
+		   win->eventstate= MEM_callocN(sizeof(wmEvent), "window event state");
+		
+		
+		/* add keymap handlers (1 handler for all keys in map!) */
+		keymap= WM_keymap_listbase(wm, "Window", 0, 0);
+		WM_event_add_keymap_handler(&win->handlers, keymap);
+		
+		keymap= WM_keymap_listbase(wm, "Screen", 0, 0);
+		WM_event_add_keymap_handler(&win->handlers, keymap);
+		
 	}
 }
 





More information about the Bf-blender-cvs mailing list