connection: reserve id on incoming new object
[profile/ivi/wayland.git] / TODO
1 Core wayland protocol
2
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.
9
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.
20
21  - Maybe try to make remote wayland actually happen, to see if there
22    is something in the protocol/architecture that makes it harder than
23    it should be.
24
25  - Add timestamp to touch_cancel, add touch id to touch_cancel (?)
26
27  - The output protocol needs to send all the ugly timing details for the modes.
28
29 ICCCM
30
31  - mime-type guidelines for data_source (ie, both dnd and selection):
32    recommended types for text or images, types that a clipboard
33    manager must support, mime-types must be listed in preferred order
34
35  - we need a "no kb focus please" mechanism.  Or should this be
36    implicit in a specific surface type?
37
38 EWMH
39
40  - configure should provide dx_left, dx_right, dy_top, dy_bottom, or
41    dx, dy, width and height.
42
43  - move to workspace, keep on top, on all workspaces, minimize etc
44    requests for implementing client side window menu? or just make a
45    "show window menu" request to let the compositor display and manage
46    a popup window?
47
48  - window move and resize functionality for kb and touch.
49
50  - Protocol for specifying title bar rectangle (for moving
51    unresponsive apps).  Rectangle for close button, so we can popup
52    force-close dialog if application doesn't respond to ping event
53    when user clicks there.  We could use the region mechanism here
54    too.
55
56  - popup placement protocol logic.
57
58  - subsurface mechanism.  we need this for cases where we would use an
59    X subwindow for gl or video other different visual type.
60
61 EGL/gbm
62
63  - Don't wl_display_iterate in eglSwapBuffer, send an eventfd fd?
64
65  - Land Robert Braggs EGL extensions: frame age, swap with damage
66
67  - Make it possible to share buffers from compositor to clients.
68    Tricky part here is how to indicate to EGL on the server side that
69    it should make an EGLImage available to a client.  We'll need a
70    "create a wl_buffer for this EGLImage for this client" kind of
71    entry point.
72
73  - Protocol for arbitrating access to scanout buffers (physically
74    contiguous memory).  When a client goes fullscreen (or ideally as
75    the compositor starts the animation that will make it fullscreen)
76    we send a "give up your scanout buffer" to the current fullscreen
77    client (if any) and when the client acks that we send a "try to
78    allocate a scanout buffer now" event to the fullscreen-to-be
79    client.
80
81 Misc
82
83  - glyph cache
84
85     - Needs a mechanism to pass buffers to client.
86
87       buffer = drm.create_buffer(); /* buffer with stuff in it */
88
89       cache.upload(buffer, x, y, width, height, int hash)
90
91       drm.buffer: id, name, stride etc /* event to announce cache buffer */
92
93       cache.image: hash, buffer, x, y, stride /* event to announce
94                                               * location in cache */
95
96       cache.reject: hash   /* no upload for you! */
97
98       cache.retire: buffer /* cache has stopped using buffer, please
99                             * reupload whatever you had in that buffer */
100
101  - A "please suspend" event from the compositor, to indicate to an
102    application that it's no longer visible/active.  Or maybe discard
103    buffer, as in "wayland discarded your buffer, it's no longer
104    visible, you can stop updating it now.", reattach, as in "oh hey,
105    I'm about to show your buffer that I threw away, what was it
106    again?".  for wayland system compositor vt switcing, for example,
107    to be able to throw away the surfaces in the session we're
108    switching away from.  for minimized windows that we don't want live
109    thumb nails for. etc.
110
111 Clients and ports
112
113  - port gtk+
114
115     - draw window decorations in gtkwindow.c
116
117     - Details about pointer grabs. wayland doesn't have active grabs,
118       menus will behave subtly different.  Under X, clicking a menu
119       open grabs the pointer and clicking outside the window pops down
120       the menu and swallows the click.  without active grabs we can't
121       swallow the click.  I'm sure there much more...
122
123     - dnd, copy-paste
124
125  - Investigate DirectFB on Wayland (or is that Wayland on DirectFB?)
126
127  - SDL port, bnf has work in progress here:
128    http://cgit.freedesktop.org/~bnf/sdl-wayland/
129
130  - libva + eglimage + kms integration
131
132
133 Ideas
134
135  - A wayland settings protocol to tell clients about themes (icons,
136    cursors, widget themes), fonts details (family, hinting
137    preferences) etc.  Just send all settings at connect time, send
138    updates when a setting change.  Getting a little close to gconf
139    here, but could be pretty simple:
140
141      interface "settings":
142        event int_value(string name, int value)
143        event string_value(string name, string value)
144
145    but maybe it's better to just require that clients get that from
146    somewhere else (gconf/dbus).
147
148
149 Crazy ideas
150
151  - AF_WAYLAND - A new socket type.  Eliminate compositor context
152    switch by making kernel understand enough of wayland that it can
153    forward input events as wayland events and do page flipping in
154    response to surface_attach requests:
155
156     - ioctl(wayland_fd, "surface_attach to object 5 should do a kms page
157                          flip on ctrc 2");
158
159     - what about multiple crtcs? what about frame event for other
160       clients?
161
162     - forward these input devices to the client
163
164     - "scancode 124 pressed or released with scan codes 18,22 and 30
165        held down gives control back to userspace wayland.
166
167     - what about maintaining cursor position? what about pointer
168       acceleration?  maybe this only works in "client cursor mode",
169       where wayland hides the cursor and only sends relative events?
170       Solves the composited cursor problem.  How does X show its
171       cursor then?
172
173     - Probably not worth it.