1
0
Fork 0

macOS: handle changed flags

This enables catching pressed modifier keys with no other
keys pressed
This commit is contained in:
Joakim Frostegård 2020-12-05 01:48:26 +01:00
parent a13b3af3d1
commit 19b6a2f701

View file

@ -149,6 +149,10 @@ unsafe fn create_view_class<H: WindowHandler>() -> &'static Class {
sel!(keyUp:), sel!(keyUp:),
key_up::<H> as extern "C" fn(&Object, Sel, id), key_up::<H> as extern "C" fn(&Object, Sel, id),
); );
class.add_method(
sel!(flagsChanged:),
flags_changed::<H> as extern "C" fn(&Object, Sel, id),
);
class.add_ivar::<*mut c_void>(WINDOW_STATE_IVAR_NAME); class.add_ivar::<*mut c_void>(WINDOW_STATE_IVAR_NAME);
class.add_ivar::<*mut c_void>(FRAME_TIMER_IVAR_NAME); class.add_ivar::<*mut c_void>(FRAME_TIMER_IVAR_NAME);
@ -392,3 +396,14 @@ extern "C" fn key_up<H: WindowHandler>(this: &Object, _: Sel, event: id){
state.trigger_event(Event::Keyboard(key_event)); state.trigger_event(Event::Keyboard(key_event));
} }
} }
extern "C" fn flags_changed<H: WindowHandler>(this: &Object, _: Sel, event: id){
let state: &mut WindowState<H> = unsafe {
WindowState::from_field(this)
};
if let Some(key_event) = state.process_native_key_event(event){
state.trigger_event(Event::Keyboard(key_event));
}
}