[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