1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:48:11 +00:00

WindowServer: Move some event code from WSWindowManager to WSMenuBarKeeper.

This commit is contained in:
Andreas Kling 2019-06-21 15:02:11 +02:00
parent ede598589a
commit ef1bfcb9d8
4 changed files with 41 additions and 40 deletions

View file

@ -385,31 +385,6 @@ void WSWindowManager::pick_new_active_window()
});
}
void WSWindowManager::handle_menu_mouse_event(WSMenu& menu, const WSMouseEvent& event)
{
bool is_hover_with_any_menu_open = event.type() == WSMouseEvent::MouseMove && m_current_menu && (m_current_menu->menubar() || m_current_menu == m_system_menu);
bool is_mousedown_with_left_button = event.type() == WSMouseEvent::MouseDown && event.button() == MouseButton::Left;
bool should_open_menu = &menu != current_menu() && (is_hover_with_any_menu_open || is_mousedown_with_left_button);
if (should_open_menu) {
if (current_menu() == &menu)
return;
close_current_menu();
if (!menu.is_empty()) {
auto& menu_window = menu.ensure_menu_window();
menu_window.move_to({ menu.rect_in_menubar().x(), menu.rect_in_menubar().bottom() + 2 });
menu_window.set_visible(true);
}
m_current_menu = menu.make_weak_ptr();
m_menubar_keeper.refresh();
return;
}
if (event.type() == WSMouseEvent::MouseDown && event.button() == MouseButton::Left) {
close_current_menu();
return;
}
}
void WSWindowManager::close_current_menu()
{
if (m_current_menu && m_current_menu->menu_window())
@ -418,17 +393,6 @@ void WSWindowManager::close_current_menu()
m_menubar_keeper.refresh();
}
void WSWindowManager::handle_menubar_mouse_event(const WSMouseEvent& event)
{
for_each_active_menubar_menu([&](WSMenu& menu) {
if (menu.rect_in_menubar().contains(event.position())) {
handle_menu_mouse_event(menu, event);
return false;
}
return true;
});
}
void WSWindowManager::start_window_drag(WSWindow& window, const WSMouseEvent& event)
{
#ifdef DRAG_DEBUG
@ -718,10 +682,9 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& hovere
}
if (menubar_rect().contains(event.position())) {
handle_menubar_mouse_event(event);
m_menubar_keeper.event(event);
return;
}
if (m_current_menu && m_current_menu->menu_window()) {
auto& window = *m_current_menu->menu_window();
bool event_is_inside_current_menu = window.rect().contains(event.position());