45 workspace->
runtime = MEM_new<blender::bke::WorkSpaceRuntime>(__func__);
94 if (tref->properties) {
122 tref->runtime =
nullptr;
127 workspace->
runtime = MEM_new<blender::bke::WorkSpaceRuntime>(__func__);
147 relation->parent =
nullptr;
150 if (win->winid == relation->parentid) {
151 relation->parent = win->workspace_hook;
155 if (relation->parent ==
nullptr) {
161 if (layout->screen) {
163 layout->screen->winid = 0;
164 if (layout->screen->temp) {
216 const char *new_name)
224 sizeof(layout->
name));
245 relation->
parent = parent;
264 if (relation !=
nullptr) {
265 relation->
parent = parent;
282 if (relation !=
nullptr) {
283 return relation->
value;
302 for (
WorkSpace *workspace =
static_cast<WorkSpace *
>(bmain->workspaces.first); workspace;
303 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
323 return new_workspace;
331 layout = layout_next)
333 layout_next = layout->next;
345 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
362 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
365 workspace->hook_layout_relations.first),
368 relation = relation_next)
370 relation_next = relation->next;
371 if (relation->parent == hook) {
416 relation = relation_next)
418 relation_next = relation->next;
437 "%s: Couldn't find layout in this workspace: '%s' screen: '%s'. "
438 "This should not happen!\n",
451 *r_workspace =
nullptr;
455 workspace =
static_cast<WorkSpace *
>(workspace->id.next))
460 *r_workspace = workspace;
475 const bool iter_backward)
481 if (!callback(iter_layout, arg)) {
489 if (!callback(iter_layout, arg)) {
512 const int space_type,
514 const char *idname_prefix_skip,
515 const char *replace_table[][2],
516 int replace_table_num)
518 const size_t idname_prefix_len = idname_prefix_skip ? strlen(idname_prefix_skip) : 0;
519 const size_t idname_suffix_maxncpy =
sizeof(
bToolRef::idname) - idname_prefix_len;
522 if (!(tref->space_type == space_type && tref->mode == mode)) {
525 char *idname_suffix = tref->idname;
526 if (idname_prefix_skip) {
527 if (!
STRPREFIX(idname_suffix, idname_prefix_skip)) {
530 idname_suffix += idname_prefix_len;
533 idname_suffix, idname_suffix_maxncpy, replace_table, replace_table_num);
553 workspace->
id.
tag |= tag;
596 if (hook->
active == workspace) {
634 const char *new_name)
652 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_)
@ IDWALK_CB_DIRECT_WEAK_LINK
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)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_CIRCULAR_BACKWARD_END(type, lb, lb_iter, lb_init)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_CIRCULAR_FORWARD_BEGIN(type, lb, lb_iter, lb_init)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(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)
char * STRNCPY(char(&dst)[N], const char *src)
bool BLI_string_replace_table_exact(char *string, size_t string_maxncpy, const char *replace_table[][2], int replace_table_len)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
#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
Read Guarded memory(de)allocation.
BMesh const char void * data
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
struct WorkSpaceLayout * act_layout
AssetLibraryReference asset_library_ref
struct Scene * sequencer_scene
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)