3 - We need rotation information in the output (multiples of 90
4 degrees) and we'll need a way for a client to communicate that it
5 has rendered its buffer according to the output rotation. The
6 goal is to be able to pageflip directly to the client buffer, and
7 for that we need the client to render accordingly and the
8 compositor needs to know that it did.
10 - Atomicity. Currently a lot of the atomicity in Wayland relies on
11 how we batch up all requests in a protocol buffer and only flushes
12 in the "blockhandler" in the client. Consensus was that we need
13 something more reliable and explicit. The suggestion is that we
14 make surface.attach a synchronization point such that everything
15 before that is batched and applied atomically when the
16 surface.attach request comes in. For cases where we need atomicity
17 beyond a surface.attach, we can add an atomic grouping mechanism,
18 that can group together multiple surface.attach requests into a
19 bigger atomic change. To be researched a bit.
21 - We should make pointer sprites regular surfaces. Something like
22 input_device.set_sprite(surface). This also make client side
23 animated cursors simple/possible, since we now get a frame event
24 that can drive the animation.
26 - Maybe try to make remote wayland actually happen, to see if there
27 is something in the protocol/architecute that makes it harder than
30 - Key events need a bit more work/thinking/redesign. As it is we need
31 a mechanism to change and synchronize keymaps, repeat rates. But
32 as we started talking, we decided that we needed to go back and
33 research what other systems do instead of just essentially copying
34 the X model. Sending out unicode events in addition to keycode
35 events has a lot of benefits (OSK can send out unicode events
36 instead of fake keycode events, apps become much simpler...) Move
37 keymap handling and repeat to the server? Needs more research.
39 - Pointer axis events need modifiers (ctrl-scroll eg), but we either
40 need to send the modifier state with each axis/scroll event or send
41 keys down on pointer_focus and subsequent key events... or just key
42 events for modifier keys... or for the non-repeating subset?
44 - Add timestamp to touch_cancel, add touch id to touch_cancel (?)
46 - The output protocol needs to send all the ugly timing details for the modes.
50 - clipboard manager interface? what's needed? just notification
51 that the selection has gone away. should the clipboard manager be
52 able to take over the selection "seamlessly", ie, with the same
53 timestamp etc? Doesn't seem like we need that, the clipboard will
54 have to set a new data_source anyway, with the subset of mimetypes
55 it offers (the clipboad manager may only offer a subset of the
56 types offered by the original data_source)
58 The trouble is that when the clipboard manager sets a new data
59 source, we don't want to renew the timestamp and potentially reject
60 a newer "real" data source.
62 - mime-type guidelines for data_source (ie, both dnd and selection):
63 recommended types for text or images, types that a clipboard
64 manager must support, mime-types must be listed in preferred order
66 - we need a "no kb focus please" mechanism. Or should this be
67 implicit in a specific surface type?
71 - configure should provide dx_left, dx_right, dy_top, dy_bottom, or
72 dx, dy, width and height.
74 - move to workspace, keep on top, on all workspaces, minimize etc
75 requests for implementing client side window menu? or just make a
76 "show window menu" request to let the compositor display and manage
79 - window move and resize functionality for kb and touch.
81 - dnd loose ends: self-dnd: initiate dnd with a null data-source,
82 compositor will not offer to other clients, client has to know
83 internally what's offered and how to transfer data. no fd passing.
85 - Protocol for specifying title bar rectangle (for moving
86 unresponsive apps). Rectangle for close button, so we can popup
87 force-close dialog if application doesn't respond to ping event
88 when user clicks there. We could use the region mechanism here
91 - popup placement protocol logic.
93 - subsurface mechanism. we need this for cases where we would use an
94 X subwindow for gl or video other different visual type.
98 - Don't wl_display_iterate in eglSwapBuffer, send an eventfd fd?
100 - Land Robert Braggs EGL extensions: frame age, swap with damage
102 - Make it possible to share buffers from compositor to clients.
103 Tricky part here is how to indicate to EGL on the server side that
104 it should make an EGLImage available to a client. We'll need a
105 "create a wl_buffer for this EGLImage for this client" kind of
108 - Protocol for arbitrating access to scanout buffers (physically
109 contiguous memory). When a client goes fullscreen (or ideally as
110 the compositor starts the animation that will make it fullscreen)
111 we send a "give up your scanout buffer" to the current fullscreen
112 client (if any) and when the client acks that we send a "try to
113 allocate a scanout buffer now" event to the fullscreen-to-be
120 - Needs a mechanism to pass buffers to client.
122 buffer = drm.create_buffer(); /* buffer with stuff in it */
124 cache.upload(buffer, x, y, width, height, int hash)
126 drm.buffer: id, name, stride etc /* event to announce cache buffer */
128 cache.image: hash, buffer, x, y, stride /* event to announce
129 * location in cache */
131 cache.reject: hash /* no upload for you! */
133 cache.retire: buffer /* cache has stopped using buffer, please
134 * reupload whatever you had in that buffer */
136 - A "please suspend" event from the compositor, to indicate to an
137 application that it's no longer visible/active. Or maybe discard
138 buffer, as in "wayland discarded your buffer, it's no longer
139 visible, you can stop updating it now.", reattach, as in "oh hey,
140 I'm about to show your buffer that I threw away, what was it
141 again?". for wayland system compositor vt switcing, for example,
142 to be able to throw away the surfaces in the session we're
143 switching away from. for minimized windows that we don't want live
144 thumb nails for. etc.
150 - draw window decorations in gtkwindow.c
152 - Details about pointer grabs. wayland doesn't have active grabs,
153 menus will behave subtly different. Under X, clicking a menu
154 open grabs the pointer and clicking outside the window pops down
155 the menu and swallows the click. without active grabs we can't
156 swallow the click. I'm sure there much more...
160 - Investigate DirectFB on Wayland (or is that Wayland on DirectFB?)
162 - SDL port, bnf has work in progress here:
163 http://cgit.freedesktop.org/~bnf/sdl-wayland/
165 - libva + eglimage + kms integration
170 - A wayland settings protocol to tell clients about themes (icons,
171 cursors, widget themes), fonts details (family, hinting
172 preferences) etc. Just send all settings at connect time, send
173 updates when a setting change. Getting a little close to gconf
174 here, but could be pretty simple:
176 interface "settings":
177 event int_value(string name, int value)
178 event string_value(string name, string value)
180 but maybe it's better to just require that clients get that from
181 somewhere else (gconf/dbus).
186 - AF_WAYLAND - A new socket type. Eliminate compositor context
187 switch by making kernel understand enough of wayland that it can
188 forward input events as wayland events and do page flipping in
189 response to surface_attach requests:
191 - ioctl(wayland_fd, "surface_attach to object 5 should do a kms page
194 - what about multiple crtcs? what about frame event for other
197 - forward these input devices to the client
199 - "scancode 124 pressed or released with scan codes 18,22 and 30
200 held down gives control back to userspace wayland.
202 - what about maintaining cursor position? what about pointer
203 acceleration? maybe this only works in "client cursor mode",
204 where wayland hides the cursor and only sends relative events?
205 Solves the composited cursor problem. How does X show its
208 - Probably not worth it.