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