Commit: cbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108
Author: Julian Eisel
Date:   Sat Dec 31 01:45:59 2016 +0100
Branches: workspaces
https://developer.blender.org/rBcbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108

Deprecate Screen.scene completely

Removing a custom transform orientation is a bit broken right now because we 
don't know which scene is visible in hidden 3D Views. Think I know how to fix 
this, but want to go on with other stuff first.

===================================================================

M       source/blender/blenkernel/BKE_screen.h
M       source/blender/blenkernel/intern/blendfile.c
M       source/blender/blenkernel/intern/screen.c
M       source/blender/editors/transform/transform_orientations.c
M       source/blender/makesdna/DNA_screen_types.h
M       source/blender/makesrna/intern/rna_space.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/wm_window.c
M       source/blenderplayer/bad_level_call_stubs/stubs.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_screen.h 
b/source/blender/blenkernel/BKE_screen.h
index 9b9d757..07f9edd 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -307,8 +307,7 @@ unsigned int BKE_screen_view3d_layer_all(const struct 
bScreen *sc) ATTR_WARN_UNU
 
 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
 void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
-void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene 
*scene, const int i);
+void BKE_screen_view3d_twmode_remove(struct bScreen *screen, const int twmode);
 void BKE_screen_gpu_fx_validate(struct GPUFXSettings *fx_settings);
 bool BKE_screen_is_fullscreen_area(const struct bScreen *screen) 
ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool BKE_screen_is_used(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT 
ATTR_NONNULL();
diff --git a/source/blender/blenkernel/intern/blendfile.c 
b/source/blender/blenkernel/intern/blendfile.c
index d27483d..9a75702 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -317,11 +317,9 @@ static void setup_app_data(
 
                if (wm) {
                        for (wmWindow *win = wm->windows.first; win; win = 
win->next) {
-                               bScreen *screen = 
BKE_workspace_active_screen_get(win->workspace);
-
-                               if (screen && screen->scene) /* zealous 
check... */
-                                       if (screen->scene != curscene)
-                                               
BKE_scene_set_background(G.main, screen->scene);
+                               if (win->scene && win->scene != curscene) {
+                                       BKE_scene_set_background(G.main, 
win->scene);
+                               }
                        }
                }
        }
diff --git a/source/blender/blenkernel/intern/screen.c 
b/source/blender/blenkernel/intern/screen.c
index 77e12fb..91f0d81 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -611,31 +611,24 @@ void BKE_screen_view3d_scene_sync(bScreen *sc, Scene 
*scene)
        }
 }
 
