[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