[Bf-blender-cvs] [ca90d66c17] temp-workspace-multi-window: Make screen-layouts of duplicated windows much less broken :)

Julian Eisel noreply at git.blender.org
Tue Mar 7 20:35:39 CET 2017


Commit: ca90d66c17096db88810a0453e44ff1fbe4195e0
Author: Julian Eisel
Date:   Tue Mar 7 20:34:06 2017 +0100
Branches: temp-workspace-multi-window
https://developer.blender.org/rBca90d66c17096db88810a0453e44ff1fbe4195e0

Make screen-layouts of duplicated windows much less broken :)

There are probably still some issues/glitches after duplicating a window
here and there, but most of it should work fine by now.

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

M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/workspace/workspace_edit.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index d1ac491e4e..e48d379775 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -838,7 +838,7 @@ void CTX_wm_window_set(bContext *C, wmWindow *win)
 		C->data.scene = C->wm.window->scene;
 	}
 	C->wm.workspace = (win) ? BKE_workspace_active_get(win->workspace_hook) : NULL;
-	C->wm.screen = (win) ? BKE_workspace_active_screen_get(C->wm.workspace) : NULL;
+	C->wm.screen = (win) ? BKE_workspace_hook_active_screen_get(win->workspace_hook) : NULL;
 	C->wm.area = NULL;
 	C->wm.region = NULL;
 }
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 4ba48260d3..4050e2d150 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2542,8 +2542,7 @@ void BKE_image_walk_all_users(const Main *mainp, void *customdata,
 	/* image window, compo node users */
 	for (wm = mainp->wm.first; wm; wm = wm->id.next) { /* only 1 wm */
 		for (win = wm->windows.first; win; win = win->next) {
-			WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
-			const bScreen *screen = BKE_workspace_active_screen_get(workspace);
+			const bScreen *screen = BKE_workspace_hook_active_screen_get(win->workspace_hook);
 
 			for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
 				if (sa->spacetype == SPACE_VIEW3D) {
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 7709ca9137..da5720237c 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1404,8 +1404,7 @@ static bool check_rendered_viewport_visible(Main *bmain)
 	wmWindowManager *wm = bmain->wm.first;
 	wmWindow *window;
 	for (window = wm->windows.first; window != NULL; window = window->next) {
-		const WorkSpace *workspace = BKE_workspace_active_get(window->workspace_hook);
-		const bScreen *screen = BKE_workspace_active_screen_get(workspace);
+		const bScreen *screen = BKE_workspace_hook_active_screen_get(window->workspace_hook);
 
 		for (ScrArea *area = screen->areabase.first; area != NULL; area = area->next) {
 			View3D *v3d = area->spacedata.first;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index fe0d454da9..2c13d66724 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1086,7 +1086,6 @@ static void current_screen_compat(Main *mainvar, bScreen **r_screen, Scene **r_s
 {
 	wmWindowManager *wm;
 	wmWindow *window = NULL;
-	WorkSpace *workspace;
 
 	/* find a global current screen in the first open window, to have
 	 * a reasonable default for reading in older versions */
@@ -1111,8 +1110,7 @@ static void current_screen_compat(Main *mainvar, bScreen **r_screen, Scene **r_s
 		}
 	}
 
-	workspace = BKE_workspace_active_get(window->workspace_hook);
-	*r_screen = (window) ? BKE_workspace_active_screen_get(workspace) : NULL;
+	*r_screen = (window) ? BKE_workspace_hook_active_screen_get(window->workspace_hook) : NULL;
 	*r_scene = (window) ? window->scene : NULL;
 }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index efef03f9eb..53f245b2b0 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -302,8 +302,7 @@ void DEG_graph_on_visible_update(Main *bmain, Scene *scene)
 		     win = (wmWindow *)win->next)
 		{
 			if (win->scene->id.tag & LIB_TAG_DOIT) {
-				const WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
-				bScreen *screen = BKE_workspace_active_screen_get(workspace);
+				bScreen *screen = BKE_workspace_hook_active_screen_get(win->workspace_hook);
 
 				graph->layers |= BKE_screen_visible_layers(screen, win->scene);
 				win->scene->id.tag &= ~LIB_TAG_DOIT;
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index a81f271f05..bd6dcf8715 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -138,7 +138,7 @@ struct WorkSpaceLayout *ED_workspace_layout_duplicate(struct WorkSpace *workspac
 bool ED_workspace_delete(struct Main *bmain, struct bContext *C,
                          struct wmWindowManager *wm, struct wmWindow *win,
                          struct WorkSpace *ws);
-void ED_workspace_scene_data_sync(struct WorkSpace *workspace, Scene *scene);
+void ED_workspace_scene_data_sync(struct WorkSpaceHook *hook, Scene *scene);
 bool ED_workspace_layout_delete(struct bContext *C, struct WorkSpace *workspace, struct WorkSpaceLayout *layout_old) ATTR_NONNULL();
 bool ED_workspace_layout_cycle(struct bContext *C, struct WorkSpace *workspace, const short direction) ATTR_NONNULL();
 
diff --git a/source/blender/editors/workspace/workspace_edit.c b/source/blender/editors/workspace/workspace_edit.c
index 1955300c9e..b7487c156f 100644
--- a/source/blender/editors/workspace/workspace_edit.c
+++ b/source/blender/editors/workspace/workspace_edit.c
@@ -122,8 +122,7 @@ bool ED_workspace_change(bContext *C, wmWindowManager *wm, wmWindow *win, WorkSp
 {
 	Main *bmain = CTX_data_main(C);
 	Scene *scene = CTX_data_scene(C);
-	WorkSpace *workspace_old = WM_window_get_active_workspace(win);
-	bScreen *screen_old = BKE_workspace_active_screen_get(workspace_old);
+	bScreen *screen_old = BKE_workspace_hook_active_screen_get(win->workspace_hook);
 	bScreen *screen_new;
 
 	BKE_workspace_change_prepare(bmain, win->workspace_hook, workspace_new);
@@ -131,6 +130,8 @@ bool ED_workspace_change(bContext *C, wmWindowManager *wm, wmWindow *win, WorkSp
 	screen_new = screen_change_prepare(screen_old, screen_new, bmain, C, win);
 
 	if (screen_new) {
+		WorkSpace *workspace_old = WM_window_get_active_workspace(win);
+
 		BKE_workspace_active_set(win->workspace_hook, workspace_new);
 
 		/* update screen *after* changing workspace - which also causes the actual screen change */
@@ -201,11 +202,11 @@ bool ED_workspace_delete(Main *bmain, bContext *C, wmWindowManager *wm, wmWindow
 
 /**
  * Some editor data may need to be synced with scene data (3D View camera and layers).
- * This function ensures data is synced for editors in active layout of \a workspace.
+ * This function ensures data is synced for editors in active layout of \a hook.
  */
-void ED_workspace_scene_data_sync(WorkSpace *workspace, Scene *scene)
+void ED_workspace_scene_data_sync(WorkSpaceHook *hook, Scene *scene)
 {
-	bScreen *screen = BKE_workspace_active_screen_get(workspace);
+	bScreen *screen = BKE_workspace_hook_active_screen_get(hook);
 	BKE_screen_view3d_scene_sync(screen, scene);
 }
 
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 855f0b98d0..ee1aebdd15 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1754,7 +1754,7 @@ void WM_windows_scene_data_sync(const ListBase *win_lb, Scene *scene)
 {
 	for (wmWindow *win = win_lb->first; win; win = win->next) {
 		if (WM_window_get_active_scene(win) == scene) {
-			ED_workspace_scene_data_sync(WM_window_get_active_workspace(win), scene);
+			ED_workspace_scene_data_sync(win->workspace_hook, scene);
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list