diff --git a/Servers/WindowServer/WSButton.h b/Servers/WindowServer/WSButton.h index 47937b420a..5ceeff41e4 100644 --- a/Servers/WindowServer/WSButton.h +++ b/Servers/WindowServer/WSButton.h @@ -3,13 +3,14 @@ #include #include #include +#include class CharacterBitmap; class Painter; class WSMouseEvent; class WSWindowFrame; -class WSButton final { +class WSButton : public Weakable { public: WSButton(WSWindowFrame&, Retained&&, Function&& on_click_handler); ~WSButton(); diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index 4bddc45eec..aef4667396 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -621,6 +621,11 @@ bool WSWindowManager::process_ongoing_window_resize(const WSMouseEvent& event, W return true; } +void WSWindowManager::set_cursor_tracking_button(WSButton* button) +{ + m_cursor_tracking_button = button ? button->make_weak_ptr() : nullptr; +} + void WSWindowManager::process_mouse_event(const WSMouseEvent& event, WSWindow*& event_window) { event_window = nullptr; @@ -1117,5 +1122,5 @@ const WSCursor& WSWindowManager::active_cursor() const void WSWindowManager::set_hovered_button(WSButton* button) { - m_hovered_button = button; + m_hovered_button = button ? button->make_weak_ptr() : nullptr; } diff --git a/Servers/WindowServer/WSWindowManager.h b/Servers/WindowServer/WSWindowManager.h index 3f7298ea64..9c1c74d0e6 100644 --- a/Servers/WindowServer/WSWindowManager.h +++ b/Servers/WindowServer/WSWindowManager.h @@ -100,7 +100,7 @@ public: const WSCursor& move_cursor() const { return *m_move_cursor; } void set_active_window(WSWindow*); - void set_cursor_tracking_button(WSButton* button) { m_cursor_tracking_button = button; } + void set_cursor_tracking_button(WSButton*); void set_hovered_button(WSButton*); private: @@ -207,8 +207,8 @@ private: CircularQueue m_cpu_history; String m_username; - WSButton* m_cursor_tracking_button { nullptr }; - WSButton* m_hovered_button { nullptr }; + WeakPtr m_cursor_tracking_button; + WeakPtr m_hovered_button; }; template