From b88d59df38818d1c888d47d311f0bc4fd8acdb61 Mon Sep 17 00:00:00 2001 From: Christofer Nolander Date: Wed, 16 Jan 2019 23:02:15 +0100 Subject: [PATCH 1/2] Fixed duplicate events on macOS --- CHANGELOG.md | 1 + src/platform/macos/events_loop.rs | 12 ------------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13371a47f9..54f83b1e83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased +- On macOS, fixed duplicate key events when pressing `Command + Period`. - Added serde serialization to `os::unix::XWindowType`. - **Breaking:** `image` crate upgraded to 0.21. This is exposed as part of the `icon_loading` API. diff --git a/src/platform/macos/events_loop.rs b/src/platform/macos/events_loop.rs index ca1ff1701d..1d4a79c091 100644 --- a/src/platform/macos/events_loop.rs +++ b/src/platform/macos/events_loop.rs @@ -324,18 +324,6 @@ impl EventsLoop { } None }, - // similar to above, but for ``, the keyDown is suppressed instead of the - // KeyUp, and the above trick does not appear to work. - appkit::NSKeyDown => { - let modifiers = event_mods(ns_event); - let keycode = NSEvent::keyCode(ns_event); - if modifiers.logo && keycode == 47 { - modifier_event(ns_event, NSEventModifierFlags::NSCommandKeyMask, false) - .map(into_event) - } else { - None - } - }, appkit::NSFlagsChanged => { let mut events = std::collections::VecDeque::new(); From 581863d4cb347af9b9995ed624971a4099ea3709 Mon Sep 17 00:00:00 2001 From: Christofer Nolander Date: Thu, 17 Jan 2019 07:29:00 +0100 Subject: [PATCH 2/2] Fixed Cmd-. sending duplicate events on some layouts --- src/platform/macos/events_loop.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/platform/macos/events_loop.rs b/src/platform/macos/events_loop.rs index 1d4a79c091..96d601dd01 100644 --- a/src/platform/macos/events_loop.rs +++ b/src/platform/macos/events_loop.rs @@ -1,5 +1,6 @@ use {ControlFlow, EventsLoopClosed}; use cocoa::{self, appkit, foundation}; +use cocoa::foundation::NSString; use cocoa::appkit::{NSApplication, NSEvent, NSEventMask, NSEventModifierFlags, NSEventPhase, NSView, NSWindow}; use events::{self, ElementState, Event, TouchPhase, WindowEvent, DeviceEvent, ModifiersState, KeyboardInput}; use std::collections::VecDeque; @@ -324,6 +325,19 @@ impl EventsLoop { } None }, + // similar to above, but for ``, the keyDown is suppressed instead of the + // KeyUp, and the above trick does not appear to work. + appkit::NSKeyDown => { + let modifiers = event_mods(ns_event); + let characters = NSEvent::characters(ns_event); + let is_period = characters.isEqualToString("."); + if modifiers.logo && is_period { + modifier_event(ns_event, NSEventModifierFlags::NSCommandKeyMask, false) + .map(into_event) + } else { + None + } + }, appkit::NSFlagsChanged => { let mut events = std::collections::VecDeque::new();