diff --git a/Libraries/LibGUI/Menu.cpp b/Libraries/LibGUI/Menu.cpp index 5ded8931fd..49d01773c1 100644 --- a/Libraries/LibGUI/Menu.cpp +++ b/Libraries/LibGUI/Menu.cpp @@ -63,6 +63,11 @@ Menu::~Menu() unrealize_menu(); } +void Menu::set_icon(const Gfx::Bitmap* icon) +{ + m_icon = icon; +} + void Menu::add_action(NonnullRefPtr action) { m_items.append(make(m_menu_id, move(action))); @@ -143,7 +148,8 @@ int Menu::realize_menu(RefPtr default_action) if (item.type() == MenuItem::Type::Submenu) { auto& submenu = *item.submenu(); submenu.realize_if_needed(default_action); - WindowServerConnection::the().send_sync(m_menu_id, i, submenu.menu_id(), submenu.name(), true, false, false, false, "", -1, false); + int icon_buffer_id = ensure_realized_icon(submenu); + WindowServerConnection::the().send_sync(m_menu_id, i, submenu.menu_id(), submenu.name(), true, false, false, false, "", icon_buffer_id, false); continue; } if (item.type() == MenuItem::Type::Action) { diff --git a/Libraries/LibGUI/Menu.h b/Libraries/LibGUI/Menu.h index 211e174798..1031112830 100644 --- a/Libraries/LibGUI/Menu.h +++ b/Libraries/LibGUI/Menu.h @@ -47,6 +47,8 @@ public: int menu_id() const { return m_menu_id; } const String& name() const { return m_name; } + const Gfx::Bitmap* icon() const { return m_icon.ptr(); } + void set_icon(const Gfx::Bitmap*); Action* action_at(size_t); @@ -66,6 +68,7 @@ private: int m_menu_id { -1 }; String m_name; + RefPtr m_icon; NonnullOwnPtrVector m_items; WeakPtr m_last_default_action; };