Commit: e9cd2fb23b837d351bea6c5e5aa887ddc547197b
Author: Campbell Barton
Date:   Tue May 29 17:25:19 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBe9cd2fb23b837d351bea6c5e5aa887ddc547197b

Keymap: partially implement changes from T55162

- Use Tab key for search.
- Number keys switch modes.
- The number of the current mode can open a submode menu
  (currently only works for edit-mode)
- Ctrl-Tab, Ctrl-Shift-Tab - cycle workspaces.

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

M       release/scripts/startup/bl_operators/wm.py
M       release/scripts/startup/bl_ui/space_toolsystem_common.py
M       source/blender/editors/gpencil/gpencil_ops.c
M       source/blender/editors/mesh/mesh_ops.c
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/object/object_intern.h
M       source/blender/editors/object/object_ops.c
M       source/blender/editors/screen/screen_ops.c
M       source/blender/editors/sculpt_paint/paint_ops.c
M       source/blender/editors/space_view3d/view3d_ops.c
M       source/blender/editors/transform/transform_ops.c
M       source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/release/scripts/startup/bl_operators/wm.py 
b/release/scripts/startup/bl_operators/wm.py
index f18464a6614..021085b8d75 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -2369,9 +2369,7 @@ class WM_OT_toolbar(Operator):
 
         cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
         if cls is None:
-            # self.report({'WARNING'}, f"Toolbar not found for {space_type!r}")
-            # Passthrough to running search directly.
-            bpy.ops.wm.search_menu('INVOKE_DEFAULT')
+            self.report({'WARNING'}, f"Toolbar not found for {space_type!r}")
             return {'CANCELLED'}
 
         wm = context.window_manager
@@ -2381,9 +2379,6 @@ class WM_OT_toolbar(Operator):
             layout = popover.layout
             cls.draw_cls(layout, context, detect_layout=False)
 
-            layout.operator_context = 'INVOKE_DEFAULT'
-            layout.operator("wm.search_menu")
-
         wm.popover(draw_menu, keymap=keymap)
         return {'FINISHED'}
 
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py 
b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 8a494369cf5..d8708781c59 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -594,10 +594,6 @@ def keymap_from_context(context, space_type):
     for kmi in keymap.keymap_items:
         keymap.keymap_items.remove(kmi)
 
-
-    kmi_search = wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1]
-    kmi_search_type = None if not kmi_search else kmi_search.type
-
     items = []
     cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
     for i, item in enumerate(
@@ -637,14 +633,6 @@ def keymap_from_context(context, space_type):
                     )
                     kmi.properties.name = item.text
 
-                    # Disallow overlap
-                    if kmi_search_type == kmi_found_type:
-                        kmi_search_type = None
-
-    # Support double-tap for search.
-    if kmi_search_type:
-        keymap.keymap_items.new("wm.search_menu", type=kmi_search_type, 
value='PRESS')
-
     wm.keyconfigs.update()
     return keymap
 
diff --git a/source/blender/editors/gpencil/gpencil_ops.c 
b/source/blender/editors/gpencil/gpencil_ops.c
index 3a2169798e5..2119569298d 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -290,28 +290,6 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
        /* Move to Layer */
        WM_keymap_add_item(keymap, "GPENCIL_OT_move_to_layer", MKEY, KM_PRESS, 
0, 0);
 
-       /* Select drawing brush using index */
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", ONEKEY, 
KM_PRESS, 0, 0); 
-       RNA_int_set(kmi->ptr, "index", 0);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", TWOKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 1);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", THREEKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 2);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", FOURKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 3);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", FIVEKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 4);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", SIXKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 5);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", SEVENKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 6);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", EIGHTKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 7);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", NINEKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 8);
-       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_select", ZEROKEY, 
KM_PRESS, 0, 0);
-       RNA_int_set(kmi->ptr, "index", 9);
-
        /* Transform Tools */
        kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", GKEY, 
KM_PRESS, 0, 0);
        
diff --git a/source/blender/editors/mesh/mesh_ops.c 
b/source/blender/editors/mesh/mesh_ops.c
index 9f3ef6f958d..806a1d2b4b8 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -382,10 +382,7 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
        WM_keymap_add_item(keymap, "MESH_OT_faces_select_linked_flat", FKEY, 
KM_PRESS, (KM_CTRL | KM_SHIFT | KM_ALT), 0);
 
        WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_select_similar", GKEY, 
KM_PRESS, KM_SHIFT, 0);
-       
-       /* selection mode */
-       WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_select_mode", TABKEY, 
KM_PRESS, KM_CTRL, 0);
-       
+
        /* hide */
        kmi = WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
        RNA_boolean_set(kmi->ptr, "unselected", false);
diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index 762d8d96c61..57d929ceccb 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1361,12 +1361,36 @@ static int object_mode_set_poll(bContext *C)
 
 static int object_mode_set_exec(bContext *C, wmOperator *op)
 {
+       bool use_submode = STREQ(op->idname, "OBJECT_OT_mode_set_or_submode");
        Object *ob = CTX_data_active_object(C);
        bGPdata *gpd = CTX_data_gpencil_data(C);
        eObjectMode mode = RNA_enum_get(op->ptr, "mode");
        eObjectMode restore_mode = (ob) ? ob->mode : OB_MODE_OBJECT;
        const bool toggle = RNA_boolean_get(op->ptr, "toggle");
-       
+
+       if (use_submode) {
+               /* Apply arbitrary fallback modes, see: T55162. */
+               if (ob) {
+                       if (ob->type == OB_ARMATURE) {
+                               if (mode == OB_MODE_TEXTURE_PAINT) {
+                                       mode = OB_MODE_POSE;
+                               }
+                       }
+               }
+
+               if (toggle == false) {
+                       if (mode == restore_mode) {
+                               switch (mode) {
+                                       case OB_MODE_EDIT:
+                                               WM_menu_name_call(C, 
"VIEW3D_MT_edit_mesh_select_mode", WM_OP_INVOKE_REGION_WIN);
+                                               return OPERATOR_INTERFACE;
+                                       default:
+                                               break;
+                               }
+                       }
+               }
+       }
+
        if (gpd) {
                /* GP Mode is not bound to a specific object. Therefore,
                 * we don't want it to be actually saved on any objects,
@@ -1441,6 +1465,31 @@ void OBJECT_OT_mode_set(wmOperatorType *ot)
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
+void OBJECT_OT_mode_set_or_submode(wmOperatorType *ot)
+{
+       PropertyRNA *prop;
+
+       /* identifiers */
+       ot->name = "Set Object Mode or Submode";
+       ot->description = "Sets the object interaction mode";
+       ot->idname = "OBJECT_OT_mode_set_or_submode";
+
+       /* api callbacks */
+       ot->exec = object_mode_set_exec;
+
+       ot->poll = object_mode_set_poll; //ED_operator_object_active_editable;
+
+       /* flags */
+       ot->flag = 0; /* no register/undo here, leave it to operators being 
called */
+
+       ot->prop = RNA_def_enum(ot->srna, "mode", rna_enum_object_mode_items, 
OB_MODE_OBJECT, "Mode", "");
+       RNA_def_enum_funcs(ot->prop, object_mode_set_itemsf);
+       RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE);
+
+       prop = RNA_def_boolean(ot->srna, "toggle", 0, "Toggle", "");
+       RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}
+
 bool ED_object_editmode_calc_active_center(Object *obedit, const bool 
select_only, float r_center[3])
 {
        switch (obedit->type) {
diff --git a/source/blender/editors/object/object_intern.h 
b/source/blender/editors/object/object_intern.h
index 445b14982ee..685bc423f01 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -77,6 +77,7 @@ void OBJECT_OT_unlink_data(struct wmOperatorType *ot);
 
 /* object_edit.c */
 void OBJECT_OT_mode_set(struct wmOperatorType *ot);
+void OBJECT_OT_mode_set_or_submode(struct wmOperatorType *ot);
 void OBJECT_OT_editmode_toggle(struct wmOperatorType *ot);
 void OBJECT_OT_posemode_toggle(struct wmOperatorType *ot);
 void OBJECT_OT_proxy_make(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_ops.c 
b/source/blender/editors/object/object_ops.c
index c47d741f818..d40db22d5cf 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -67,6 +67,7 @@ void ED_operatortypes_object(void)
        WM_operatortype_append(OBJECT_OT_origin_set);
        
        WM_operatortype_append(OBJECT_OT_mode_set);
+       WM_operatortype_append(OBJECT_OT_mode_set_or_submode);
        WM_operatortype_append(OBJECT_OT_editmode_toggle);
        WM_operatortype_append(OBJECT_OT_posemode_toggle);
        WM_operatortype_append(OBJECT_OT_proxy_make);
@@ -283,28 +284,29 @@ void ED_keymap_object(wmKeyConfig *keyconf)
 {
        wmKeyMap *keymap;
        wmKeyMapItem *kmi;
-       int i;
-       
+
        /* Objects, Regardless of Mode 
-------------------------------------------------- */
        keymap = WM_keymap_find(keyconf, "Object Non-modal", 0, 0);
-       
-       /* Note: this keymap works disregarding mode */
-       kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, 
KM_PRESS, 0, 0);
-       RNA_enum_set(kmi->ptr, "mode", OB_MODE_EDIT);
-       RNA_boolean_set(kmi->ptr, "toggle", true);
-
-       kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, 
KM_PRESS, KM_CTRL, 0);
-       RNA_enum_set(kmi->ptr, "mode", OB_MODE_POSE);
-       RNA_boolean_set(kmi->ptr, "toggle", true);
-
-       kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", VKEY, KM_PRESS, 
0, 0);
-       RNA_enum_set(kmi->ptr, "mode", OB_MODE_VERTEX_PAINT);
-       RNA_boolean_set(kmi->ptr, "toggle", true);
-       
-       kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, 
KM_PRESS, KM_CTRL, 0);
-       RNA_enum_set(kmi->ptr, "mode", OB_MODE_WEIGHT_PAINT);
-       RNA_boolean_set(kmi->ptr, "toggle", true);
-       
+
+       /* modes */
+       {
+               short key_mode_pair[][2] = {
+                       {ACCENTGRAVEKEY, OB_MODE_OBJECT},
+                       {ONEKEY, OB_MODE_OBJECT},
+                       {TWOKEY, OB_MODE_EDIT},
+                       {THREEKEY, OB_MODE_SCULPT},
+                       {FOURKEY, OB_MODE_TEXTURE_PAINT},  /* or OB_MODE_POSE */
+                       {FIVEKEY, OB_MODE_VERTEX_PAINT},
+                       {SIXKEY, OB_MODE_WEIGHT_PAINT},
+                       {SEVENKEY, OB_MODE_PARTICLE_EDIT},
+               };
+
+               for (uint i = 0; i < ARRAY_SIZE(key_mode_pair); i++) {
+                       kmi = WM_keymap_add_item(keymap, 
"OBJECT_OT_mode_set_or_submode", key_mode_pair[i][0], KM_PRESS, 0, 0);
+                       RNA_enum_set(kmi->ptr, "mode", key_mode_pair[i][1]);
+               }
+       }
+
        WM_keymap_add_item(keymap, "OBJECT_OT_origin_set", CKEY, KM_PRESS, 
KM_ALT

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to