This adds the IPC and related hooks to allow the UI to send drag-and-
drop events from the UI process to the WebContent process.
(cherry picked from commit 948b6de3b122b50d67d967ed780133e847d629df;
amended to fix in ConnectionFromClient.h due to us still having
`add_backing_store` due to not having LadybirdBrowser/ladybird#233)
The drag-and-drop processing model allows for users to drag around
either elements within the DOM or objects completely outside the DOM.
This drag event can either end without action (via cancellation or user
input), or in a drop event, where the dragged object is dropped onto
another element within the DOM.
The processing model is rather large. This implements enough of it to
allow the UI process to specifically handle dragging objects outside of
the DOM onto the DOM. For example, dragging an image from the OS file
manager onto a file-upload input element. This does not implement the
ability to drag DOM elements.
(cherry picked from commit e8a1b8944719e1e297453527fbe0a84cc2c33eb6)
This cherrypicks most of commit d90a9ab70c7ef73577775f0abed8552907899f75
It doesn't actually remove Kernel/API/KeyCode.h though, since we still
need that :^)
Patch created by running (in zsh, where the `${=foo}` syntax is needed
to tell zsh to convert space-separated strings into separate args):
files=$(git show --name-only --pretty='' d90a9ab70c7e |
rg -v 'CMakeLists.txt|KeyCode.h' | tr '\n' ' ')
git show d90a9ab70c7e -- ${=files} | git apply -3 -
Now that all input events are handled by LibWebView, replace the IPCs
which send the fields of Web::KeyEvent / Web::MouseEvent individually
with one IPC per event type (key or mouse).
We can also replace the ad-hoc queued input structure with a smaller
struct that simply holds the tranferred Web::KeyEvent / Web::MouseEvent.
In the future, we can also adapt Web::EventHandler to use these structs.