[Bf-blender-cvs] [49b524cfa8] temp-workspace-multi-window: Add/use macro to iterate over layout-types

Julian Eisel noreply at git.blender.org
Fri Feb 24 00:33:42 CET 2017


Commit: 49b524cfa81e868efd25df95b9d0f181d068e75f
Author: Julian Eisel
Date:   Thu Feb 16 20:16:37 2017 +0100
Branches: temp-workspace-multi-window
https://developer.blender.org/rB49b524cfa81e868efd25df95b9d0f181d068e75f

Add/use macro to iterate over layout-types

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

M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index d6cbe43efc..2555a74d1f 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -88,6 +88,15 @@ WorkSpaceLayout *BKE_workspace_layout_iter_circular(const WorkSpace *workspace,
                                                     bool (*callback)(const WorkSpaceLayout *layout, void *arg),
                                                     void *arg, const bool iter_backward);
 
+#define BKE_workspace_layout_type_iter_begin(_layout_type, _start_layout_type) \
+	for (WorkSpaceLayoutType *_layout_type = _start_layout_type, *_layout_type##_next; \
+	     _layout_type; \
+	     _layout_type = _layout_type##_next) \
+	{ \
+		_layout_type##_next = BKE_workspace_layout_type_next_get(_layout_type); /* support removing layout-type from list */
+#define BKE_workspace_layout_type_iter_end } (void)0
+
+
 
 /* -------------------------------------------------------------------- */
 /* Getters/Setters */
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 9b723bfb93..4ac1d83cda 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1783,15 +1783,15 @@ WorkSpace *WM_window_get_active_workspace(const wmWindow *win)
 }
 void WM_window_set_active_workspace(wmWindow *win, WorkSpace *workspace)
 {
+	ListBase *layout_types = BKE_workspace_layout_types_get(workspace);
+
 	win->workspace = workspace;
 	BLI_freelistN(&win->workspace_layouts);
 	if (!workspace) {
 		return;
 	}
 
-	for (WorkSpaceLayoutType *layout_type = BKE_workspace_layout_types_get(workspace)->first;
-	     layout_type != NULL;
-	     layout_type = BKE_workspace_layout_type_next_get(layout_type))
+	BKE_workspace_layout_type_iter_begin(layout_type, layout_types->first)
 	{
 		bScreen *screen = BLI_findstring(&G.main->screen, BKE_workspace_layout_type_name_get(layout_type),
 		                                 offsetof(ID, name) + 2); /* XXX */
@@ -1799,6 +1799,7 @@ void WM_window_set_active_workspace(wmWindow *win, WorkSpace *workspace)
 
 		BLI_addhead(&win->workspace_layouts, layout);
 	}
+	BKE_workspace_layout_type_iter_end;
 }
 
 WorkSpaceLayout *WM_window_get_active_layout(const wmWindow *win)




More information about the Bf-blender-cvs mailing list