mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 18:37:58 +03:00
LibGUI: Only dispatch Leave if the now-hovered widget isn't a child
Without this change, when the mouse starts hovering over a child widget, the parent would receive a Leave event despite the parent widget not losing mouse hover.
This commit is contained in:
parent
444ed56521
commit
cfc9ee6f16
Notes:
sideshowbarker
2024-07-18 08:18:22 +09:00
Author: https://github.com/sin-ack Commit: https://github.com/SerenityOS/serenity/commit/cfc9ee6f16b Pull-request: https://github.com/SerenityOS/serenity/pull/9014 Reviewed-by: https://github.com/alimpfard ✅
@ -1138,4 +1138,20 @@ bool Widget::is_visible_for_timer_purposes() const
|
||||
return is_visible() && Object::is_visible_for_timer_purposes();
|
||||
}
|
||||
|
||||
bool Widget::is_parent_of(Widget const* widget) const
|
||||
{
|
||||
if (widget == nullptr)
|
||||
return false;
|
||||
|
||||
Widget const* current_widget = widget->parent_widget();
|
||||
|
||||
while (current_widget != nullptr) {
|
||||
if (current_widget == this)
|
||||
return true;
|
||||
current_widget = current_widget->parent_widget();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -280,6 +280,8 @@ public:
|
||||
|
||||
bool has_pending_drop() const;
|
||||
|
||||
bool is_parent_of(Widget const*) const;
|
||||
|
||||
protected:
|
||||
Widget();
|
||||
|
||||
|
@ -802,7 +802,7 @@ void Window::set_hovered_widget(Widget* widget)
|
||||
if (widget == m_hovered_widget)
|
||||
return;
|
||||
|
||||
if (m_hovered_widget)
|
||||
if (m_hovered_widget && !m_hovered_widget->is_parent_of(widget))
|
||||
Core::EventLoop::current().post_event(*m_hovered_widget, make<Event>(Event::Leave));
|
||||
|
||||
m_hovered_widget = widget;
|
||||
|
Loading…
Reference in New Issue
Block a user