WindowServer: Properly determine where a window may be

This also fixes weird behavior of WindowManager::desktop_rect().
None of the callers seem to ever expect an empty Rect, so return a non-empty Rect.
This commit is contained in:
Ben Wiederhake 2021-01-28 20:51:37 +01:00 committed by Andreas Kling
parent af605afb27
commit 3fd5aec187
Notes: sideshowbarker 2024-07-18 22:45:34 +09:00
3 changed files with 22 additions and 2 deletions

View File

@ -183,7 +183,7 @@ void Window::normalize_rect()
// For example, the windows that make the desktop rect smaller
// than the display resolution (e.g. the TaskBar).
auto min_visible = -1;
auto desktop = WindowManager::the().desktop_rect();
auto desktop = WindowManager::the().arena_rect_for_type(type())
auto min_y = 0;
if (type() == WindowType::Normal) {
min_size = 50;

View File

@ -1043,7 +1043,7 @@ Gfx::IntRect WindowManager::menubar_rect() const
Gfx::IntRect WindowManager::desktop_rect() const
{
if (active_fullscreen_window())
return {};
return Screen::the().rect();
return {
0,
menubar_rect().bottom() + 1,
@ -1052,6 +1052,25 @@ Gfx::IntRect WindowManager::desktop_rect() const
};
}
Gfx::IntRect WindowManager::arena_rect_for_type(WindowType type) const
{
switch (type) {
case WindowType::Desktop:
case WindowType::Normal:
return desktop_rect();
case WindowType::Menu:
case WindowType::WindowSwitcher:
case WindowType::Taskbar:
case WindowType::Tooltip:
case WindowType::Menubar:
case WindowType::MenuApplet:
case WindowType::Notification:
return Screen::the().rect();
default:
ASSERT_NOT_REACHED();
}
}
void WindowManager::event(Core::Event& event)
{
if (static_cast<Event&>(event).is_mouse_event()) {

View File

@ -120,6 +120,7 @@ public:
Gfx::IntRect menubar_rect() const;
Gfx::IntRect desktop_rect() const;
Gfx::IntRect arena_rect_for_type(WindowType) const;
const Cursor& active_cursor() const;
const Cursor& hidden_cursor() const { return *m_hidden_cursor; }