mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:07:45 +00:00
WindowServer: Use window menu actions when clicking frame buttons
This keeps the minimize/maximize/restore/close implementation consistent with the window menu actions.
This commit is contained in:
parent
7345b502ab
commit
31c3382577
4 changed files with 54 additions and 29 deletions
|
@ -656,33 +656,40 @@ void Window::ensure_window_menu()
|
|||
m_window_menu->item((int)PopupMenuItem::Maximize).set_enabled(m_resizable);
|
||||
|
||||
m_window_menu->on_item_activation = [&](auto& item) {
|
||||
switch (static_cast<WindowMenuAction>(item.identifier())) {
|
||||
case WindowMenuAction::MinimizeOrUnminimize:
|
||||
WindowManager::the().minimize_windows(*this, !m_minimized);
|
||||
if (!m_minimized)
|
||||
WindowManager::the().move_to_front_and_make_active(*this);
|
||||
break;
|
||||
case WindowMenuAction::MaximizeOrRestore:
|
||||
WindowManager::the().maximize_windows(*this, !m_maximized);
|
||||
WindowManager::the().move_to_front_and_make_active(*this);
|
||||
break;
|
||||
case WindowMenuAction::Close:
|
||||
request_close();
|
||||
break;
|
||||
case WindowMenuAction::ToggleMenubarVisibility:
|
||||
frame().invalidate();
|
||||
item.set_checked(!item.is_checked());
|
||||
m_should_show_menubar = item.is_checked();
|
||||
frame().invalidate();
|
||||
recalculate_rect();
|
||||
Compositor::the().invalidate_occlusions();
|
||||
Compositor::the().invalidate_screen();
|
||||
break;
|
||||
}
|
||||
handle_window_menu_action(static_cast<WindowMenuAction>(item.identifier()));
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void Window::handle_window_menu_action(WindowMenuAction action)
|
||||
{
|
||||
switch (action) {
|
||||
case WindowMenuAction::MinimizeOrUnminimize:
|
||||
WindowManager::the().minimize_windows(*this, !m_minimized);
|
||||
if (!m_minimized)
|
||||
WindowManager::the().move_to_front_and_make_active(*this);
|
||||
break;
|
||||
case WindowMenuAction::MaximizeOrRestore:
|
||||
WindowManager::the().maximize_windows(*this, !m_maximized);
|
||||
WindowManager::the().move_to_front_and_make_active(*this);
|
||||
break;
|
||||
case WindowMenuAction::Close:
|
||||
request_close();
|
||||
break;
|
||||
case WindowMenuAction::ToggleMenubarVisibility: {
|
||||
auto& item = *m_window_menu->item_by_identifier((unsigned)action);
|
||||
frame().invalidate();
|
||||
item.set_checked(!item.is_checked());
|
||||
m_should_show_menubar = item.is_checked();
|
||||
frame().invalidate();
|
||||
recalculate_rect();
|
||||
Compositor::the().invalidate_occlusions();
|
||||
Compositor::the().invalidate_screen();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Window::popup_window_menu(const Gfx::IntPoint& position, WindowMenuDefaultAction default_action)
|
||||
{
|
||||
ensure_window_menu();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue