RNA
[blender.git] / source / blender / makesrna / intern / rna_texture.c
index 4cc98ce5f8aa840f6f400eeccfe5217bab6028df..2a7f65e2d90c5525ab929e8199c9d0b1de333f85 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include <float.h>
+#include <stdio.h>
 #include <stdlib.h>
 
 #include "RNA_define.h"
 
 #include "rna_internal.h"
 
+#include "DNA_brush_types.h"
+#include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_texture_types.h"
+#include "DNA_world_types.h"
+
+#include "WM_types.h"
 
 #ifdef RNA_RUNTIME
 
@@ -71,6 +77,26 @@ StructRNA *rna_Texture_refine(struct PointerRNA *ptr)
        }
 }
 
+static int rna_TextureSlot_name_length(PointerRNA *ptr)
+{
+       MTex *mtex= ptr->data;
+
+       if(mtex->tex)
+               return strlen(mtex->tex->id.name+2);
+       
+       return 0;
+}
+
+static void rna_TextureSlot_name_get(PointerRNA *ptr, char *str)
+{
+       MTex *mtex= ptr->data;
+
+       if(mtex->tex)
+               strcpy(str, mtex->tex->id.name+2);
+       else
+               strcpy(str, "");
+}
+
 #else
 
 static void rna_def_color_ramp_element(BlenderRNA *brna)
@@ -86,11 +112,13 @@ static void rna_def_color_ramp_element(BlenderRNA *brna)
        RNA_def_property_float_sdna(prop, NULL, "r");
        RNA_def_property_array(prop, 4);
        RNA_def_property_ui_text(prop, "Color", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "position", PROP_FLOAT, PROP_COLOR);
        RNA_def_property_float_sdna(prop, NULL, "pos");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Position", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_color_ramp(BlenderRNA *brna)
@@ -99,12 +127,12 @@ static void rna_def_color_ramp(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_interpolation_items[] = {
-               {1, "EASE", "Ease", ""},
-               {3, "CARDINAL", "Cardinal", ""},
-               {0, "LINEAR", "Linear", ""},
-               {2, "B_SPLINE", "B-Spline", ""},
-               {4, "CONSTANT", "Constant", ""},
-               {0, NULL, NULL, NULL}};
+               {1, "EASE", 0, "Ease", ""},
+               {3, "CARDINAL", 0, "Cardinal", ""},
+               {0, "LINEAR", 0, "Linear", ""},
+               {2, "B_SPLINE", 0, "B-Spline", ""},
+               {4, "CONSTANT", 0, "Constant", ""},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "ColorRamp", NULL);
        RNA_def_struct_sdna(srna, "ColorBand");
@@ -114,11 +142,13 @@ static void rna_def_color_ramp(BlenderRNA *brna)
        RNA_def_property_collection_sdna(prop, NULL, "data", "tot");
        RNA_def_property_struct_type(prop, "ColorRampElement");
        RNA_def_property_ui_text(prop, "Elements", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "ipotype");
        RNA_def_property_enum_items(prop, prop_interpolation_items);
        RNA_def_property_ui_text(prop, "Interpolation", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texmapping(BlenderRNA *brna)
@@ -132,30 +162,37 @@ static void rna_def_texmapping(BlenderRNA *brna)
        prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "loc");
        RNA_def_property_ui_text(prop, "Location", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ROTATION);
        RNA_def_property_float_sdna(prop, NULL, "rot");
        RNA_def_property_ui_text(prop, "Rotation", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "size");
        RNA_def_property_ui_text(prop, "Scale", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "min");
        RNA_def_property_ui_text(prop, "Minimum", "Minimum value for clipping");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "max");
        RNA_def_property_ui_text(prop, "Maximum", "Maximum value for clipping");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "has_minimum", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN);
        RNA_def_property_ui_text(prop, "Has Minimum", "Whether to use minimum clipping value");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "has_maximum", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX);
        RNA_def_property_ui_text(prop, "Has Maximum", "Whether to use maximum clipping value");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_mtex(BlenderRNA *brna)
@@ -164,82 +201,103 @@ static void rna_def_mtex(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_blend_type_items[] = {
-               {MTEX_BLEND, "MIX", "Mix", ""},
-               {MTEX_ADD, "ADD", "Add", ""},
-               {MTEX_SUB, "SUBTRACT", "Subtract", ""},
-               {MTEX_MUL, "MULTIPLY", "Multiply", ""},
-               {MTEX_SCREEN, "SCREEN", "Screen", ""},
-               {MTEX_OVERLAY, "OVERLAY", "Overlay", ""},
-               {MTEX_DIFF, "DIFFERENCE", "Difference", ""},
-               {MTEX_DIV, "DIVIDE", "Divide", ""},
-               {MTEX_DARK, "DARKEN", "Darken", ""},
-               {MTEX_LIGHT, "LIGHTEN", "Lighten", ""},
-               {MTEX_BLEND_HUE, "HUE", "Hue", ""},
-               {MTEX_BLEND_SAT, "SATURATION", "Saturation", ""},
-               {MTEX_BLEND_VAL, "VALUE", "Value", ""},
-               {MTEX_BLEND_COLOR, "COLOR", "Color", ""},
-               {0, NULL, NULL, NULL}};
+               {MTEX_BLEND, "MIX", 0, "Mix", ""},
+               {MTEX_ADD, "ADD", 0, "Add", ""},
+               {MTEX_SUB, "SUBTRACT", 0, "Subtract", ""},
+               {MTEX_MUL, "MULTIPLY", 0, "Multiply", ""},
+               {MTEX_SCREEN, "SCREEN", 0, "Screen", ""},
+               {MTEX_OVERLAY, "OVERLAY", 0, "Overlay", ""},
+               {MTEX_DIFF, "DIFFERENCE", 0, "Difference", ""},
+               {MTEX_DIV, "DIVIDE", 0, "Divide", ""},
+               {MTEX_DARK, "DARKEN", 0, "Darken", ""},
+               {MTEX_LIGHT, "LIGHTEN", 0, "Lighten", ""},
+               {MTEX_BLEND_HUE, "HUE", 0, "Hue", ""},
+               {MTEX_BLEND_SAT, "SATURATION", 0, "Saturation", ""},
+               {MTEX_BLEND_VAL, "VALUE", 0, "Value", ""},
+               {MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "TextureSlot", NULL);
        RNA_def_struct_sdna(srna, "MTex");
        RNA_def_struct_ui_text(srna, "Texture Slot", "Texture slot defining the mapping and influence of a texture.");
+       RNA_def_struct_ui_icon(srna, ICON_TEXTURE_DATA);
 
        prop= RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "tex");
        RNA_def_property_struct_type(prop, "Texture");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Texture", "Texture datablock used by this texture slot.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
