LibWeb: Add basic "top layer" support

Implements the "top layer" concept from "CSS Positioned Layout Module
Level 4" specification.

- The tree builder is modified to ensure that layout nodes created by
  top layer elements are children of the viewport.
- Implements missing steps in `showModal()` to add an element top top
  layer.
- Implements missing steps in `close()` to remove an element from top
  layer.

Further steps could be:
- Add support for `::backdrop` pseudo-element.
- Implement the "inert" concept from HTML spec to block hit-testing
  when element from top layer is displayed.
This commit is contained in:
Aliaksandr Kalenik 2024-03-28 16:53:27 +01:00 committed by Andreas Kling
parent 41d5fa2b07
commit ca363f0024
Notes: sideshowbarker 2024-07-17 08:35:21 +09:00
10 changed files with 198 additions and 5 deletions

View file

@ -352,6 +352,11 @@ void EventLoop::process()
// If there are eligible tasks in the queue, schedule a new round of processing. :^)
if (m_task_queue.has_runnable_tasks() || (!m_microtask_queue.is_empty() && !m_performing_a_microtask_checkpoint))
schedule();
// For each doc of docs, process top layer removals given doc.
for_each_fully_active_document_in_docs([&](DOM::Document& document) {
document.process_top_layer_removals();
});
}
// https://html.spec.whatwg.org/multipage/webappapis.html#queue-a-global-task