[Bf-blender-cvs] [84f9c8e618e] workspaces: Fix (harmless) error print with multiple workspaces

Julian Eisel noreply at git.blender.org
Sun May 7 01:45:58 CEST 2017


Commit: 84f9c8e618e682a460af888a68ed64692a338518
Author: Julian Eisel
Date:   Sun May 7 01:44:03 2017 +0200
Branches: workspaces
https://developer.blender.org/rB84f9c8e618e682a460af888a68ed64692a338518

Fix (harmless) error print with multiple workspaces

Fixes issue reported in https://developer.blender.org/D2451#62155.
Caused by rB8c250c9b73797520.

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

M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/makesrna/intern/rna_screen.c

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

diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 9ab7944470e..de251d2b2d2 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -82,6 +82,9 @@ void BKE_workspaces_transform_orientation_remove(
 
 WorkSpaceLayout *BKE_workspace_layout_find(
         const WorkSpace *workspace, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+WorkSpaceLayout *BKE_workspace_layout_find_global(
+        const struct Main *bmain, const struct bScreen *screen,
+        WorkSpace **r_workspace) ATTR_NONNULL(1, 2) ATTR_WARN_UNUSED_RESULT;
 
 #define BKE_WORKSPACE_LAYOUT_ITER_BEGIN(_layout, _start_layout) \
 	for (WorkSpaceLayout *_layout = _start_layout, *_layout##_next; _layout; _layout = _layout##_next) { \
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 93b9507d60a..4462833fe66 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -232,7 +232,6 @@ void BKE_workspace_layouts_transfer(
         WorkSpace *workspace_dst, WorkSpace *workspace_src)
 {
 	BLI_movelisttolist(&workspace_dst->layouts, &workspace_src->layouts);
-
 }
 
 /* -------------------------------------------------------------------- */
@@ -256,13 +255,38 @@ WorkSpaceLayout *BKE_workspace_layout_find(
 		return layout;
 	}
 
-#if 0
-	BLI_assert(!"Couldn't find layout in this workspace. This should not happen!");
-#else
 	printf("%s: Couldn't find layout in this workspace: '%s' screen: '%s'. "
 	       "This should not happen!\n",
 	       __func__, workspace->id.name + 2, screen->id.name + 2);
-#endif
+
+	return NULL;
+}
+
+/**
+ * Find the layout for \a screen without knowing which workspace to look in.
+ *
+ * \param r_workspace: Optionally return the workspace that contains the looked up layout (if found).
+ */
+WorkSpaceLayout *BKE_workspace_layout_find_global(
+        const Main *bmain, const bScreen *screen,
+        WorkSpace **r_workspace)
+{
+	WorkSpaceLayout *layout;
+
+	if (r_workspace) {
+		*r_workspace = NULL;
+	}
+
+	BKE_WORKSPACE_ITER_BEGIN (workspace, bmain->workspaces.first) {
+		if ((layout = workspace_layout_find_exec(workspace, screen))) {
+			if (r_workspace) {
+				*r_workspace = workspace;
+			}
+
+			return layout;
+		}
+	} BKE_WORKSPACE_ITER_END;
+
 	return NULL;
 }
 
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index 1a2c9ef45f2..a145ac95d6b 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -83,31 +83,27 @@ static int rna_Screen_is_animation_playing_get(PointerRNA *UNUSED(ptr))
 
 static void rna_Screen_layout_name_get(PointerRNA *ptr, char *value)
 {
-	bScreen *screen = ptr->data;
-
-	BKE_WORKSPACE_ITER_BEGIN (workspace, G.main->workspaces.first) {
-		WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, screen);
-		if (layout) {
-			const char *name = BKE_workspace_layout_name_get(layout);
-			strcpy(value, name);
-			return;
-		}
-	} BKE_WORKSPACE_ITER_END;
+	const bScreen *screen = ptr->data;
+	const WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, NULL);
 
-	value[0] = '\0';
+	if (layout) {
+		const char *name = BKE_workspace_layout_name_get(layout);
+		strcpy(value, name);
+	}
+	else {
+		value[0] = '\0';
+	}
 }
 
 static int rna_Screen_layout_name_length(PointerRNA *ptr)
 {
-	bScreen *screen = ptr->data;
+	const bScreen *screen = ptr->data;
+	const WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, NULL);
 
-	BKE_WORKSPACE_ITER_BEGIN (workspace, G.main->workspaces.first) {
-		WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, screen);
-		if (layout) {
-			const char *name = BKE_workspace_layout_name_get(layout);
-			return strlen(name);
-		}
-	} BKE_WORKSPACE_ITER_END;
+	if (layout) {
+		const char *name = BKE_workspace_layout_name_get(layout);
+		return strlen(name);
+	}
 
 	return 0;
 }
@@ -115,14 +111,12 @@ static int rna_Screen_layout_name_length(PointerRNA *ptr)
 static void rna_Screen_layout_name_set(PointerRNA *ptr, const char *value)
 {
 	bScreen *screen = ptr->data;
+	WorkSpace *workspace;
+	WorkSpaceLayout *layout = BKE_workspace_layout_find_global(G.main, screen, &workspace);
 
-	BKE_WORKSPACE_ITER_BEGIN (workspace, G.main->workspaces.first) {
-		WorkSpaceLayout *layout = BKE_workspace_layout_find(workspace, screen);
-		if (layout) {
-			BKE_workspace_layout_name_set(workspace, layout, value);
-			break;
-		}
-	} BKE_WORKSPACE_ITER_END;
+	if (layout) {
+		BKE_workspace_layout_name_set(workspace, layout, value);
+	}
 }
 
 static int rna_Screen_fullscreen_get(PointerRNA *ptr)




More information about the Bf-blender-cvs mailing list