Commit: b0c8d35142c3a0fa6f468efff41c44ce9ae1d1d0
Author: Campbell Barton
Date:   Thu May 17 20:28:14 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBb0c8d35142c3a0fa6f468efff41c44ce9ae1d1d0

Tool System: use context mode

Was using object mode in the workspace API which isn't
useful for accessing tools.

===================================================================

M       release/scripts/startup/bl_ui/space_toolsystem_common.py
M       source/blender/editors/mesh/editmesh_extrude.c
M       source/blender/makesrna/RNA_enum_types.h
M       source/blender/makesrna/intern/rna_context.c
M       source/blender/makesrna/intern/rna_workspace.c
M       source/blender/windowmanager/intern/wm_toolsystem.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py 
b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index ad5c970a6d5..c4ef5023563 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -284,8 +284,7 @@ class ToolSelectPanelHelper:
     def _tool_active_from_context(context, space_type, mode=None, 
create=False):
         if space_type == 'VIEW_3D':
             if mode is None:
-                obj = context.active_object
-                mode = obj.mode if obj is not None else 'OBJECT'
+                mode = context.mode
             tool = context.workspace.tools.from_space_view3d_mode(mode, create)
             if tool is not None:
                 return tool
diff --git a/source/blender/editors/mesh/editmesh_extrude.c 
b/source/blender/editors/mesh/editmesh_extrude.c
index 67596ef5c8a..95bf8e89b0e 100644
--- a/source/blender/editors/mesh/editmesh_extrude.c
+++ b/source/blender/editors/mesh/editmesh_extrude.c
@@ -420,7 +420,7 @@ static void manipulator_mesh_extrude_orientation_matrix_set(
 static bool manipulator_mesh_extrude_poll(const bContext *C, 
wmManipulatorGroupType *wgt)
 {
        WorkSpace *workspace = CTX_wm_workspace(C);
-       const bToolKey tkey = { .space_type = SPACE_VIEW3D, .mode = 
OB_MODE_EDIT};
+       const bToolKey tkey = { .space_type = SPACE_VIEW3D, .mode = 
CTX_MODE_EDIT_MESH, };
        bToolRef_Runtime *tref_rt = WM_toolsystem_runtime_find(workspace, 
&tkey);
        if ((tref_rt == NULL) ||
            !STREQ(wgt->idname, tref_rt->manipulator_group) ||
diff --git a/source/blender/makesrna/RNA_enum_types.h 
b/source/blender/makesrna/RNA_enum_types.h
index 447dc4ce289..6ebdb845b03 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -205,7 +205,7 @@ extern const EnumPropertyItem 
rna_enum_dt_layers_select_src_items[];
 extern const EnumPropertyItem rna_enum_dt_layers_select_dst_items[];
 
 extern const EnumPropertyItem rna_enum_abc_compression_items[];
-
+extern const EnumPropertyItem rna_enum_context_mode_items[];
 
 /* API calls */
 int rna_node_tree_type_to_enum(struct bNodeTreeType *typeinfo);
diff --git a/source/blender/makesrna/intern/rna_context.c 
b/source/blender/makesrna/intern/rna_context.c
index fd128548ed1..c8d7cb1fcdc 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -37,6 +37,24 @@
 
 #include "rna_internal.h" /* own include */
 
+const EnumPropertyItem rna_enum_context_mode_items[] = {
+       {CTX_MODE_EDIT_MESH, "EDIT_MESH", 0, "Mesh Edit", ""},
+       {CTX_MODE_EDIT_CURVE, "EDIT_CURVE", 0, "Curve Edit", ""},
+       {CTX_MODE_EDIT_SURFACE, "EDIT_SURFACE", 0, "Surface Edit", ""},
+       {CTX_MODE_EDIT_TEXT, "EDIT_TEXT", 0, "Edit Edit", ""},
+       {CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", ""}, /* 
PARSKEL reuse will give issues */
+       {CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", ""},
+       {CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""},
+       {CTX_MODE_POSE, "POSE", 0, "Pose ", ""},
+       {CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""},
+       {CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
+       {CTX_MODE_PAINT_VERTEX, "PAINT_VERTEX", 0, "Vertex Paint", ""},
+       {CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", ""},
+       {CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
+       {CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
+       {0, NULL, 0, NULL, NULL}
+};
+
 #ifdef RNA_RUNTIME
 
 #include "RE_engine.h"
@@ -194,24 +212,6 @@ void RNA_def_context(BlenderRNA *brna)
        StructRNA *srna;
        PropertyRNA *prop;
 
-       static const EnumPropertyItem mode_items[] = {
-               {CTX_MODE_EDIT_MESH, "EDIT_MESH", 0, "Mesh Edit", ""},
-               {CTX_MODE_EDIT_CURVE, "EDIT_CURVE", 0, "Curve Edit", ""},
-               {CTX_MODE_EDIT_SURFACE, "EDIT_SURFACE", 0, "Surface Edit", ""},
-               {CTX_MODE_EDIT_TEXT, "EDIT_TEXT", 0, "Edit Edit", ""},
-               {CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", 
""}, /* PARSKEL reuse will give issues */
-               {CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", 
""},
-               {CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""},
-               {CTX_MODE_POSE, "POSE", 0, "Pose ", ""},
-               {CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""},
-               {CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
-               {CTX_MODE_PAINT_VERTEX, "PAINT_VERTEX", 0, "Vertex Paint", ""},
-               {CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", 
""},
-               {CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
-               {CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
-               {0, NULL, 0, NULL, NULL}
-       };
-
        srna = RNA_def_struct(brna, "Context", NULL);
        RNA_def_struct_ui_text(srna, "Context", "Current windowmanager and data 
context");
        RNA_def_struct_sdna(srna, "bContext");
@@ -308,7 +308,7 @@ void RNA_def_context(BlenderRNA *brna)
        RNA_def_property_pointer_funcs(prop, 
"rna_Context_user_preferences_get", NULL, NULL, NULL);
 
        prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_items(prop, mode_items);
+       RNA_def_property_enum_items(prop, rna_enum_context_mode_items);
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
        RNA_def_property_enum_funcs(prop, "rna_Context_mode_get", NULL, NULL);
 }
diff --git a/source/blender/makesrna/intern/rna_workspace.c 
b/source/blender/makesrna/intern/rna_workspace.c
index 485cb298dae..3c499fbc195 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -137,7 +137,7 @@ const EnumPropertyItem *rna_WorkSpace_tools_mode_itemf(
 
        switch (workspace->tools_space_type) {
                case SPACE_VIEW3D:
-                       return rna_enum_object_mode_items;
+                       return rna_enum_context_mode_items;
                case SPACE_IMAGE:
                        return rna_enum_space_image_mode_items;
        }
@@ -229,7 +229,7 @@ static void rna_def_workspace_tools(BlenderRNA *brna, 
PropertyRNA *cprop)
        /* add owner_id */
        func = RNA_def_function(srna, "from_space_view3d_mode", 
"rna_WorkSpace_tools_from_space_view3d_mode");
        RNA_def_function_ui_description(func, "");
-       parm = RNA_def_enum(func, "mode", rna_enum_object_mode_items, 0, "", 
"");
+       parm = RNA_def_enum(func, "mode", rna_enum_context_mode_items, 0, "", 
"");
        RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
        RNA_def_boolean(func, "create", false, "Create", "");
        /* return type */
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c 
b/source/blender/windowmanager/intern/wm_toolsystem.c
index 24b902a6a92..1191bec3f65 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -293,7 +293,13 @@ int WM_toolsystem_mode_from_spacetype(
                        /* 'sa' may be NULL in this case. */
                        ViewLayer *view_layer = 
BKE_workspace_view_layer_get(workspace, scene);
                        Object *obact = OBACT(view_layer);
-                       mode = obact ? obact->mode : OB_MODE_OBJECT;
+                       if (obact != NULL) {
+                               Object *obedit = OBEDIT_FROM_OBACT(obact);
+                               mode = CTX_data_mode_enum_ex(obedit, obact, 
obact->mode);
+                       }
+                       else {
+                               mode = CTX_MODE_OBJECT;
+                       }
                        break;
                }
                case SPACE_IMAGE:

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to