[Bf-blender-cvs] [6e0e156c830] workspaces: Store active screen-layout per window

Julian Eisel noreply at git.blender.org
Mon Mar 13 23:23:30 CET 2017


Commit: 6e0e156c830f7d5886a6258a2f82835ef0d679fa
Author: Julian Eisel
Date:   Mon Mar 13 23:21:52 2017 +0100
Branches: workspaces
https://developer.blender.org/rB6e0e156c830f7d5886a6258a2f82835ef0d679fa

Store active screen-layout per window

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

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.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/screen_ops.c
M	source/blender/editors/workspace/workspace_edit.c
M	source/blender/editors/workspace/workspace_layout_edit.c
M	source/blender/makesdna/dna_workspace_types.h
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/makesrna/intern/rna_workspace.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index d8f5f500726..87720264653 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -45,7 +45,7 @@ class INFO_HT_header(Header):
             layout.separator()
         else:
             layout.template_ID(window, "workspace", new="workspace.workspace_new", unlink="workspace.workspace_delete")
-            layout.template_ID_preview(workspace, "screen", workspace, "screens", new="screen.new", unlink="screen.delete", rows=2, cols=6)
+            layout.template_ID_preview(window, "screen", workspace, "screens", new="screen.new", unlink="screen.delete", rows=2, cols=6)
 
         if hasattr(workspace, 'object_mode'):
             act_mode_item = bpy.types.Object.bl_rna.properties['mode'].enum_items[workspace.object_mode]
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 77469f11d96..0f433ae1865 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -174,7 +174,6 @@ struct SpaceClip *CTX_wm_space_clip(const bContext *C);
 
 void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm);
 void CTX_wm_window_set(bContext *C, struct wmWindow *win);
-void CTX_wm_workspace_set(bContext *C, struct WorkSpace *ws);
 void CTX_wm_screen_set(bContext *C, struct bScreen *screen); /* to be removed */
 void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
 void CTX_wm_region_set(bContext *C, struct ARegion *region);
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 7a09118b814..8e5a406f7e2 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -99,10 +99,10 @@ WorkSpace *BKE_workspace_active_get(WorkSpaceInstanceHook *hook) ATTR_NONNULL()
 void       BKE_workspace_active_set(WorkSpaceInstanceHook *hook, WorkSpace *workspace) ATTR_NONNULL(1);
 struct ID *BKE_workspace_id_get(WorkSpace *workspace);
 const char *BKE_workspace_name_get(const WorkSpace *workspace);
