diff options
-rw-r--r-- | release/scripts/ui/properties_texture.py | 25 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/texture.c | 8 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/buttons_context.c | 15 |
4 files changed, 40 insertions, 12 deletions
diff --git a/release/scripts/ui/properties_texture.py b/release/scripts/ui/properties_texture.py index 23b5bedd346..a209f208226 100644 --- a/release/scripts/ui/properties_texture.py +++ b/release/scripts/ui/properties_texture.py @@ -70,8 +70,9 @@ class TextureButtonsPanel(bpy.types.Panel): def poll(self, context): tex = context.texture + if not tex or tex == None: return False engine = context.scene.render.engine - return (tex and (tex.type != 'NONE' or tex.use_nodes) and (engine in self.COMPAT_ENGINES)) + return (tex.type != 'NONE' or tex.use_nodes) and (engine in self.COMPAT_ENGINES) class TEXTURE_PT_preview(TextureButtonsPanel): @@ -82,8 +83,10 @@ class TEXTURE_PT_preview(TextureButtonsPanel): layout = self.layout tex = context.texture - slot = context.texture_slot - + try: + slot = context.texture_slot + except: + slot = None idblock = context_tex_datablock(context) if idblock: @@ -99,7 +102,10 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel): def poll(self, context): engine = context.scene.render.engine - return ((context.material or context.world or context.lamp or context.brush or context.texture) and (engine in self.COMPAT_ENGINES)) + try: getattr(context, "texture_slot") + except: return False + return ((context.material or context.world or context.lamp or context.brush or context.texture) + and (engine in self.COMPAT_ENGINES)) def draw(self, context): layout = self.layout @@ -206,9 +212,11 @@ class TextureSlotPanel(TextureButtonsPanel): COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} def poll(self, context): + try: getattr(context, "texture_slot") + except: return False + engine = context.scene.render.engine - return (context.texture_slot and - TextureButtonsPanel.poll(self, context) and (engine in self.COMPAT_ENGINES)) + return TextureButtonsPanel.poll(self, context) and (engine in self.COMPAT_ENGINES) class TEXTURE_PT_mapping(TextureSlotPanel): @@ -219,6 +227,9 @@ class TEXTURE_PT_mapping(TextureSlotPanel): idblock = context_tex_datablock(context) if type(idblock) == bpy.types.Brush and not context.sculpt_object: return False + try: getattr(context, "texture_slot") + except: return False + engine = context.scene.render.engine return context.texture_slot and (engine in self.COMPAT_ENGINES) @@ -313,6 +324,8 @@ class TEXTURE_PT_influence(TextureSlotPanel): idblock = context_tex_datablock(context) if type(idblock) == bpy.types.Brush: return False + try: getattr(context, "texture_slot") + except: return False engine = context.scene.render.engine return context.texture_slot and (engine in self.COMPAT_ENGINES) diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index c13e48e8f01..99370610479 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -879,9 +879,15 @@ Tex *give_current_material_texture(Material *ma) } else { node= nodeGetActiveID(ma->nodetree, ID_MA); - if(node) + if(node) { ma= (Material*)node->id; + if(ma) { + mtex= ma->mtex[(int)(ma->texact)]; + if(mtex) tex= mtex->tex; + } + } } + return tex; } if(ma) { diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 1e87cd73215..8dccbb33666 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -573,7 +573,7 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) ot->prop= prop; } -/************************ poll function for operators using mod names and data context *********************/ +/************************ generic functions for operators using mod names and data context *********************/ static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type) { @@ -593,7 +593,7 @@ static int edit_modifier_poll(bContext *C) static void edit_modifier_properties(wmOperatorType *ot) { - RNA_def_string(ot->srna, "modifier", "", 32, "Modifier", "Name of the modifier to apply"); + RNA_def_string(ot->srna, "modifier", "", 32, "Modifier", "Name of the modifier to edit"); } static int edit_modifier_invoke_properties(bContext *C, wmOperator *op) diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 961c3cf17ce..da6f9fa3f1e 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -699,11 +699,20 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r Material *ma= ptr->data; /* if we have a node material, get slot from material in material node */ - if(ma && ma->use_nodes && ma->nodetree) + if(ma && ma->use_nodes && ma->nodetree) { + /* if there's an active texture node in the node tree, + * then that texture is in context directly, without a texture slot */ + if (give_current_material_texture_node(ma)) + return 0; + ma= give_node_material(ma); - - if(ma) + if (ma) + CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); + else + return 0; + } else if(ma) { CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); + } } else if((ptr=get_pointer_type(path, &RNA_Lamp))) { Lamp *la= ptr->data; |