diff --git a/src/platform/macos/events_loop.rs b/src/platform/macos/events_loop.rs index 60ece70f..f656468e 100644 --- a/src/platform/macos/events_loop.rs +++ b/src/platform/macos/events_loop.rs @@ -1,6 +1,6 @@ use cocoa::{self, appkit, foundation}; use cocoa::appkit::{NSApplication, NSEvent, NSView, NSWindow}; -use events::{self, ElementState, Event, MouseButton, TouchPhase, WindowEvent, Modifiers}; +use events::{self, ElementState, Event, MouseButton, TouchPhase, WindowEvent, ModifiersState}; use super::window::Window; use std; @@ -271,7 +271,7 @@ impl EventsLoop { let vkey = to_virtual_key_code(NSEvent::keyCode(ns_event)); let state = ElementState::Pressed; let code = NSEvent::keyCode(ns_event) as u8; - let window_event = WindowEvent::KeyboardInput(state, code, vkey, ModifiersState::default()); + let window_event = WindowEvent::KeyboardInput(state, code, vkey, event_mods(ns_event)); events.push_back(into_event(window_event)); let event = events.pop_front(); self.pending_events.lock().unwrap().extend(events.into_iter()); @@ -283,7 +283,7 @@ impl EventsLoop { let state = ElementState::Released; let code = NSEvent::keyCode(ns_event) as u8; - let window_event = WindowEvent::KeyboardInput(state, code, vkey, ModifiersState::default()); + let window_event = WindowEvent::KeyboardInput(state, code, vkey, event_mods(ns_event)); Some(into_event(window_event)) }, @@ -298,13 +298,13 @@ impl EventsLoop { if !key_pressed && NSEvent::modifierFlags(event).contains(keymask) { let state = ElementState::Pressed; let code = NSEvent::keyCode(event) as u8; - let window_event = WindowEvent::KeyboardInput(state, code, Some(key), ModifiersState::default()); + let window_event = WindowEvent::KeyboardInput(state, code, Some(key), event_mods(event)); Some(window_event) } else if key_pressed && !NSEvent::modifierFlags(event).contains(keymask) { let state = ElementState::Released; let code = NSEvent::keyCode(event) as u8; - let window_event = WindowEvent::KeyboardInput(state, code, Some(key), ModifiersState::default()); + let window_event = WindowEvent::KeyboardInput(state, code, Some(key), event_mods(event)); Some(window_event) } else { @@ -575,3 +575,15 @@ fn to_virtual_key_code(code: u16) -> Option { _ => return None, }) } + +fn event_mods(event: cocoa::base::id) -> ModifiersState { + let flags = unsafe { + NSEvent::modifierFlags(event) + }; + ModifiersState { + shift: flags.contains(appkit::NSShiftKeyMask), + ctrl: flags.contains(appkit::NSControlKeyMask), + alt: flags.contains(appkit::NSAlternateKeyMask), + logo: flags.contains(appkit::NSCommandKeyMask), + } +} \ No newline at end of file