VSE: Switch to box select default for timeline
PR #128051 made some improvements to code by cleaning up properties and simplifying logic. However, the default tool in most spaces is box select. By switching to box select default, there should be more front-facing consistency across spaces while still retaining near-identical behavior. This patch would fix the small bug listed in #128671 while keeping the simplified code benefits from #128051. Also: - Move selection keymap items up in the Sequencer (Global) keymap so it is more visible (similar to Node Editor ordering). - Split `side_of_frame` property for ctrl press keymap item into a separate keymap item on ctrl click for both LCS and RCS to avoid clashing with ctrl+drag for box selects in RCS. Pull Request: https://projects.blender.org/blender/blender/pulls/129028
This commit is contained in:
committed by
John Kiril Swenson
parent
cf2d3d0867
commit
d5d81c5078
@@ -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)),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -31,7 +31,7 @@ extern "C" {
|
||||
|
||||
/* Blender file format version. */
|
||||
#define BLENDER_FILE_VERSION BLENDER_VERSION
|
||||
#define BLENDER_FILE_SUBVERSION 30
|
||||
#define BLENDER_FILE_SUBVERSION 31
|
||||
|
||||
/* Minimum Blender version that supports reading file written with the current
|
||||
* version. Older Blender versions will test this and cancel loading the file, showing a warning to
|
||||
|
||||
@@ -4918,6 +4918,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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Always run this versioning; meshes are written with the legacy format which always needs to
|
||||
* be converted to the new format on file load. Can be moved to a subversion check in a larger
|
||||
* breaking release. */
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user