Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eframe/web: allow customization of prevent_default behavior #5779

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

th0rex
Copy link

@th0rex th0rex commented Mar 11, 2025

  • I have followed the instructions in the PR template

Currently eframe calls prevent_default() for all copy / paste events on the document, making embedding an egui application in a page (e.g. an react application) hard (as all copy & paste functionality for other elements on the page is broken by this).

I'm not sure what the motivation for this is, if any.

This commit / PR adds a callback (should_prevent_default), similar to should_propgate_event, that an egui application can use to overwrite this behavior. It defaults to returning true for all events, to keep the existing behavior.

I call should_prevent_default in every place that should_propagate_event is called (which is not all places that prevent_default is called!). I'm not sure for the motivation of not calling should_propagate_event everywhere that stop_propagation is called, but I kept that behavior for the should_prevent_default callback too.

Please let me know if I'm missing some existing functionality that would allow me to do this, or if there's a reason that we don't want applications to be able to customize this (i.e. if there's a reason to always prevent_default for all copy / paste events on the whole document)

Comment on lines 503 to +511
/// [`stopPropagation`](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation)
/// is called on every event.
pub should_propagate_event: Box<dyn Fn(&egui::Event) -> bool>,

/// Whether the web event corresponding to an egui event should have `prevent_default` called
/// on it or not.
///
/// Defaults to true.
pub should_prevent_default: Box<dyn Fn(&egui::Event) -> bool>,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit weird that one is negated and the other isn't. Since should_do_default or should_not_prevent_default is weird, maybe we should rename should_propagate_event to should_stop_propagation which would also be consistent with the name of the js function.

@lucasmerlin lucasmerlin added web Related to running Egui on the web eframe Relates to epi and eframe feature New feature or request labels Mar 13, 2025
Copy link

Preview available at https://egui-pr-preview.github.io/pr/5779-propagate-events
Note that it might take a couple seconds for the update to show up after the preview_build workflow has completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
eframe Relates to epi and eframe feature New feature or request web Related to running Egui on the web
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants