diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 53fd1bfa373..3fd0812338c 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -8207,6 +8207,10 @@ BlendFileData *blo_read_file_internal(FileData *fd, BlendReadError *error_r) bhead = read_libblock(fd, fd->mainlist.last, bhead, LIB_READ+LIB_EXTERN, NULL); break; + /* in 2.50+ files, the file identifier for screens is patched, forward compatibility */ + case ID_SCRN: + bhead->code= ID_SCR; + /* deliberate pass on to default */ default: bhead = read_libblock(fd, bfd->main, bhead, LIB_LOCAL, NULL); } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index d84211411fa..96611b6fa9d 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1620,7 +1620,8 @@ static void write_screens(WriteData *wd, ListBase *scrbase) while(sc) { /* write LibData */ - writestruct(wd, ID_SCR, "Screen", 1, sc); + /* in 2.50+ files, the file identifier for screens is patched, forward compatibility */ + writestruct(wd, ID_SCRN, "Screen", 1, sc); if (sc->id.properties) IDP_WriteProperty(sc->id.properties, wd); diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index ea9f64cc26c..3ad2ae48d53 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -174,6 +174,7 @@ typedef struct PreviewImage { #define ID_KE MAKE_ID2('K', 'E') #define ID_WO MAKE_ID2('W', 'O') #define ID_SCR MAKE_ID2('S', 'R') +#define ID_SCRN MAKE_ID2('S', 'N') #define ID_VF MAKE_ID2('V', 'F') #define ID_TXT MAKE_ID2('T', 'X') #define ID_SO MAKE_ID2('S', 'O') diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index 05d4bc10486..0684503b2b2 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -71,7 +71,7 @@ typedef struct wmWindowManager { ListBase screenkeymap; ListBase uikeymap; ListBase timekeymap; - + /* keymaps have to be NULLed in readfile.c */ } wmWindowManager; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 061a784ea91..e4c4406b8ae 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -252,6 +252,7 @@ void wm_draw_update(bContext *C) if(win->screen->do_draw) ED_screen_draw(win); + /* regions are menus here */ for(ar=win->screen->regionbase.first; ar; ar= ar->next) { C->region= ar; @@ -519,6 +520,7 @@ void wm_event_do_handlers(bContext *C) action= wm_handlers_do(C, event, &win->handlers); + /* modal menus in Blender use (own) regions linked to screen */ if(wm_event_always_pass(event) || action==WM_HANDLER_CONTINUE) { ARegion *ar;