Hide hover UI when showing the context menu (#4138)

This PR hides the hover UI for a given widget whenever a corresponding
context menu is opened.

Fixes:
- https://github.com/rerun-io/rerun/issues/5310
This commit is contained in:
Antoine Beyeler 2024-03-06 16:30:20 +01:00 committed by GitHub
parent ca1f453c47
commit a1d5145c16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 0 deletions

View File

@ -230,6 +230,13 @@ pub(crate) fn context_menu(
inner_response
}
/// Returns `true` if the context menu is opened for this widget.
pub(crate) fn context_menu_opened(response: &Response) -> bool {
let menu_id = Id::new(CONTEXT_MENU_ID_STR);
let bar_state = BarState::load(&response.ctx, menu_id);
bar_state.is_menu_open(response.id)
}
/// Stores the state for the context menu.
#[derive(Clone, Default)]
pub(crate) struct MenuRootManager {

View File

@ -534,6 +534,10 @@ impl Response {
return true;
}
if self.context_menu_opened() {
return false;
}
if self.enabled {
if !self.hovered || !self.ctx.input(|i| i.pointer.has_pointer()) {
return false;
@ -849,6 +853,13 @@ impl Response {
menu::context_menu(self, add_contents)
}
/// Returns whether a context menu is currently open for this widget.
///
/// See [`Self::context_menu`].
pub fn context_menu_opened(&self) -> bool {
menu::context_menu_opened(self)
}
/// Draw a debug rectangle over the response displaying the response's id and whether it is
/// enabled and/or hovered.
///