Commit: b33afe4df32b51a37cb1ba49ac48b43d1185996f
Author: Campbell Barton
Date:   Mon Nov 19 14:39:25 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBb33afe4df32b51a37cb1ba49ac48b43d1185996f

Tool System: improve popup w/ modifier keys

When the toolbar is accessed with modifiers (eg shift-space):

- Check if we can use the key without any modifiers to set the cursor.
- Pie-menu stile release event no longer checks for modifiers.

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

M       release/scripts/startup/bl_ui/space_toolsystem_common.py

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

diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py 
b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 5eb34810011..2fb06833997 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -733,6 +733,8 @@ def keymap_from_context(context, space_type):
     def dict_as_tuple(d):
         return tuple((k, v) for (k, v) in sorted(d.items()))
 
+    tool_blacklist = set()
+
     use_simple_keymap = False
 
     # Press the toolbar popup key again to set the default tool,
@@ -771,15 +773,6 @@ def keymap_from_context(context, space_type):
 
     cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
 
-    items_all = [
-        # 0: tool
-        # 1: keymap item (direct access)
-        # 2: keymap item (newly calculated for toolbar)
-        [item, None, None]
-        for item in 
ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context))
-        if item is not None
-    ]
-
     if use_hack_properties:
         kmi_hack = keymap.keymap_items.new("wm.tool_set_by_name", 'A', 'PRESS')
         kmi_hack_properties = kmi_hack.properties
@@ -791,10 +784,8 @@ def keymap_from_context(context, space_type):
         kmi_toolbar = 
wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1]
         kmi_toolbar_type = None if not kmi_toolbar else kmi_toolbar.type
         if use_tap_reset and kmi_toolbar_type is not None:
-            kmi_toolbar_args = {
-                "type": kmi_toolbar_type,
-                **modifier_keywords_from_item(kmi_toolbar),
-            }
+            kmi_toolbar_args_type_only = {"type": kmi_toolbar_type}
+            kmi_toolbar_args = {**kmi_toolbar_args_type_only, 
**modifier_keywords_from_item(kmi_toolbar)}
         else:
             use_tap_reset = False
         del kmi_toolbar
@@ -817,15 +808,25 @@ def keymap_from_context(context, space_type):
     if use_tap_reset:
         kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args)
         if kmi_toolbar_tuple not in kmi_unique_args:
-            kmi = keymap.keymap_items.new(
-                "wm.tool_set_by_name",
-                value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK',
-                **kmi_toolbar_args,
-            )
-            kmi.properties.name = tap_reset_tool
-        kmi_unique_args.add(kmi_toolbar_tuple)
+            # Used after keymap is setup.
+            kmi_unique_args.add(kmi_toolbar_tuple)
+        else:
+            use_tap_reset = False
         del kmi_toolbar_tuple
 
+    if use_tap_reset:
+        tool_blacklist.add(tap_reset_tool)
+
+    items_all = [
+        # 0: tool
+        # 1: keymap item (direct access)
+        # 2: keymap item (newly calculated for toolbar)
+        [item, None, None]
+        for item in 
ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context))
+        if item is not None
+        if item.text not in tool_blacklist
+    ]
+
     if use_simple_keymap:
         # Simply assign a key from A-Z.
         for i, (item, _, _) in enumerate(items_all):
@@ -836,7 +837,6 @@ def keymap_from_context(context, space_type):
         for item_container in items_all:
             item = item_container[0]
             # Only check the first item in the tools key-map (a little 
arbitrary).
-
             if use_hack_properties:
                 # First check for direct assignment.
                 kmi_hack_properties.name = item.text
@@ -1010,11 +1010,35 @@ def keymap_from_context(context, space_type):
     if use_hack_properties:
         keymap.keymap_items.remove(kmi_hack)
 
+
+    # Keepo last so we can try add a key without any modifiers
+    # in the case this toolbar was activated with modifiers.
+    if use_tap_reset:
+        if len(kmi_toolbar_args_type_only) == len(kmi_toolbar_args):
+            kmi_toolbar_args_available = kmi_toolbar_args
+        else:
+            # We have modifiers, see if we have a free key w/o modifiers.
+            kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args_type_only)
+            if kmi_toolbar_tuple not in kmi_unique_args:
+                kmi_toolbar_args_available = kmi_toolbar_args_type_only
+                kmi_unique_args.add(kmi_toolbar_tuple)
+            else:
+                kmi_toolbar_args_available = kmi_toolbar_args
+            del kmi_toolbar_tuple
+
+        kmi = keymap.keymap_items.new(
+            "wm.tool_set_by_name",
+            value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK',
+            **kmi_toolbar_args_available,
+        )
+        kmi.properties.name = tap_reset_tool
+
     if use_release_confirm:
         kmi = keymap.keymap_items.new(
             "ui.button_execute",
             type=kmi_toolbar_type,
             value='RELEASE',
+            any=True,
         )
         kmi.properties.skip_depressed = True
 
@@ -1025,6 +1049,7 @@ def keymap_from_context(context, space_type):
                 "wm.tool_set_by_name",
                 type=kmi_toolbar_type,
                 value='RELEASE',
+                any=True,
             )
 
     wm.keyconfigs.update()

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

Reply via email to