[Bf-blender-cvs] [52883dd4ed1] topbar: Tweaks to topbar versioning code
Brecht Van Lommel
noreply at git.blender.org
Thu Apr 19 19:41:26 CEST 2018
Commit: 52883dd4ed19e864cfbdf00383e79e1d9d482f98
Author: Brecht Van Lommel
Date: Sat Apr 14 13:40:05 2018 +0200
Branches: topbar
https://developer.blender.org/rB52883dd4ed19e864cfbdf00383e79e1d9d482f98
Tweaks to topbar versioning code
* Don't write global area pointers at all, leaves .blends a little
cleaner without broken pointers.
* Don't call editors functions from blenloader.
* Fix black topbar when loading some existing 2.8 saved .blends.
===================================================================
M source/blender/blenloader/intern/versioning_280.c
M source/blender/blenloader/intern/writefile.c
M source/blender/editors/include/ED_screen.h
M source/blender/editors/interface/resources.c
M source/blender/editors/screen/screen_edit.c
M source/blender/editors/screen/screen_ops.c
M source/blender/windowmanager/intern/wm.c
M source/blender/windowmanager/intern/wm_window.c
===================================================================
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index fe5a03b1632..deba38729a0 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -526,17 +526,6 @@ void do_versions_after_linking_280(Main *main)
}
BLI_freelistN(&scene->r.layers);
}
-
- /* Avoid including ED_ stuff here. */
- extern void ED_screen_global_topbar_area_create(const struct bContext *, wmWindow *, const bScreen *);
-
- for (wmWindowManager *wm = main->wm.first; wm; wm = wm->id.next) {
- for (wmWindow *win = wm->windows.first; win; win = win->next) {
- const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
- /* Not sure if passing NULL as context is so great... */
- ED_screen_global_topbar_area_create(NULL, win, screen);
- }
- }
}
if (!MAIN_VERSION_ATLEAST(main, 280, 3)) {
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index bccf5577804..c6f1bae881b 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2911,6 +2911,11 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
write_iddata(wd, &wm->id);
for (wmWindow *win = wm->windows.first; win; win = win->next) {
+#ifndef WITH_TOPBAR_WRITING
+ /* Don't write global areas yet, while we make changes to them. */
+ ScrAreaMap global_areas = win->global_areas;
+ memset(&win->global_areas, 0, sizeof(win->global_areas));
+#endif
/* update deprecated screen member (for so loading in 2.7x uses the correct screen) */
win->screen = BKE_workspace_active_screen_get(win->workspace_hook);
@@ -2921,6 +2926,8 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
#ifdef WITH_TOPBAR_WRITING
write_area_map(wd, &win->global_areas);
+#else
+ win->global_areas = global_areas;
#endif
/* data is written, clear deprecated data again */
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 1194b17d33a..601fc326da2 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -112,11 +112,9 @@ void ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, str
void ED_area_exit(struct bContext *C, struct ScrArea *sa);
int ED_screen_area_active(const struct bContext *C);
void ED_screen_global_topbar_area_create(
- const struct bContext *C,
struct wmWindow *win,
const struct bScreen *screen);
void ED_screen_global_areas_create(
- const struct bContext *C,
struct wmWindow *win);
void ED_area_do_listen(struct bScreen *sc, ScrArea *sa, struct wmNotifier *note, Scene *scene,
struct WorkSpace *workspace);
@@ -143,7 +141,7 @@ int ED_region_global_size_y(void);
area_name = (area_name == (win)->global_areas.areabase.last) ? (screen)->areabase.first : area_name->next)
/* screens */
-void ED_screens_initialize(const struct bContext *C, struct wmWindowManager *wm);
+void ED_screens_initialize(struct wmWindowManager *wm);
void ED_screen_draw_edges(struct wmWindow *win);
void ED_screen_draw_join_shape(struct ScrArea *sa1, struct ScrArea *sa2);
void ED_screen_draw_split_preview(struct ScrArea *sa, const int dir, const float fac);
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 42047328198..b40ab09036f 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -2925,7 +2925,7 @@ void init_userdef_do_versions(void)
U.uiflag |= USER_LOCK_CURSOR_ADJUST;
}
- if (!USER_VERSION_ATLEAST(280, 2)) {
+ if (!USER_VERSION_ATLEAST(280, 9)) {
/* interface_widgets.c */
struct uiWidgetColors wcol_tab = {
{60, 60, 60, 255},
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 97d58f3f434..33b21b3e5ca 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -848,7 +848,7 @@ static void screen_refresh_region_sizes_only(
}
/* file read, set all screens, ... */
-void ED_screens_initialize(const bContext *C, wmWindowManager *wm)
+void ED_screens_initialize(wmWindowManager *wm)
{
wmWindow *win;
@@ -858,7 +858,7 @@ void ED_screens_initialize(const bContext *C, wmWindowManager *wm)
}
if (BLI_listbase_is_empty(&win->global_areas.areabase)) {
- ED_screen_global_areas_create(C, win);
+ ED_screen_global_areas_create(win);
}
ED_screen_refresh(wm, win);
}
@@ -1105,11 +1105,11 @@ int ED_screen_area_active(const bContext *C)
return 0;
}
-void ED_screen_global_topbar_area_create(const bContext *C, wmWindow *win, const bScreen *screen)
+void ED_screen_global_topbar_area_create(wmWindow *win, const bScreen *screen)
{
if (screen->temp == 0) {
SpaceType *st = BKE_spacetype_from_id(SPACE_TOPBAR);
- SpaceLink *sl = st->new(C);
+ SpaceLink *sl = st->new(NULL);
ScrArea *sa;
const short size_y = 2 * HEADERY;
@@ -1131,13 +1131,13 @@ void ED_screen_global_topbar_area_create(const bContext *C, wmWindow *win, const
BLI_addhead(&sa->spacedata, sl);
BLI_listbase_clear(&sl->regionbase);
}
- /* Do not create more area types here! Function is called in versioning code (versioning_280.c). */
+ /* Do not create more area types here! Function is called on file load (wm_window_ghostwindows_ensure). TODO */
}
-void ED_screen_global_areas_create(const bContext *C, wmWindow *win)
+void ED_screen_global_areas_create(wmWindow *win)
{
const bScreen *screen = BKE_workspace_active_screen_get(win->workspace_hook);
- ED_screen_global_topbar_area_create(C, win, screen);
+ ED_screen_global_topbar_area_create(win, screen);
}
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 8d7c7bef555..1874122f1c3 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -1039,7 +1039,7 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, const wmEvent *event)
layout_new = ED_workspace_layout_add(workspace, newwin, BKE_workspace_layout_name_get(layout_old));
newsc = BKE_workspace_layout_screen_get(layout_new);
WM_window_set_active_layout(newwin, workspace, layout_new);
- ED_screen_global_areas_create(C, newwin);
+ ED_screen_global_areas_create(newwin);
/* copy area to new screen */
ED_area_data_copy((ScrArea *)newsc->areabase.first, sa, true);
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index bab79260797..4f7003a49e2 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -424,7 +424,7 @@ void WM_check(bContext *C)
/* case: fileread */
/* note: this runs in bg mode to set the screen context cb */
if ((wm->initialized & WM_WINDOW_IS_INITIALIZED) == 0) {
- ED_screens_initialize(C, wm);
+ ED_screens_initialize(wm);
wm->initialized |= WM_WINDOW_IS_INITIALIZED;
}
}
@@ -468,7 +468,7 @@ void wm_add_default(Main *bmain, bContext *C)
WM_window_set_active_workspace(win, workspace);
WM_window_set_active_layout(win, workspace, layout);
screen->winid = win->winid;
- ED_screen_global_areas_create(C, win);
+ ED_screen_global_areas_create(win);
wm->winactive = win;
wm->file_saved = 1;
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index dcaf4ace849..d3edcaa5ffc 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -304,7 +304,7 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *win_src, const bool duplicate_la
WM_window_set_active_workspace(win_dst, workspace);
layout_new = duplicate_layout ? ED_workspace_layout_duplicate(workspace, layout_old, win_dst) : layout_old;
WM_window_set_active_layout(win_dst, workspace, layout_new);
- ED_screen_global_areas_create(C, win_dst);
+ ED_screen_global_areas_create(win_dst);
win_dst->drawmethod = U.wmdrawmethod;
@@ -785,6 +785,11 @@ void wm_window_ghostwindows_ensure(wmWindowManager *wm)
WM_event_add_dropbox_handler(&win->handlers, lb);
}
wm_window_title(wm, win);
+
+ /* add topbar */
+ if (BLI_listbase_is_empty(&win->global_areas.areabase)) {
+ ED_screen_global_areas_create(win);
+ }
}
}
@@ -1012,7 +1017,7 @@ int wm_window_new_exec(bContext *C, wmOperator *op)
screen_new->winid = win_dst->winid;
CTX_wm_window_set(C, win_dst);
- ED_screen_global_areas_create(C, win_dst);
+ ED_screen_global_areas_create(win_dst);
ED_screen_refresh(CTX_wm_manager(C), win_dst);
}
More information about the Bf-blender-cvs
mailing list