+
+       prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+       RNA_def_property_string_funcs(prop, "rna_TextureSlot_name_get", "rna_TextureSlot_name_length", NULL);
+       RNA_def_property_ui_text(prop, "Name", "Texture slot name.");
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_struct_name_property(srna, prop);
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* mapping */
        prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "ofs");
        RNA_def_property_ui_range(prop, -10, 10, 10, 2);
        RNA_def_property_ui_text(prop, "Offset", "Fine tunes texture mapping X, Y and Z locations.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_ui_range(prop, -100, 100, 10, 2);
        RNA_def_property_ui_text(prop, "Size", "Sets scaling for the texture's X, Y and Z sizes.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
        RNA_def_property_float_sdna(prop, NULL, "r");
        RNA_def_property_array(prop, 3);
        RNA_def_property_ui_text(prop, "Color", "The default color for textures that don't return RGB.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "blendtype");
        RNA_def_property_enum_items(prop, prop_blend_type_items);
        RNA_def_property_ui_text(prop, "Blend Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "stencil", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_STENCIL);
        RNA_def_property_ui_text(prop, "Stencil", "Use this texture as a blending value on the next texture.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "negate", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEGATIVE);
        RNA_def_property_ui_text(prop, "Negate", "Inverts the values of the texture to reverse its effect.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "no_rgb", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_RGBTOINT);
        RNA_def_property_ui_text(prop, "No RGB", "Converts texture RGB values to intensity (gray) values.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "def_var");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Default Value", "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard.");
-
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
+       
        prop= RNA_def_property(srna, "variable_factor", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "varfac");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Variable Factor", "Amount texture affects other values.");
-
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
+       
        prop= RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "colfac");
        RNA_def_property_range(prop, 0, 1);
        RNA_def_property_ui_text(prop, "Color Factor", "Amount texture affects color values.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "normal_factor", PROP_FLOAT, PROP_VECTOR);
        RNA_def_property_float_sdna(prop, NULL, "norfac");
        RNA_def_property_range(prop, 0, 25);
        RNA_def_property_ui_text(prop, "Normal Factor", "Amount texture affects normal values.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_filter_size_common(StructRNA *srna) 
@@ -250,12 +308,14 @@ static void rna_def_filter_size_common(StructRNA *srna)
        prop= RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_FILTER_MIN);
        RNA_def_property_ui_text(prop, "Use Filter", "Use Filter Size as a minimal filter value in pixels");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "filter_size", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "filtersize");
        RNA_def_property_range(prop, 0.1, 50.0);
        RNA_def_property_ui_range(prop, 0.1, 50.0, 1, 0.2);
        RNA_def_property_ui_text(prop, "Filter Size", "Multiplies the filter size used by MIP Map and Interpolation");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_environment_map_common(StructRNA *srna)
@@ -263,21 +323,23 @@ static void rna_def_environment_map_common(StructRNA *srna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_source_items[] = {
-               {ENV_STATIC, "STATIC", "Static", "Calculates environment map only once"},
-               {ENV_ANIM, "ANIMATED", "Animated", "Calculates environment map at each rendering"},
-               {ENV_LOAD, "LOADED", "Loaded", "Loads saved environment map from disk"},
-               {0, NULL, NULL, NULL}};
+               {ENV_STATIC, "STATIC", 0, "Static", "Calculates environment map only once"},
+               {ENV_ANIM, "ANIMATED", 0, "Animated", "Calculates environment map at each rendering"},
+               {ENV_LOAD, "LOADED", 0, "Loaded", "Loads saved environment map from disk"},
+               {0, NULL, 0, NULL, NULL}};
 
        prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_source_items);
        RNA_def_property_ui_text(prop, "Source", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* XXX: move this to specific types if needed */
        prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "ima");
        RNA_def_property_struct_type(prop, "Image");
        RNA_def_property_ui_text(prop, "Image", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_environment_map(BlenderRNA *brna)
@@ -286,9 +348,9 @@ static void rna_def_environment_map(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_type_items[] = {
-               {ENV_CUBE, "CUBE", "Cube", "Use environment map with six cube sides."},
-               {ENV_PLANE, "PLANE", "Plane", "Only one side is rendered, with Z axis pointing in direction of image."},
-               {0, NULL, NULL, NULL}};
+               {ENV_CUBE, "CUBE", 0, "Cube", "Use environment map with six cube sides."},
+               {ENV_PLANE, "PLANE", 0, "Plane", "Only one side is rendered, with Z axis pointing in direction of image."},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "EnvironmentMap", NULL);
        RNA_def_struct_sdna(srna, "EnvMap");
@@ -300,24 +362,28 @@ static void rna_def_environment_map(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "type");
        RNA_def_property_enum_items(prop, prop_type_items);
        RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "clipsta");
        RNA_def_property_range(prop, 0.01, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.01, 50, 100, 2);
        RNA_def_property_ui_text(prop, "Clip Start", "Objects nearer than this are not visible to map.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "clipend");
        RNA_def_property_range(prop, 0.01, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.10, 20000, 100, 2);
        RNA_def_property_ui_text(prop, "Clip End", "Objects further than this are not visible to map.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "zoom", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "viewscale");
        RNA_def_property_range(prop, 0.01, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.5, 5, 100, 2);
        RNA_def_property_ui_text(prop, "Zoom", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* XXX: EnvMap.notlay */
        
@@ -325,29 +391,31 @@ static void rna_def_environment_map(BlenderRNA *brna)
        RNA_def_property_int_sdna(prop, NULL, "cuberes");
        RNA_def_property_range(prop, 50, 4096);
        RNA_def_property_ui_text(prop, "Resolution", "Pixel resolution of the rendered environment map.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "depth", PROP_INT, PROP_NONE);
        RNA_def_property_range(prop, 0, 5);
        RNA_def_property_ui_text(prop, "Depth", "Number of times a map will be rendered recursively (mirror effects.)");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static EnumPropertyItem prop_noise_basis_items[] = {
-       {TEX_BLENDER, "BLENDER_ORIGINAL", "Blender Original", ""},
-       {TEX_STDPERLIN, "ORIGINAL_PERLIN", "Original Perlin", ""},
-       {TEX_NEWPERLIN, "IMPROVED_PERLIN", "Improved Perlin", ""},
-       {TEX_VORONOI_F1, "VORONOI_F1", "Voronoi F1", ""},
-       {TEX_VORONOI_F2, "VORONOI_F2", "Voronoi F2", ""},
-       {TEX_VORONOI_F3, "VORONOI_F3", "Voronoi F3", ""},
-       {TEX_VORONOI_F4, "VORONOI_F4", "Voronoi F4", ""},
-       {TEX_VORONOI_F2F1, "VORONOI_F2_F1", "Voronoi F2-F1", ""},
-       {TEX_VORONOI_CRACKLE, "VORONOI_CRACKLE", "Voronoi Crackle", ""},
-       {TEX_CELLNOISE, "CELL_NOISE", "Cell Noise", ""},
-       {0, NULL, NULL, NULL}};
+       {TEX_BLENDER, "BLENDER_ORIGINAL", 0, "Blender Original", ""},
+       {TEX_STDPERLIN, "ORIGINAL_PERLIN", 0, "Original Perlin", ""},
+       {TEX_NEWPERLIN, "IMPROVED_PERLIN", 0, "Improved Perlin", ""},
+       {TEX_VORONOI_F1, "VORONOI_F1", 0, "Voronoi F1", ""},
+       {TEX_VORONOI_F2, "VORONOI_F2", 0, "Voronoi F2", ""},
+       {TEX_VORONOI_F3, "VORONOI_F3", 0, "Voronoi F3", ""},
+       {TEX_VORONOI_F4, "VORONOI_F4", 0, "Voronoi F4", ""},
+       {TEX_VORONOI_F2F1, "VORONOI_F2_F1", 0, "Voronoi F2-F1", ""},
+       {TEX_VORONOI_CRACKLE, "VORONOI_CRACKLE", 0, "Voronoi Crackle", ""},
+       {TEX_CELLNOISE, "CELL_NOISE", 0, "Cell Noise", ""},
+       {0, NULL, 0, NULL, NULL}};
 
 static EnumPropertyItem prop_noise_type[] = {
-       {TEX_NOISESOFT, "SOFT_NOISE", "Soft", ""},
-       {TEX_NOISEPERL, "HARD_NOISE", "Hard", ""},
-       {0, NULL, NULL, NULL}};
+       {TEX_NOISESOFT, "SOFT_NOISE", 0, "Soft", ""},
+       {TEX_NOISEPERL, "HARD_NOISE", 0, "Hard", ""},
+       {0, NULL, 0, NULL, NULL}};
 
 
 static void rna_def_texture_clouds(BlenderRNA *brna)
@@ -356,9 +424,9 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_clouds_stype[] = {
-       {TEX_DEFAULT, "GREYSCALE", "Greyscale", ""},
-       {TEX_COLOR, "COLOR", "Color", ""},
-       {0, NULL, NULL, NULL}};
+       {TEX_DEFAULT, "GREYSCALE", 0, "Greyscale", ""},
+       {TEX_COLOR, "COLOR", 0, "Color", ""},
+       {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "CloudsTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Clouds Texture", "Procedural noise texture.");
@@ -369,33 +437,38 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_depth", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "noisedepth");
        RNA_def_property_range(prop, 0, INT_MAX);
        RNA_def_property_ui_range(prop, 0, 6, 0, 2);
        RNA_def_property_ui_text(prop, "Noise Depth", "Sets the depth of the cloud calculation");
-
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisetype");
        RNA_def_property_enum_items(prop, prop_noise_type);
        RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_clouds_stype);
        RNA_def_property_ui_text(prop, "Color", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_wood(BlenderRNA *brna)
@@ -404,17 +477,17 @@ static void rna_def_texture_wood(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_wood_stype[] = {
-       {TEX_BAND, "BANDS", "Bands", "Uses standard wood texture in bands"},
-       {TEX_RING, "RINGS", "Rings", "Uses wood texture in rings"},
-       {TEX_BANDNOISE, "BANDNOISE", "Band Noise", "Adds noise to standard wood"},
-       {TEX_RINGNOISE, "RINGNOISE", "Ring Noise", "Adds noise to rings"},
-       {0, NULL, NULL, NULL}};
+       {TEX_BAND, "BANDS", 0, "Bands", "Uses standard wood texture in bands"},
+       {TEX_RING, "RINGS", 0, "Rings", "Uses wood texture in rings"},
+       {TEX_BANDNOISE, "BANDNOISE", 0, "Band Noise", "Adds noise to standard wood"},
+       {TEX_RINGNOISE, "RINGNOISE", 0, "Ring Noise", "Adds noise to rings"},
+       {0, NULL, 0, NULL, NULL}};
 
        static EnumPropertyItem prop_wood_noisebasis2[] = {
-       {TEX_SIN, "SIN", "Sine", "Uses a sine wave to produce bands"},
-       {TEX_SAW, "SAW", "Saw", "Uses a saw wave to produce bands"},
-       {TEX_TRI, "TRI", "Tri", "Uses a triangle wave to produce bands"},
-       {0, NULL, NULL, NULL}};
+       {TEX_SIN, "SIN", 0, "Sine", "Uses a sine wave to produce bands"},
+       {TEX_SAW, "SAW", 0, "Saw", "Uses a saw wave to produce bands"},
+       {TEX_TRI, "TRI", 0, "Tri", "Uses a triangle wave to produce bands"},
+       {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "WoodTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Wood Texture", "Procedural noise texture.");
@@ -425,37 +498,44 @@ static void rna_def_texture_wood(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "turbulence", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "turbul");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 200, 10, 2);
        RNA_def_property_ui_text(prop, "Turbulence", "Sets the turbulence of the bandnoise and ringnoise types");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisetype");
        RNA_def_property_enum_items(prop, prop_noise_type);
        RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_wood_stype);
        RNA_def_property_ui_text(prop, "Pattern", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
        RNA_def_property_enum_items(prop, prop_wood_noisebasis2);
        RNA_def_property_ui_text(prop, "Noise Basis 2", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
 }
 
@@ -465,16 +545,16 @@ static void rna_def_texture_marble(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_marble_stype[] = {
-       {TEX_SOFT, "SOFT", "Soft", "Uses soft marble"},
-       {TEX_SHARP, "SHARP", "Sharp", "Uses more clearly defined marble"},
-       {TEX_SHARPER, "SHARPER", "Sharper", "Uses very clearly defined marble"},
-       {0, NULL, NULL, NULL}};
+       {TEX_SOFT, "SOFT", 0, "Soft", "Uses soft marble"},
+       {TEX_SHARP, "SHARP", 0, "Sharp", "Uses more clearly defined marble"},
+       {TEX_SHARPER, "SHARPER", 0, "Sharper", "Uses very clearly defined marble"},
+       {0, NULL, 0, NULL, NULL}};
 
        static EnumPropertyItem prop_marble_noisebasis2[] = {
-       {TEX_SIN, "SIN", "Sin", "Uses a sine wave to produce bands"},
-       {TEX_SAW, "SAW", "Saw", "Uses a saw wave to produce bands"},
-       {TEX_TRI, "TRI", "Tri", "Uses a triangle wave to produce bands"},
-       {0, NULL, NULL, NULL}};
+       {TEX_SIN, "SIN", 0, "Sin", "Uses a sine wave to produce bands"},
+       {TEX_SAW, "SAW", 0, "Saw", "Uses a saw wave to produce bands"},
+       {TEX_TRI, "TRI", 0, "Tri", "Uses a triangle wave to produce bands"},
+       {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "MarbleTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Marble Texture", "Procedural noise texture.");
@@ -485,43 +565,51 @@ static void rna_def_texture_marble(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "turbulence", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "turbul");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 200, 10, 2);
        RNA_def_property_ui_text(prop, "Turbulence", "Sets the turbulence of the bandnoise and ringnoise types");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_depth", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "noisedepth");
        RNA_def_property_range(prop, 0, INT_MAX);
        RNA_def_property_ui_range(prop, 0, 6, 0, 2);
        RNA_def_property_ui_text(prop, "Noise Depth", "Sets the depth of the cloud calculation");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisetype");
        RNA_def_property_enum_items(prop, prop_noise_type);
        RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_marble_stype);
        RNA_def_property_ui_text(prop, "Pattern", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
        RNA_def_property_enum_items(prop, prop_marble_noisebasis2);
        RNA_def_property_ui_text(prop, "Noise Basis 2", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal.");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
 }
 
@@ -539,12 +627,14 @@ static void rna_def_texture_magic(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 200, 10, 2);
        RNA_def_property_ui_text(prop, "Turbulence", "Sets the turbulence of the bandnoise and ringnoise types");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_depth", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "noisedepth");
        RNA_def_property_range(prop, 0, INT_MAX);
        RNA_def_property_ui_range(prop, 0, 6, 0, 2);
        RNA_def_property_ui_text(prop, "Noise Depth", "Sets the depth of the cloud calculation");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_blend(BlenderRNA *brna)
@@ -553,14 +643,14 @@ static void rna_def_texture_blend(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_blend_progression[] = {
-               {TEX_LIN, "LINEAR", "Linear", "Creates a linear progression"},
-               {TEX_QUAD, "QUADRATIC", "Quadratic", "Creates a quadratic progression"},
-               {TEX_EASE, "EASING", "Easing", "Creates a progression easing from one step to the next"},
-               {TEX_DIAG, "DIAGONAL", "Diagonal", "Creates a diagonal progression"},
-               {TEX_SPHERE, "SPHERICAL", "Spherical", "Creates a spherical progression"},
-               {TEX_HALO, "QUADRATIC_SPHERE", "Quadratic sphere", "Creates a quadratic progression in the shape of a sphere"},
-               {TEX_RAD, "RADIAL", "Radial", "Creates a radial progression"},
-               {0, NULL, NULL, NULL}};
+               {TEX_LIN, "LINEAR", 0, "Linear", "Creates a linear progression"},
+               {TEX_QUAD, "QUADRATIC", 0, "Quadratic", "Creates a quadratic progression"},
+               {TEX_EASE, "EASING", 0, "Easing", "Creates a progression easing from one step to the next"},
+               {TEX_DIAG, "DIAGONAL", 0, "Diagonal", "Creates a diagonal progression"},
+               {TEX_SPHERE, "SPHERICAL", 0, "Spherical", "Creates a spherical progression"},
+               {TEX_HALO, "QUADRATIC_SPHERE", 0, "Quadratic sphere", "Creates a quadratic progression in the shape of a sphere"},
+               {TEX_RAD, "RADIAL", 0, "Radial", "Creates a radial progression"},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "BlendTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Blend Texture", "Procedural color blending texture.");
@@ -570,10 +660,12 @@ static void rna_def_texture_blend(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_blend_progression);
        RNA_def_property_ui_text(prop, "Progression", "Sets the style of the color blending");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_FLIPBLEND);
        RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_stucci(BlenderRNA *brna)
@@ -582,10 +674,10 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_stucci_stype[] = {
-       {TEX_PLASTIC, "PLASTIC", "Plastic", "Uses standard stucci"},
-       {TEX_WALLIN, "WALL_IN", "Wall in", "Creates Dimples"},
-       {TEX_WALLOUT, "WALL_OUT", "Wall out", "Creates Ridges"},
-       {0, NULL, NULL, NULL}};
+       {TEX_PLASTIC, "PLASTIC", 0, "Plastic", "Uses standard stucci"},
+       {TEX_WALLIN, "WALL_IN", 0, "Wall in", "Creates Dimples"},
+       {TEX_WALLOUT, "WALL_OUT", 0, "Wall out", "Creates Ridges"},
+       {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "StucciTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Stucci Texture", "Procedural noise texture.");
@@ -596,27 +688,32 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 200, 10, 2);
        RNA_def_property_ui_text(prop, "Turbulence", "Sets the turbulence of the bandnoise and ringnoise types");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
        
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "noisesize");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisetype");
        RNA_def_property_enum_items(prop, prop_noise_type);
        RNA_def_property_ui_text(prop, "Noise Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_stucci_stype);
        RNA_def_property_ui_text(prop, "Pattern", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_noise(BlenderRNA *brna)
@@ -634,12 +731,12 @@ static void rna_def_texture_image(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_image_extension[] = {
-               {1, "EXTEND", "Extend", "Extends by repeating edge pixels of the image"},
-               {2, "CLIP", "Clip", "Clips to image size and sets exterior pixels as transparent"},
-               {4, "CLIP_CUBE", "Clip Cube", "Clips to cubic-shaped area around the image and sets exterior pixels as transparent"},
-               {3, "REPEAT", "Repeat", "Causes the image to repeat horizontally and vertically"},
-               {5, "CHECKER", "Checker", "Causes the image to repeat in checker board pattern"},
-               {0, NULL, NULL, NULL}};
+               {1, "EXTEND", 0, "Extend", "Extends by repeating edge pixels of the image"},
+               {2, "CLIP", 0, "Clip", "Clips to image size and sets exterior pixels as transparent"},
+               {4, "CLIP_CUBE", 0, "Clip Cube", "Clips to cubic-shaped area around the image and sets exterior pixels as transparent"},
+               {3, "REPEAT", 0, "Repeat", "Causes the image to repeat horizontally and vertically"},
+               {5, "CHECKER", 0, "Checker", "Causes the image to repeat in checker board pattern"},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "ImageTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Image Texture", "");
@@ -648,37 +745,45 @@ static void rna_def_texture_image(BlenderRNA *brna)
        prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP);
        RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_GAUSS_MIP);
        RNA_def_property_ui_text(prop, "MIP Map Gauss", "Uses Gauss filter to sample down MIP maps");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "interpolation", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_INTERPOL);
        RNA_def_property_ui_text(prop, "Interpolation", "Interpolates pixels using Area filter");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* XXX: I think flip_axis should be a generic Texture property, enabled for all the texture types */
        prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_IMAROT);
        RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_USEALPHA);
        RNA_def_property_ui_text(prop, "Use Alpha", "Uses the alpha channel information in the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "calculate_alpha", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_CALCALPHA);
        RNA_def_property_ui_text(prop, "Calculate Alpha", "Calculates an alpha channel based on RGB values in the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "invert_alpha", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NEGALPHA);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_NEGALPHA);
        RNA_def_property_ui_text(prop, "Invert Alpha", "Inverts all the alpha values in the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        rna_def_filter_size_common(srna);
 
        prop= RNA_def_property(srna, "normal_map", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NORMALMAP);
        RNA_def_property_ui_text(prop, "Normal Map", "Uses image RGB values for normal mapping");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* XXX: mtex->normapspace "Sets space of normal map image" "Normal Space %t|Camera %x0|World %x1|Object %x2|Tangent %x3" 
         *                      not sure why this goes in mtex instead of texture directly? */
@@ -687,38 +792,46 @@ static void rna_def_texture_image(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "extend");
        RNA_def_property_enum_items(prop, prop_image_extension);
        RNA_def_property_ui_text(prop, "Extension", "Sets how the image is stretched in the texture");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "repeat_x", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "xrepeat");
        RNA_def_property_range(prop, 1, 512);
        RNA_def_property_ui_text(prop, "Repeat X", "Sets a repetition multiplier in the X direction");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "repeat_y", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "yrepeat");
        RNA_def_property_range(prop, 1, 512);
        RNA_def_property_ui_text(prop, "Repeat Y", "Sets a repetition multiplier in the Y direction");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "mirror_x", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_XMIR);
        RNA_def_property_ui_text(prop, "Mirror X", "Mirrors the image repetition on the X direction");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "mirror_y", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_YMIR);
        RNA_def_property_ui_text(prop, "Mirror Y", "Mirrors the image repetition on the Y direction");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "checker_odd", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_ODD);
        RNA_def_property_ui_text(prop, "Checker Odd", "Sets odd checker tiles");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "checker_even", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_EVEN);
        RNA_def_property_ui_text(prop, "Checker Even", "Sets even checker tiles");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "checker_distance", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "checkerdist");
        RNA_def_property_range(prop, 0.0, 0.99);
        RNA_def_property_ui_range(prop, 0.0, 0.99, 0.1, 0.01);
        RNA_def_property_ui_text(prop, "Checker Distance", "Sets distance between checker tiles");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
 #if 0
 
