Fix [#35741] Material shows WORLD texture_context by default.
authorBastien Montagne <montagne29@wanadoo.fr>
Sun, 16 Jun 2013 09:44:17 +0000 (09:44 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Sun, 16 Jun 2013 09:44:17 +0000 (09:44 +0000)
Now also check previous button context, when switching. This way, if the previous one was a texture one, and become valid after the last switch (e.g. a material added to a new object), relevant texture context can still be set.

Note this commit also partially fixes [#35769] The “show texture in texture tab” button in a modifier does not show up until the user manually shows the texture in the Texture tab (full fix of this one will probably implies to always have a valid ButsContextTexture [sbuts->texuser]...).

source/blender/editors/space_buttons/buttons_header.c

index 1d8d213618133e2a107f1e3d1074df735a46c170..f9742121e995f5c28bf0dd3b37644e2f47676214 100644 (file)
@@ -79,6 +79,27 @@ static void set_texture_context(const bContext *C, SpaceButs *sbuts)
        else if ((sbuts->mainb == BCONTEXT_PARTICLE) && ED_texture_context_check_particles(C)) {
                sbuts->texture_context = SB_TEXC_PARTICLES;
        }
+       else if ((ELEM(sbuts->mainb, BCONTEXT_MODIFIER, BCONTEXT_PHYSICS)) && ED_texture_context_check_others(C)) {
+               sbuts->texture_context = SB_TEXC_OTHER;
+       }
+       /* Second pass: sbuts->mainbuser still contains the previous button context.
+        * Useful e.g. when we switch to material, no material present, add a material, switch to texture.
+        * See #35741. */
+       else if ((sbuts->mainbuser == BCONTEXT_WORLD) && ED_texture_context_check_world(C)) {
+               sbuts->texture_context = SB_TEXC_WORLD;
+       }
+       else if ((sbuts->mainbuser == BCONTEXT_MATERIAL) && ED_texture_context_check_material(C)) {
+               sbuts->texture_context = SB_TEXC_MATERIAL;
+       }
+       else if ((sbuts->mainbuser == BCONTEXT_DATA) && ED_texture_context_check_lamp(C)) {
+               sbuts->texture_context = SB_TEXC_LAMP;
+       }
+       else if ((sbuts->mainbuser == BCONTEXT_PARTICLE) && ED_texture_context_check_particles(C)) {
+               sbuts->texture_context = SB_TEXC_PARTICLES;
+       }
+       else if ((ELEM(sbuts->mainbuser, BCONTEXT_MODIFIER, BCONTEXT_PHYSICS)) && ED_texture_context_check_others(C)) {
+               sbuts->texture_context = SB_TEXC_OTHER;
+       }
        /* Else, just be sure that current context is valid! */
        else {
                buttons_check_texture_context(C, sbuts);