From 7fb7b399a3dd2a6782eb680ff3674b31c04c3003 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Tue, 7 Jan 2020 20:40:11 +1300 Subject: [PATCH] WSWindowManager: Use early return to limit nesting Let's be a little nicer on the eyes :^) --- Servers/WindowServer/WSWindowManager.cpp | 59 +++++++++++++----------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index adcdce0371..9ab3a01e16 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -713,38 +713,41 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& hovere ASSERT(topmost_menu); auto* window = topmost_menu->menu_window(); ASSERT(window); + bool event_is_inside_current_menu = window->rect().contains(event.position()); - if (!event_is_inside_current_menu) { - if (topmost_menu->hovered_item()) - topmost_menu->clear_hovered_item(); - if (event.type() == WSEvent::MouseDown || event.type() == WSEvent::MouseUp) { - auto* window_menu_of = topmost_menu->window_menu_of(); - if (window_menu_of) { - bool event_is_inside_taskbar_button = window_menu_of->taskbar_rect().contains(event.position()); - if (event_is_inside_taskbar_button && !topmost_menu->is_window_menu_open()) { - topmost_menu->set_window_menu_open(true); - return; - } - } - m_menu_manager.close_bar(); - topmost_menu->set_window_menu_open(false); - } - if (event.type() == WSEvent::MouseMove) { - for (auto& menu : m_menu_manager.open_menu_stack()) { - if (!menu) - continue; - if (!menu->menu_window()->rect().contains(event.position())) - continue; - hovered_window = menu->menu_window(); - auto translated_event = event.translated(-menu->menu_window()->position()); - deliver_mouse_event(*menu->menu_window(), translated_event); - break; - } - } - } else { + if (event_is_inside_current_menu) { hovered_window = window; auto translated_event = event.translated(-window->position()); deliver_mouse_event(*window, translated_event); + return; + } + + if (topmost_menu->hovered_item()) + topmost_menu->clear_hovered_item(); + if (event.type() == WSEvent::MouseDown || event.type() == WSEvent::MouseUp) { + auto* window_menu_of = topmost_menu->window_menu_of(); + if (window_menu_of) { + bool event_is_inside_taskbar_button = window_menu_of->taskbar_rect().contains(event.position()); + if (event_is_inside_taskbar_button && !topmost_menu->is_window_menu_open()) { + topmost_menu->set_window_menu_open(true); + return; + } + } + m_menu_manager.close_bar(); + topmost_menu->set_window_menu_open(false); + } + + if (event.type() == WSEvent::MouseMove) { + for (auto& menu : m_menu_manager.open_menu_stack()) { + if (!menu) + continue; + if (!menu->menu_window()->rect().contains(event.position())) + continue; + hovered_window = menu->menu_window(); + auto translated_event = event.translated(-menu->menu_window()->position()); + deliver_mouse_event(*menu->menu_window(), translated_event); + break; + } } return; }