From e15bc7516c215b838e5c5c4a068b29208dae75a2 Mon Sep 17 00:00:00 2001 From: YUAN LYU Date: Sun, 6 Dec 2020 00:20:22 -0500 Subject: [PATCH] Fix mouse button handling --- components/compositing/compositor.rs | 2 +- components/script/dom/document.rs | 8 ++++++-- ports/winit/headed_window.rs | 12 +++++++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 49b33f1d7de..53889d6e944 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -896,7 +896,7 @@ impl IOCompositor { result.point_in_viewport.to_untyped(), Some(UntrustedNodeAddress(result.tag.0 as *const c_void)), Some(result.point_relative_to_item.to_untyped()), - MouseButton::Left as u16, + button as u16, ); let pipeline_id = PipelineId::from_webrender(result.pipeline); diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 8da8e52b7f6..8ff05e67849 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1188,7 +1188,7 @@ impl Document { pub fn handle_mouse_event( &self, js_runtime: *mut JSRuntime, - _button: MouseButton, + button: MouseButton, client_point: Point2D, mouse_event_type: MouseEventType, node_address: Option, @@ -1244,7 +1244,11 @@ impl Document { false, false, false, - 0i16, + match &button { + MouseButton::Left => 0i16, + MouseButton::Middle => 1i16, + MouseButton::Right => 2i16, + }, pressed_mouse_buttons, None, point_in_node, diff --git a/ports/winit/headed_window.rs b/ports/winit/headed_window.rs index 04fbbd762bb..e8a6c7def32 100644 --- a/ports/winit/headed_window.rs +++ b/ports/winit/headed_window.rs @@ -261,14 +261,20 @@ impl Window { use servo::script_traits::MouseButton; let max_pixel_dist = 10.0 * self.servo_hidpi_factor().get(); + let mouse_button = match &button { + winit::MouseButton::Left => MouseButton::Left, + winit::MouseButton::Right => MouseButton::Right, + winit::MouseButton::Middle => MouseButton::Middle, + _ => MouseButton::Left, + }; let event = match action { ElementState::Pressed => { self.mouse_down_point.set(coords); self.mouse_down_button.set(Some(button)); - MouseWindowEvent::MouseDown(MouseButton::Left, coords.to_f32()) + MouseWindowEvent::MouseDown(mouse_button, coords.to_f32()) }, ElementState::Released => { - let mouse_up_event = MouseWindowEvent::MouseUp(MouseButton::Left, coords.to_f32()); + let mouse_up_event = MouseWindowEvent::MouseUp(mouse_button, coords.to_f32()); match self.mouse_down_button.get() { None => mouse_up_event, Some(but) if button == but => { @@ -280,7 +286,7 @@ impl Window { self.event_queue .borrow_mut() .push(WindowEvent::MouseWindowEventClass(mouse_up_event)); - MouseWindowEvent::Click(MouseButton::Left, coords.to_f32()) + MouseWindowEvent::Click(mouse_button, coords.to_f32()) } else { mouse_up_event }