diff --git a/src/window/window_wrapper/keyboard_manager.rs b/src/window/window_wrapper/keyboard_manager.rs index dc04763..daae06d 100644 --- a/src/window/window_wrapper/keyboard_manager.rs +++ b/src/window/window_wrapper/keyboard_manager.rs @@ -83,6 +83,7 @@ fn is_special(text: &str) -> Option<&str> { pub struct KeyboardManager { command_sender: LoggingTx, + shift: bool, ctrl: bool, alt: bool, logo: bool, @@ -94,6 +95,7 @@ impl KeyboardManager { pub fn new(command_sender: LoggingTx) -> KeyboardManager { KeyboardManager { command_sender, + shift: false, ctrl: false, alt: false, logo: false, @@ -102,16 +104,17 @@ impl KeyboardManager { } } - fn format_keybinding_string(&self, special: bool, text: &str) -> String { - let special = special || self.ctrl || self.alt || self.logo; + fn format_keybinding_string(&self, special: bool, use_shift: bool, text: &str) -> String { + let special = special || self.ctrl || use_alt(self.alt) || use_logo(self.logo); let open = or_empty(special, "<"); + let shift = or_empty(self.shift && use_shift, "S-"); let ctrl = or_empty(self.ctrl, "C-"); let alt = or_empty(use_alt(self.alt), "M-"); let logo = or_empty(use_logo(self.logo), "D-"); let close = or_empty(special, ">"); - format!("{}{}{}{}{}{}", open, ctrl, alt, logo, text, close) + format!("{}{}{}{}{}{}{}", open, shift, ctrl, alt, logo, text, close) } pub fn handle_event(&mut self, event: &Event<()>) { @@ -141,6 +144,7 @@ impl KeyboardManager { } => { // Record the modifer states so that we can properly add them to the keybinding // text + self.shift = modifiers.shift_key(); self.ctrl = modifiers.control_key(); self.alt = modifiers.alt_key(); self.logo = modifiers.super_key(); @@ -156,7 +160,7 @@ impl KeyboardManager { // present text. if let Some(key_text) = is_control_key(key_event.logical_key) { let keybinding_string = - self.format_keybinding_string(true, key_text); + self.format_keybinding_string(true, true, key_text); self.command_sender .send(UiCommand::Keyboard(keybinding_string)) @@ -166,9 +170,9 @@ impl KeyboardManager { // this is a deadkey or not. let keybinding_string = if let Some(escaped_text) = is_special(key_text) { - self.format_keybinding_string(true, escaped_text) + self.format_keybinding_string(true, false, escaped_text) } else { - self.format_keybinding_string(false, key_text) + self.format_keybinding_string(false, false, key_text) }; self.command_sender