fix: strip SUPER from modifiers after normalization per review
This commit is contained in:
@@ -126,8 +126,11 @@ pub(crate) fn is_word_cursor_modifier(modifiers: KeyModifiers) -> bool {
|
||||
/// On all other platforms this is a no-op.
|
||||
#[cfg(target_os = "macos")]
|
||||
pub(crate) fn normalize_macos_modifiers(modifiers: KeyModifiers) -> KeyModifiers {
|
||||
if modifiers.contains(KeyModifiers::SUPER) && !modifiers.contains(KeyModifiers::CONTROL) {
|
||||
modifiers | KeyModifiers::CONTROL
|
||||
// Strip SUPER and add CONTROL so that exact modifier equality checks
|
||||
// (e.g. `modifiers == KeyModifiers::CONTROL` in Ctrl+S stashing) work
|
||||
// correctly after normalization.
|
||||
if modifiers.contains(KeyModifiers::SUPER) {
|
||||
(modifiers - KeyModifiers::SUPER) | KeyModifiers::CONTROL
|
||||
} else {
|
||||
modifiers
|
||||
}
|
||||
|
||||
@@ -301,19 +301,19 @@ fn word_cursor_modifier_accepts_control_and_alt() {
|
||||
#[test]
|
||||
fn normalize_macos_modifiers_maps_super_to_control() {
|
||||
use crate::tui::composer_ui::normalize_macos_modifiers;
|
||||
// SUPER (Cmd) without CONTROL should gain CONTROL.
|
||||
// SUPER (Cmd) without CONTROL should gain CONTROL and lose SUPER.
|
||||
let normalized = normalize_macos_modifiers(KeyModifiers::SUPER);
|
||||
assert!(normalized.contains(KeyModifiers::CONTROL));
|
||||
assert!(normalized.contains(KeyModifiers::SUPER));
|
||||
assert!(!normalized.contains(KeyModifiers::SUPER));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn normalize_macos_modifiers_preserves_existing_control() {
|
||||
use crate::tui::composer_ui::normalize_macos_modifiers;
|
||||
// CONTROL already set — shouldn't be removed.
|
||||
// CONTROL already set — SUPER should be removed.
|
||||
let normalized = normalize_macos_modifiers(KeyModifiers::CONTROL | KeyModifiers::SUPER);
|
||||
assert!(normalized.contains(KeyModifiers::CONTROL));
|
||||
assert!(normalized.contains(KeyModifiers::SUPER));
|
||||
assert!(!normalized.contains(KeyModifiers::SUPER));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user