From 2891043b585b4773b07c607b20befae35979dbb7 Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Sat, 29 Dec 2018 18:26:04 +0100 Subject: Outliner: better support for clips/masks ('Blender File' view) - clips/masks were not showing an icon [both dont have a dedicated icon, took the ones used elsewhere] - masks hit an assert in outliner_add_element() - missing outliner update when adding a mask spotted while looking into T59939 Reviewers: mont29, brecht Differential Revision: https://developer.blender.org/D4142 --- source/blender/editors/mask/mask_add.c | 6 +++++- source/blender/editors/mask/mask_intern.h | 2 +- source/blender/editors/mask/mask_ops.c | 5 ++++- source/blender/editors/space_outliner/outliner_draw.c | 4 ++++ source/blender/editors/space_outliner/outliner_intern.h | 2 +- source/blender/editors/space_outliner/space_outliner.c | 5 +++++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/mask/mask_add.c b/source/blender/editors/mask/mask_add.c index df07326c590..0cc608a56f1 100644 --- a/source/blender/editors/mask/mask_add.c +++ b/source/blender/editors/mask/mask_add.c @@ -765,7 +765,8 @@ static int create_primitive_from_points(bContext *C, wmOperator *op, const float location[0] -= 0.5f * scale; location[1] -= 0.5f * scale; - mask_layer = ED_mask_layer_ensure(C); + bool added_mask = false; + mask_layer = ED_mask_layer_ensure(C, &added_mask); mask = CTX_data_edit_mask(C); ED_mask_select_toggle_all(mask, SEL_DESELECT); @@ -801,6 +802,9 @@ static int create_primitive_from_points(bContext *C, wmOperator *op, const float } } + if (added_mask) { + WM_event_add_notifier(C, NC_MASK | NA_ADDED, NULL); + } WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask); /* TODO: only update this spline */ diff --git a/source/blender/editors/mask/mask_intern.h b/source/blender/editors/mask/mask_intern.h index cb2bb953994..60acb430b20 100644 --- a/source/blender/editors/mask/mask_intern.h +++ b/source/blender/editors/mask/mask_intern.h @@ -59,7 +59,7 @@ void MASK_OT_primitive_square_add(struct wmOperatorType *ot); /* mask_ops.c */ struct Mask *ED_mask_new(struct bContext *C, const char *name); -struct MaskLayer *ED_mask_layer_ensure(struct bContext *C); +struct MaskLayer *ED_mask_layer_ensure(struct bContext *C, bool *r_added_mask); void MASK_OT_new(struct wmOperatorType *ot); void MASK_OT_layer_new(struct wmOperatorType *ot); diff --git a/source/blender/editors/mask/mask_ops.c b/source/blender/editors/mask/mask_ops.c index cb90d0a4888..20fc403762d 100644 --- a/source/blender/editors/mask/mask_ops.c +++ b/source/blender/editors/mask/mask_ops.c @@ -340,7 +340,7 @@ Mask *ED_mask_new(bContext *C, const char *name) } /* Get ative layer. Will create mask/layer to be sure there's an active layer. */ -MaskLayer *ED_mask_layer_ensure(bContext *C) +MaskLayer *ED_mask_layer_ensure(bContext *C, bool *r_added_mask) { Mask *mask = CTX_data_edit_mask(C); MaskLayer *mask_layer; @@ -348,6 +348,7 @@ MaskLayer *ED_mask_layer_ensure(bContext *C) if (mask == NULL) { /* If there's no active mask, create one. */ mask = ED_mask_new(C, NULL); + *r_added_mask = true; } mask_layer = BKE_mask_layer_active(mask); @@ -367,6 +368,8 @@ static int mask_new_exec(bContext *C, wmOperator *op) ED_mask_new(C, name); + WM_event_add_notifier(C, NC_MASK | NA_ADDED, NULL); + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index 463eb1b33b4..97c5c1db4cb 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -1340,6 +1340,10 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te) case ID_SCR: case ID_WS: data.icon = ICON_WORKSPACE; break; + case ID_MSK: + data.icon = ICON_MOD_MASK; break; + case ID_MC: + data.icon = ICON_SEQUENCE; break; default: break; } diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index 23ea14abc31..d6ebddf94e2 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -92,7 +92,7 @@ typedef struct TreeElementIcon { #define TREESTORE_ID_TYPE(_id) \ (ELEM(GS((_id)->name), ID_SCE, ID_LI, ID_OB, ID_ME, ID_CU, ID_MB, ID_NT, ID_MA, ID_TE, ID_IM, ID_LT, ID_LA, ID_CA) || \ ELEM(GS((_id)->name), ID_KE, ID_WO, ID_SPK, ID_GR, ID_AR, ID_AC, ID_BR, ID_PA, ID_GD, ID_LS, ID_LP) || \ - ELEM(GS((_id)->name), ID_SCR, ID_WM, ID_TXT, ID_VF, ID_SO, ID_CF, ID_PAL, ID_MC, ID_WS)) /* Only in 'blendfile' mode ... :/ */ + ELEM(GS((_id)->name), ID_SCR, ID_WM, ID_TXT, ID_VF, ID_SO, ID_CF, ID_PAL, ID_MC, ID_WS, ID_MSK)) /* Only in 'blendfile' mode ... :/ */ /* TreeElement->flag */ enum { diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 95225774ddf..423641c6fdd 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -228,6 +228,11 @@ static void outliner_main_region_listener( ED_region_tag_redraw(ar); } break; + case NC_MASK: + if (ELEM(wmn->action, NA_ADDED)) { + ED_region_tag_redraw(ar); + } + break; } } -- cgit v1.2.3