45 workspace->
runtime = MEM_new<blender::bke::WorkSpaceRuntime>(__func__);
93 if (tref->properties) {
121 tref->runtime =
nullptr;
126 workspace->
runtime = MEM_new<blender::bke::WorkSpaceRuntime>(__func__);
146 relation->parent =
nullptr;
149 if (win->winid == relation->parentid) {
150 relation->parent = win->workspace_hook;
154 if (relation->parent ==
nullptr) {
160 if (layout->screen) {
162 layout->screen->winid = 0;
163 if (layout->screen->temp) {
214 const char *new_name)
222 sizeof(layout->
name));
243 relation->
parent = parent;
262 if (relation !=
nullptr) {
263 relation->
parent = parent;
280 if (relation !=
nullptr) {
281 return relation->
value;
300 for (
WorkSpace *workspace =
static_cast<WorkSpace *
>(bmain->workspaces.first); workspace;
301 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
321 return new_workspace;
329 layout = layout_next)
331 layout_next = layout->next;
343 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
360 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
363 workspace->hook_layout_relations.first),
366 relation = relation_next)
368 relation_next = relation->next;
369 if (relation->parent == hook) {
414 relation = relation_next)
416 relation_next = relation->next;
435 "%s: Couldn't find layout in this workspace: '%s' screen: '%s'. "
436 "This should not happen!\n",
439 screen->id.name + 2);
451 *r_workspace =
nullptr;
455 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
459 *r_workspace = workspace;
474 const bool iter_backward)
511 const int space_type,
513 const char *idname_prefix_skip,
514 const char *replace_table[][2],
515 int replace_table_num)
517 const size_t idname_prefix_len = idname_prefix_skip ? strlen(idname_prefix_skip) : 0;
518 const size_t idname_suffix_len =
sizeof(
bToolRef::idname) - idname_prefix_len;
521 if (!(tref->space_type == space_type && tref->mode == mode)) {
524 char *idname_suffix = tref->idname;
525 if (idname_prefix_skip) {
526 if (!
STRPREFIX(idname_suffix, idname_prefix_skip)) {
529 idname_suffix += idname_prefix_len;
532 idname_suffix, idname_suffix_len, replace_table, replace_table_num);
552 workspace->
id.
tag |= tag;
595 if (hook->
active == workspace) {
633 const char *new_name)
651 workspace->
runtime->status.clear_and_shrink();
void BKE_asset_library_reference_init_default(AssetLibraryReference *library_ref)
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty(IDProperty *prop)
void IDP_BlendWrite(BlendWriter *writer, const IDProperty *prop)
@ IDTYPE_FLAGS_NO_ANIMDATA
@ IDTYPE_FLAGS_ONLY_APPEND
@ IDTYPE_FLAGS_NO_MEMFILE_UNDO
@ IDTYPE_FLAGS_NEVER_UNUSED
void BKE_id_free(Main *bmain, void *idv)
void id_us_ensure_real(ID *id)
void * BKE_id_new(Main *bmain, short type, const char *name)
void BKE_main_id_tag_listbase(ListBase *lb, int tag, bool value)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
void BKE_viewer_path_foreach_id(LibraryForeachIDData *data, ViewerPath *viewer_path)
void BKE_viewer_path_clear(ViewerPath *viewer_path)
void BKE_viewer_path_blend_read_data(BlendDataReader *reader, ViewerPath *viewer_path)
void BKE_viewer_path_blend_write(BlendWriter *writer, const ViewerPath *viewer_path)
BLI_INLINE bool BLI_listbase_is_empty(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_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_CIRCULAR_BACKWARD_END(type, lb, lb_iter, lb_init)
#define LISTBASE_CIRCULAR_FORWARD_BEGIN(type, lb, lb_iter, lb_init)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_CIRCULAR_BACKWARD_BEGIN(type, lb, lb_iter, lb_init)
void * BLI_listbase_bytes_find(const ListBase *listbase, const void *bytes, size_t bytes_size, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define LISTBASE_CIRCULAR_FORWARD_END(type, lb, lb_iter, lb_init)
#define STRNCPY(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
bool BLI_string_replace_table_exact(char *string, size_t string_len, const char *replace_table[][2], int replace_table_len)
#define UNUSED_FUNCTION(x)
#define BLO_read_data_address(reader, ptr_p)
Main * BLO_read_lib_get_main(BlendLibReader *reader)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define BLT_I18NCONTEXT_ID_WORKSPACE
#define ID_IS_LINKED(_id)
@ WORKSPACE_USE_FILTER_BY_ORIGIN
struct WorkSpace WorkSpace
Read Guarded memory(de)allocation.
DEGForeachIDComponentCallback callback
void MEM_freeN(void *vmemh)
struct WorkSpaceLayout * act_layout
AssetLibraryReference asset_library_ref
WorkSpaceRuntimeHandle * runtime
ListBase hook_layout_relations
static void workspace_relation_ensure_updated(ListBase *relation_list, void *parent, const int parentid, void *data)
static void workspace_relation_remove(ListBase *relation_list, WorkSpaceDataRelation *relation)
static void workspace_free_data(ID *id)
static void workspace_layout_name_set(WorkSpace *workspace, WorkSpaceLayout *layout, const char *new_name)
static void workspace_blend_read_after_liblink(BlendLibReader *reader, ID *id)
static void workspace_blend_write(BlendWriter *writer, ID *id, const void *id_address)
const char * BKE_workspace_layout_name_get(const WorkSpaceLayout *layout)
static bool workspaces_is_screen_used(const Main *bmain, bScreen *screen)
WorkSpace * BKE_workspace_add(Main *bmain, const char *name)
void BKE_workspace_layout_remove(Main *bmain, WorkSpace *workspace, WorkSpaceLayout *layout)
static void workspace_foreach_id(ID *id, LibraryForeachIDData *data)
bool BKE_workspace_owner_id_check(const WorkSpace *workspace, const char *owner_id)
bScreen * BKE_workspace_layout_screen_get(const WorkSpaceLayout *layout)
void BKE_workspace_active_screen_set(WorkSpaceInstanceHook *hook, const int winid, WorkSpace *workspace, bScreen *screen)
WorkSpaceLayout * BKE_workspace_layout_find(const WorkSpace *workspace, const bScreen *screen)
void BKE_workspace_status_clear(WorkSpace *workspace)
WorkSpaceLayout * BKE_workspace_layout_add(Main *bmain, WorkSpace *workspace, bScreen *screen, const char *name)
bScreen * BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook)
static void workspace_relation_add(ListBase *relation_list, void *parent, const int parentid, void *data)
void BKE_workspace_instance_hook_free(const Main *bmain, WorkSpaceInstanceHook *hook)
WorkSpaceLayout * BKE_workspace_active_layout_for_workspace_get(const WorkSpaceInstanceHook *hook, const WorkSpace *workspace)
static void workspace_init_data(ID *id)
void BKE_workspace_active_set(WorkSpaceInstanceHook *hook, WorkSpace *workspace)
WorkSpaceLayout * BKE_workspace_layout_find_global(const Main *bmain, const bScreen *screen, WorkSpace **r_workspace)
WorkSpaceLayout * BKE_workspace_layout_iter_circular(const WorkSpace *workspace, WorkSpaceLayout *start, bool(*callback)(const WorkSpaceLayout *layout, void *arg), void *arg, const bool iter_backward)
void BKE_workspace_id_tag_all_visible(Main *bmain, int tag)
void BKE_workspace_relations_free(ListBase *relation_list)
void BKE_workspace_remove(Main *bmain, WorkSpace *workspace)
void BKE_workspace_active_layout_set(WorkSpaceInstanceHook *hook, const int winid, WorkSpace *workspace, WorkSpaceLayout *layout)
Activate a layout.
void BKE_workspace_tool_id_replace_table(WorkSpace *workspace, const int space_type, const int mode, const char *idname_prefix_skip, const char *replace_table[][2], int replace_table_num)
static void workspace_blend_read_data(BlendDataReader *reader, ID *id)
WorkSpaceInstanceHook * BKE_workspace_instance_hook_create(const Main *bmain, const int winid)
void BKE_workspace_layout_name_set(WorkSpace *workspace, WorkSpaceLayout *layout, const char *new_name)
WorkSpace * BKE_workspace_active_get(WorkSpaceInstanceHook *hook)
static WorkSpaceLayout * workspace_layout_find_exec(const WorkSpace *workspace, const bScreen *screen)
WorkSpaceLayout * BKE_workspace_active_layout_get(const WorkSpaceInstanceHook *hook)
static void * workspace_relation_get_data_matching_parent(const ListBase *relation_list, const void *parent)
void BKE_workspace_tool_remove(WorkSpace *workspace, bToolRef *tref)