@@ -730,6 +843,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
        RNA_def_property_array(prop, 4);
        RNA_def_property_range(prop, -10, 10);
        RNA_def_property_ui_text(prop, "Crop Rectangle", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
 #endif
 
@@ -738,29 +852,35 @@ static void rna_def_texture_image(BlenderRNA *brna)
        RNA_def_property_range(prop, -10.0, 10.0);
        RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
        RNA_def_property_ui_text(prop, "Crop Minimum X", "Sets minimum X value to crop the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "crop_min_y", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "cropymin");
        RNA_def_property_range(prop, -10.0, 10.0);
        RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
        RNA_def_property_ui_text(prop, "Crop Minimum Y", "Sets minimum Y value to crop the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "crop_max_x", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "cropxmax");
        RNA_def_property_range(prop, -10.0, 10.0);
        RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
        RNA_def_property_ui_text(prop, "Crop Maximum X", "Sets maximum X value to crop the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "crop_max_y", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "cropymax");
        RNA_def_property_range(prop, -10.0, 10.0);
        RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
        RNA_def_property_ui_text(prop, "Crop Maximum Y", "Sets maximum Y value to crop the image");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "ima");
        RNA_def_property_struct_type(prop, "Image");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Image", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_plugin(BlenderRNA *brna)
@@ -789,6 +909,7 @@ static void rna_def_texture_environment_map(BlenderRNA *brna)
        RNA_def_property_pointer_sdna(prop, NULL, "env");
        RNA_def_property_struct_type(prop, "EnvironmentMap");
        RNA_def_property_ui_text(prop, "Environment Map", "Gets the environment map associated with this texture");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        rna_def_filter_size_common(srna);
 }
@@ -799,12 +920,12 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_musgrave_type[] = {
-               {TEX_MFRACTAL, "MULTIFRACTAL", "Multifractal", ""},
-               {TEX_RIDGEDMF, "RIDGED_MULTIFRACTAL", "Ridged Multifractal", ""},
-               {TEX_HYBRIDMF, "HYBRID_MULTIFRACTAL", "Hybrid Multifractal", ""},
-               {TEX_FBM, "FBM", "fBM", ""},
-               {TEX_HTERRAIN, "HETERO_TERRAIN", "Hetero Terrain", ""},
-               {0, NULL, NULL, NULL}};
+               {TEX_MFRACTAL, "MULTIFRACTAL", 0, "Multifractal", ""},
+               {TEX_RIDGEDMF, "RIDGED_MULTIFRACTAL", 0, "Ridged Multifractal", ""},
+               {TEX_HYBRIDMF, "HYBRID_MULTIFRACTAL", 0, "Hybrid Multifractal", ""},
+               {TEX_FBM, "FBM", 0, "fBM", ""},
+               {TEX_HTERRAIN, "HETERO_TERRAIN", 0, "Hetero Terrain", ""},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "MusgraveTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Musgrave", "Procedural musgrave texture.");
@@ -814,52 +935,62 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
        RNA_def_property_enum_sdna(prop, NULL, "stype");
        RNA_def_property_enum_items(prop, prop_musgrave_type);
        RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "mg_H");
        RNA_def_property_range(prop, 0.0001, 2);
        RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "lacunarity", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "mg_lacunarity");
        RNA_def_property_range(prop, 0, 6);
        RNA_def_property_ui_text(prop, "Lacunarity", "Gap between succesive frequencies");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "octaves", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "mg_octaves");
        RNA_def_property_range(prop, 0, 8);
        RNA_def_property_ui_text(prop, "Octaves", "Number of frequencies used");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "mg_offset");
        RNA_def_property_range(prop, 0, 6);
        RNA_def_property_ui_text(prop, "Offset", "The fractal offset");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "mg_gain");
        RNA_def_property_range(prop, 0, 6);
        RNA_def_property_ui_text(prop, "Gain", "The gain multiplier");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
        RNA_def_property_range(prop, 0, 10);
        RNA_def_property_ui_text(prop, "Noise Intensity", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "noisesize");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_voronoi(BlenderRNA *brna)
