From eae7cb247ce3bbd88995048806eacf961cd91c0b Mon Sep 17 00:00:00 2001 From: Francesca Frangipane Date: Tue, 17 Apr 2018 20:48:57 -0400 Subject: [PATCH] Revert #466 'Discard mouse down after Cocoa window resize' (#470) This reverts commit 19cd53193b3e8db6247fe17bc8b9b69422bd2a00. Testing fullscreen functionality revealed that windowDidResize is invoked in more cases than previously thought, causing the user's events to be eaten and HiDPI problems. --- CHANGELOG.md | 1 - src/platform/macos/events_loop.rs | 26 ++------------------------ src/platform/macos/window.rs | 5 ----- 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 816986eac6..fddd2db716 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,6 @@ - Implemented `Refresh` event on Windows. - Properly calculate the minimum and maximum window size on Windows, including window decorations. - Map more `MouseCursor` variants to cursor icons on Windows. -- Discard the stray mouse down event being delivered after window resize on macOS. - Corrected `get_position` on macOS to return outer frame position, not content area position. - Corrected `set_position` on macOS to set outer frame position, not content area position. - Added `get_inner_position` method to `Window`, which gets the position of the window's client area. This is implemented on all applicable platforms (all desktop platforms other than Wayland, where this isn't possible). diff --git a/src/platform/macos/events_loop.rs b/src/platform/macos/events_loop.rs index ac51eec1df..27df6c627c 100644 --- a/src/platform/macos/events_loop.rs +++ b/src/platform/macos/events_loop.rs @@ -6,7 +6,6 @@ use std::collections::VecDeque; use std::sync::{Arc, Mutex, Weak}; use super::window::Window2; use std; -use std::cell::RefCell; use super::DeviceId; @@ -19,7 +18,6 @@ pub struct EventsLoop { pub struct Shared { pub windows: Mutex>>, pub pending_events: Mutex>, - pub discard_event: RefCell, // The user event callback given via either of the `poll_events` or `run_forever` methods. // // We store the user's callback here so that it may be accessed by each of the window delegate @@ -57,7 +55,6 @@ impl Shared { Shared { windows: Mutex::new(Vec::new()), pending_events: Mutex::new(VecDeque::new()), - discard_event: RefCell::new(false), user_callback: UserCallback { mutex: Mutex::new(None) }, } } @@ -102,19 +99,6 @@ impl Shared { } } - // Instructs the `EventsLoop` to discard the next input event. - // - // This is called when the window is resized, to avoid a delayed mouse down event being posted - // after the resize completes. - pub fn discard_next_event(&self) { - *self.discard_event.borrow_mut() = true; - } - - fn should_discard_next_event(&self) -> bool { - let result = *self.discard_event.borrow(); - *self.discard_event.borrow_mut() = false; - result - } } @@ -224,11 +208,7 @@ impl EventsLoop { match event { // Call the user's callback. - Some(event) => { - if !self.shared.should_discard_next_event() { - self.shared.user_callback.call_with_event(event); - } - }, + Some(event) => self.shared.user_callback.call_with_event(event), None => break, } } @@ -281,9 +261,7 @@ impl EventsLoop { let _: () = msg_send![pool, release]; if let Some(event) = maybe_event { - if !self.shared.should_discard_next_event() { - self.shared.user_callback.call_with_event(event); - } + self.shared.user_callback.call_with_event(event); if let ControlFlow::Break = control_flow.get() { break; } diff --git a/src/platform/macos/window.rs b/src/platform/macos/window.rs index 0ab8eb0fea..ee65f695bc 100644 --- a/src/platform/macos/window.rs +++ b/src/platform/macos/window.rs @@ -181,11 +181,6 @@ impl WindowDelegate { let state: *mut c_void = *this.get_ivar("winitState"); let state = &mut *(state as *mut DelegateState); emit_resize_event(state); - - // discard the pending mouse down event - if let Some(shared) = state.shared.upgrade() { - shared.discard_next_event(); - } } }