Fix tooltips too eager to disappear when there's a gap between the tooltip source and the tooltip itself (#22583)
Follow-up of https://github.com/zed-industries/zed/pull/22548 Release Notes: - N/A Co-authored-by: Peter Tripp <peter@zed.dev>
This commit is contained in:
parent
2c2ca9e370
commit
0e75ca8603
1 changed files with 13 additions and 13 deletions
|
@ -1557,19 +1557,6 @@ impl<'a> WindowContext<'a> {
|
||||||
let tooltip_size = element.layout_as_root(AvailableSpace::min_size(), self);
|
let tooltip_size = element.layout_as_root(AvailableSpace::min_size(), self);
|
||||||
|
|
||||||
let mut tooltip_bounds = Bounds::new(mouse_position + point(px(1.), px(1.)), tooltip_size);
|
let mut tooltip_bounds = Bounds::new(mouse_position + point(px(1.), px(1.)), tooltip_size);
|
||||||
// Element's parent can get hidden (e.g. via the `visible_on_hover` method),
|
|
||||||
// and element's `paint` won't be called (ergo, mouse listeners also won't be active) to detect that the tooltip has to be removed.
|
|
||||||
// Ensure it's not stuck around in such cases.
|
|
||||||
let invalidate_tooltip = !tooltip_request
|
|
||||||
.tooltip
|
|
||||||
.origin_bounds
|
|
||||||
.contains(&self.mouse_position())
|
|
||||||
&& (!tooltip_request.tooltip.hoverable
|
|
||||||
|| !tooltip_bounds.contains(&self.mouse_position()));
|
|
||||||
if invalidate_tooltip {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let window_bounds = Bounds {
|
let window_bounds = Bounds {
|
||||||
origin: Point::default(),
|
origin: Point::default(),
|
||||||
size: self.viewport_size(),
|
size: self.viewport_size(),
|
||||||
|
@ -1599,6 +1586,19 @@ impl<'a> WindowContext<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Element's parent can get hidden (e.g. via the `visible_on_hover` method),
|
||||||
|
// and element's `paint` won't be called (ergo, mouse listeners also won't be active) to detect that the tooltip has to be removed.
|
||||||
|
// Ensure it's not stuck around in such cases.
|
||||||
|
let invalidate_tooltip = !tooltip_request
|
||||||
|
.tooltip
|
||||||
|
.origin_bounds
|
||||||
|
.contains(&self.mouse_position())
|
||||||
|
&& (!tooltip_request.tooltip.hoverable
|
||||||
|
|| !tooltip_bounds.contains(&self.mouse_position()));
|
||||||
|
if invalidate_tooltip {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
self.with_absolute_element_offset(tooltip_bounds.origin, |cx| element.prepaint(cx));
|
self.with_absolute_element_offset(tooltip_bounds.origin, |cx| element.prepaint(cx));
|
||||||
|
|
||||||
self.window.tooltip_bounds = Some(TooltipBounds {
|
self.window.tooltip_bounds = Some(TooltipBounds {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue