[Bf-blender-cvs] [e9cd2fb23b8] blender2.8: Keymap: partially implement changes from T55162

Campbell Barton noreply at git.blender.org
Tue May 29 17:55:09 CEST 2018


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. @@



More information about the Bf-blender-cvs mailing list