1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 19:57:41 +00:00

WindowServer: Make WSMenu use WSClientConnection::post_message().

This commit is contained in:
Andreas Kling 2019-02-14 10:44:47 +01:00
parent 8d5ba56cf9
commit 7723c06f27
4 changed files with 15 additions and 18 deletions

View file

@ -118,7 +118,7 @@ void WSClientConnection::handle_request(WSAPIDestroyMenubarRequest& request)
void WSClientConnection::handle_request(WSAPICreateMenuRequest& request) void WSClientConnection::handle_request(WSAPICreateMenuRequest& request)
{ {
int menu_id = m_next_menu_id++; int menu_id = m_next_menu_id++;
auto menu = make<WSMenu>(*WSMessageLoop::process_from_client_id(request.client_id()), menu_id, request.text()); auto menu = make<WSMenu>(request.client_id(), menu_id, request.text());
m_menus.set(menu_id, move(menu)); m_menus.set(menu_id, move(menu));
GUI_ServerMessage response; GUI_ServerMessage response;
response.type = GUI_ServerMessage::Type::DidCreateMenu; response.type = GUI_ServerMessage::Type::DidCreateMenu;

View file

@ -4,13 +4,14 @@
#include "WSMessage.h" #include "WSMessage.h"
#include "WSMessageLoop.h" #include "WSMessageLoop.h"
#include "WSWindowManager.h" #include "WSWindowManager.h"
#include <WindowServer/WSClientConnection.h>
#include <SharedGraphics/Painter.h> #include <SharedGraphics/Painter.h>
#include <SharedGraphics/Font.h> #include <SharedGraphics/Font.h>
WSMenu::WSMenu(Process& process, int menu_id, String&& name) WSMenu::WSMenu(int client_id, int menu_id, String&& name)
: m_menu_id(menu_id) : m_client_id(client_id)
, m_menu_id(menu_id)
, m_name(move(name)) , m_name(move(name))
, m_process(process.make_weak_ptr())
{ {
} }
@ -137,15 +138,13 @@ void WSMenu::did_activate(WSMenuItem& item)
close(); close();
GUI_ServerMessage gui_event; GUI_ServerMessage message;
gui_event.type = GUI_ServerMessage::Type::MenuItemActivated; message.type = GUI_ServerMessage::Type::MenuItemActivated;
gui_event.menu.menu_id = m_menu_id; message.menu.menu_id = m_menu_id;
gui_event.menu.identifier = item.identifier(); message.menu.identifier = item.identifier();
if (!m_process) if (auto* client = WSClientConnection::from_client_id(m_client_id))
return; client->post_message(move(message));
LOCKER(m_process->gui_events_lock());
m_process->gui_events().append(move(gui_event));
} }
WSMenuItem* WSMenu::item_at(const Point& position) WSMenuItem* WSMenu::item_at(const Point& position)

View file

@ -10,15 +10,14 @@ class WSMenuBar;
class WSMessage; class WSMessage;
class WSWindow; class WSWindow;
class Font; class Font;
class Process;
class WSMenu : public Weakable<WSMenu> { class WSMenu : public Weakable<WSMenu> {
public: public:
WSMenu(Process&, int menu_id, String&& name); WSMenu(int client_id, int menu_id, String&& name);
~WSMenu(); ~WSMenu();
int client_id() const { return m_client_id; }
int menu_id() const { return m_menu_id; } int menu_id() const { return m_menu_id; }
const Process* process() const { return m_process.ptr(); }
WSMenuBar* menu_bar() { return m_menubar; } WSMenuBar* menu_bar() { return m_menubar; }
const WSMenuBar* menu_bar() const { return m_menubar; } const WSMenuBar* menu_bar() const { return m_menubar; }
@ -75,7 +74,7 @@ public:
private: private:
void did_activate(WSMenuItem&); void did_activate(WSMenuItem&);
int m_client_id { 0 };
int m_menu_id { 0 }; int m_menu_id { 0 };
String m_name; String m_name;
Rect m_rect_in_menubar; Rect m_rect_in_menubar;
@ -84,6 +83,5 @@ private:
WSMenuItem* m_hovered_item { nullptr }; WSMenuItem* m_hovered_item { nullptr };
Vector<OwnPtr<WSMenuItem>> m_items; Vector<OwnPtr<WSMenuItem>> m_items;
OwnPtr<WSWindow> m_menu_window; OwnPtr<WSWindow> m_menu_window;
WeakPtr<Process> m_process;
}; };

View file

@ -186,7 +186,7 @@ WSWindowManager::WSWindowManager()
{ {
byte system_menu_name[] = { 0xf8, 0 }; byte system_menu_name[] = { 0xf8, 0 };
m_system_menu = make<WSMenu>(*current, -1, String((const char*)system_menu_name)); m_system_menu = make<WSMenu>(-1, -1, String((const char*)system_menu_name));
m_system_menu->add_item(make<WSMenuItem>(0, "Launch Terminal")); m_system_menu->add_item(make<WSMenuItem>(0, "Launch Terminal"));
m_system_menu->add_item(make<WSMenuItem>(WSMenuItem::Separator)); m_system_menu->add_item(make<WSMenuItem>(WSMenuItem::Separator));
m_system_menu->add_item(make<WSMenuItem>(1, "Hello again")); m_system_menu->add_item(make<WSMenuItem>(1, "Hello again"));