diff --git a/WindowServer/WSClientConnection.cpp b/WindowServer/WSClientConnection.cpp index 320b0edd6a..f34cab763e 100644 --- a/WindowServer/WSClientConnection.cpp +++ b/WindowServer/WSClientConnection.cpp @@ -295,7 +295,7 @@ void WSClientConnection::handle_request(WSAPIGetWindowRectRequest& request) void WSClientConnection::handle_request(WSAPICreateWindowRequest& request) { int window_id = m_next_window_id++; - auto window = make(request.client_id(), window_id); + auto window = make(*this, window_id); window->set_title(request.title()); window->set_rect(request.rect()); m_windows.set(window_id, move(window)); diff --git a/WindowServer/WSWindow.cpp b/WindowServer/WSWindow.cpp index 80d772e4c4..8e440e1ec8 100644 --- a/WindowServer/WSWindow.cpp +++ b/WindowServer/WSWindow.cpp @@ -12,8 +12,8 @@ WSWindow::WSWindow(WSMenu& menu) WSWindowManager::the().add_window(*this); } -WSWindow::WSWindow(int client_id, int window_id) - : m_client_id(client_id) +WSWindow::WSWindow(WSClientConnection& client, int window_id) + : m_client(&client) , m_type(WSWindowType::Normal) , m_window_id(window_id) { @@ -36,8 +36,7 @@ void WSWindow::set_title(String&& title) void WSWindow::set_rect(const Rect& rect) { Rect old_rect; - auto* client = WSClientConnection::from_client_id(m_client_id); - if (!client && !m_menu) + if (!m_client && !m_menu) return; if (m_rect == rect) return; @@ -46,8 +45,8 @@ void WSWindow::set_rect(const Rect& rect) if (!m_backing || old_rect.size() != rect.size()) { if (m_menu) m_backing = GraphicsBitmap::create(m_rect.size()); - else if (client) - m_backing = client->create_shared_bitmap(m_rect.size()); + else if (m_client) + m_backing = m_client->create_shared_bitmap(m_rect.size()); } WSWindowManager::the().notify_rect_changed(*this, old_rect, rect); @@ -126,8 +125,8 @@ void WSWindow::on_message(WSMessage& message) if (server_message.type == WSAPI_ServerMessage::Type::Invalid) return; - if (auto* client = WSClientConnection::from_client_id(m_client_id)) - client->post_message(server_message); + ASSERT(m_client); + m_client->post_message(server_message); } void WSWindow::set_global_cursor_tracking_enabled(bool enabled) diff --git a/WindowServer/WSWindow.h b/WindowServer/WSWindow.h index 8254ef5bfe..050ec7f63f 100644 --- a/WindowServer/WSWindow.h +++ b/WindowServer/WSWindow.h @@ -7,15 +7,17 @@ #include "WSMessageReceiver.h" #include +class WSClientConnection; class WSMenu; class WSWindow final : public WSMessageReceiver, public InlineLinkedListNode { public: - WSWindow(int client_id, int window_id); + WSWindow(WSClientConnection&, int window_id); explicit WSWindow(WSMenu&); virtual ~WSWindow() override; - int client_id() const { return m_client_id; } + WSClientConnection* client() { return m_client; } + const WSClientConnection* client() const { return m_client; } WSWindowType type() const { return m_type; } int window_id() const { return m_window_id; } @@ -63,7 +65,7 @@ public: WSWindow* m_prev { nullptr }; private: - int m_client_id { 0 }; + WSClientConnection* m_client { nullptr }; String m_title; Rect m_rect; WSWindowType m_type { WSWindowType::Normal }; diff --git a/WindowServer/WSWindowManager.cpp b/WindowServer/WSWindowManager.cpp index 811033437a..08ffefa86d 100644 --- a/WindowServer/WSWindowManager.cpp +++ b/WindowServer/WSWindowManager.cpp @@ -755,12 +755,8 @@ void WSWindowManager::set_active_window(WSWindow* window) WSMessageLoop::the().post_message(m_active_window.ptr(), make(WSMessage::WindowActivated)); invalidate(*m_active_window); - int client_id = window->client_id(); - auto* client = WSClientConnection::from_client_id(client_id); - if (!client) { - dbgprintf("WSWindow{%p} (type=%u) has no client! (id=%d)\n", window, window->type(), client_id); - ASSERT_NOT_REACHED(); - } + auto* client = window->client(); + ASSERT(client); set_current_menubar(client->app_menubar()); } } @@ -846,16 +842,16 @@ void WSWindowManager::close_menubar(WSMenuBar& menubar) set_current_menubar(nullptr); } -int WSWindowManager::active_client_id() const +const WSClientConnection* WSWindowManager::active_client() const { if (m_active_window) - return m_active_window->client_id(); + return m_active_window->client(); return 0; } void WSWindowManager::notify_client_changed_app_menubar(WSClientConnection& client) { - if (active_client_id() == client.client_id()) + if (active_client() == &client) set_current_menubar(client.app_menubar()); invalidate(); } diff --git a/WindowServer/WSWindowManager.h b/WindowServer/WSWindowManager.h index 0ef8ec07eb..7f23b8a334 100644 --- a/WindowServer/WSWindowManager.h +++ b/WindowServer/WSWindowManager.h @@ -38,7 +38,7 @@ public: void notify_client_changed_app_menubar(WSClientConnection&); WSWindow* active_window() { return m_active_window.ptr(); } - int active_client_id() const; + const WSClientConnection* active_client() const; void move_to_front(WSWindow&);