Skip to content

Commit c1b93fc

Browse files
chrisduerrvbogaevsky
authored andcommitted
Add ModifiersChanged event for macOS (#1268)
* Add ModifiersChanged event for macOS This implements the macOS portion of #1124. * Fix ModifiersChanged event import * Fix event passing window instead of device id
1 parent 1f81e5c commit c1b93fc

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

src/platform_impl/macos/view.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ use objc::{
1818

1919
use crate::{
2020
event::{
21-
DeviceEvent, ElementState, Event, KeyboardInput, MouseButton, MouseScrollDelta, TouchPhase,
22-
VirtualKeyCode, WindowEvent,
21+
DeviceEvent, ElementState, Event, KeyboardInput, ModifiersState, MouseButton,
22+
MouseScrollDelta, TouchPhase, VirtualKeyCode, WindowEvent,
2323
},
2424
platform_impl::platform::{
2525
app_state::AppState,
@@ -35,21 +35,13 @@ use crate::{
3535
window::WindowId,
3636
};
3737

38-
#[derive(Default)]
39-
struct Modifiers {
40-
shift_pressed: bool,
41-
ctrl_pressed: bool,
42-
win_pressed: bool,
43-
alt_pressed: bool,
44-
}
45-
4638
struct ViewState {
4739
ns_window: id,
4840
pub cursor: Arc<Mutex<util::Cursor>>,
4941
ime_spot: Option<(f64, f64)>,
5042
raw_characters: Option<String>,
5143
is_key_down: bool,
52-
modifiers: Modifiers,
44+
modifiers: ModifiersState,
5345
}
5446

5547
pub fn new_view(ns_window: id) -> (IdRef, Weak<Mutex<util::Cursor>>) {
@@ -654,36 +646,36 @@ extern "C" fn flags_changed(this: &Object, _sel: Sel, event: id) {
654646
if let Some(window_event) = modifier_event(
655647
event,
656648
NSEventModifierFlags::NSShiftKeyMask,
657-
state.modifiers.shift_pressed,
649+
state.modifiers.shift,
658650
) {
659-
state.modifiers.shift_pressed = !state.modifiers.shift_pressed;
651+
state.modifiers.shift = !state.modifiers.shift;
660652
events.push_back(window_event);
661653
}
662654

663655
if let Some(window_event) = modifier_event(
664656
event,
665657
NSEventModifierFlags::NSControlKeyMask,
666-
state.modifiers.ctrl_pressed,
658+
state.modifiers.ctrl,
667659
) {
668-
state.modifiers.ctrl_pressed = !state.modifiers.ctrl_pressed;
660+
state.modifiers.ctrl = !state.modifiers.ctrl;
669661
events.push_back(window_event);
670662
}
671663

672664
if let Some(window_event) = modifier_event(
673665
event,
674666
NSEventModifierFlags::NSCommandKeyMask,
675-
state.modifiers.win_pressed,
667+
state.modifiers.logo,
676668
) {
677-
state.modifiers.win_pressed = !state.modifiers.win_pressed;
669+
state.modifiers.logo = !state.modifiers.logo;
678670
events.push_back(window_event);
679671
}
680672

681673
if let Some(window_event) = modifier_event(
682674
event,
683675
NSEventModifierFlags::NSAlternateKeyMask,
684-
state.modifiers.alt_pressed,
676+
state.modifiers.alt,
685677
) {
686-
state.modifiers.alt_pressed = !state.modifiers.alt_pressed;
678+
state.modifiers.alt = !state.modifiers.alt;
687679
events.push_back(window_event);
688680
}
689681

@@ -693,6 +685,13 @@ extern "C" fn flags_changed(this: &Object, _sel: Sel, event: id) {
693685
event,
694686
});
695687
}
688+
689+
AppState::queue_event(Event::DeviceEvent {
690+
device_id: DEVICE_ID,
691+
event: DeviceEvent::ModifiersChanged {
692+
modifiers: state.modifiers,
693+
},
694+
});
696695
}
697696
trace!("Completed `flagsChanged`");
698697
}

0 commit comments

Comments
 (0)