diff --git a/scripts/presets/keyconfig/keymap_data/blender_default.py b/scripts/presets/keyconfig/keymap_data/blender_default.py index e3b9049a0f5..5115e0c9e92 100644 --- a/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -2936,6 +2936,37 @@ def km_sequencer(params): ) items.extend([ + *_template_sequencer_generic_select( + type=params.select_mouse, value=params.select_mouse_value_fallback, legacy=params.legacy, + ), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True}, + {"properties": [("linked_time", True)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True, "shift": True}, + {"properties": [("linked_time", True), ("extend", True)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'CLICK', "ctrl": True}, + {"properties": [("side_of_frame", True)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True}, + {"properties": [("deselect_all", True), ("ignore_connections", True)]}), + ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True, "shift": True}, + {"properties": [("toggle", True), ("ignore_connections", True)]}), + ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), + ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS'}, None), + ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, + {"properties": [("extend", True)]}), + ("sequencer.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), + ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG'}, + {"properties": [("mode", 'SET')]}), + ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "shift": True}, + {"properties": [("mode", 'ADD')]}), + ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "ctrl": True}, + {"properties": [("mode", 'SUB')]}), + ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "alt": True}, + {"properties": [("ignore_connections", True), ("mode", 'SET')]}), + ("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None), + ("sequencer.select_box", {"type": 'B', "value": 'PRESS', "ctrl": True}, + {"properties": [("include_handles", True)]}), + ("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), *_template_items_select_actions(params, "sequencer.select_all"), ("sequencer.split", {"type": 'K', "value": 'PRESS'}, {"properties": [("type", 'SOFT')]}), @@ -3001,33 +3032,6 @@ def km_sequencer(params): for i in range(10) ) ), - *_template_sequencer_timeline_select( - type=params.select_mouse, - value=params.select_mouse_value_fallback, - legacy=params.legacy, - ), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True}, - {"properties": [("deselect_all", True), ("ignore_connections", True)]}), - ("sequencer.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True, "shift": True}, - {"properties": [("toggle", True), ("ignore_connections", True)]}), - ("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), - ("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True, "repeat": True}, None), - ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS'}, None), - ("sequencer.select_linked_pick", {"type": 'L', "value": 'PRESS', "shift": True}, - {"properties": [("extend", True)]}), - ("sequencer.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None), - ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG'}, - {"properties": [("mode", 'SET')]}), - ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "shift": True}, - {"properties": [("mode", 'ADD')]}), - ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "ctrl": True}, - {"properties": [("mode", 'SUB')]}), - ("sequencer.select_box", {"type": params.select_mouse, "value": 'CLICK_DRAG', "alt": True}, - {"properties": [("ignore_connections", True), ("mode", 'SET')]}), - ("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None), - ("sequencer.select_box", {"type": 'B', "value": 'PRESS', "ctrl": True}, - {"properties": [("include_handles", True)]}), - ("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None), op_menu("SEQUENCER_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), op_menu("SEQUENCER_MT_change", {"type": 'C', "value": 'PRESS'}), op_menu_pie("SEQUENCER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}), @@ -4682,19 +4686,6 @@ def _template_sequencer_preview_select(*, type, value, legacy): )] -def _template_sequencer_timeline_select(*, type, value, legacy): - return _template_sequencer_generic_select( - type=type, value=value, legacy=legacy, - ) + [( - "sequencer.select", - {"type": type, "value": value, **{m: True for m in mods}}, - {"properties": [(c, True) for c in props]}, - ) for props, mods in ( - (("side_of_frame", "linked_time"), ("ctrl",)), - (("side_of_frame", "linked_time", "extend"), ("ctrl", "shift")), - )] - - def km_image_paint(params): items = [] keymap = ( @@ -8012,14 +8003,21 @@ def km_sequencer_editor_tool_generic_select_timeline_lcs(params): ] -def km_sequencer_editor_tool_generic_select_timeline(params, *, fallback): +def km_sequencer_editor_tool_generic_select_box_timeline(params, *, fallback): return ( - _fallback_id("Sequencer Timeline Tool: Tweak", fallback), + _fallback_id("Sequencer Timeline Tool: Select Box", fallback), {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'}, {"items": [ + # Combine the tweak functionality into the select box tool. + # This gives one standard tool for all selection and transform behavior. *(km_sequencer_editor_tool_generic_select_timeline_rcs(params) if (params.select_mouse == 'RIGHTMOUSE') else km_sequencer_editor_tool_generic_select_timeline_lcs(params)), + # 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 and params.use_fallback_tool_select_mouse) else + params.tool_tweak_event))), ]}, ) @@ -8397,7 +8395,7 @@ def generate_keymaps(params=None): km_3d_view_tool_paint_grease_pencil_primitive_circle(params), km_3d_view_tool_paint_grease_pencil_primitive_arc(params), km_3d_view_tool_paint_grease_pencil_primitive_curve(params), - *(km_sequencer_editor_tool_generic_select_timeline(params, fallback=fallback) + *(km_sequencer_editor_tool_generic_select_box_timeline(params, fallback=fallback) for fallback in (False, True)), *(km_sequencer_editor_tool_generic_select_preview(params, fallback=fallback) for fallback in (False, True)), diff --git a/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/scripts/startup/bl_ui/space_toolsystem_toolbar.py index ab88d81de96..0661b671336 100644 --- a/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -3007,16 +3007,6 @@ class _defs_sequencer_generic: class _defs_sequencer_select: - @ToolDef.from_fn - def select_timeline(): - return dict( - idname="builtin.select", - label="Tweak", - icon="ops.generic.select", - widget=None, - keymap="Sequencer Timeline Tool: Tweak", - ) - @ToolDef.from_fn def select_preview(): return dict( @@ -3027,6 +3017,22 @@ class _defs_sequencer_select: keymap="Sequencer Preview Tool: Tweak", ) + @ToolDef.from_fn + def box_timeline(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("sequencer.select_box") + row = layout.row() + row.use_property_split = False + row.prop(props, "mode", text="", expand=True, icon_only=True) + return dict( + idname="builtin.select_box", + label="Select Box", + icon="ops.generic.select_box", + widget=None, + keymap="Sequencer Timeline Tool: Select Box", + draw_settings=draw_settings, + ) + @ToolDef.from_fn def box_preview(): def draw_settings(_context, layout, tool): @@ -3689,11 +3695,11 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel): *_tools_annotate, ], 'SEQUENCER': [ - _defs_sequencer_select.select_timeline, + _defs_sequencer_select.box_timeline, _defs_sequencer_generic.blade, ], 'SEQUENCER_PREVIEW': [ - _defs_sequencer_select.select_timeline, + _defs_sequencer_select.box_timeline, *_tools_annotate, None, _defs_sequencer_generic.blade, diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index c16387dbeb9..a0ec77f9727 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -4975,6 +4975,17 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) } } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 403, 31)) { + LISTBASE_FOREACH (WorkSpace *, workspace, &bmain->workspaces) { + LISTBASE_FOREACH (bToolRef *, tref, &workspace->tools) { + if (tref->space_type != SPACE_SEQ) { + continue; + } + STRNCPY(tref->idname, "builtin.select_box"); + } + } + } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 404, 1)) { LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { Editing *ed = SEQ_editing_get(scene); diff --git a/source/blender/windowmanager/intern/wm_toolsystem.cc b/source/blender/windowmanager/intern/wm_toolsystem.cc index 42efe3575b2..db0ca8dbfb7 100644 --- a/source/blender/windowmanager/intern/wm_toolsystem.cc +++ b/source/blender/windowmanager/intern/wm_toolsystem.cc @@ -983,14 +983,6 @@ static const char *toolsystem_default_tool(const bToolKey *tkey) return "builtin.select_box"; } case SPACE_SEQ: { - switch (tkey->mode) { - case SEQ_VIEW_SEQUENCE: - return "builtin.select"; - case SEQ_VIEW_PREVIEW: - return "builtin.select_box"; - case SEQ_VIEW_SEQUENCE_PREVIEW: - return "builtin.select"; - } return "builtin.select_box"; } }