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); + } } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs