mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:37:37 +00:00
WindowServer: Simplify the way we update items in the window menu
Instead of trying to update only the little bit that changes, let's have a function that updates all the window menu items in one go. It's just a couple of string and boolean assignment, and the real cost is performing the subsequent menu redraw, which remains the same.
This commit is contained in:
parent
62b76a7c95
commit
5aa9f128fc
2 changed files with 17 additions and 28 deletions
|
@ -245,20 +245,16 @@ void Window::handle_mouse_event(const MouseEvent& event)
|
|||
}
|
||||
}
|
||||
|
||||
void Window::update_menu_item_text(PopupMenuItem item)
|
||||
void Window::update_window_menu_items()
|
||||
{
|
||||
if (m_window_menu) {
|
||||
m_window_menu->item((int)item).set_text(item == PopupMenuItem::Minimize ? (m_minimized ? "Unminimize" : "Minimize") : (m_maximized ? "Restore" : "Maximize"));
|
||||
m_window_menu->redraw();
|
||||
}
|
||||
}
|
||||
if (!m_window_menu)
|
||||
return;
|
||||
|
||||
void Window::update_menu_item_enabled(PopupMenuItem item)
|
||||
{
|
||||
if (m_window_menu) {
|
||||
m_window_menu->item((int)item).set_enabled(item == PopupMenuItem::Minimize ? m_minimizable : m_resizable);
|
||||
m_window_menu->redraw();
|
||||
}
|
||||
m_window_menu_minimize_item->set_text(m_minimized ? "&Unminimize" : "Mi&nimize");
|
||||
m_window_menu_minimize_item->set_enabled(m_minimizable);
|
||||
|
||||
m_window_menu_maximize_item->set_text(m_maximized ? "&Restore" : "Ma&ximize");
|
||||
m_window_menu_maximize_item->set_enabled(m_resizable);
|
||||
}
|
||||
|
||||
void Window::set_minimized(bool minimized)
|
||||
|
@ -268,7 +264,7 @@ void Window::set_minimized(bool minimized)
|
|||
if (minimized && !m_minimizable)
|
||||
return;
|
||||
m_minimized = minimized;
|
||||
update_menu_item_text(PopupMenuItem::Minimize);
|
||||
update_window_menu_items();
|
||||
Compositor::the().invalidate_occlusions();
|
||||
Compositor::the().invalidate_screen(frame().render_rect());
|
||||
if (!blocking_modal_window())
|
||||
|
@ -283,7 +279,7 @@ void Window::set_minimizable(bool minimizable)
|
|||
if (m_minimizable == minimizable)
|
||||
return;
|
||||
m_minimizable = minimizable;
|
||||
update_menu_item_enabled(PopupMenuItem::Minimize);
|
||||
update_window_menu_items();
|
||||
// TODO: Hide/show (or alternatively change enabled state of) window minimize button dynamically depending on value of m_minimizable
|
||||
}
|
||||
|
||||
|
@ -353,7 +349,7 @@ void Window::set_maximized(bool maximized, Optional<Gfx::IntPoint> fixed_point)
|
|||
return;
|
||||
m_tiled = WindowTileType::None;
|
||||
m_maximized = maximized;
|
||||
update_menu_item_text(PopupMenuItem::Maximize);
|
||||
update_window_menu_items();
|
||||
if (maximized) {
|
||||
m_unmaximized_rect = m_rect;
|
||||
set_rect(WindowManager::the().maximized_window_rect(*this));
|
||||
|
@ -390,7 +386,7 @@ void Window::set_resizable(bool resizable)
|
|||
if (m_resizable == resizable)
|
||||
return;
|
||||
m_resizable = resizable;
|
||||
update_menu_item_enabled(PopupMenuItem::Maximize);
|
||||
update_window_menu_items();
|
||||
// TODO: Hide/show (or alternatively change enabled state of) window maximize button dynamically depending on value of is_resizable()
|
||||
}
|
||||
|
||||
|
@ -635,11 +631,11 @@ void Window::ensure_window_menu()
|
|||
m_window_menu = Menu::construct(nullptr, -1, "(Window Menu)");
|
||||
m_window_menu->set_window_menu_of(*this);
|
||||
|
||||
auto minimize_item = make<MenuItem>(*m_window_menu, (unsigned)WindowMenuAction::MinimizeOrUnminimize, m_minimized ? "&Unminimize" : "Mi&nimize");
|
||||
auto minimize_item = make<MenuItem>(*m_window_menu, (unsigned)WindowMenuAction::MinimizeOrUnminimize, "");
|
||||
m_window_menu_minimize_item = minimize_item.ptr();
|
||||
m_window_menu->add_item(move(minimize_item));
|
||||
|
||||
auto maximize_item = make<MenuItem>(*m_window_menu, (unsigned)WindowMenuAction::MaximizeOrRestore, m_maximized ? "&Restore" : "Ma&ximize");
|
||||
auto maximize_item = make<MenuItem>(*m_window_menu, (unsigned)WindowMenuAction::MaximizeOrRestore, "");
|
||||
m_window_menu_maximize_item = maximize_item.ptr();
|
||||
m_window_menu->add_item(move(maximize_item));
|
||||
|
||||
|
@ -656,12 +652,11 @@ void Window::ensure_window_menu()
|
|||
m_window_menu_close_item->set_default(true);
|
||||
m_window_menu->add_item(move(close_item));
|
||||
|
||||
m_window_menu->item((int)PopupMenuItem::Minimize).set_enabled(m_minimizable);
|
||||
m_window_menu->item((int)PopupMenuItem::Maximize).set_enabled(m_resizable);
|
||||
|
||||
m_window_menu->on_item_activation = [&](auto& item) {
|
||||
handle_window_menu_action(static_cast<WindowMenuAction>(item.identifier()));
|
||||
};
|
||||
|
||||
update_window_menu_items();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue