diff --git a/AK/WeakPtr.h b/AK/WeakPtr.h index f5413ca6d6..89dbcd93f4 100644 --- a/AK/WeakPtr.h +++ b/AK/WeakPtr.h @@ -4,6 +4,8 @@ namespace AK { +template class OwnPtr; + template class WeakPtr { friend class Weakable; @@ -43,6 +45,8 @@ public: WeakLink* leak_link() { return m_link.leak_ref(); } + bool operator==(const OwnPtr& other) const { return ptr() == other.ptr(); } + private: WeakPtr(RetainPtr>&& link) : m_link(move(link)) { } diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index aef6b73342..8824d3c295 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -369,7 +369,7 @@ void WSWindowManager::pick_new_active_window() void WSWindowManager::handle_menu_mouse_event(WSMenu& menu, const WSMouseEvent& event) { - bool is_hover_with_any_menu_open = event.type() == WSMouseEvent::MouseMove && m_current_menu && m_current_menu->menubar(); + bool is_hover_with_any_menu_open = event.type() == WSMouseEvent::MouseMove && m_current_menu && (m_current_menu->menubar() || m_current_menu == m_system_menu); bool is_mousedown_with_left_button = event.type() == WSMouseEvent::MouseDown && event.button() == MouseButton::Left; bool should_open_menu = &menu != current_menu() && (is_hover_with_any_menu_open || is_mousedown_with_left_button);