From 72f89ba77f45e5345ef863d5e75b99895419f583 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Tue, 25 Aug 2020 01:39:54 +0200
Subject: Fix cursor position after a `CursorLeft` event

---
 winit/src/application.rs | 5 +++++
 winit/src/conversion.rs  | 6 ++++++
 2 files changed, 11 insertions(+)

diff --git a/winit/src/application.rs b/winit/src/application.rs
index 1fa282a1..73dad398 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -148,6 +148,7 @@ pub fn run<A, E, C>(
         .expect("Open window");
 
     let clipboard = Clipboard::new(&window);
+    // TODO: Encode cursor availability in the type-system
     let mut cursor_position = winit::dpi::PhysicalPosition::new(-1.0, -1.0);
     let mut mouse_interaction = mouse::Interaction::default();
     let mut modifiers = winit::event::ModifiersState::default();
@@ -378,6 +379,10 @@ pub fn handle_window_event(
         WindowEvent::CursorMoved { position, .. } => {
             *cursor_position = *position;
         }
+        WindowEvent::CursorLeft { .. } => {
+            // TODO: Encode cursor availability in the type-system
+            *cursor_position = winit::dpi::PhysicalPosition::new(-1.0, -1.0);
+        }
         WindowEvent::ModifiersChanged(new_modifiers) => {
             *modifiers = *new_modifiers;
         }
diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs
index 3a8f54f5..638787ab 100644
--- a/winit/src/conversion.rs
+++ b/winit/src/conversion.rs
@@ -40,6 +40,12 @@ pub fn window_event(
                 y: position.y as f32,
             }))
         }
+        WindowEvent::CursorEntered { .. } => {
+            Some(Event::Mouse(mouse::Event::CursorEntered))
+        }
+        WindowEvent::CursorLeft { .. } => {
+            Some(Event::Mouse(mouse::Event::CursorLeft))
+        }
         WindowEvent::MouseInput { button, state, .. } => {
             let button = mouse_button(*button);
 
-- 
cgit