Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-11-19 06:39:25 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-11-19 06:39:25 +0300
commitb33afe4df32b51a37cb1ba49ac48b43d1185996f (patch)
treea6fd9d2f319eb071e5b73a1871df1b1816a93acd /release/scripts/startup/bl_ui/space_toolsystem_common.py
parent740adf2a4b30abf86830daebec1f990c96bfe504 (diff)
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.
Diffstat (limited to 'release/scripts/startup/bl_ui/space_toolsystem_common.py')
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py67
1 files changed, 46 insertions, 21 deletions
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()