-WorkSpaceLayout *BKE_workspace_active_layout_get(const struct WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-void             BKE_workspace_active_layout_set(WorkSpace *ws, WorkSpaceLayout *layout) ATTR_NONNULL(1);
-struct bScreen *BKE_workspace_active_screen_get(const WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-void            BKE_workspace_active_screen_set(WorkSpace *ws, struct bScreen *screen) ATTR_NONNULL(1);
+WorkSpaceLayout *BKE_workspace_active_layout_get(const WorkSpaceInstanceHook *hook) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void             BKE_workspace_active_layout_set(WorkSpaceInstanceHook *hook, WorkSpaceLayout *layout) ATTR_NONNULL(1);
+struct bScreen *BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void            BKE_workspace_active_screen_set(WorkSpaceInstanceHook *hook, struct bScreen *screen) ATTR_NONNULL(1);
 enum ObjectMode BKE_workspace_object_mode_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 #ifdef USE_WORKSPACE_MODE
 void            BKE_workspace_object_mode_set(WorkSpace *workspace, const enum ObjectMode mode) ATTR_NONNULL();
@@ -110,8 +110,8 @@ void            BKE_workspace_object_mode_set(WorkSpace *workspace, const enum O
 struct SceneLayer *BKE_workspace_render_layer_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void               BKE_workspace_render_layer_set(WorkSpace *workspace, struct SceneLayer *layer) ATTR_NONNULL(1);
 struct ListBase *BKE_workspace_layouts_get(WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-WorkSpaceLayout *BKE_workspace_new_layout_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-void             BKE_workspace_new_layout_set(WorkSpace *workspace, WorkSpaceLayout *layout) ATTR_NONNULL(1);
+WorkSpaceLayout *BKE_workspace_temp_layout_store_get(const WorkSpaceInstanceHook *hook) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void             BKE_workspace_temp_layout_store_set(WorkSpaceInstanceHook *hook, WorkSpaceLayout *layout) ATTR_NONNULL(1);
 
 WorkSpace *BKE_workspace_next_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 WorkSpace *BKE_workspace_prev_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index d1ac491e4e7..0318c62d6c8 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -838,15 +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.area = NULL;
-	C->wm.region = NULL;
-}
-
-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;
+	C->wm.screen = (win) ? BKE_workspace_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 59810405849..12778d624f2 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2542,7 +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) {
-			const bScreen *screen = BKE_workspace_active_screen_get(BKE_workspace_active_get(win->workspace_hook));
+			const bScreen *screen = BKE_workspace_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 7b95eea395f..c3d510ba912 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1404,7 +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 bScreen *screen = BKE_workspace_active_screen_get(BKE_workspace_active_get(window->workspace_hook));
+		const bScreen *screen = BKE_workspace_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/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 293ceaddb4b..e51f3619535 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -231,32 +231,32 @@ const char *BKE_workspace_name_get(const WorkSpace *workspace)
 	return workspace->id.name + 2;
 }
 
-WorkSpaceLayout *BKE_workspace_active_layout_get(const WorkSpace *workspace)
+WorkSpaceLayout *BKE_workspace_active_layout_get(const WorkSpaceInstanceHook *hook)
 {
-	return workspace->act_layout;
+	return hook->act_layout;
 }
-void BKE_workspace_active_layout_set(WorkSpace *workspace, WorkSpaceLayout *layout)
+void BKE_workspace_active_layout_set(WorkSpaceInstanceHook *hook, WorkSpaceLayout *layout)
 {
-	workspace->act_layout = layout;
+	hook->act_layout = layout;
 }
 
-WorkSpaceLayout *BKE_workspace_new_layout_get(const WorkSpace *workspace)
+WorkSpaceLayout *BKE_workspace_temp_layout_store_get(const WorkSpaceInstanceHook *hook)
 {
-	return workspace->new_layout;
+	return hook->temp_layout_store;
 }
-void BKE_workspace_new_layout_set(WorkSpace *workspace, WorkSpaceLayout *layout)
+void BKE_workspace_temp_layout_store_set(WorkSpaceInstanceHook *hook, WorkSpaceLayout *layout)
 {
-	workspace->new_layout = layout;
+	hook->temp_layout_store = layout;
 }
 
-bScreen *BKE_workspace_active_screen_get(const WorkSpace *ws)
+bScreen *BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook)
 {
-	return ws->act_layout->screen;
+	return hook->act_layout->screen;
 }
-void BKE_workspace_active_screen_set(WorkSpace *ws, bScreen *screen)
+void BKE_workspace_active_screen_set(WorkSpaceInstanceHook *hook, bScreen *screen)
 {
 	/* we need to find the WorkspaceLayout that wraps this screen */
-	ws->act_layout = BKE_workspace_layout_find(ws, screen);
+	hook->act_layout = BKE_workspace_layout_find(hook->active, screen);
 }
 
 #ifdef USE_WORKSPACE_MODE
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d943760fe04..2873fcef9c1 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2781,19 +2781,15 @@ static void lib_link_workspace_instance_hook(FileData *fd, WorkSpaceInstanceHook
 
 static void direct_link_workspace(FileData *fd, WorkSpace *ws)
 {
-	WorkSpaceLayout *act_layout = BKE_workspace_active_layout_get(ws);
 	SceneLayer *layer = BKE_workspace_render_layer_get(ws);
-
 	link_list(fd, BKE_workspace_layouts_get(ws));
-
-	act_layout = newdataadr(fd, act_layout);
-	BKE_workspace_active_layout_set(ws, act_layout);
 	BKE_workspace_render_layer_set(ws, newdataadr(fd, layer));
 }
 
 static void direct_link_workspace_instance_hook(FileData *fd, WorkSpaceInstanceHook *hook)
 {
-	UNUSED_VARS(fd, hook);
+	WorkSpaceLayout *act_layout = BKE_workspace_active_layout_get(hook);
+	BKE_workspace_active_layout_set(hook, newdataadr(fd, act_layout));
 }
 
 /* ************ READ MOTION PATHS *************** */
@@ -6370,7 +6366,9 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
 	
 	for (win = wm->windows.first; win; win = win->next) {
 		win->workspace_hook = newdataadr(fd, win->workspace_hook);
-		direct_link_workspace_instance_hook(fd, win->workspace_hook);
+		if (win->workspace_hook) { /* NULL for old files */
+			direct_link

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list