On Web, add Window::(set_)prevent_default() (#3307)

This commit is contained in:
daxpedda 2023-12-25 09:37:35 +01:00 committed by GitHub
parent 28a811bbba
commit 843d7904d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 84 additions and 60 deletions

View file

@ -75,18 +75,13 @@ impl<T> EventLoopWindowTarget<T> {
WindowId(self.runner.generate_id())
}
pub fn register(
&self,
canvas: &Rc<RefCell<backend::Canvas>>,
id: WindowId,
prevent_default: bool,
) {
pub fn register(&self, canvas: &Rc<RefCell<backend::Canvas>>, id: WindowId) {
let canvas_clone = canvas.clone();
let mut canvas = canvas.borrow_mut();
#[cfg(any(feature = "rwh_04", feature = "rwh_05"))]
canvas.set_attribute("data-raw-handle", &id.0.to_string());
canvas.on_touch_start(prevent_default);
canvas.on_touch_start();
let runner = self.runner.clone();
let has_focus = canvas.has_focus.clone();
@ -157,7 +152,6 @@ impl<T> EventLoopWindowTarget<T> {
.chain(modifiers_changed),
);
},
prevent_default,
);
let runner = self.runner.clone();
@ -194,7 +188,6 @@ impl<T> EventLoopWindowTarget<T> {
.chain(modifiers_changed),
)
},
prevent_default,
);
let has_focus = canvas.has_focus.clone();
@ -374,7 +367,6 @@ impl<T> EventLoopWindowTarget<T> {
]));
}
},
prevent_default,
);
canvas.on_mouse_press(
@ -456,7 +448,6 @@ impl<T> EventLoopWindowTarget<T> {
)))
}
},
prevent_default,
);
canvas.on_mouse_release(
@ -547,30 +538,27 @@ impl<T> EventLoopWindowTarget<T> {
let runner = self.runner.clone();
let modifiers = self.modifiers.clone();
canvas.on_mouse_wheel(
move |pointer_id, delta, active_modifiers| {
let modifiers_changed = (has_focus.get() && modifiers.get() != active_modifiers)
.then(|| {
modifiers.set(active_modifiers);
Event::WindowEvent {
window_id: RootWindowId(id),
event: WindowEvent::ModifiersChanged(active_modifiers.into()),
}
});
runner.send_events(modifiers_changed.into_iter().chain(iter::once(
canvas.on_mouse_wheel(move |pointer_id, delta, active_modifiers| {
let modifiers_changed =
(has_focus.get() && modifiers.get() != active_modifiers).then(|| {
modifiers.set(active_modifiers);
Event::WindowEvent {
window_id: RootWindowId(id),
event: WindowEvent::MouseWheel {
device_id: RootDeviceId(DeviceId(pointer_id)),
delta,
phase: TouchPhase::Moved,
},
event: WindowEvent::ModifiersChanged(active_modifiers.into()),
}
});
runner.send_events(modifiers_changed.into_iter().chain(iter::once(
Event::WindowEvent {
window_id: RootWindowId(id),
event: WindowEvent::MouseWheel {
device_id: RootDeviceId(DeviceId(pointer_id)),
delta,
phase: TouchPhase::Moved,
},
)));
},
prevent_default,
);
},
)));
});
let runner = self.runner.clone();
canvas.on_touch_cancel(move |device_id, location, force| {
@ -649,7 +637,7 @@ impl<T> EventLoopWindowTarget<T> {
let runner = self.runner.clone();
canvas.on_animation_frame(move || runner.request_redraw(RootWindowId(id)));
canvas.on_context_menu(prevent_default);
canvas.on_context_menu();
}
pub fn available_monitors(&self) -> VecDequeIter<MonitorHandle> {