From b0847eff2a29b0f2ba3263afc3f367011703df84 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 3 Feb 2022 12:20:50 +1100 Subject: Fix T93625: fallback tools don't work with RMB select c9d9bfa84ad5cb985e3feccffa702b2f3cc2adf8 caused a regression in when the right-mouse select action was set to "Select & Tweak" (default). Now the fallback tool works with RMB select as it did before. --- release/scripts/presets/keyconfig/Blender.py | 3 +- .../keyconfig/keymap_data/blender_default.py | 74 ++++++++++++++-------- 2 files changed, 50 insertions(+), 27 deletions(-) (limited to 'release') diff --git a/release/scripts/presets/keyconfig/Blender.py b/release/scripts/presets/keyconfig/Blender.py index 1ac7626f926..417a3c39310 100644 --- a/release/scripts/presets/keyconfig/Blender.py +++ b/release/scripts/presets/keyconfig/Blender.py @@ -318,7 +318,8 @@ def load(): use_v3d_tab_menu=kc_prefs.use_v3d_tab_menu, use_v3d_shade_ex_pie=kc_prefs.use_v3d_shade_ex_pie, use_gizmo_drag=(is_select_left and kc_prefs.gizmo_action == 'DRAG'), - use_fallback_tool=(True if is_select_left else (kc_prefs.rmb_action == 'FALLBACK_TOOL')), + use_fallback_tool=True, + use_fallback_tool_rmb=(False if is_select_left else kc_prefs.rmb_action == 'FALLBACK_TOOL'), use_alt_tool_or_cursor=( (not use_mouse_emulate_3_button) and (kc_prefs.use_alt_tool if is_select_left else kc_prefs.use_alt_cursor) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index a006cd787ea..5367d9b33f9 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -16,6 +16,16 @@ # # ##### END GPL LICENSE BLOCK ##### +# ------------------------------------------------------------------------------ +# Developer Notes +# +# - This script should run without Blender (no references to the `bpy` module for example). +# - All configuration must be passed into the `generate_keymaps` function (via `Params`). +# - Supporting some combinations of options is becoming increasingly complex, +# especially `Params.select_mouse` & `Params.use_fallback_tool_rmb`. +# To ensure changes don't unintentionally break other configurations, see: +# `source/tools/utils/blender_keyconfig_export_permutations.py --help` +# # ------------------------------------------------------------------------------ # Configurable Parameters @@ -48,6 +58,8 @@ class Params: "use_gizmo_drag", # Use the fallback tool instead of tweak for RMB select. "use_fallback_tool", + # Only set for RMB select. + "use_fallback_tool_rmb", # Use pie menu for tab by default (swap 'Tab/Ctrl-Tab'). "use_v3d_tab_menu", # Use extended pie menu for shading. @@ -65,15 +77,16 @@ class Params: "v3d_tilde_action", # Alt-MMB axis switching 'RELATIVE' or 'ABSOLUTE' axis switching. "v3d_alt_mmb_drag_action", - + # File selector actions on single click. "use_file_single_click", + # Convenience variables: # (derived from other settings). # - # This case needs to be checked often, - # Shorthand for: `(params.use_fallback_tool if params.select_mouse == 'RIGHTMOUSE' else False)`. - "use_fallback_tool_rmb", - # Shorthand for: `('CLICK' if params.use_fallback_tool_rmb else params.select_mouse_value)`. + # The fallback tool is activated on the same button as selection. + # Shorthand for: `(True if (select_mouse == 'LEFT') else self.use_fallback_tool_rmb)` + "use_fallback_tool_select_mouse", + # Shorthand for: `('CLICK' if self.use_fallback_tool_rmb else self.select_mouse_value)`. "select_mouse_value_fallback", # Shorthand for: `{"type": params.select_tweak, "value": 'ANY'}`. "select_tweak_event", @@ -103,6 +116,7 @@ class Params: use_select_all_toggle=False, use_gizmo_drag=True, use_fallback_tool=False, + use_fallback_tool_rmb=False, use_v3d_tab_menu=False, use_v3d_shade_ex_pie=False, use_v3d_mmb_pan=False, @@ -146,7 +160,6 @@ class Params: self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'CLICK'} self.cursor_tweak_event = None - self.use_fallback_tool = use_fallback_tool self.tool_modifier = {} else: # Left mouse select uses Click event for selection. This is a little @@ -169,7 +182,6 @@ class Params: self.cursor_set_event = {"type": 'RIGHTMOUSE', "value": 'PRESS', "shift": True} self.cursor_tweak_event = {"type": 'EVT_TWEAK_R', "value": 'ANY', "shift": True} - self.use_fallback_tool = True # Use the "tool" functionality for LMB select. if use_alt_tool_or_cursor: @@ -197,8 +209,11 @@ class Params: self.use_file_single_click = use_file_single_click + self.use_fallback_tool = use_fallback_tool + self.use_fallback_tool_rmb = use_fallback_tool_rmb + # Convenience variables: - self.use_fallback_tool_rmb = self.use_fallback_tool if select_mouse == 'RIGHT' else False + self.use_fallback_tool_select_mouse = True if (select_mouse == 'LEFT') else self.use_fallback_tool_rmb self.select_mouse_value_fallback = 'CLICK' if self.use_fallback_tool_rmb else self.select_mouse_value self.select_tweak_event = {"type": self.select_tweak, "value": 'ANY'} self.pie_value = 'CLICK_DRAG' if use_pie_click_drag else 'PRESS' @@ -1149,11 +1164,7 @@ def km_uv_editor(params): items.extend([ # Selection modes. *_template_items_uv_select_mode(params), - *_template_uv_select( - type=params.select_mouse, - value=('CLICK' if params.use_fallback_tool_rmb else params.select_mouse_value), - legacy=params.legacy, - ), + *_template_uv_select(type=params.select_mouse, value=params.select_mouse_value_fallback, legacy=params.legacy), ("uv.mark_seam", {"type": 'E', "value": 'PRESS', "ctrl": True}, None), ("uv.select_loop", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True}, None), @@ -6283,7 +6294,8 @@ def km_image_editor_tool_uv_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]}, ) @@ -6295,7 +6307,8 @@ def km_image_editor_tool_uv_select_circle(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_circle", - **(params.select_tweak_event if fallback else {"type": params.tool_mouse, "value": 'PRESS'}), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + {"type": params.tool_mouse, "value": 'PRESS'}), properties=[("wait_for_input", False)])), # No selection fallback since this operates on press. ]}, @@ -6310,7 +6323,8 @@ def km_image_editor_tool_uv_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "uv.select_lasso", - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]}, ) @@ -6402,7 +6416,8 @@ def km_node_editor_tool_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "node.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **(params.select_tweak_event if fallback else params.tool_tweak_event), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event), properties=[("tweak", True)], )), ]}, @@ -6415,7 +6430,9 @@ def km_node_editor_tool_select_lasso(params, *, fallback): {"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'}, {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( - "node.select_lasso", **(params.select_tweak_event if fallback else params.tool_tweak_event), + "node.select_lasso", + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event), properties=[("tweak", True)])) ]}, ) @@ -6430,7 +6447,7 @@ def km_node_editor_tool_select_circle(params, *, fallback): "node.select_circle", # Why circle select should be used on tweak? # So that RMB or Shift-RMB is still able to set an element as active. - type=params.select_tweak if fallback else params.tool_mouse, + type=params.select_tweak if (fallback and params.use_fallback_tool_select_mouse) else params.tool_mouse, value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), ]}, @@ -6484,7 +6501,8 @@ def km_3d_view_tool_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "view3d.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]}, ) @@ -6498,7 +6516,7 @@ def km_3d_view_tool_select_circle(params, *, fallback): "view3d.select_circle", # Why circle select should be used on tweak? # So that RMB or Shift-RMB is still able to set an element as active. - type=params.select_tweak if fallback else params.tool_mouse, + type=params.select_tweak if (fallback and params.use_fallback_tool_select_mouse) else params.tool_mouse, value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), ]}, @@ -6512,7 +6530,8 @@ def km_3d_view_tool_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "view3d.select_lasso", - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]} ) @@ -7394,7 +7413,8 @@ def km_3d_view_tool_edit_gpencil_select_box(params, *, fallback): *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "gpencil.select_box", # Don't use `tool_maybe_tweak_event`, see comment for this slot. - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]}, ) @@ -7408,7 +7428,7 @@ def km_3d_view_tool_edit_gpencil_select_circle(params, *, fallback): "gpencil.select_circle", # Why circle select should be used on tweak? # So that RMB or Shift-RMB is still able to set an element as active. - type=params.select_tweak if fallback else params.tool_mouse, + type=params.select_tweak if (fallback and params.use_fallback_tool_select_mouse) else params.tool_mouse, value='ANY' if fallback else 'PRESS', properties=[("wait_for_input", False)])), ]}, @@ -7422,7 +7442,8 @@ def km_3d_view_tool_edit_gpencil_select_lasso(params, *, fallback): {"items": [ *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions( "gpencil.select_lasso", - **(params.select_tweak_event if fallback else params.tool_tweak_event))), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]} ) @@ -7573,7 +7594,8 @@ def km_sequencer_editor_tool_generic_select_box(params, *, fallback): # Don't use `tool_maybe_tweak_event`, see comment for this slot. *([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple( "sequencer.select_box", - **(params.select_tweak_event if fallback else params.tool_tweak_event), + **(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event), properties=[("tweak", params.select_mouse == 'LEFTMOUSE')])), # RMB select can already set the frame, match the tweak tool. -- cgit v1.2.3