mirror of
https://github.com/servo/servo.git
synced 2025-09-19 19:30:10 +01:00
Rename InputEvent::MouseLeave
to InputEvent::MouseLeftViewport
(#38695)
1. `InputEvent::MouseLeave` indicates that mouse has left the viewport (fired by embedder) or iframe (synthesized in Constellationf24f225db8/components/constellation/constellation_webview.rs (L119-L122)
). Its handler in script is named as `handle_mouse_leave_event`, which is very misleading as we have DOM event [mouseleave](https://w3c.github.io/uievents/#event-type-mouseleave). I rename it to `MouseLeftViewport` to be consistent with `WindowEvent::CursorLeft`:f24f225db8/ports/servoshell/desktop/headed_window.rs (L632-L638)
2. Add doc and rename function, such as `handle_mouse_move_event` to `handle_native_mouse_move_event` to be closer to [spec](https://w3c.github.io/uievents/#handle-native-mouse-move). Testing: Just renaming + skipping unnecessary hit-test in simple case. Fixes: Nothing but preparing for #38670 and #38435. --------- Signed-off-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
parent
8b574539d1
commit
494493ceb7
6 changed files with 33 additions and 27 deletions
|
@ -355,7 +355,7 @@ impl WebViewRenderer {
|
|||
InputEvent::MouseMove(_) => {
|
||||
self.global.borrow_mut().last_mouse_move_position = event_point;
|
||||
},
|
||||
InputEvent::MouseLeave(_) => {
|
||||
InputEvent::MouseLeftViewport(_) => {
|
||||
self.global.borrow_mut().last_mouse_move_position = None;
|
||||
},
|
||||
InputEvent::MouseButton(_) | InputEvent::Wheel(_) => {},
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use base::id::{BrowsingContextId, PipelineId};
|
||||
use embedder_traits::{InputEvent, MouseLeaveEvent, Theme};
|
||||
use embedder_traits::{InputEvent, MouseLeftViewportEvent, Theme};
|
||||
use euclid::Point2D;
|
||||
use log::warn;
|
||||
use script_traits::{ConstellationInputEvent, ScriptThreadMessage};
|
||||
|
@ -72,7 +72,7 @@ impl ConstellationWebView {
|
|||
|
||||
// If there's no hit test, send the event to either the hovered or focused browsing context,
|
||||
// depending on the event type.
|
||||
let browsing_context_id = if matches!(event.event, InputEvent::MouseLeave(_)) {
|
||||
let browsing_context_id = if matches!(event.event, InputEvent::MouseLeftViewport(_)) {
|
||||
self.hovered_browsing_context_id
|
||||
.unwrap_or(self.focused_browsing_context_id)
|
||||
} else {
|
||||
|
@ -117,9 +117,10 @@ impl ConstellationWebView {
|
|||
};
|
||||
|
||||
let mut synthetic_mouse_leave_event = event.clone();
|
||||
synthetic_mouse_leave_event.event = InputEvent::MouseLeave(MouseLeaveEvent {
|
||||
focus_moving_to_another_iframe: true,
|
||||
});
|
||||
synthetic_mouse_leave_event.event =
|
||||
InputEvent::MouseLeftViewport(MouseLeftViewportEvent {
|
||||
focus_moving_to_another_iframe: true,
|
||||
});
|
||||
|
||||
let _ = pipeline
|
||||
.event_loop
|
||||
|
@ -129,7 +130,7 @@ impl ConstellationWebView {
|
|||
));
|
||||
};
|
||||
|
||||
if let InputEvent::MouseLeave(_) = &event.event {
|
||||
if let InputEvent::MouseLeftViewport(_) = &event.event {
|
||||
update_hovered_browsing_context(None);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ mod from_compositor {
|
|||
InputEvent::Keyboard(..) => target_variant!("Keyboard"),
|
||||
InputEvent::MouseButton(..) => target_variant!("MouseButton"),
|
||||
InputEvent::MouseMove(..) => target_variant!("MouseMove"),
|
||||
InputEvent::MouseLeave(..) => target_variant!("MouseLeave"),
|
||||
InputEvent::MouseLeftViewport(..) => target_variant!("MouseLeftViewport"),
|
||||
InputEvent::Touch(..) => target_variant!("Touch"),
|
||||
InputEvent::Wheel(..) => target_variant!("Wheel"),
|
||||
InputEvent::Scroll(..) => target_variant!("Scroll"),
|
||||
|
|
|
@ -14,7 +14,7 @@ use embedder_traits::{
|
|||
Cursor, EditingActionEvent, EmbedderMsg, GamepadEvent as EmbedderGamepadEvent,
|
||||
GamepadSupportedHapticEffects, GamepadUpdateType, ImeEvent, InputEvent,
|
||||
KeyboardEvent as EmbedderKeyboardEvent, MouseButton, MouseButtonAction, MouseButtonEvent,
|
||||
MouseLeaveEvent, ScrollEvent, TouchEvent as EmbedderTouchEvent, TouchEventType, TouchId,
|
||||
MouseLeftViewportEvent, ScrollEvent, TouchEvent as EmbedderTouchEvent, TouchEventType, TouchId,
|
||||
UntrustedNodeAddress, WheelEvent as EmbedderWheelEvent,
|
||||
};
|
||||
use euclid::Point2D;
|
||||
|
@ -160,13 +160,13 @@ impl DocumentEventHandler {
|
|||
|
||||
match event.event.clone() {
|
||||
InputEvent::MouseButton(mouse_button_event) => {
|
||||
self.handle_mouse_button_event(mouse_button_event, &event, can_gc);
|
||||
self.handle_native_mouse_button_event(mouse_button_event, &event, can_gc);
|
||||
},
|
||||
InputEvent::MouseMove(_) => {
|
||||
self.handle_mouse_move_event(&event, can_gc);
|
||||
self.handle_native_mouse_move_event(&event, can_gc);
|
||||
},
|
||||
InputEvent::MouseLeave(mouse_leave_event) => {
|
||||
self.handle_mouse_leave_event(&event, &mouse_leave_event, can_gc);
|
||||
InputEvent::MouseLeftViewport(mouse_leave_event) => {
|
||||
self.handle_mouse_left_viewport_event(&event, &mouse_leave_event, can_gc);
|
||||
},
|
||||
InputEvent::Touch(touch_event) => {
|
||||
self.handle_touch_event(touch_event, &event, can_gc);
|
||||
|
@ -221,10 +221,10 @@ impl DocumentEventHandler {
|
|||
.send_to_embedder(EmbedderMsg::SetCursor(self.window.webview_id(), cursor));
|
||||
}
|
||||
|
||||
fn handle_mouse_leave_event(
|
||||
fn handle_mouse_left_viewport_event(
|
||||
&self,
|
||||
input_event: &ConstellationInputEvent,
|
||||
mouse_leave_event: &MouseLeaveEvent,
|
||||
mouse_leave_event: &MouseLeftViewportEvent,
|
||||
can_gc: CanGc,
|
||||
) {
|
||||
if let Some(current_hover_target) = self.current_hover_target.get() {
|
||||
|
@ -328,7 +328,8 @@ impl DocumentEventHandler {
|
|||
}
|
||||
}
|
||||
|
||||
fn handle_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) {
|
||||
/// <https://w3c.github.io/uievents/#handle-native-mouse-move>
|
||||
fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) {
|
||||
// Ignore all incoming events without a hit test.
|
||||
let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else {
|
||||
return;
|
||||
|
@ -349,8 +350,7 @@ impl DocumentEventHandler {
|
|||
let target_has_changed = self
|
||||
.current_hover_target
|
||||
.get()
|
||||
.as_ref()
|
||||
.is_none_or(|old_target| old_target != &new_target);
|
||||
.is_none_or(|old_target| old_target != new_target);
|
||||
|
||||
// Here we know the target has changed, so we must update the state,
|
||||
// dispatch mouseout to the previous one, mouseover to the new one.
|
||||
|
@ -503,7 +503,8 @@ impl DocumentEventHandler {
|
|||
}
|
||||
|
||||
/// <https://w3c.github.io/uievents/#mouseevent-algorithms>
|
||||
fn handle_mouse_button_event(
|
||||
/// Handles native mouse down, mouse up, mouse click.
|
||||
fn handle_native_mouse_button_event(
|
||||
&self,
|
||||
event: MouseButtonEvent,
|
||||
input_event: &ConstellationInputEvent,
|
||||
|
|
|
@ -20,7 +20,7 @@ pub enum InputEvent {
|
|||
Keyboard(KeyboardEvent),
|
||||
MouseButton(MouseButtonEvent),
|
||||
MouseMove(MouseMoveEvent),
|
||||
MouseLeave(MouseLeaveEvent),
|
||||
MouseLeftViewport(MouseLeftViewportEvent),
|
||||
Touch(TouchEvent),
|
||||
Wheel(WheelEvent),
|
||||
Scroll(ScrollEvent),
|
||||
|
@ -43,7 +43,7 @@ impl InputEvent {
|
|||
InputEvent::Keyboard(..) => None,
|
||||
InputEvent::MouseButton(event) => Some(event.point),
|
||||
InputEvent::MouseMove(event) => Some(event.point),
|
||||
InputEvent::MouseLeave(_) => None,
|
||||
InputEvent::MouseLeftViewport(_) => None,
|
||||
InputEvent::Touch(event) => Some(event.point),
|
||||
InputEvent::Wheel(event) => Some(event.point),
|
||||
InputEvent::Scroll(..) => None,
|
||||
|
@ -58,7 +58,7 @@ impl InputEvent {
|
|||
InputEvent::Keyboard(event) => event.webdriver_id,
|
||||
InputEvent::MouseButton(event) => event.webdriver_id,
|
||||
InputEvent::MouseMove(event) => event.webdriver_id,
|
||||
InputEvent::MouseLeave(..) => None,
|
||||
InputEvent::MouseLeftViewport(..) => None,
|
||||
InputEvent::Touch(..) => None,
|
||||
InputEvent::Wheel(event) => event.webdriver_id,
|
||||
InputEvent::Scroll(..) => None,
|
||||
|
@ -79,7 +79,7 @@ impl InputEvent {
|
|||
InputEvent::MouseMove(ref mut event) => {
|
||||
event.webdriver_id = webdriver_id;
|
||||
},
|
||||
InputEvent::MouseLeave(..) => {},
|
||||
InputEvent::MouseLeftViewport(..) => {},
|
||||
InputEvent::Touch(..) => {},
|
||||
InputEvent::Wheel(ref mut event) => {
|
||||
event.webdriver_id = webdriver_id;
|
||||
|
@ -219,7 +219,7 @@ impl MouseMoveEvent {
|
|||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize)]
|
||||
pub struct MouseLeaveEvent {
|
||||
pub struct MouseLeftViewportEvent {
|
||||
pub focus_moving_to_another_iframe: bool,
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ use servo::webrender_api::ScrollLocation;
|
|||
use servo::webrender_api::units::{DeviceIntPoint, DeviceIntRect, DeviceIntSize, DevicePixel};
|
||||
use servo::{
|
||||
Cursor, ImeEvent, InputEvent, Key, KeyState, KeyboardEvent, Modifiers,
|
||||
MouseButton as ServoMouseButton, MouseButtonAction, MouseButtonEvent, MouseLeaveEvent,
|
||||
MouseButton as ServoMouseButton, MouseButtonAction, MouseButtonEvent, MouseLeftViewportEvent,
|
||||
MouseMoveEvent, NamedKey, OffscreenRenderingContext, RenderingContext, ScreenGeometry, Theme,
|
||||
TouchEvent, TouchEventType, TouchId, WebRenderDebugOption, WebView, WheelDelta, WheelEvent,
|
||||
WheelMode, WindowRenderingContext,
|
||||
|
@ -628,7 +628,9 @@ impl WindowPortsMethods for Window {
|
|||
if webview.rect().contains(point) {
|
||||
webview.notify_input_event(InputEvent::MouseMove(MouseMoveEvent::new(point)));
|
||||
} else if webview.rect().contains(previous_point) {
|
||||
webview.notify_input_event(InputEvent::MouseLeave(MouseLeaveEvent::default()));
|
||||
webview.notify_input_event(InputEvent::MouseLeftViewport(
|
||||
MouseLeftViewportEvent::default(),
|
||||
));
|
||||
}
|
||||
|
||||
self.webview_relative_mouse_point.set(point);
|
||||
|
@ -638,7 +640,9 @@ impl WindowPortsMethods for Window {
|
|||
.rect()
|
||||
.contains(self.webview_relative_mouse_point.get())
|
||||
{
|
||||
webview.notify_input_event(InputEvent::MouseLeave(MouseLeaveEvent::default()));
|
||||
webview.notify_input_event(InputEvent::MouseLeftViewport(
|
||||
MouseLeftViewportEvent::default(),
|
||||
));
|
||||
}
|
||||
},
|
||||
WindowEvent::MouseWheel { delta, .. } => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue