mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-04-06 07:15:47 -04: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
|
- 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:
|
- DnD issues:
|
||||||
|
|
||||||
Root window must send NULL type (to decline drop) or
|
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
|
that will participate in dnd. Or just assume client is not
|
||||||
participating until we receive an accept request.
|
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:
|
- Pointer image issue:
|
||||||
|
|
||||||
- A touch input device doesn't have a pointer; indicate that
|
- 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
|
surface-relative (menus), 2) pointer-relative (tooltips and
|
||||||
right-click menus) or 3) server-decides (all other top-levels).
|
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
|
- 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
|
scanout buffer to that surface directly. Like compiz unredirect
|
||||||
top-level window feature. Except it won't have any protocol state
|
top-level window feature. Except it won't have any protocol state
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue