Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-03-07 20:43:42 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-07 20:43:42 +0400
commit5d74235b5fc0f73c4fe33ab28ac1f1b8753131ee (patch)
tree3adb7eb15cb7b22bc1df719626ccef2f5e01ac30 /source/blender/editors/screen
parentc78f02d9908773ec29d10b31c9401bb17eb5eacb (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.c17
-rw-r--r--source/blender/editors/screen/screen_ops.c2
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);