From f33309b0285079c14a8f9fc913157129ff6cbc81 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 9 Feb 2009 15:50:09 +0000 Subject: 2.5 - Added depsgraph tag for object-change in AnimData, so the new animsys doesn't have to all objects anymore. (Still WIP, depsgraph has to do this much better) - Bugfix in notifiers; only 1 notifier was handled for frame updates Result: 2 windows, displaying 2 scenes, now can be edited independently, and play independent. Not when they share data, of course. :) --- source/blender/windowmanager/WM_types.h | 4 +-- .../blender/windowmanager/intern/wm_event_system.c | 34 ++++++++++++---------- 2 files changed, 21 insertions(+), 17 deletions(-) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 1ace7bce09c..9382e170a21 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -121,7 +121,7 @@ typedef void (*wmUIHandlerRemoveFunc)(struct bContext *C, void *userdata); /* ************** Notifiers ****************** */ typedef struct wmNotifier { - struct wmNotifier *prev, *next; + struct wmNotifier *next, *prev; struct wmWindowManager *wm; struct wmWindow *window; @@ -162,9 +162,9 @@ typedef struct wmNotifier { /* NC_SCREEN screen */ #define ND_SCREENBROWSE (1<<16) -#define ND_SCENEBROWSE (2<<16) /* NC_SCENE Scene */ +#define ND_SCENEBROWSE (1<<16) #define ND_MARKERS (2<<16) #define ND_FRAME (3<<16) #define ND_RENDER_OPTIONS (4<<16) diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index dcca2fa60c9..886456733f9 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -162,29 +162,33 @@ void wm_event_do_notifiers(bContext *C) wmWindow *win; for(win= wm->windows.first; win; win= win->next) { - ScrArea *sa; - ARegion *ar; + + /* filter out notifiers */ + if(note->category==NC_SCREEN && note->reference && note->reference!=win->screen); + else if(note->category==NC_SCENE && note->reference && note->reference!=win->screen->scene); + else { + ScrArea *sa; + ARegion *ar; - /* XXX context in notifiers? */ - CTX_wm_window_set(C, win); + /* XXX context in notifiers? */ + CTX_wm_window_set(C, win); - /* printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2); */ - ED_screen_do_listen(win, note); + /* printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2); */ + ED_screen_do_listen(win, note); - for(ar=win->screen->regionbase.first; ar; ar= ar->next) { - ED_region_do_listen(ar, note); - } - - for(sa= win->screen->areabase.first; sa; sa= sa->next) { - ED_area_do_listen(sa, note); - for(ar=sa->regionbase.first; ar; ar= ar->next) { + for(ar=win->screen->regionbase.first; ar; ar= ar->next) { ED_region_do_listen(ar, note); } + + for(sa= win->screen->areabase.first; sa; sa= sa->next) { + ED_area_do_listen(sa, note); + for(ar=sa->regionbase.first; ar; ar= ar->next) { + ED_region_do_listen(ar, note); + } + } } } - CTX_wm_window_set(C, NULL); - MEM_freeN(note); } -- cgit v1.2.3