mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-02-20 01:40:52 -05:00
Consolidate notes from a few files in TODO
This commit is contained in:
parent
a6f6999e49
commit
6dcf8718ae
1 changed files with 98 additions and 0 deletions
98
TODO
98
TODO
|
|
@ -21,6 +21,19 @@ Core wayland protocol
|
|||
|
||||
- glyph cache
|
||||
|
||||
buffer = drm.create_buffer(); /* buffer with stuff in it */
|
||||
|
||||
cache.upload(buffer, x, y, width, height, int key)
|
||||
|
||||
drm.buffer: id, name, stride etc /* event to announce cache buffer */
|
||||
|
||||
cache.image: key, buffer, x, y, stride /* event to announce
|
||||
* location in cache */
|
||||
|
||||
cache.retire: buffer /* cache has stopped using buffer, please
|
||||
* reupload whatever you had in that buffer */
|
||||
|
||||
|
||||
- DnD issues:
|
||||
|
||||
Root window must send NULL type (to decline drop) or
|
||||
|
|
@ -37,6 +50,46 @@ Core wayland protocol
|
|||
that will participate in dnd. Or just assume client is not
|
||||
participating until we receive an accept request.
|
||||
|
||||
- Selection/copy+paste
|
||||
|
||||
- Similar to dnd, create a selection object for a device to offer
|
||||
selection data:
|
||||
|
||||
selection = shell.create(input_device)
|
||||
|
||||
Requests:
|
||||
- selection.offer(type)
|
||||
- selection.activate(time)
|
||||
- selection.destroy()
|
||||
|
||||
Events:
|
||||
- selection.finish(type, fd)
|
||||
- selection.discard() /* somebody else took the selection */
|
||||
|
||||
- Notes: no window owner, which seems to be mostly there as a way
|
||||
to identify the client and to allow None (instead of a release
|
||||
request). Possibly also to make the selection go away
|
||||
automatically when the window with the contents go away, or
|
||||
possibly as a way for the source to distinguish between multiple
|
||||
selections. Toolkits generally just create a dummy-toplevel for
|
||||
selections though.
|
||||
|
||||
- Per-device selection. The selection is per device. Different
|
||||
keyboards copy and paste to different selections.
|
||||
|
||||
- Selection offer object. Introduced just before a surface
|
||||
receives keyboard_focus event or when somebody claims the
|
||||
selection and on keyboard_focus? That way only keyboard_focus
|
||||
owner will know the types... limits pasting to the
|
||||
keyboard_focus surface.
|
||||
|
||||
Requests:
|
||||
- selection_offer.receive(type, fd)
|
||||
|
||||
Events:
|
||||
- selection_offer.offer(type)
|
||||
- selection_offer.keyboard_focus()
|
||||
|
||||
- Pointer image issue:
|
||||
|
||||
- A touch input device doesn't have a pointer; indicate that
|
||||
|
|
@ -60,6 +113,51 @@ Core wayland protocol
|
|||
surface-relative (menus), 2) pointer-relative (tooltips and
|
||||
right-click menus) or 3) server-decides (all other top-levels).
|
||||
|
||||
- Per client id space. Each client has an entire 32 bit id namespace
|
||||
to itself. On the server side, each struct wl_client has an object
|
||||
hash table. Object announcements use a server id space and clients
|
||||
must respond with subscribe request with a client id for the
|
||||
object. Part of wl_proxy_create_for_id():
|
||||
|
||||
wl_display_subscribe(display, id, new_id, my_version);
|
||||
|
||||
or maybe
|
||||
|
||||
wl_display_bind(display, id, new_id, my_version);
|
||||
|
||||
Fixes a few things:
|
||||
|
||||
- Maps the global object into the client id space, lets client
|
||||
allocate the id. All ids are allocated by the client this way,
|
||||
which fixes the range protocol problem.
|
||||
|
||||
- Tells the server that the client is interested in events from
|
||||
the object. Lets the server know that a client participates in a
|
||||
certain protocol (like drag and drop), so the server can account
|
||||
for whether or not the client is expected to reply
|
||||
|
||||
- Server emits initial object state event(s) in reponse to
|
||||
receiving the subscribe request. Introduces an extra round trip
|
||||
at initialization time, but the server will still announces all
|
||||
objects in one burst and the client can subscribe in a burst as
|
||||
well.
|
||||
|
||||
- Separates client resources, since each client will have it's own
|
||||
hash table. It's not longer possible to guess the id of another
|
||||
surface and access it.
|
||||
|
||||
- Server must track the client id for each client an object is
|
||||
exposed to. In some cases we know this (a surface is always
|
||||
only owned by one client), in other cases it provides a way to
|
||||
track who's interested in the object events. For input device
|
||||
events, we can look up the client name when it receives pointer
|
||||
focus or keyboard focus and cache it in the device.
|
||||
|
||||
- Server must know which id to send when passing object references
|
||||
in events. We could say that any object we're passing to a
|
||||
client must have a server id, and each client has a server id ->
|
||||
client id hash.
|
||||
|
||||
- When a surface is the size of the screen and on top, we can set the
|
||||
scanout buffer to that surface directly. Like compiz unredirect
|
||||
top-level window feature. Except it won't have any protocol state
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue