1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-19 16:12:07 +00:00
serenity/Servers/WindowServer/WSMenuItem.cpp
Shannon Booth 7557251fac WindowServer: Move menu related code from WindowManager to MenuManager
Menus are now owned by menu manager instead of being split between the
window manager and menu manager. If the window server wants to change
a menu, or call menu related functionality, this will need to be done
through the menu manager.

Further refactoring is likely needed, but this seems like a good start
for seperating menu logic from window logic.
2020-01-05 09:02:24 +01:00

52 lines
1.2 KiB
C++

#include "WSMenuItem.h"
#include "WSClientConnection.h"
#include "WSMenu.h"
#include "WSWindowManager.h"
#include <LibDraw/GraphicsBitmap.h>
WSMenuItem::WSMenuItem(WSMenu& menu, unsigned identifier, const String& text, const String& shortcut_text, bool enabled, bool checkable, bool checked, const GraphicsBitmap* icon)
: m_menu(menu)
, m_type(Text)
, m_enabled(enabled)
, m_checkable(checkable)
, m_checked(checked)
, m_identifier(identifier)
, m_text(text)
, m_shortcut_text(shortcut_text)
, m_icon(icon)
{
}
WSMenuItem::WSMenuItem(WSMenu& menu, Type type)
: m_menu(menu)
, m_type(type)
{
}
WSMenuItem::~WSMenuItem()
{
}
void WSMenuItem::set_enabled(bool enabled)
{
if (m_enabled == enabled)
return;
m_enabled = enabled;
m_menu.redraw();
}
void WSMenuItem::set_checked(bool checked)
{
if (m_checked == checked)
return;
m_checked = checked;
m_menu.redraw();
}
WSMenu* WSMenuItem::submenu()
{
ASSERT(is_submenu());
if (m_menu.client())
return m_menu.client()->find_menu_by_id(m_submenu_id);
return WSWindowManager::the().menu_manager().find_internal_menu_by_id(m_submenu_id);
}