Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / workspace / kwin / COMPOSITE_TODO
blob5e80a5b7491dcdea4184f82bedf7045909b7f270
1 This file lists TODO items for the compositing code.
3 See file COMPOSITE_HOWTO for setting up kwin_composite.
4 See file HACKING for details on developing KWin, including building
5     the kwin_composite branch.
6 See effects/howto.* for a HOWTO on writting effects.
7 See documentation in source (mainly in scene.cpp) for description
8     of the design of the compositing framework.
10 TODO
11 =================================
13 * = not done, will be either done by me, or should be at least discussed first with me
14 + = not done, I don't plan on doing it that soon
15     - in other words, these should be the best ones for you if you want to help
16 ! = like +, but they should be relatively simple
17     - in other words, these should be the best if you want to get started with the code
18 / = work in progress
19 ? = should it be done?
20 % = should be probably done later, during cleanups and preparations for being stable
23 KDE 4.0 TODO
24 =================================
26 - release notes document
28 - effects (to do)
29     - add generic support to use effect only for certain window types [Seli]
30     - shadow
31         - xrender mode
32     - desktopgrid
33         - should preserve aspect ratio (as an option?)
34     - zoom
35         - it should react on Meta+wheel ?
37 - window-specific rules need to apply to unmanaged windows as well (where applicable)
38 - some window-specific rules also related to compositing
39     - opacity
41 / handling of window pixmaps for unmapped windows [Seli]
42   - config option?
43   - switching virtual desktops can be slow because of this as well, maybe HiddenPreviews
44       option should consider this (and be renamed to something more suitable)
46 - shm mode needs support for more data formats than GL_BGRA
48 - check what works with XRender
50 - documentation
52 - disable application effects when kwin can provide them, e.g. shadow/transparency
55 General TODO
56 =================================
58 + suspend repaints if not visible or dpms is active
59     - there is already 'overlay_visible', but it still polls the mouse in such case
60     - it should turn off the timer
62 ? wait for decoration repaints
63     - it is sometimes visible that the window contents are painted first and the decoration
64         only afterwards with a small delay
65 ?       - this has been already greatly improved by r632378, so it's maybe not worth it anymore
66     - maybe posted paint events need to be processed immediatelly, or maybe the compositing
67         code should not update the window until the decoration is finished painting
69 % paint throttling
70     - there's 5ms grace period per repaint to avoid overloading the system with just compositing
71         and not letting the system do anything else - check and evaluate 
73 * handle properly stacking order of deleted windows for showing in effects
75 * handle properly deleted windows that reappear (windowReadded() function?)
77 % during screensaving, do no let non-screensaver windows show above screensaver
78     - kdesktop_lock watches for such things and raises again, but there's a small gap
80 % nvidia drivers by default use fake refresh rates as a workaround for some X limitations
81     - see the DynamicTwinView section in nvidia README
82     - this makes KWin repaint at a different rate than it should
84 / handling of window pixmap for unmapped windows
85     - currently it's kept around after a window is unmapped
86 *       - but it's still discarded on e.g. resize - how to solve this?
87 *   - windows could be unmapped but quickly mapped back when a live thumbnail is needed
89 * window grouping is not implemented for unmanaged windows (used e.g. by DimInactive)
91 % clean up and sort out shortcuts so that they don't conflict and make sense
93 ? hidden previews currently needs input shape extension, otherwise the window can possibly interfere
94     - not very likely though, so is this worth bothering at all?
96 + hidden preview has two modes unimplemented
98 - global setting for animation speed?
100 - effects (to do)
101     - effect for windows demanding attention
102         - rays? ripples?
105 OpenGL TODO
106 =================================
108 / Check/make it work with other gfx cards
110 % Xgl support
111     - should work
112     - in SceneGL::Texture::findTarget() there is a hack that makes KWin work with XGL
113         without requiring KWin to be built against the libGL version that Compiz is
114         built against
115 %       - that may not be necessary somewhen later
116     - interesting observation: normally run glxgears performs somewhat poorly compared
117         to normal nvidia mode, changing glxgears to be override-redirect (i.e. no reparenting)
118         however makes glxgears to be even faster than without any compositing at all,
119         in this case however kwin's redrawing speed drops somewhat
121 % AIGLX support
122     - should work
124 / GL_ARB_texture_rectangle vs GL_ARB_texture_non_power_of_two
125 %   - works; bugs in tfp_mode with power_of_two textures
126         - ati (others?): power_of_two windows are drawn white unless non-tfp_mode
127             is forced in findTextureTarget()
129 % bindTexture() optimize copied areas
130     - right now bindTexture() updates every damaged area and resets the window damage
131     - it might make things faster to update only areas that need to be repainted
132         and keep the rest damaged until needed
134 % clipping optimization
135     - like XRender code has paintTransformedScreen(), avoid painting parts that are
136         obscured (makes a difference with many windows open)
137     - http://lists.kde.org/?l=kwin&m=116585618111882&w=2
139 ! shm mode needs support for more data formats than GL_BGRA
140     - http://www.xfree86.org/current/glTexImage2D.3.html
141     - this now works for 16bpp, but maybe not 15bpp or less
142     - endian issues?
144 + support for __GL_YIELD=NOTHING and LIBGL_ALWAYS_INDIRECT should be possibly less hacky
145     - or at least not hardcoded (although, does that matter?)
146     - (http://lists.kde.org/?l=kwin&m=116439615124838&w=2)
147     - (http://lists.freedesktop.org/archives/xorg/2006-December/020323.html)
150 XRender TODO
151 ==============================
153 + SceneXrender::Window::performPaint() doesn't use saturation
154 + SceneXrender::Window::performPaint() doesn't use brightness
156 + SceneXrender::paintTransformedScreen() doesn't handle properly extending of painted area
157     in window's pre-paint - see the transformedShape() comment
160 Effects framework TODO
161 ==============================
163 * more notification functions for effects are needed
164     - currently there are only very few notification functions (windowAdded, windowActivated,...)
165 !   - window state changes
166     ? more
168 / shadows
170 / support for grabbing input
171     - during some more complicated effects, input (at least mouse) should be disabled,
172         because currently there is no way to do input redirection
174 + EffectWindow should be completely opaque when kept as the only API for effects
175     - no inlines, etc.
177 + API for tabbox for effects should be cleaned up
179 * check Scene::updateTimeDiff() - should the time be 0 or 1?
181 % post calls are probably not necessary by now (http://lists.kde.org/?t=117770818100003&r=1&w=2)
183 % consider using http://lists.kde.org/?l=kwin&m=118094888517415&w=2 for notification functions
185 % API cleanups and making sure it will stay backwards compatible
188 Effects TODO
189 ===============================
191 + minimize/shade effects
192     - to replace the ones from KWin core
193 /       - minimizing
194             - check support for it and the avoid_animation flag
195 +       - shading
196             - shading will probably need special support
198 / zoom effect
199     - enlarge a portion of the screen
201 + logout effect
202 *   - should be triggered by ksmserver somehow
204 + effects to replace widget effects (the ones in the Effects tab in "kcmshell style")
206 / showfps effect
207     - should also detect kwin being idle - it probably should detect in pre-paint that the only
208         damage is its own area and avoid damaging for the next round in post-paint
210 ? other effects
212 + virtual desktop change effects
213 +   - ... yes, you guessed it, the cube
215 / present windows
216 +    - option to show windows with relative sizes to each other
218 / scalein
219 +    - should scale in from e.g. 80%, not 0%, to just "pop up"
221 + effect for drawing attention to windows demanding attention
223 * DimInactive flickers when switching between windows (temporarily no window becomes active)
225 - focus effect (windows waves a little when it gets focus)
227 + shadow
228 +   - make work with xrender
229 +   - follow the shape of the window (currently is disabled completely using the hasOwnShadow() hack)
231 / desktopgrid
232 +   - there's a bug that causes overlapping windows be shown also on desktops painted sooner than the window's desktop
233         - needs clipping (and that probably needs support for cumulating clipping)
234 !   - make desktop borders distinctive (i.e. paint a grid), to make it more visible that desktops are still separate