ladybird/Libraries/LibWeb/HTML/EventLoop
sideshowbarker c1f38f92fe LibWeb: Keep repaints pending inside visibility:hidden iframes
Problem: An iframe whose content changes while it (or an ancestor)
has visibility:hidden isn’t painted once it becomes visible again.
The stale previous frame stays on screen until an unrelated
repaint (e.g., window resize) happens to occur.

Cause: set_needs_repaint() returns early for any document inside an
iframe with a visibility:hidden ancestor — discarding the request
entirely. The navigable’s needs_repaint flag is never set. Nothing
sets it again when the iframe becomes visible — so the rendering
loop keeps skipping it — and its display list stays stale.

Fix: Stop discarding the request in set_needs_repaint(). Instead,
skip painting hidden navigables in the rendering loop — while
leaving needs_repaint set. Once an ancestor iframe becomes
visible, the still-set flag makes the rendering loop paint the
navigable on the next frame.

Fixes https://github.com/LadybirdBrowser/ladybird/issues/9305
2026-05-22 09:58:10 +01:00
..
EventLoop.cpp LibWeb: Keep repaints pending inside visibility:hidden iframes 2026-05-22 09:58:10 +01:00
EventLoop.h LibWeb: Remove unused m_skip_event_loop_processing_steps flag 2026-04-27 20:58:54 +02:00
Task.cpp LibWeb: Remove tasks for destroyed documents when filtering on tasks 2026-03-22 14:26:50 -05:00
Task.h LibWeb: Implement makeXRCompatible() enough to work 2026-04-03 13:14:33 +02:00
TaskQueue.cpp LibWeb: Store idle tasks separately from normal tasks 2026-05-13 20:54:10 +02:00
TaskQueue.h LibWeb: Store idle tasks separately from normal tasks 2026-05-13 20:54:10 +02:00