[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44708] trunk/blender/source/blender: patch [#30481] rna_Screen_scene_set does the wrong thing [patch]
Campbell Barton
ideasman42 at gmail.com
Wed Mar 7 17:43:48 CET 2012
Revision: 44708
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44708
Author: campbellbarton
Date: 2012-03-07 16:43:42 +0000 (Wed, 07 Mar 2012)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_screen.h
trunk/blender/source/blender/editors/screen/screen_edit.c
trunk/blender/source/blender/editors/screen/screen_ops.c
trunk/blender/source/blender/editors/space_outliner/outliner_select.c
trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
trunk/blender/source/blender/makesrna/intern/rna_main_api.c
trunk/blender/source/blender/makesrna/intern/rna_screen.c
Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/editors/include/ED_screen.h 2012-03-07 16:43:42 UTC (rev 44708)
@@ -100,7 +100,7 @@
bScreen *ED_screen_add(struct wmWindow *win, struct Scene *scene, const char *name);
void ED_screen_set(struct bContext *C, struct bScreen *sc);
void ED_screen_delete(struct bContext *C, struct bScreen *sc);
-void ED_screen_set_scene(struct bContext *C, struct Scene *scene);
+void ED_screen_set_scene(struct bContext *C, struct bScreen *screen, struct Scene *scene);
void ED_screen_delete_scene(struct bContext *C, struct Scene *scene);
void ED_screen_set_subwinactive(struct bContext *C, struct wmEvent *event);
void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);
Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -1424,16 +1424,19 @@
}
/* 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 @@
/* 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 @@
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 @@
else
return;
- ED_screen_set_scene(C, newscene);
+ ED_screen_set_scene(C, CTX_wm_screen(C), newscene);
unlink_scene(bmain, scene, newscene);
}
Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -3326,7 +3326,7 @@
}
}
- 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);
Modified: trunk/blender/source/blender/editors/space_outliner/outliner_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_select.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_select.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -190,7 +190,7 @@
sce= (Scene *)outliner_search_back(soops, te, ID_SCE);
if(sce && scene != sce) {
- ED_screen_set_scene(C, sce);
+ ED_screen_set_scene(C, CTX_wm_screen(C), sce);
}
/* find associated base in current scene */
@@ -374,7 +374,7 @@
if(set) { // make new scene active
if(sce && scene != sce) {
- ED_screen_set_scene(C, sce);
+ ED_screen_set_scene(C, CTX_wm_screen(C), sce);
}
}
@@ -761,7 +761,7 @@
/* editmode? */
if(te->idcode==ID_SCE) {
if(scene!=(Scene *)tselem->id) {
- ED_screen_set_scene(C, (Scene *)tselem->id);
+ ED_screen_set_scene(C, CTX_wm_screen(C), (Scene *)tselem->id);
}
}
else if(te->idcode==ID_GR) {
Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tools.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tools.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -409,7 +409,7 @@
// when objects selected in other scenes... dunno if that should be allowed
Scene *scene_owner= (Scene *)outliner_search_back(soops, te, ID_SCE);
if(scene_owner && scene_act != scene_owner) {
- ED_screen_set_scene(C, scene_owner);
+ ED_screen_set_scene(C, CTX_wm_screen(C), scene_owner);
}
/* important to use 'scene_owner' not scene_act else deleting objects can crash.
* only use 'scene_act' when 'scene_owner' is NULL, which can happen when the
@@ -561,7 +561,7 @@
Scene *sce= scene; // to be able to delete, scenes are set...
outliner_do_object_operation(C, scene, soops, &soops->tree, object_select_cb);
if(scene != sce) {
- ED_screen_set_scene(C, sce);
+ ED_screen_set_scene(C, CTX_wm_screen(C), sce);
}
str= "Select Objects";
Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -131,7 +131,7 @@
}
if (CTX_wm_screen(C)->scene == scene)
- ED_screen_set_scene(C, newscene);
+ ED_screen_set_scene(C, CTX_wm_screen(C), newscene);
unlink_scene(bmain, scene, newscene);
}
Modified: trunk/blender/source/blender/makesrna/intern/rna_screen.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_screen.c 2012-03-07 16:24:25 UTC (rev 44707)
+++ trunk/blender/source/blender/makesrna/intern/rna_screen.c 2012-03-07 16:43:42 UTC (rev 44708)
@@ -72,7 +72,7 @@
/* exception: must use context so notifier gets to the right window */
if (sc->newscene) {
- ED_screen_set_scene(C, sc->newscene);
+ ED_screen_set_scene(C, sc, sc->newscene);
WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, sc->newscene);
if (G.f & G_DEBUG)
More information about the Bf-blender-cvs
mailing list