diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 2c918bd9b30..de8a1616496 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -308,6 +308,10 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn) if(wmn->data == ND_SPACE_PROPERTIES) ED_area_tag_redraw(sa); break; + case NC_ID: + if(wmn->data == ND_ID_RENAME) + ED_area_tag_redraw(sa); + break; } if(wmn->data == ND_KEYS) diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 39eecd7d2de..bfb1724af35 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -4747,7 +4747,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) case ID_SCE: WM_event_add_notifier(C, NC_SCENE, NULL); break; default: - WM_event_add_notifier(C, NC_MATERIAL, NULL); break; + WM_event_add_notifier(C, NC_ID|ND_ID_RENAME, NULL); break; } /* Check the library target exists */ if (te->idcode == ID_LI) { diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index 5c6a8701f18..e3fbb13ed7d 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -147,6 +147,10 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn) if(wmn->data == ND_SPACE_OUTLINER) ED_region_tag_redraw(ar); break; + case NC_ID: + if(wmn->data == ND_ID_RENAME) + ED_region_tag_redraw(ar); + break; } } diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index d11eee466ed..787df5150f4 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -517,6 +517,10 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) if(wmn->data == ND_SPACE_VIEW3D) ED_region_tag_redraw(ar); break; + case NC_ID: + if(wmn->data == ND_ID_RENAME) + ED_region_tag_redraw(ar); + break; } } @@ -639,6 +643,10 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) if(wmn->data == ND_SPACE_VIEW3D) ED_region_tag_redraw(ar); break; + case NC_ID: + if(wmn->data == ND_ID_RENAME) + ED_region_tag_redraw(ar); + break; } } diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index cb1a1211d24..3bcdf373c43 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -31,6 +31,8 @@ #include "DNA_ID.h" +#include "WM_types.h" + #include "rna_internal.h" /* enum of ID-block types @@ -301,6 +303,7 @@ static void rna_def_ID(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name."); RNA_def_property_string_funcs(prop, "rna_ID_name_get", "rna_ID_name_length", "rna_ID_name_set"); RNA_def_property_string_maxlength(prop, sizeof(((ID*)NULL)->name)-2); + RNA_def_property_update(prop, NC_ID|ND_ID_RENAME, NULL); RNA_def_struct_name_property(srna, prop); prop= RNA_def_property(srna, "users", PROP_INT, PROP_UNSIGNED); diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 3f0c52f0f2c..53cca69fffc 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -136,6 +136,7 @@ typedef struct wmNotifier { #define NC_SPACE (15<<24) #define NC_GEOM (16<<24) #define NC_NODE (17<<24) +#define NC_ID (18<<24) /* data type, 256 entries is enough, it can overlap */ #define NOTE_DATA 0x00FF0000 @@ -215,6 +216,9 @@ typedef struct wmNotifier { /* NC_NODE Nodes */ #define ND_NODE_SELECT (1<<16) + /* NC_ID IDs */ +#define ND_ID_RENAME (1<<16) + /* NC_SPACE */ #define ND_SPACE_CONSOLE (1<<16) /* general redraw */