eframe web: ctrl-P and cmd-P will not open the print dialog (#2598)
This commit is contained in:
parent
60b4f5e3fe
commit
cd0f66b9ae
2 changed files with 22 additions and 5 deletions
|
@ -9,6 +9,9 @@ NOTE: [`egui-winit`](../egui-winit/CHANGELOG.md), [`egui_glium`](../egui_glium/C
|
||||||
#### Desktop/Native:
|
#### Desktop/Native:
|
||||||
* `eframe::run_native` now returns a `Result` ([#2433](https://github.com/emilk/egui/pull/2433)).
|
* `eframe::run_native` now returns a `Result` ([#2433](https://github.com/emilk/egui/pull/2433)).
|
||||||
|
|
||||||
|
#### Web:
|
||||||
|
* Prevent ctrl-P/cmd-P from opening the print dialog ([#2598](https://github.com/emilk/egui/pull/2598)).
|
||||||
|
|
||||||
|
|
||||||
## 0.20.1 - 2022-12-11
|
## 0.20.1 - 2022-12-11
|
||||||
* Fix docs.rs build ([#2420](https://github.com/emilk/egui/pull/2420)).
|
* Fix docs.rs build ([#2420](https://github.com/emilk/egui/pull/2420)).
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
use super::*;
|
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
|
use egui::Key;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
struct IsDestroyed(pub bool);
|
struct IsDestroyed(pub bool);
|
||||||
|
|
||||||
pub fn paint_and_schedule(
|
pub fn paint_and_schedule(
|
||||||
|
@ -64,8 +67,9 @@ pub fn install_document_events(runner_container: &mut AppRunnerContainer) -> Res
|
||||||
runner_lock.input.raw.modifiers = modifiers;
|
runner_lock.input.raw.modifiers = modifiers;
|
||||||
|
|
||||||
let key = event.key();
|
let key = event.key();
|
||||||
|
let egui_key = translate_key(&key);
|
||||||
|
|
||||||
if let Some(key) = translate_key(&key) {
|
if let Some(key) = egui_key {
|
||||||
runner_lock.input.raw.events.push(egui::Event::Key {
|
runner_lock.input.raw.events.push(egui::Event::Key {
|
||||||
key,
|
key,
|
||||||
pressed: true,
|
pressed: true,
|
||||||
|
@ -85,10 +89,13 @@ pub fn install_document_events(runner_container: &mut AppRunnerContainer) -> Res
|
||||||
|
|
||||||
let egui_wants_keyboard = runner_lock.egui_ctx().wants_keyboard_input();
|
let egui_wants_keyboard = runner_lock.egui_ctx().wants_keyboard_input();
|
||||||
|
|
||||||
let prevent_default = if matches!(event.key().as_str(), "Tab") {
|
#[allow(clippy::if_same_then_else)]
|
||||||
|
let prevent_default = if egui_key == Some(Key::Tab) {
|
||||||
// Always prevent moving cursor to url bar.
|
// Always prevent moving cursor to url bar.
|
||||||
// egui wants to use tab to move to the next text field.
|
// egui wants to use tab to move to the next text field.
|
||||||
true
|
true
|
||||||
|
} else if egui_key == Some(Key::P) {
|
||||||
|
true // Prevent ctrl-P opening the print dialog. Users may want to use it for a command palette.
|
||||||
} else if egui_wants_keyboard {
|
} else if egui_wants_keyboard {
|
||||||
matches!(
|
matches!(
|
||||||
event.key().as_str(),
|
event.key().as_str(),
|
||||||
|
@ -112,6 +119,7 @@ pub fn install_document_events(runner_container: &mut AppRunnerContainer) -> Res
|
||||||
|
|
||||||
if prevent_default {
|
if prevent_default {
|
||||||
event.prevent_default();
|
event.prevent_default();
|
||||||
|
// event.stop_propagation();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
@ -198,15 +206,21 @@ pub fn install_document_events(runner_container: &mut AppRunnerContainer) -> Res
|
||||||
pub fn install_canvas_events(runner_container: &mut AppRunnerContainer) -> Result<(), JsValue> {
|
pub fn install_canvas_events(runner_container: &mut AppRunnerContainer) -> Result<(), JsValue> {
|
||||||
let canvas = canvas_element(runner_container.runner.lock().canvas_id()).unwrap();
|
let canvas = canvas_element(runner_container.runner.lock().canvas_id()).unwrap();
|
||||||
|
|
||||||
{
|
let prevent_default_events = [
|
||||||
// By default, right-clicks open a context menu.
|
// By default, right-clicks open a context menu.
|
||||||
// We don't want to do that (right clicks is handled by egui):
|
// We don't want to do that (right clicks is handled by egui):
|
||||||
let event_name = "contextmenu";
|
"contextmenu",
|
||||||
|
// Allow users to use ctrl-p for e.g. a command palette
|
||||||
|
"afterprint",
|
||||||
|
];
|
||||||
|
|
||||||
|
for event_name in prevent_default_events {
|
||||||
let closure =
|
let closure =
|
||||||
move |event: web_sys::MouseEvent,
|
move |event: web_sys::MouseEvent,
|
||||||
mut _runner_lock: egui::mutex::MutexGuard<'_, AppRunner>| {
|
mut _runner_lock: egui::mutex::MutexGuard<'_, AppRunner>| {
|
||||||
event.prevent_default();
|
event.prevent_default();
|
||||||
|
// event.stop_propagation();
|
||||||
|
// tracing::debug!("Preventing event {:?}", event_name);
|
||||||
};
|
};
|
||||||
|
|
||||||
runner_container.add_event_listener(&canvas, event_name, closure)?;
|
runner_container.add_event_listener(&canvas, event_name, closure)?;
|
||||||
|
|
Loading…
Reference in a new issue