-void BKE_screen_view3d_twmode_remove(View3D *v3d, const int i)
-{
-       const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
-       if (selected_index == i) {
-               v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global   */
-       }
-       else if (selected_index > i) {
-               v3d->twmode--;
-       }
-}
-
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, Scene *scene, 
const int i)
+/**
+ * TODO hrmpf... stupid issue: Removing a custom transform orientation only 
updates View3D orientations
+ * in visible workspaces/screens. If an invisible one uses it, it keeps using 
the removed orientation.
+ * Need to solve that somehow... Maybe store TranformOrientation * in View3D?
+ */
+void BKE_screen_view3d_twmode_remove(bScreen *screen, const int twmode)
 {
-       bScreen *sc;
+       for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+               for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+                       if (sl->spacetype == SPACE_VIEW3D) {
+                               View3D *v3d = (View3D *)sl;
+                               const int selected_index = (v3d->twmode - 
V3D_MANIP_CUSTOM);
 
-       for (sc = screen_lb->first; sc; sc = sc->id.next) {
-               if (sc->scene == scene) {
-                       ScrArea *sa;
-                       for (sa = sc->areabase.first; sa; sa = sa->next) {
-                               SpaceLink *sl;
-                               for (sl = sa->spacedata.first; sl; sl = 
sl->next) {
-                                       if (sl->spacetype == SPACE_VIEW3D) {
-                                               View3D *v3d = (View3D *)sl;
-                                               
BKE_screen_view3d_twmode_remove(v3d, i);
-                                       }
+                               if (selected_index == twmode) {
+                                       v3d->twmode = V3D_MANIP_GLOBAL; /* 
fallback to global   */
+                               }
+                               else if (selected_index > twmode) {
+                                       v3d->twmode--;
                                }
                        }
                }
diff --git a/source/blender/editors/transform/transform_orientations.c 
b/source/blender/editors/transform/transform_orientations.c
index 1d6a392..f063689 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -57,6 +57,8 @@
 
 #include "ED_armature.h"
 
+#include "WM_api.h"
+
 #include "transform.h"
 
 /* *********************** TransSpace ************************** */
@@ -352,7 +354,9 @@ void BIF_removeTransformOrientation(bContext *C, 
TransformOrientation *target)
 
        if (i != -1) {
                Main *bmain = CTX_data_main(C);
-               BKE_screen_view3d_main_twmode_remove(&bmain->screen, scene, i);
+               wmWindowManager *wm = bmain->wm.first;
+
+               WM_windows_scene_twmode_remove(&wm->windows, scene, i);
                BLI_freelinkN(transform_spaces, target);
        }
 }
diff --git a/source/blender/makesdna/DNA_screen_types.h 
b/source/blender/makesdna/DNA_screen_types.h
index 0adde23..29467bf 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -30,6 +30,7 @@
 #ifndef __DNA_SCREEN_TYPES_H__
 #define __DNA_SCREEN_TYPES_H__
 
+#include "DNA_defs.h"
 #include "DNA_listBase.h"
 #include "DNA_view2d_types.h"
 #include "DNA_vec_types.h"
@@ -53,10 +54,9 @@ typedef struct bScreen {
        ListBase edgebase;
        ListBase areabase;
        ListBase regionbase;                            /* screen level regions 
(menus), runtime only */
-       
-       struct Scene *scene;
-       struct Scene *newscene;                         /* temporary when 
switching */
-       
+
+       struct Scene *scene DNA_DEPRECATED;
+
        short winid;                                            /* winid from 
WM, starts with 1 TODO will have to rework this */
        short redraws_flag;                                     /* user-setting 
for which editors get redrawn during anim playback (used to be time->redraws) */
 
diff --git a/source/blender/makesrna/intern/rna_space.c 
b/source/blender/makesrna/intern/rna_space.c
index ec26eba..81d9f41 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -404,7 +404,7 @@ static void rna_Space_view2d_sync_update(Main 
*UNUSED(bmain), Scene *UNUSED(scen
 
 static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
 {
-       Scene *scene = ((bScreen *)ptr->id.data)->scene;
+       Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, 
ptr->id.data);
        View3D *v3d = (View3D *)ptr->data;
 
        if (v3d->twmode < V3D_MANIP_CUSTOM)
@@ -426,7 +426,7 @@ EnumPropertyItem *rna_TransformOrientation_itemf(bContext 
*C, PointerRNA *ptr, P
        RNA_enum_items_add(&item, &totitem, transform_orientation_items);
 
        if (ptr->type == &RNA_SpaceView3D)
-               scene = ((bScreen *)ptr->id.data)->scene;
+               scene = WM_windows_scene_get_from_screen(G.main->wm.first, 
ptr->id.data);
        else
                scene = CTX_data_scene(C);  /* can't use scene from 
ptr->id.data because that enum is also used by operators */
 
@@ -697,17 +697,13 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA 
*ptr, const float *value
 
 static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr)
 {
-#if 0
-       Scene *scene = ((bScreen *)ptr->id.data)->scene;
+       Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, 
ptr->id.data);
        RenderEngineType *type = RE_engines_find(scene->r.engine);
-#endif
        View3D *v3d = (View3D *)ptr->data;
        int drawtype = v3d->drawtype;
 
-#if 0
        if (drawtype == OB_RENDER && !(type && type->view_draw))
                return OB_SOLID;
-#endif
 
        return drawtype;
 }
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 809f086..834f1e2 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -102,6 +102,8 @@ int                 WM_window_pixels_y              (struct 
wmWindow *win);
 bool           WM_window_is_fullscreen (struct wmWindow *win);
 
 void WM_windows_scene_data_sync(const ListBase *win_lb, struct Scene *scene) 
ATTR_NONNULL();
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, struct Scene 
*scene, const int twmode) ATTR_NONNULL();
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager 
*wm, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 
 struct Scene *WM_window_get_active_scene(const struct wmWindow *win) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void          WM_window_set_active_scene(struct Main *bmain, struct bContext 
*C, struct wmWindow *win,
diff --git a/source/blender/windowmanager/intern/wm_window.c 
b/source/blender/windowmanager/intern/wm_window.c
index 1d93033..89e8064 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1749,6 +1749,26 @@ void WM_windows_scene_data_sync(const ListBase *win_lb, 
Scene *scene)
        }
 }
 
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, Scene *scene, 
const int twmode)
+{
+       for (wmWindow *win = win_lb->first; win; win = win->next) {
+               if (WM_window_get_active_scene(win) == scene) {
+                       
BKE_screen_view3d_twmode_remove(WM_window_get_active_screen(win), twmode);
+               }
+       }
+}
+
+Scene *WM_windows_scene_get_from_screen(const wmWindowManager *wm, const 
bScreen *screen)
+{
+       for (wmWindow *win = wm->windows.first; win; win = win->next) {
+               if (WM_window_get_active_screen(win) == screen) {
+                       return WM_window_get_active_scene(win);
+               }
+       }
+
+       return NULL;
+}
+
 Scene *WM_window_get_active_scene(const wmWindow *win)
 {
        return win->scene;
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c 
b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 429cb25..8d749d7 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -308,6 +308,7 @@ struct MenuType *WM_menutype_find(const char *idname, bool 
quiet) RET_NULL
 void WM_operator_stack_clear(struct wmWindowManager *wm) RET_NONE
 void WM_operator_handlers_clear(wmWindowManager *wm, struct wmOperatorType 
*ot) RET_NONE
 void WM_windows_scene_data_sync(const struct ListBase *win_lb, struct Scene 
*scene) RET_NONE
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager 
*wm, const struct bScreen *screen) RET_NULL
 struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) 
RET_NULL
 struct Scene *WM_window_get_active_scene(const struct wmWindow *win) RET_NULL
 void WM_window_set_active_scene(struct Main *bmain, struct bContext *C, struct 
wmWindow *win, struct Scene *scene_new) RET_NONE

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

Reply via email to