[Bf-blender-cvs] [c435be7] workspaces: Main work to move active scene into window

Julian Eisel noreply at git.blender.org
Thu Dec 8 01:46:52 CET 2016


Commit: c435be7f9041582026a913309f048922de3c2ace
Author: Julian Eisel
Date:   Thu Dec 8 00:17:34 2016 +0100
Branches: workspaces
https://developer.blender.org/rBc435be7f9041582026a913309f048922de3c2ace

Main work to move active scene into window

Added scene as argument to area/region listeners. It's only used in a really few cases though, I might instead do a lookup.

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

M	source/blender/blenkernel/BKE_screen.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/blendfile.c
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/depsgraph.c
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/editors/animation/anim_markers.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/screen/area.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/screen/screen_intern.h
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/screen/workspace_edit.c
M	source/blender/editors/screen/workspace_layout_edit.c
M	source/blender/editors/space_action/space_action.c
M	source/blender/editors/space_buttons/space_buttons.c
M	source/blender/editors/space_clip/space_clip.c
M	source/blender/editors/space_console/space_console.c
M	source/blender/editors/space_file/space_file.c
M	source/blender/editors/space_graph/space_graph.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_info/space_info.c
M	source/blender/editors/space_logic/space_logic.c
M	source/blender/editors/space_nla/space_nla.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_outliner/space_outliner.c
M	source/blender/editors/space_script/space_script.c
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/space_text/space_text.c
M	source/blender/editors/space_time/space_time.c
M	source/blender/editors/space_userpref/space_userpref.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/makesdna/DNA_windowmanager_types.h
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/windowmanager/intern/wm_draw.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_stereo.c
M	source/blender/windowmanager/intern/wm_window.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c
M	source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp

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

diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 80e6d15..13d59e8 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -82,7 +82,7 @@ typedef struct SpaceType {
 	/* exit is called when the area is hidden or removed */
 	void (*exit)(struct wmWindowManager *, struct ScrArea *);
 	/* Listeners can react to bContext changes */
-	void (*listener)(struct bScreen *sc, struct ScrArea *, struct wmNotifier *);
+	void (*listener)(struct bScreen *sc, struct ScrArea *, struct wmNotifier *, const struct Scene *);
 	
 	/* refresh context, called after filereads, ED_area_tag_refresh() */
 	void (*refresh)(const struct bContext *, struct ScrArea *);
@@ -133,7 +133,7 @@ typedef struct ARegionType {
 	/* draw entirely, view changes should be handled here */
 	void (*draw)(const struct bContext *, struct ARegion *);
 	/* contextual changes should be handled here */
-	void (*listener)(struct bScreen *sc, struct ScrArea *, struct ARegion *, struct wmNotifier *);
+	void (*listener)(struct bScreen *, struct ScrArea *, struct ARegion *, struct wmNotifier *, const struct Scene *);
 	
 	void (*free)(struct ARegion *);
 
@@ -306,7 +306,7 @@ unsigned int BKE_screen_view3d_layer_active(
 unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
 
 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
-void BKE_screen_view3d_scene_sync(struct bScreen *sc);
+void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
 void BKE_screen_view3d_main_sync(ListBase *screen_lb, 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);
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index a0cb579..c84ef4f 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -57,10 +57,7 @@ struct WorkSpaceLayout *BKE_workspace_active_layout_get(const struct WorkSpace *
 void                    BKE_workspace_active_layout_set(struct WorkSpace *ws, struct WorkSpaceLayout *layout) ATTR_NONNULL(1);
 struct bScreen *BKE_workspace_active_screen_get(const struct WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void            BKE_workspace_active_screen_set(struct WorkSpace *ws, struct bScreen *screen) ATTR_NONNULL(1);
-struct Scene   *BKE_workspace_active_scene_get(const struct WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-void            BKE_workspace_active_scene_set(struct WorkSpace *ws, struct Scene *scene);
 
 struct bScreen *BKE_workspace_layout_screen_get(const struct WorkSpaceLayout *layout) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-struct Scene *BKE_workspace_layout_scene_get(const struct WorkSpaceLayout *layout) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 
 #endif /* __BKE_WORKSPACE_H__ */
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index a5018ab..9d9ee30 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -93,7 +93,7 @@ static void clean_paths(Main *main)
 static bool wm_scene_is_visible(wmWindowManager *wm, Scene *scene)
 {
 	for (wmWindow *win = wm->windows.first; win; win = win->next) {
-		if (BKE_workspace_active_scene_get(win->workspace) == scene) {
+		if (win->scene == scene) {
 			return true;
 		}
 	}
@@ -207,8 +207,7 @@ static void setup_app_data(
 			wmWindowManager *wm = bfd->main->wm.first;
 			if (wm_scene_is_visible(wm, bfd->curscene) == false) {
 				curscene = bfd->curscene;
-				curscreen->scene = curscene;
-				BKE_screen_view3d_scene_sync(curscreen);
+				BKE_screen_view3d_scene_sync(curscreen, curscene);
 			}
 		}
 	}
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index f4ced80..5d33dfe 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -833,10 +833,11 @@ void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
 void CTX_wm_window_set(bContext *C, wmWindow *win)
 {
 	C->wm.window = win;
+	if (C->wm.window) {
+		C->data.scene = C->wm.window->scene;
+	}
 	C->wm.workspace = (win) ? win->workspace : NULL;
 	C->wm.screen = (win) ? BKE_workspace_active_screen_get(C->wm.workspace) : NULL;
-	if (C->wm.screen)
-		C->data.scene = C->wm.screen->scene;
 	C->wm.area = NULL;
 	C->wm.region = NULL;
 }
@@ -845,8 +846,6 @@ void CTX_wm_workspace_set(bContext *C, WorkSpace *ws)
 {
 	C->wm.workspace = ws;
 	C->wm.screen = (C->wm.workspace) ? BKE_workspace_active_screen_get(C->wm.workspace) : NULL;
-	if (C->wm.screen)
-		C->data.scene = C->wm.screen->scene;
 	C->wm.area = NULL;
 	C->wm.region = NULL;
 }
@@ -854,8 +853,6 @@ void CTX_wm_workspace_set(bContext *C, WorkSpace *ws)
 void CTX_wm_screen_set(bContext *C, bScreen *screen)
 {
 	C->wm.screen = screen;
-	if (C->wm.screen)
-		C->data.scene = C->wm.screen->scene;
 	C->wm.area = NULL;
 	C->wm.region = NULL;
 }
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 49aeca2..db62e7c 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -2265,8 +2265,8 @@ static void dag_current_scene_layers(Main *bmain, ListBase *lb)
 		for (win = wm->windows.first; win; win = win->next) {
 			bScreen *screen = BKE_workspace_active_screen_get(win->workspace);
 
-			if (screen && screen->scene->theDag) {
-				Scene *scene = screen->scene;
+			if (win->scene->theDag) {
+				Scene *scene = win->scene;
 				DagSceneLayer *dsl;
 
 				if (scene->id.tag & LIB_TAG_DOIT) {
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 9f100d2..9058f6b 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -61,6 +61,7 @@
 #include "DNA_sound_types.h"
 #include "DNA_text_types.h"
 #include "DNA_vfont_types.h"
+#include "DNA_windowmanager_types.h"
 #include "DNA_world_types.h"
 
 #include "BLI_utildefines.h"
@@ -654,13 +655,6 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
 				break;
 			}
 
-			case ID_SCR:
-			{
-				bScreen *screen = (bScreen *) id;
-				CALLBACK_INVOKE(screen->scene, IDWALK_USER_ONE);
-				break;
-			}
-
 			case ID_WO:
 			{
 				World *world = (World *) id;
@@ -807,14 +801,24 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
 				break;
 			}
 
+			case ID_WM:
+			{
+				wmWindowManager *wm = (wmWindowManager *)id;
+
+				for (wmWindow *win = wm->windows.first; win; win = win->next) {
+					CALLBACK_INVOKE(win->scene, IDWALK_USER_ONE);
+				}
+				break;
+			}
+
 			/* Nothing needed for those... */
+			case ID_SCR:
 			case ID_IM:
 			case ID_VF:
 			case ID_TXT:
 			case ID_SO:
 			case ID_AR:
 			case ID_GD:
-			case ID_WM:
 			case ID_PAL:
 			case ID_PC:
 			case ID_CF:
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 3a39b33..1be1a85 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -596,7 +596,7 @@ void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
 	}
 }
 
-void BKE_screen_view3d_scene_sync(bScreen *sc)
+void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
 {
 	/* are there cameras in the views that are not in the scene? */
 	ScrArea *sa;
@@ -605,7 +605,7 @@ void BKE_screen_view3d_scene_sync(bScreen *sc)
 		for (sl = sa->spacedata.first; sl; sl = sl->next) {
 			if (sl->spacetype == SPACE_VIEW3D) {
 				View3D *v3d = (View3D *) sl;
-				BKE_screen_view3d_sync(v3d, sc->scene);
+				BKE_screen_view3d_sync(v3d, scene);
 			}
 		}
 	}
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 2fe1c24..74291e8 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -145,22 +145,8 @@ void BKE_workspace_active_screen_set(WorkSpace *ws, bScreen *screen)
 	ws->act_layout = BKE_workspace_layout_find(ws, screen);
 }
 
-Scene *BKE_workspace_active_scene_get(const WorkSpace *ws)
-{
-	return ws->act_layout->screen->scene;
-}
-void BKE_workspace_active_scene_set(WorkSpace *ws, Scene *scene)
-{
-	ws->act_layout->screen->scene = scene;
-}
-
 
 bScreen *BKE_workspace_layout_screen_get(const WorkSpaceLayout *layout)
 {
 	return layout->screen;
 }
-
-Scene *BKE_workspace_layout_scene_get(const WorkSpaceLayout *layout)
-{
-	return layout->screen->scene;
-}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 47349d0..b19334f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -145,6 +145,7 @@
 #include "BKE_outliner_treehash.h"
 #include "BKE_sound.h"
 #include "BKE_colortools.h"
+#include "BKE_workspace.h"
 
 #include "NOD_common.h"
 #include "NOD_socket.h"
@@ -5791,6 +5792,34 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
 	wm->is_interface_locked = 0;
 }
 
+/**
+ * \brief Window data compatibility conversion for 2.8
+ *
+ *  *  Active screen isn't stored directly in window anymore, but in the active workspace.
+ *     We already created a new workspace for each screen in blo_do_versions_270, here we need
+ *     to find and activate the workspace that contains the active screen of the old file.
+ *  *  Active scene isn't stored in screen anymore, but in window.
+ */
+static void lib_link_window_280_conversion(FileData *fd, Main *main, wmWindow *win)
+{
+	if (MAIN_VERSION_ATLEAST(main, 278, 5)) {
+		return;
+	}
+
+	if (win->screen) {
+		win->screen = newlibadr(fd, NULL, win->screen);
+		win->workspace = BLI_findstring(&main->workspaces, win->screen->id.name + 2,
+		                                offsetof(ID, name) + 2);
+		/* Deprecated from now on! */
+		win->screen = NULL;
+	}
+
+	{
+		const bScreen *screen = BKE_workspace_active_s

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list