From 3b970d6421740488149d948bd935090bedcf854a Mon Sep 17 00:00:00 2001 From: Kristofer Rye Date: Sun, 26 Jan 2020 17:10:51 -0600 Subject: [PATCH 1/2] Only call event_mods once when determining whether to update state Signed-off-by: Kristofer Rye --- src/platform_impl/macos/view.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 14131b071b..435c86752a 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -625,9 +625,10 @@ fn retrieve_keycode(event: id) -> Option { // Update `state.modifiers` if `event` has something different fn update_potentially_stale_modifiers(state: &mut ViewState, event: id) { - if state.modifiers != event_mods(event) { - state.modifiers = event_mods(event); - trace!("Modifiers are stale; updating modifiers"); + let event_modifiers = event_mods(event); + if state.modifiers != event_modifiers { + state.modifiers = event_modifiers; + AppState::queue_event(EventWrapper::StaticEvent(Event::WindowEvent { window_id: WindowId(get_window_id(state.ns_window)), event: WindowEvent::ModifiersChanged(state.modifiers), From 216aae2c3fd44627b2fe5545dc0d6d1def5221a0 Mon Sep 17 00:00:00 2001 From: Kristofer Rye Date: Sun, 26 Jan 2020 17:12:04 -0600 Subject: [PATCH 2/2] flags_changed: Memoize window_id collection Signed-off-by: Kristofer Rye --- src/platform_impl/macos/view.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 435c86752a..207f3bbd41 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -770,16 +770,17 @@ extern "C" fn flags_changed(this: &Object, _sel: Sel, event: id) { events.push_back(window_event); } + let window_id = WindowId(get_window_id(state.ns_window)); + for event in events { AppState::queue_event(EventWrapper::StaticEvent(Event::WindowEvent { - window_id: WindowId(get_window_id(state.ns_window)), + window_id, event, })); } AppState::queue_event(EventWrapper::StaticEvent(Event::WindowEvent { - // TODO Maybe memoize get_window_id if it's safe to reuse? - window_id: WindowId(get_window_id(state.ns_window)), + window_id, event: WindowEvent::ModifiersChanged(state.modifiers), })); }