mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:38:12 +00:00
WindowServer: Fix invalidating window frame
When invalidating the frame we need to properly flag that so that we trigger rendering the frame, even if "all" was flagged as being invalidated. Otherwise it will only get rendered if anything else happens to trigger it (such as focus change). Fixes #3427
This commit is contained in:
parent
86d230ab5f
commit
3a4a9d4c6b
3 changed files with 12 additions and 7 deletions
|
@ -409,21 +409,25 @@ void Window::invalidate(bool invalidate_frame)
|
|||
Compositor::the().invalidate_window();
|
||||
}
|
||||
|
||||
void Window::invalidate(const Gfx::IntRect& rect)
|
||||
void Window::invalidate(const Gfx::IntRect& rect, bool with_frame)
|
||||
{
|
||||
if (type() == WindowType::MenuApplet) {
|
||||
AppletManager::the().invalidate_applet(*this, rect);
|
||||
return;
|
||||
}
|
||||
|
||||
if (invalidate_no_notify(rect))
|
||||
if (invalidate_no_notify(rect, with_frame))
|
||||
Compositor::the().invalidate_window();
|
||||
}
|
||||
|
||||
bool Window::invalidate_no_notify(const Gfx::IntRect& rect)
|
||||
bool Window::invalidate_no_notify(const Gfx::IntRect& rect, bool with_frame)
|
||||
{
|
||||
if (m_invalidated_all || rect.is_empty())
|
||||
if (rect.is_empty())
|
||||
return false;
|
||||
if (m_invalidated_all) {
|
||||
m_invalidated_frame |= with_frame;
|
||||
return false;
|
||||
}
|
||||
|
||||
auto outer_rect = frame().rect();
|
||||
auto inner_rect = rect;
|
||||
|
@ -434,6 +438,7 @@ bool Window::invalidate_no_notify(const Gfx::IntRect& rect)
|
|||
return false;
|
||||
|
||||
m_invalidated = true;
|
||||
m_invalidated_frame |= with_frame;
|
||||
m_dirty_rects.add(inner_rect.translated(-outer_rect.location()));
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue