[Bf-blender-cvs] [f992b39e38] temp-workspace-multi-window: Don't copy workspace when copying window
Julian Eisel
noreply at git.blender.org
Tue Mar 7 20:07:26 CET 2017
Commit: f992b39e38d47ba17b17d543673b3e96bd23fbef
Author: Julian Eisel
Date: Tue Mar 7 20:03:51 2017 +0100
Branches: temp-workspace-multi-window
https://developer.blender.org/rBf992b39e38d47ba17b17d543673b3e96bd23fbef
Don't copy workspace when copying window
This kinda works, however screens are still completly broken after that
:) But: getting there!
===================================================================
M source/blender/blenkernel/BKE_workspace.h
M source/blender/blenkernel/intern/workspace.c
M source/blender/windowmanager/intern/wm_window.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 99c072a026..3b06bd6ab0 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -116,6 +116,7 @@ WorkSpaceLayout *BKE_workspace_active_layout_get(const struct WorkSpace *ws) GET
void BKE_workspace_active_layout_set(WorkSpace *ws, WorkSpaceLayout *layout) SETTER_ATTRS;
struct bScreen *BKE_workspace_active_screen_get(const WorkSpace *ws) GETTER_ATTRS;
void BKE_workspace_active_screen_set(const WorkSpaceHook *hook, struct bScreen *screen) SETTER_ATTRS;
+struct bScreen *BKE_workspace_hook_active_screen_get(const WorkSpaceHook *hook) GETTER_ATTRS;
enum ObjectMode BKE_workspace_object_mode_get(const WorkSpace *workspace) GETTER_ATTRS;
#ifdef USE_WORKSPACE_MODE
void BKE_workspace_object_mode_set(WorkSpace *workspace, const enum ObjectMode mode) SETTER_ATTRS;
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index cb75240e20..9d59023de6 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -299,6 +299,17 @@ void BKE_workspace_active_screen_set(const WorkSpaceHook *hook, bScreen *screen)
workspace->act_layout = layout;
workspace->act_layout_type = layout->type;
}
+bScreen *BKE_workspace_hook_active_screen_get(const WorkSpaceHook *hook)
+{
+ /* XXX should be able to get screen from hook directly (no iterating) */
+ for (WorkSpaceLayout *layout = hook->layouts.first; layout; layout = layout->next) {
+ if (layout->type == hook->act_workspace->act_layout_type) {
+ return layout->screen;
+ }
+ }
+
+ return NULL;
+}
#ifdef USE_WORKSPACE_MODE
ObjectMode BKE_workspace_object_mode_get(const WorkSpace *workspace)
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 88671a4743..855f0b98d0 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -253,7 +253,6 @@ wmWindow *wm_window_new(bContext *C)
/* part of wm_window.c api */
wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
{
- Main *bmain = CTX_data_main(C);
wmWindow *win_dst = wm_window_new(C);
WorkSpace *workspace_src = WM_window_get_active_workspace(win_src);
Scene *scene = WM_window_get_active_scene(win_src);
@@ -265,7 +264,8 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
win_dst->sizey = win_src->sizey;
win_dst->scene = scene;
- WM_window_set_active_workspace(win_dst, ED_workspace_duplicate(workspace_src, bmain, win_dst));
+ WM_window_set_active_workspace(win_dst, workspace_src);
+ /* the active screen that has been created for this workspace */
new_screen = WM_window_get_active_screen(win_dst);
BLI_strncpy(win_dst->screenname, new_screen->id.name + 2, sizeof(win_dst->screenname));
@@ -1817,7 +1817,7 @@ bScreen *WM_window_get_active_screen(const wmWindow *win)
{
const WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
/* May be NULL in rare cases like closing Blender */
- return (LIKELY(workspace != NULL) ? BKE_workspace_active_screen_get(workspace) : NULL);
+ return (LIKELY(workspace != NULL) ? BKE_workspace_hook_active_screen_get(win->workspace_hook) : NULL);
}
void WM_window_set_active_screen(wmWindow *win, bScreen *screen)
{
More information about the Bf-blender-cvs
mailing list