Commit: 0bd8b8fc7175e201e5b8c8460e1b5e266a440f7f
Author: Julian Eisel
Date:   Sat Dec 24 01:31:32 2016 +0100
Branches: workspaces
https://developer.blender.org/rB0bd8b8fc7175e201e5b8c8460e1b5e266a440f7f

Add/use function to get/set window workspace

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

M       source/blender/editors/screen/screen_edit.c
M       source/blender/editors/screen/screen_ops.c
M       source/blender/editors/screen/workspace_edit.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/wm.c
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_files.c
M       source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/editors/screen/screen_edit.c 
b/source/blender/editors/screen/screen_edit.c
index 8bc923e..159b111 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -956,8 +956,8 @@ void ED_screens_initialize(wmWindowManager *wm)
        wmWindow *win;
        
        for (win = wm->windows.first; win; win = win->next) {
-               if (win->workspace == NULL) {
-                       win->workspace = G.main->workspaces.first;
+               if (WM_window_get_active_workspace(win) == NULL) {
+                       WM_window_set_active_workspace(win, 
G.main->workspaces.first);
                }
 
                ED_screen_refresh(wm, win);
@@ -1450,6 +1450,7 @@ void ED_screen_full_restore(bContext *C, ScrArea *sa)
 ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const 
short state)
 {
        wmWindowManager *wm = CTX_wm_manager(C);
+       WorkSpace *workspace = WM_window_get_active_workspace(win);
        bScreen *sc, *oldscreen;
        ARegion *ar;
 
@@ -1506,7 +1507,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow 
*win, ScrArea *sa, const s
 
                ED_screen_set(C, sc);
 
-               BKE_workspace_layout_remove(win->workspace, layout_old, 
CTX_data_main(C));
+               BKE_workspace_layout_remove(workspace, layout_old, 
CTX_data_main(C));
 
                /* After we've restored back to SCREENNORMAL, we have to wait 
with
                 * screen handling as it uses the area coords which aren't 
updated yet.
@@ -1516,7 +1517,6 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow 
*win, ScrArea *sa, const s
        }
        else {
                /* change from SCREENNORMAL to new state */
-               WorkSpace *workspace = win->workspace;
                WorkSpaceLayout *layout_new;
                ScrArea *newa;
                char newname[MAX_ID_NAME - 2];
diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index 74222a9..86e5f1f 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -979,8 +979,10 @@ static void SCREEN_OT_area_swap(wmOperatorType *ot)
 /* operator callback */
 static int area_dupli_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 {
-       wmWindow *newwin, *win;
+       wmWindow *newwin, *win = CTX_wm_window(C);
        Scene *scene;
+       WorkSpace *workspace_old = WM_window_get_active_workspace(win);
+       WorkSpace *workspace_new;
        WorkSpaceLayout *layout_new;
        bScreen *newsc, *sc;
        ScrArea *sa;
@@ -1016,9 +1018,12 @@ static int area_dupli_invoke(bContext *C, wmOperator 
*op, const wmEvent *event)
        *newwin->stereo3d_format = *win->stereo3d_format;
 
        newwin->scene = scene;
-       newwin->workspace = BKE_workspace_add(CTX_data_main(C), 
BKE_workspace_name_get(win->workspace));
+
+       workspace_new = BKE_workspace_add(CTX_data_main(C), 
BKE_workspace_name_get(workspace_old));
+       WM_window_set_active_workspace(newwin, workspace_new);
+
        /* allocs new screen and adds to newly created window, using window 
size */
-       layout_new = ED_workspace_layout_add(newwin->workspace, newwin, 
sc->id.name + 2);
+       layout_new = ED_workspace_layout_add(workspace_new, newwin, sc->id.name 
+ 2);
        newsc = BKE_workspace_layout_screen_get(layout_new);
        WM_window_set_active_layout(newwin, layout_new);
 
diff --git a/source/blender/editors/screen/workspace_edit.c 
b/source/blender/editors/screen/workspace_edit.c
index 31527cd..ef5375f 100644
--- a/source/blender/editors/screen/workspace_edit.c
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -59,7 +59,8 @@
 bool ED_workspace_change(bContext *C, wmWindow *win, WorkSpace *ws_new)
 {
        Main *bmain = CTX_data_main(C);
-       bScreen *screen_old = BKE_workspace_active_screen_get(win->workspace);
+       WorkSpace *workspace_old = WM_window_get_active_workspace(win);
+       bScreen *screen_old = BKE_workspace_active_screen_get(workspace_old);
        bScreen *screen_new = BKE_workspace_active_screen_get(ws_new);
 
        if (!(screen_new = screen_set_ensure_valid(bmain, win, screen_new))) {
@@ -68,7 +69,7 @@ bool ED_workspace_change(bContext *C, wmWindow *win, 
WorkSpace *ws_new)
 
        if (screen_old != screen_new) {
                screen_set_prepare(C, win, screen_new, screen_old);
-               win->workspace = ws_new;
+               WM_window_set_active_workspace(win, ws_new);
                screen_set_refresh(bmain, C, win);
        }
        BLI_assert(CTX_wm_workspace(C) == ws_new);
@@ -108,7 +109,7 @@ bool ED_workspace_delete(Main *bmain, bContext *C, wmWindow 
*win, WorkSpace *ws)
                return false;
        }
 
-       if (win->workspace == ws) {
+       if (WM_window_get_active_workspace(win) == ws) {
                WorkSpace *prev = BKE_workspace_prev_get(ws);
                WorkSpace *next = BKE_workspace_next_get(ws);
 
@@ -140,10 +141,8 @@ static int workspace_new_exec(bContext *C, wmOperator 
*UNUSED(op))
 {
        Main *bmain = CTX_data_main(C);
        wmWindow *win = CTX_wm_window(C);
-       WorkSpace *workspace_old = win->workspace;
-       WorkSpace *workspace;
+       WorkSpace *workspace = 
ED_workspace_duplicate(WM_window_get_active_workspace(win), bmain, win);
 
-       workspace = ED_workspace_duplicate(workspace_old, bmain, win);
        WM_event_add_notifier(C, NC_WORKSPACE | ND_WORKSPACE_SET, workspace);
 
        return OPERATOR_FINISHED;
@@ -166,7 +165,7 @@ static int workspace_delete_exec(bContext *C, wmOperator 
*UNUSED(op))
        Main *bmain = CTX_data_main(C);
        wmWindow *win = CTX_wm_window(C);
 
-       ED_workspace_delete(bmain, C, win, win->workspace);
+       ED_workspace_delete(bmain, C, win, WM_window_get_active_workspace(win));
 
        return OPERATOR_FINISHED;
 }
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 2fa4ebb..809f086 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -106,6 +106,8 @@ void WM_windows_scene_data_sync(const ListBase *win_lb, 
struct Scene *scene) ATT
 struct Scene *WM_window_get_active_scene(const struct wmWindow *win) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void          WM_window_set_active_scene(struct Main *bmain, struct bContext 
*C, struct wmWindow *win,
                                          struct Scene *scene_new) 
ATTR_NONNULL();
+struct WorkSpace *WM_window_get_active_workspace(const struct wmWindow *win) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void              WM_window_set_active_workspace(struct wmWindow *win, struct 
WorkSpace *workspace) ATTR_NONNULL(1);
 struct WorkSpaceLayout *WM_window_get_active_layout(const struct wmWindow 
*win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void                    WM_window_set_active_layout(struct wmWindow *win, 
struct WorkSpaceLayout *layout) ATTR_NONNULL(1);
 struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/windowmanager/intern/wm.c 
b/source/blender/windowmanager/intern/wm.c
index eefd832..337315b 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -420,7 +420,7 @@ void wm_add_default(bContext *C)
        
        CTX_wm_manager_set(C, wm);
        win = wm_window_new(C);
-       win->workspace = G.main->workspaces.last;
+       WM_window_set_active_workspace(win, G.main->workspaces.last);
        WM_window_set_active_screen(win, screen);
        screen->winid = win->winid;
        BLI_strncpy(win->screenname, screen->id.name + 2, 
sizeof(win->screenname));
@@ -442,7 +442,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
                wm_autosave_timer_ended(wm);
 
        while ((win = BLI_pophead(&wm->windows))) {
-               win->workspace = NULL; /* prevent draw clear to use screen */
+               WM_window_set_active_workspace(win, NULL); /* prevent draw 
clear to use screen */
                wm_draw_window_clear(win);
                wm_window_free(C, wm, win);
        }
diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index 82a0e4b..4a8dec1 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -314,7 +314,7 @@ void wm_event_do_notifiers(bContext *C)
                                                        printf("%s: screen set 
%p\n", __func__, note->reference);
                                        }
                                        else if (note->data == ND_SCREENDELETE) 
{
-                                               WorkSpace *workspace = 
win->workspace;
+                                               WorkSpace *workspace = 
WM_window_get_active_workspace(win);
                                                WorkSpaceLayout *layout = 
note->reference;
 
                                                ED_workspace_layout_delete(C, 
workspace, layout);   // XXX hrms, think this over!
@@ -360,7 +360,7 @@ void wm_event_do_notifiers(bContext *C)
                        if (note->category == NC_WORKSPACE &&
                            note->reference &&
                            note->reference != screen &&
-                           note->reference != win->workspace &&
+                           note->reference != 
WM_window_get_active_workspace(win) &&
                            note->reference != WM_window_get_active_layout(win))
                        {
                                /* pass */
@@ -2453,7 +2453,7 @@ void wm_event_do_handlers(bContext *C)
                                if (is_playing_sound != -1) {
                                        bool is_playing_screen;
                                        CTX_wm_window_set(C, win);
-                                       CTX_wm_workspace_set(C, win->workspace);
+                                       CTX_wm_workspace_set(C, 
WM_window_get_active_workspace(win));
                                        CTX_data_scene_set(C, scene);
                                        
                                        is_playing_screen = 
(ED_screen_animation_playing(wm) != NULL);
diff --git a/source/blender/windowmanager/intern/wm_files.c 
b/source/blender/windowmanager/intern/wm_files.c
index b6c982a..6d61aa3 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -256,7 +256,7 @@ static void wm_window_match_do(bContext *C, ListBase 
*oldwmlist)
                                                        
WM_window_set_active_screen(win, screen);
                                                }
                                                else {
-                                                       WorkSpace *workspace = 
win->workspace;
+                                                       WorkSpace *workspace = 
WM_window_get_active_workspace(win);
                                                        WorkSpaceLayout 
*layout_old = WM_window_get_active_layout(win);
                                                        WorkSpaceLayout 
*layout_new = ED_workspace_layout_duplicate(workspace, layout_old, win);
 
diff --git a/source/blender/windowmanager/intern/wm_window.c 
b/source/blender/windowmanager/intern/wm_window.c
index 7ca6596..1d93033 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -253,6 +253,7 @@ 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);
        bScreen *new_screen;
 
@@ -262,7 +263,7 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *win_src)
        win

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to