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.
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
19 ? = should it be done?
20 % = should be probably done later, during cleanups and preparations for being stable
24 =================================
27 - add generic support to use effect only for certain window types [Seli]
29 - window-specific rules need to apply to unmanaged windows as well (where applicable)
30 - some window-specific rules also related to compositing
33 / handling of window pixmaps for unmapped windows [Seli]
36 - shm mode needs support for more data formats than GL_BGRA
38 - check what works with XRender
42 - disable application effects when kwin can provide them, e.g. shadow/transparency
46 =================================
48 + suspend repaints if not visible or dpms is active
49 - there is already 'overlay_visible', but it still polls the mouse in such case
50 - it should turn off the timer
52 ? wait for decoration repaints
53 - it is sometimes visible that the window contents are painted first and the decoration
54 only afterwards with a small delay
55 ? - this has been already greatly improved by r632378, so it's maybe not worth it anymore
56 - maybe posted paint events need to be processed immediatelly, or maybe the compositing
57 code should not update the window until the decoration is finished painting
60 - there's 5ms grace period per repaint to avoid overloading the system with just compositing
61 and not letting the system do anything else - check and evaluate
63 * handle properly stacking order of deleted windows for showing in effects
65 * handle properly deleted windows that reappear (windowReadded() function?)
67 % during screensaving, do no let non-screensaver windows show above screensaver
68 - kdesktop_lock watches for such things and raises again, but there's a small gap
70 % nvidia drivers by default use fake refresh rates as a workaround for some X limitations
71 - see the DynamicTwinView section in nvidia README
72 - this makes KWin repaint at a different rate than it should
74 / handling of window pixmap for unmapped windows
75 - currently it's kept around after a window is unmapped
76 * - but it's still discarded on e.g. resize - how to solve this?
77 * - windows could be unmapped but quickly mapped back when a live thumbnail is needed
79 * window grouping is not implemented for unmanaged windows (used e.g. by DimInactive)
81 % clean up and sort out shortcuts so that they don't conflict and make sense
83 ? hidden previews currently needs input shape extension, otherwise the window can possibly interfere
84 - not very likely though, so is this worth bothering at all?
88 =================================
90 / Check/make it work with other gfx cards
94 - in SceneGL::Texture::findTarget() there is a hack that makes KWin work with XGL
95 without requiring KWin to be built against the libGL version that Compiz is
97 % - that may not be necessary somewhen later
98 - interesting observation: normally run glxgears performs somewhat poorly compared
99 to normal nvidia mode, changing glxgears to be override-redirect (i.e. no reparenting)
100 however makes glxgears to be even faster than without any compositing at all,
101 in this case however kwin's redrawing speed drops somewhat
106 / GL_ARB_texture_rectangle vs GL_ARB_texture_non_power_of_two
107 % - works; bugs in tfp_mode with power_of_two textures
108 - ati (others?): power_of_two windows are drawn white unless non-tfp_mode
109 is forced in findTextureTarget()
111 % bindTexture() optimize copied areas
112 - right now bindTexture() updates every damaged area and resets the window damage
113 - it might make things faster to update only areas that need to be repainted
114 and keep the rest damaged until needed
116 % clipping optimization
117 - like XRender code has paintTransformedScreen(), avoid painting parts that are
118 obscured (makes a difference with many windows open)
119 - http://lists.kde.org/?l=kwin&m=116585618111882&w=2
121 ! shm mode needs support for more data formats than GL_BGRA
122 - http://www.xfree86.org/current/glTexImage2D.3.html
123 - this now works for 16bpp, but maybe not 15bpp or less
126 + support for __GL_YIELD=NOTHING and LIBGL_ALWAYS_INDIRECT should be possibly less hacky
127 - or at least not hardcoded (although, does that matter?)
128 - (http://lists.kde.org/?l=kwin&m=116439615124838&w=2)
129 - (http://lists.freedesktop.org/archives/xorg/2006-December/020323.html)
133 ==============================
135 + SceneXrender::paintTransformedScreen() doesn't handle properly extending of painted area
136 in window's pre-paint - see the transformedShape() comment
137 - and currently seems to be generally broken
140 Effects framework TODO
141 ==============================
143 * more notification functions for effects are needed
144 - currently there are only very few notification functions (windowAdded, windowActivated,...)
145 ! - window state changes
148 / support for grabbing input
149 - during some more complicated effects, input (at least mouse) should be disabled,
150 because currently there is no way to do input redirection
152 + EffectWindow should be completely opaque when kept as the only API for effects
155 + EffectsHandler should not have virtuals but should instead use an internal object
156 for communication with KWin core, so that adding new functions doesn't break BC all the time
158 + API for tabbox for effects should be cleaned up
160 * check Scene::updateTimeDiff() - should the time be 0 or 1?
162 % post calls are probably not necessary by now (http://lists.kde.org/?t=117770818100003&r=1&w=2)
164 % consider using http://lists.kde.org/?l=kwin&m=118094888517415&w=2 for notification functions
166 % API cleanups and making sure it will stay backwards compatible
169 ===============================
171 ! add reloadConfig() to effects
172 - currently changing the global animation speed in the kcm does not change effect
174 + minimize/shade effects
175 - to replace the ones from KWin core
177 - check support for it and the avoid_animation flag
179 - shading will probably need special support
182 - enlarge a portion of the screen
183 - Should it react to meta+wheel?
186 * - should be triggered by ksmserver somehow
188 + effects to replace widget effects (the ones in the Effects tab in "kcmshell style")
191 - should also detect kwin being idle - it probably should detect in pre-paint that the only
192 damage is its own area and avoid damaging for the next round in post-paint
195 + - should scale in from e.g. 80%, not 0%, to just "pop up"
197 + effect for drawing attention to windows demanding attention
200 * DimInactive flickers when switching between windows (temporarily no window becomes active)
202 - focus effect (windows waves a little when it gets focus)
205 + - follow the shape of the window (currently is disabled completely using the hasOwnShadow() hack)
207 + window thumbnails directly in panel
208 - i.e. the panel (taskbar?) could show window previews directly, without tooltips
214 + various caching - there are many things that usually don't change and could gain few fps (is it worth it?)
215 - Workspace::performCompositing()
216 - WindowQuadList could perhaps cache quads split by contents/decoration (for select())
218 + avoiding X roundtrips each compositing pass
219 - right now it at least always polls the mouse position and the current stacking order