105 else if (is_old_pinned) {
142 if (mode_old != mode_new) {
168 bmain, workspace_new, layout_new, layout_old, win);
180 if (workspace_old == workspace_new) {
190 if (screen_new ==
NULL) {
227 bmain, workspace_new, layout_old, win);
229 if (layout_active_old == layout_old) {
233 return workspace_new;
246 if (link->data == workspace) {
247 prev = link->prev ? link->prev->data :
NULL;
248 next = link->next ? link->next->data :
NULL;
257 if (workspace_active == workspace) {
309 ot->
name =
"New Workspace";
311 ot->
idname =
"WORKSPACE_OT_duplicate";
330 ot->
name =
"Delete Workspace";
361 if (appended_workspace) {
380 ot->
name =
"Append and Activate Workspace";
381 ot->
description =
"Append a workspace and make it the active one in the current window";
382 ot->
idname =
"WORKSPACE_OT_append_activate";
392 "Name of the workspace to append and activate");
399 char startup_file_path[
FILE_MAX] = {0};
405 bool has_path =
BLI_exists(startup_file_path);
425 bool has_path =
BLI_exists(startup_file_path);
432 const Main *from_main)
434 const ID *
id = (
ID *)workspace;
435 const char *filepath = from_main->
filepath;
437 if (strlen(filepath) == 0) {
453 bool has_startup_items =
false;
461 if (startup_config) {
465 has_startup_items =
true;
469 if (builtin_config) {
470 bool has_title =
false;
473 if (startup_config &&
479 if (has_startup_items) {
490 if (startup_config) {
493 if (builtin_config) {
509 char *
template = link->data;
524 "WORKSPACE_OT_duplicate");
534 ot->
name =
"Add Workspace";
536 "Add a new workspace by duplicating the current one or appending one "
537 "from the user configuration";
558 ot->
name =
"Workspace Reorder to Back";
559 ot->
description =
"Reorder workspace to be last in the list";
560 ot->
idname =
"WORKSPACE_OT_reorder_to_back";
581 ot->
name =
"Workspace Reorder to Front";
582 ot->
description =
"Reorder workspace to be first in the list";
583 ot->
idname =
"WORKSPACE_OT_reorder_to_front";
606 ot->
name =
"Pin Scene to Workspace";
608 "Remember the last used scene for the current workspace and switch to it whenever this "
609 "workspace is activated again";
610 ot->
idname =
"WORKSPACE_OT_scene_pin_toggle";
const char * BKE_appdir_folder_id(int folder_id, const char *subfolder)
void BKE_appdir_app_templates(struct ListBase *templates)
#define BLENDER_STARTUP_FILE
bool BKE_appdir_app_template_id_search(const char *app_template, char *path, size_t path_len)
struct WorkspaceConfigFileData * BKE_blendfile_workspace_config_read(const char *filepath, const void *filebuf, int filelength, struct ReportList *reports)
void BKE_blendfile_workspace_config_data_free(struct WorkspaceConfigFileData *workspace_config)
struct WorkSpace * CTX_wm_workspace(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct View3D * CTX_wm_view3d(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_id_reorder(const struct ListBase *lb, struct ID *id, struct ID *relative, bool after)
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_id_ordered_list(struct ListBase *ordered_lb, const struct ListBase *lb)
void BKE_screen_view3d_scene_sync(struct bScreen *screen, struct Scene *scene)
struct WorkSpaceLayout * BKE_workspace_active_layout_for_workspace_get(const struct WorkSpaceInstanceHook *hook, const struct WorkSpace *workspace) GETTER_ATTRS
struct WorkSpace * BKE_workspace_add(struct Main *bmain, const char *name)
struct bScreen * BKE_workspace_active_screen_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS
void BKE_workspace_active_layout_set(struct WorkSpaceInstanceHook *hook, int winid, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) SETTER_ATTRS
Activate a layout.
void BKE_workspace_active_set(struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace) SETTER_ATTRS
struct WorkSpaceLayout * BKE_workspace_active_layout_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS
struct bScreen * BKE_workspace_layout_screen_get(const struct WorkSpaceLayout *layout) GETTER_ATTRS
File and directory operations.
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_path_to_display_name(char *display_name, int maxlen, const char *name) ATTR_NONNULL()
void BLI_join_dirfile(char *__restrict dst, size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
external readfile function prototypes.
void BLO_update_defaults_workspace(struct WorkSpace *workspace, const char *app_template)
@ BLO_LIBLINK_APPEND_RECURSIVE
#define BLO_EMBEDDED_STARTUP_BLEND
#define CTX_IFACE_(context, msgid)
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
@ WORKSPACE_USE_PIN_SCENE
int datatoc_startup_blend_size
const char datatoc_startup_blend[]
bool ED_object_mode_set(struct bContext *C, eObjectMode mode)
struct WorkSpaceLayout * ED_workspace_screen_change_ensure_unused_layout(struct Main *bmain, struct WorkSpace *workspace, struct WorkSpaceLayout *layout_new, const struct WorkSpaceLayout *layout_fallback_base, struct wmWindow *win) ATTR_NONNULL()
struct WorkSpaceLayout * ED_workspace_layout_duplicate(struct Main *bmain, struct WorkSpace *workspace, const struct WorkSpaceLayout *layout_old, struct wmWindow *win) ATTR_NONNULL()
uiBlock * uiLayoutGetBlock(uiLayout *layout)
struct uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
void uiItemS(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemFullO_ptr(uiLayout *layout, struct wmOperatorType *ot, const char *name, int icon, struct IDProperty *properties, wmOperatorCallContext context, int flag, struct PointerRNA *r_opptr)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
void UI_popup_menu_end(struct bContext *C, struct uiPopupMenu *pup)
void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg)
void UI_block_flag_enable(uiBlock *block, int flag)
struct ID * UI_context_active_but_get_tab_ID(struct bContext *C)
void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN)
uiPopupMenu * UI_popup_menu_begin(struct bContext *C, const char *title, int icon) ATTR_NONNULL()
#define ND_WORKSPACE_DELETE
SymEdge< T > * prev(const SymEdge< T > *se)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
void screen_change_prepare(bScreen *screen_old, bScreen *screen_new, Main *bmain, bContext *C, wmWindow *win)
void screen_change_update(bContext *C, wmWindow *win, bScreen *screen)
struct WorkSpaceLayout * temp_layout_store
WorkSpace * temp_workspace_store
struct ListBase workspaces
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct wmOperatorType * type
struct Scene * unpinned_scene
struct WorkSpaceInstanceHook * workspace_hook
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
ID * WM_file_append_datablock(Main *bmain, Scene *scene, ViewLayer *view_layer, View3D *v3d, const char *filepath, const short id_code, const char *id_name, int flag)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
void WM_window_set_active_scene(Main *bmain, bContext *C, wmWindow *win, Scene *scene)
WorkSpaceLayout * WM_window_get_active_layout(const wmWindow *win)
WorkSpace * WM_window_get_active_workspace(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)
static void workspace_append_button(uiLayout *layout, wmOperatorType *ot_append, const WorkSpace *workspace, const Main *from_main)
static int workspace_new_exec(bContext *C, wmOperator *UNUSED(op))
static WorkSpace * workspace_context_get(bContext *C)
static void WORKSPACE_OT_add(wmOperatorType *ot)
static void WORKSPACE_OT_scene_pin_toggle(wmOperatorType *ot)
static void workspace_scene_pinning_update(WorkSpace *workspace_new, const WorkSpace *workspace_old, bContext *C)
void ED_operatortypes_workspace(void)
static void workspace_change_update(WorkSpace *workspace_new, WorkSpace *workspace_old, bContext *C, wmWindowManager *wm)
static WorkspaceConfigFileData * workspace_system_file_read(const char *app_template)
static WorkSpaceLayout * workspace_change_get_new_layout(Main *bmain, WorkSpace *workspace_new, wmWindow *win)
static WorkspaceConfigFileData * workspace_config_file_read(const char *app_template)
static int workspace_scene_pin_toggle(bContext *C, wmOperator *UNUSED(op))
WorkSpace * ED_workspace_duplicate(WorkSpace *workspace_old, Main *bmain, wmWindow *win)
static int workspace_append_activate_exec(bContext *C, wmOperator *op)
static void workspace_exit(WorkSpace *workspace, wmWindow *win)
static int workspace_reorder_to_front_exec(bContext *C, wmOperator *UNUSED(op))
static void WORKSPACE_OT_delete(wmOperatorType *ot)
static void WORKSPACE_OT_append_activate(wmOperatorType *ot)
static void WORKSPACE_OT_reorder_to_back(wmOperatorType *ot)
bool ED_workspace_change(WorkSpace *workspace_new, bContext *C, wmWindowManager *wm, wmWindow *win)
Change the active workspace.
static int workspace_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static void WORKSPACE_OT_duplicate(wmOperatorType *ot)
void ED_workspace_scene_data_sync(WorkSpaceInstanceHook *hook, Scene *scene)
static int workspace_delete_exec(bContext *C, wmOperator *UNUSED(op))
WorkSpace * ED_workspace_add(Main *bmain, const char *name)
bool ED_workspace_delete(WorkSpace *workspace, Main *bmain, bContext *C, wmWindowManager *wm)
static void WORKSPACE_OT_reorder_to_front(wmOperatorType *ot)
static bool workspace_context_poll(bContext *C)
static int workspace_reorder_to_back_exec(bContext *C, wmOperator *UNUSED(op))
static void workspace_add_menu(bContext *UNUSED(C), uiLayout *layout, void *template_v)