[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