-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Fix ui.response().interact(Sense::click()) being flakey
#7713
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
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Preview available at https://egui-pr-preview.github.io/pr/7713-lucasfix-flaky-ui-response-interact View snapshot changes at kitdiff |
emilk
approved these changes
Nov 13, 2025
Owner
emilk
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ooof - good catch
emilk
pushed a commit
that referenced
this pull request
Nov 13, 2025
This fixes calls to `ui.response().interact(Sense::click())` being flakey. Since egui checks widget interactions at the beginning of the frame, based on the responses from last frame, we need to ensure that we always call `create_widget` on `interact` calls, otherwise there can be a feedback loop where the `Sense` egui acts on flips back and forth between frames. Without the fix in `interact`, both the asserts in the new test fail. Here is a video where I experienced the bug, showing the sense switching every frame. Every other click would fail to be detected. https://github.com/user-attachments/assets/6be7ca0e-b50f-4d30-bf87-bbb80c319f3b Also note, usually it's better to use `UiBuilder::sense()` to give a Ui some sense, but sometimes you don't have the flexibility, e.g. in a `Ui` callback from some code external to your project.
This was referenced Nov 13, 2025
Closed
emilk
added a commit
to rerun-io/rerun
that referenced
this pull request
Nov 26, 2025
Changes in snapshot images should be pixel-alignment improvements thanks to * emilk/egui#7710 --- ## egui changelog ### ⭐ Added * Add `Plugin::on_widget_under_pointer` to support widget inspector [#7652](emilk/egui#7652) by [@juancampa](https://github.com/juancampa) * Add `Response::total_drag_delta` and `PointerState::total_drag_delta` [#7708](emilk/egui#7708) by [@emilk](https://github.com/emilk) ### 🔧 Changed * Improve accessibility and testability of `ComboBox` [#7658](emilk/egui#7658) by [@lucasmerlin](https://github.com/lucasmerlin) ### 🐛 Fixed * Fix `profiling::scope` compile error when profiling using `tracing` backend [#7646](emilk/egui#7646) by [@PPakalns](https://github.com/PPakalns) * Fix edge cases in "smart aiming" in sliders [#7680](emilk/egui#7680) by [@emilk](https://github.com/emilk) * Hide scroll bars when dragging other things [#7689](emilk/egui#7689) by [@emilk](https://github.com/emilk) * Prevent widgets sometimes appearing to move relative to each other [#7710](emilk/egui#7710) by [@emilk](https://github.com/emilk) * Fix `ui.response().interact(Sense::click())` being flakey [#7713](emilk/egui#7713) by [@lucasmerlin](https://github.com/lucasmerlin) ## eframe changelog * Fix jittering during window resize on MacOS for WGPU/Metal [#7641](emilk/egui#7641) by [@aspcartman](https://github.com/aspcartman) * Make sure `native_pixels_per_point` is set during app creation [#7683](emilk/egui#7683) by [@emilk](https://github.com/emilk) --------- Co-authored-by: Lucas Meurer <lucasmeurer96@gmail.com> Co-authored-by: lucasmerlin <8009393+lucasmerlin@users.noreply.github.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes calls to
ui.response().interact(Sense::click())being flakey. Since egui checks widget interactions at the beginning of the frame, based on the responses from last frame, we need to ensure that we always callcreate_widgetoninteractcalls, otherwise there can be a feedback loop where theSenseegui acts on flips back and forth between frames.Without the fix in
interact, both the asserts in the new test fail.Here is a video where I experienced the bug, showing the sense switching every frame. Every other click would fail to be detected.
Screen.Recording.2025-11-13.at.13.20.37.mov
Also note, usually it's better to use
UiBuilder::sense()to give a Ui some sense, but sometimes you don't have the flexibility, e.g. in aUicallback from some code external to your project.