[Bf-blender-cvs] [c435be7] workspaces: Main work to move active scene into window
Julian Eisel
noreply at git.blender.org
Thu Dec 8 01:46:52 CET 2016
Commit: c435be7f9041582026a913309f048922de3c2ace
Author: Julian Eisel
Date: Thu Dec 8 00:17:34 2016 +0100
Branches: workspaces
https://developer.blender.org/rBc435be7f9041582026a913309f048922de3c2ace
Main work to move active scene into window
Added scene as argument to area/region listeners. It's only used in a really few cases though, I might instead do a lookup.
===================================================================
M source/blender/blenkernel/BKE_screen.h
M source/blender/blenkernel/BKE_workspace.h
M source/blender/blenkernel/intern/blendfile.c
M source/blender/blenkernel/intern/context.c
M source/blender/blenkernel/intern/depsgraph.c
M source/blender/blenkernel/intern/library_query.c
M source/blender/blenkernel/intern/screen.c
M source/blender/blenkernel/intern/workspace.c
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/versioning_270.c
M source/blender/blenloader/intern/writefile.c
M source/blender/depsgraph/intern/depsgraph_tag.cc
M source/blender/editors/animation/anim_markers.c
M source/blender/editors/include/ED_screen.h
M source/blender/editors/include/ED_view3d.h
M source/blender/editors/screen/area.c
M source/blender/editors/screen/screen_context.c
M source/blender/editors/screen/screen_edit.c
M source/blender/editors/screen/screen_intern.h
M source/blender/editors/screen/screen_ops.c
M source/blender/editors/screen/workspace_edit.c
M source/blender/editors/screen/workspace_layout_edit.c
M source/blender/editors/space_action/space_action.c
M source/blender/editors/space_buttons/space_buttons.c
M source/blender/editors/space_clip/space_clip.c
M source/blender/editors/space_console/space_console.c
M source/blender/editors/space_file/space_file.c
M source/blender/editors/space_graph/space_graph.c
M source/blender/editors/space_image/space_image.c
M source/blender/editors/space_info/space_info.c
M source/blender/editors/space_logic/space_logic.c
M source/blender/editors/space_nla/space_nla.c
M source/blender/editors/space_node/space_node.c
M source/blender/editors/space_outliner/space_outliner.c
M source/blender/editors/space_script/space_script.c
M source/blender/editors/space_sequencer/space_sequencer.c
M source/blender/editors/space_text/space_text.c
M source/blender/editors/space_time/space_time.c
M source/blender/editors/space_userpref/space_userpref.c
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_draw_legacy.c
M source/blender/editors/space_view3d/view3d_view.c
M source/blender/makesdna/DNA_windowmanager_types.h
M source/blender/makesrna/intern/rna_space.c
M source/blender/windowmanager/intern/wm_draw.c
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_stereo.c
M source/blender/windowmanager/intern/wm_window.c
M source/blenderplayer/bad_level_call_stubs/stubs.c
M source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
===================================================================
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 80e6d15..13d59e8 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -82,7 +82,7 @@ typedef struct SpaceType {
/* exit is called when the area is hidden or removed */
void (*exit)(struct wmWindowManager *, struct ScrArea *);
/* Listeners can react to bContext changes */
- void (*listener)(struct bScreen *sc, struct ScrArea *, struct wmNotifier *);
+ void (*listener)(struct bScreen *sc, struct ScrArea *, struct wmNotifier *, const struct Scene *);
/* refresh context, called after filereads, ED_area_tag_refresh() */
void (*refresh)(const struct bContext *, struct ScrArea *);
@@ -133,7 +133,7 @@ typedef struct ARegionType {
/* draw entirely, view changes should be handled here */
void (*draw)(const struct bContext *, struct ARegion *);
/* contextual changes should be handled here */
- void (*listener)(struct bScreen *sc, struct ScrArea *, struct ARegion *, struct wmNotifier *);
+ void (*listener)(struct bScreen *, struct ScrArea *, struct ARegion *, struct wmNotifier *, const struct Scene *);
void (*free)(struct ARegion *);
@@ -306,7 +306,7 @@ unsigned int BKE_screen_view3d_layer_active(
unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
-void BKE_screen_view3d_scene_sync(struct bScreen *sc);
+void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene *scene, const int i);
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index a0cb579..c84ef4f 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -57,10 +57,7 @@ struct WorkSpaceLayout *BKE_workspace_active_layout_get(const struct WorkSpace *
void BKE_workspace_active_layout_set(struct WorkSpace *ws, struct WorkSpaceLayout *layout) ATTR_NONNULL(1);
struct bScreen *BKE_workspace_active_screen_get(const struct WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
void BKE_workspace_active_screen_set(struct WorkSpace *ws, struct bScreen *screen) ATTR_NONNULL(1);
-struct Scene *BKE_workspace_active_scene_get(const struct WorkSpace *ws) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-void BKE_workspace_active_scene_set(struct WorkSpace *ws, struct Scene *scene);
struct bScreen *BKE_workspace_layout_screen_get(const struct WorkSpaceLayout *layout) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
-struct Scene *BKE_workspace_layout_scene_get(const struct WorkSpaceLayout *layout) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
#endif /* __BKE_WORKSPACE_H__ */
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index a5018ab..9d9ee30 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -93,7 +93,7 @@ static void clean_paths(Main *main)
static bool wm_scene_is_visible(wmWindowManager *wm, Scene *scene)
{
for (wmWindow *win = wm->windows.first; win; win = win->next) {
- if (BKE_workspace_active_scene_get(win->workspace) == scene) {
+ if (win->scene == scene) {
return true;
}
}
@@ -207,8 +207,7 @@ static void setup_app_data(
wmWindowManager *wm = bfd->main->wm.first;
if (wm_scene_is_visible(wm, bfd->curscene) == false) {
curscene = bfd->curscene;
- curscreen->scene = curscene;
- BKE_screen_view3d_scene_sync(curscreen);
+ BKE_screen_view3d_scene_sync(curscreen, curscene);
}
}
}
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index f4ced80..5d33dfe 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -833,10 +833,11 @@ void CTX_wm_manager_set(bContext *C, wmWindowManager *wm)
void CTX_wm_window_set(bContext *C, wmWindow *win)
{
C->wm.window = win;
+ if (C->wm.window) {
+ C->data.scene = C->wm.window->scene;
+ }
C->wm.workspace = (win) ? win->workspace : NULL;
C->wm.screen = (win) ? BKE_workspace_active_screen_get(C->wm.workspace) : NULL;
- if (C->wm.screen)
- C->data.scene = C->wm.screen->scene;
C->wm.area = NULL;
C->wm.region = NULL;
}
@@ -845,8 +846,6 @@ 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;
- if (C->wm.screen)
- C->data.scene = C->wm.screen->scene;
C->wm.area = NULL;
C->wm.region = NULL;
}
@@ -854,8 +853,6 @@ void CTX_wm_workspace_set(bContext *C, WorkSpace *ws)
void CTX_wm_screen_set(bContext *C, bScreen *screen)
{
C->wm.screen = screen;
- if (C->wm.screen)
- C->data.scene = C->wm.screen->scene;
C->wm.area = NULL;
C->wm.region = NULL;
}
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 49aeca2..db62e7c 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -2265,8 +2265,8 @@ static void dag_current_scene_layers(Main *bmain, ListBase *lb)
for (win = wm->windows.first; win; win = win->next) {
bScreen *screen = BKE_workspace_active_screen_get(win->workspace);
- if (screen && screen->scene->theDag) {
- Scene *scene = screen->scene;
+ if (win->scene->theDag) {
+ Scene *scene = win->scene;
DagSceneLayer *dsl;
if (scene->id.tag & LIB_TAG_DOIT) {
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 9f100d2..9058f6b 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -61,6 +61,7 @@
#include "DNA_sound_types.h"
#include "DNA_text_types.h"
#include "DNA_vfont_types.h"
+#include "DNA_windowmanager_types.h"
#include "DNA_world_types.h"
#include "BLI_utildefines.h"
@@ -654,13 +655,6 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
break;
}
- case ID_SCR:
- {
- bScreen *screen = (bScreen *) id;
- CALLBACK_INVOKE(screen->scene, IDWALK_USER_ONE);
- break;
- }
-
case ID_WO:
{
World *world = (World *) id;
@@ -807,14 +801,24 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
break;
}
+ case ID_WM:
+ {
+ wmWindowManager *wm = (wmWindowManager *)id;
+
+ for (wmWindow *win = wm->windows.first; win; win = win->next) {
+ CALLBACK_INVOKE(win->scene, IDWALK_USER_ONE);
+ }
+ break;
+ }
+
/* Nothing needed for those... */
+ case ID_SCR:
case ID_IM:
case ID_VF:
case ID_TXT:
case ID_SO:
case ID_AR:
case ID_GD:
- case ID_WM:
case ID_PAL:
case ID_PC:
case ID_CF:
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 3a39b33..1be1a85 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -596,7 +596,7 @@ void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
}
}
-void BKE_screen_view3d_scene_sync(bScreen *sc)
+void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
{
/* are there cameras in the views that are not in the scene? */
ScrArea *sa;
@@ -605,7 +605,7 @@ void BKE_screen_view3d_scene_sync(bScreen *sc)
for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *) sl;
- BKE_screen_view3d_sync(v3d, sc->scene);
+ BKE_screen_view3d_sync(v3d, scene);
}
}
}
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 2fe1c24..74291e8 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -145,22 +145,8 @@ void BKE_workspace_active_screen_set(WorkSpace *ws, bScreen *screen)
ws->act_layout = BKE_workspace_layout_find(ws, screen);
}
-Scene *BKE_workspace_active_scene_get(const WorkSpace *ws)
-{
- return ws->act_layout->screen->scene;
-}
-void BKE_workspace_active_scene_set(WorkSpace *ws, Scene *scene)
-{
- ws->act_layout->screen->scene = scene;
-}
-
bScreen *BKE_workspace_layout_screen_get(const WorkSpaceLayout *layout)
{
return layout->screen;
}
-
-Scene *BKE_workspace_layout_scene_get(const WorkSpaceLayout *layout)
-{
- return layout->screen->scene;
-}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 47349d0..b19334f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -145,6 +145,7 @@
#include "BKE_outliner_treehash.h"
#include "BKE_sound.h"
#include "BKE_colortools.h"
+#include "BKE_workspace.h"
#include "NOD_common.h"
#include "NOD_socket.h"
@@ -5791,6 +5792,34 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
wm->is_interface_locked = 0;
}
+/**
+ * \brief Window data compatibility conversion for 2.8
+ *
+ * * Active screen isn't stored directly in window anymore, but in the active workspace.
+ * We already created a new workspace for each screen in blo_do_versions_270, here we need
+ * to find and activate the workspace that contains the active screen of the old file.
+ * * Active scene isn't stored in screen anymore, but in window.
+ */
+static void lib_link_window_280_conversion(FileData *fd, Main *main, wmWindow *win)
+{
+ if (MAIN_VERSION_ATLEAST(main, 278, 5)) {
+ return;
+ }
+
+ if (win->screen) {
+ win->screen = newlibadr(fd, NULL, win->screen);
+ win->workspace = BLI_findstring(&main->workspaces, win->screen->id.name + 2,
+ offsetof(ID, name) + 2);
+ /* Deprecated from now on! */
+ win->screen = NULL;
+ }
+
+ {
+ const bScreen *screen = BKE_workspace_active_s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list