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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to