@@ -868,22 +999,22 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_distance_metric_items[] = {
-               {TEX_DISTANCE, "DISTANCE", "Actual Distance", ""},
-               {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", "Distance Squared", ""},
-               {TEX_MANHATTAN, "MANHATTAN", "Manhattan", ""},
-               {TEX_CHEBYCHEV, "CHEBYCHEV", "Chebychev", ""},
-               {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", "Minkovsky 1/2", ""},
-               {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", "Minkovsky 4", ""},
-               {TEX_MINKOVSKY, "MINKOVSKY", "Minkovsky", ""},
-               {0, NULL, NULL, NULL}};
+               {TEX_DISTANCE, "DISTANCE", 0, "Actual Distance", ""},
+               {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", 0, "Distance Squared", ""},
+               {TEX_MANHATTAN, "MANHATTAN", 0, "Manhattan", ""},
+               {TEX_CHEBYCHEV, "CHEBYCHEV", 0, "Chebychev", ""},
+               {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", 0, "Minkovsky 1/2", ""},
+               {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", 0, "Minkovsky 4", ""},
+               {TEX_MINKOVSKY, "MINKOVSKY", 0, "Minkovsky", ""},
+               {0, NULL, 0, NULL, NULL}};
 
        static EnumPropertyItem prop_coloring_items[] = {
                /* XXX: OK names / descriptions? */
-               {TEX_INTENSITY, "INTENSITY", "Intensity", "Only calculate intensity."},
-               {TEX_COL1, "POSITION", "Position", "Color cells by position."},
-               {TEX_COL2, "POSITION_OUTLINE", "Position and Outline", "Use position plus an outline based on F2-F.1"},
-               {TEX_COL3, "POSITION_OUTLINE_INTENSITY", "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
-               {0, NULL, NULL, NULL}};
+               {TEX_INTENSITY, "INTENSITY", 0, "Intensity", "Only calculate intensity."},
+               {TEX_COL1, "POSITION", 0, "Position", "Color cells by position."},
+               {TEX_COL2, "POSITION_OUTLINE", 0, "Position and Outline", "Use position plus an outline based on F2-F.1"},
+               {TEX_COL3, "POSITION_OUTLINE_INTENSITY", 0, "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "VoronoiTexture", "Texture");
        RNA_def_struct_ui_text(srna, "Voronoi", "Procedural voronoi texture.");
@@ -894,37 +1025,44 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
        RNA_def_property_array(prop, 4);
        RNA_def_property_range(prop, -2, 2);
        RNA_def_property_ui_text(prop, "Feature Weights", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "minkovsky_exponent", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "vn_mexp");
        RNA_def_property_range(prop, 0.01, 10);
        RNA_def_property_ui_text(prop, "Minkovsky Exponent", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "distance_metric", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "vn_distm");
        RNA_def_property_enum_items(prop, prop_distance_metric_items);
        RNA_def_property_ui_text(prop, "Distance Metric", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "coloring", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "vn_coltype");
        RNA_def_property_enum_items(prop, prop_coloring_items);
        RNA_def_property_ui_text(prop, "Coloring", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
        RNA_def_property_range(prop, 0.01, 10);
        RNA_def_property_ui_text(prop, "Noise Intensity", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "noisesize");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture_distorted_noise(BlenderRNA *brna)
@@ -940,27 +1078,32 @@ static void rna_def_texture_distorted_noise(BlenderRNA *brna)
        RNA_def_property_float_sdna(prop, NULL, "dist_amount");
        RNA_def_property_range(prop, 0, 10);
        RNA_def_property_ui_text(prop, "Distortion Amount", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "noisesize");
        RNA_def_property_range(prop, 0.0001, FLT_MAX);
        RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
        RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "noise_distortion", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
        RNA_def_property_enum_items(prop, prop_noise_basis_items);
        RNA_def_property_ui_text(prop, "Noise Distortion", "Sets the noise basis for the distortion");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.001, 0.1);
        RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
        RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 }
 
 static void rna_def_texture(BlenderRNA *brna)
@@ -969,44 +1112,49 @@ static void rna_def_texture(BlenderRNA *brna)
        PropertyRNA *prop;
 
        static EnumPropertyItem prop_type_items[] = {
-               {0, "NONE", "None", ""},
-               {TEX_CLOUDS, "CLOUDS", "Clouds", ""},
-               {TEX_WOOD, "WOOD", "Wood", ""},
-               {TEX_MARBLE, "MARBLE", "Marble", ""},
-               {TEX_MAGIC, "MAGIC", "Magic", ""},
-               {TEX_BLEND, "BLEND", "Blend", ""},
-               {TEX_STUCCI, "STUCCI", "Stucci", ""},
-               {TEX_NOISE, "NOISE", "Noise", ""},
-               {TEX_IMAGE, "IMAGE", "Image", ""},
-               {TEX_PLUGIN, "PLUGIN", "Plugin", ""},
-               {TEX_ENVMAP, "ENVIRONMENT_MAP", "Environment Map", ""},
-               {TEX_MUSGRAVE, "MUSGRAVE", "Musgrave", ""},
-               {TEX_VORONOI, "VORONOI", "Voronoi", ""},
-               {TEX_DISTNOISE, "DISTORTED_NOISE", "Distorted Noise", ""},
-               {0, NULL, NULL, NULL}};
+               {0, "NONE", 0, "None", ""},
+               {TEX_CLOUDS, "CLOUDS", 0, "Clouds", ""},
+               {TEX_WOOD, "WOOD", 0, "Wood", ""},
+               {TEX_MARBLE, "MARBLE", 0, "Marble", ""},
+               {TEX_MAGIC, "MAGIC", 0, "Magic", ""},
+               {TEX_BLEND, "BLEND", 0, "Blend", ""},
+               {TEX_STUCCI, "STUCCI", 0, "Stucci", ""},
+               {TEX_NOISE, "NOISE", 0, "Noise", ""},
+               {TEX_IMAGE, "IMAGE", 0, "Image/Movie", ""},
+               {TEX_PLUGIN, "PLUGIN", 0, "Plugin", ""},
+               {TEX_ENVMAP, "ENVIRONMENT_MAP", 0, "Environment Map", ""},
+               {TEX_MUSGRAVE, "MUSGRAVE", 0, "Musgrave", ""},
+               {TEX_VORONOI, "VORONOI", 0, "Voronoi", ""},
+               {TEX_DISTNOISE, "DISTORTED_NOISE", 0, "Distorted Noise", ""},
+               {0, NULL, 0, NULL, NULL}};
 
        srna= RNA_def_struct(brna, "Texture", "ID");
        RNA_def_struct_sdna(srna, "Tex");
        RNA_def_struct_ui_text(srna, "Texture", "Texture datablock used by materials, lamps, worlds and brushes.");
+       RNA_def_struct_ui_icon(srna, ICON_TEXTURE_DATA);
        RNA_def_struct_refine_func(srna, "rna_Texture_refine");
 
        prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_items(prop, prop_type_items);
        RNA_def_property_ui_text(prop, "Type", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL);
        RNA_def_property_pointer_sdna(prop, NULL, "coba");
        RNA_def_property_struct_type(prop, "ColorRamp");
        RNA_def_property_ui_text(prop, "Color Ramp", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "bright");
        RNA_def_property_range(prop, 0, 2);
        RNA_def_property_ui_text(prop, "Brightness", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        prop= RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE);
        RNA_def_property_range(prop, 0.01, 5);
        RNA_def_property_ui_text(prop, "Contrast", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        /* XXX: would be nicer to have this as a color selector?
           but the values can go past [0,1]. */
@@ -1015,6 +1163,7 @@ static void rna_def_texture(BlenderRNA *brna)
        RNA_def_property_array(prop, 3);
        RNA_def_property_range(prop, 0, 2);
        RNA_def_property_ui_text(prop, "RGB Factor", "");
+       RNA_def_property_update(prop, NC_TEXTURE, NULL);
 
        rna_def_animdata_common(srna);