diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-03-07 20:43:42 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-03-07 20:43:42 +0400 |
commit | 5d74235b5fc0f73c4fe33ab28ac1f1b8753131ee (patch) | |
tree | 3adb7eb15cb7b22bc1df719626ccef2f5e01ac30 /source/blender/editors/screen | |
parent | c78f02d9908773ec29d10b31c9401bb17eb5eacb (diff) |
patch [#30481] rna_Screen_scene_set does the wrong thing [patch]
from Dan Eicher (dna)
--- from the tracker
Setting Screen.scene only uses the active screen through a call to CTX_wm_screen(C) instead of the actual referenced scene.
The attached py-op demonstrates this behavior, assuming at least two separate scenes in the VSE.
Diffstat (limited to 'source/blender/editors/screen')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 17 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 2 |
2 files changed, 11 insertions, 8 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 7ab73c6b976..24a8de6688e 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1424,16 +1424,19 @@ void ED_screen_delete(bContext *C, bScreen *sc) } /* only call outside of area/region loops */ -void ED_screen_set_scene(bContext *C, Scene *scene) +void ED_screen_set_scene(bContext *C, bScreen *screen, Scene *scene) { Main *bmain= CTX_data_main(C); bScreen *sc; - bScreen *curscreen= CTX_wm_screen(C); + + if(screen == NULL) + return; - ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); + if(ed_screen_used(CTX_wm_manager(C), screen)) + ED_object_exit_editmode(C, EM_FREEDATA|EM_DO_UNDO); for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) { - if((U.flag & USER_SCENEGLOBAL) || sc==curscreen) { + if((U.flag & USER_SCENEGLOBAL) || sc==screen) { if(scene != sc->scene) { /* all areas endlocalview */ @@ -1452,7 +1455,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene) /* are there cameras in the views that are not in the scene? */ for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) { - if( (U.flag & USER_SCENEGLOBAL) || sc==curscreen) { + if( (U.flag & USER_SCENEGLOBAL) || sc==screen) { ScrArea *sa= sc->areabase.first; while(sa) { SpaceLink *sl= sa->spacedata.first; @@ -1489,7 +1492,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene) set_scene_bg(bmain, scene); ED_render_engine_changed(bmain); - ED_update_for_newframe(bmain, scene, curscreen, 1); + ED_update_for_newframe(bmain, scene, screen, 1); /* complete redraw */ WM_event_add_notifier(C, NC_WINDOW, NULL); @@ -1509,7 +1512,7 @@ void ED_screen_delete_scene(bContext *C, Scene *scene) else return; - ED_screen_set_scene(C, newscene); + ED_screen_set_scene(C, CTX_wm_screen(C), newscene); unlink_scene(bmain, scene, newscene); } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index a8ad50b2f53..b1d718f08b5 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -3326,7 +3326,7 @@ static int scene_new_exec(bContext *C, wmOperator *op) } } - ED_screen_set_scene(C, newscene); + ED_screen_set_scene(C, CTX_wm_screen(C), newscene); WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, newscene); |