Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / workspace / kwin / COMPLIANCE
blobe63455e4f61cc770c17ca57ad4362eff68ee2980
1 W A R N I N G: 
2 --------------
3 This document is a work in progress and is in no way complete or accurate!
4 Its current purpose is in aiding the KWin NetWM audit for a future KWin release.
6 NetWM Compliance Document:
7 ==========================
9 Listed below are all the NetWM (or EWM) hints decided upon on freedesktop.org 
10 (as of version 1.3draft, Nov 27, 2002) and KWin's current level of 
11 compliance with the spec. Some parts also involve the pager and clients which
12 this document will cater for as well where applicable.
14 If you modify the level of NetWM compliance (via modification of kwin/*,
15 kdecore/netwm.* or kdecore/kwin.* etc.), or notice any new hints that
16 were added after version 1.2, please modify this document appropriately.
17 Properties are ordered in the table in the order they are found in the 
18 specification. To list any important notes regarding a property, just 
19 add them as follows:
21 _NET_NUMBER_OF_DESKTOPS         root window property            done
22         +----------------------------------------------------------------+
23         | This property SHOULD be updated by the Window Manager to       |
24         | indicate the number of virtual desktops. KWin DOES update this |
25         | property when the pager changes the number of desktops.        |
26         +----------------------------------------------------------------+
28 If you have any questions regarding the specification, feel free to ask on the KWin 
29 mailing list <kwin@kde.org>, or on the Window Manager Spec list <wm-spec-list@gnome.org>.
30   -- Karol <kszwed@kde.org>
33  compliance :
34     - = none,
35     / = partial,
36     + = complete,
37     * = KWin is compliant, but something else needs checking (e.g. Qt)
38     ? = unknown
40   
42 NETWM spec compliance (whole document):
43 version 1.2
44 ======================
46 + 1.
47 + 2.3. Feature not implemented.
48 + 2.4. Feature not implemented.
49 + 2.5.
50 + 2. (rest of the section)
51 + 3.1.
52         This property is complete in the sence that all implemented properties
53         are listed here.
54         CHECKME : check it's complete
55 / 3.2.
56         The spec requires that _NET_CLIENT_LIST contains the windows in their
57         initial mapping order, which is currently not true for NET::Desktop
58         windows.
59         Note that xprop lists only first element in WINDOW type properties.
60 + 3.3.
61         Note that KWin does not use the virtual root windows technique,
62         so it doesn't set _NET_VIRTUAL_ROOTS at all.
63 + 3.4.
64         KWin doesn't implement large desktops, so it ignores
65         the message, and only sets the property to the screen size.
66 + 3.5.  
67         KWin doesn't implement viewports, so it correctly sets
68         the property to (0,0) pairs and ignores the message.
69 + 3.6.
70 + 3.7.
71 + 3.8.
72         KWin currently extends the message a bit, with data.l[0] being 1 or 2,
73         meaning 'from application'/'from pager', and data.l[1] contains
74         timestamp. This is used for focus stealing prevention purposes, and
75         will be proposed for next version of the spec.
76 + 3.9.
77 + 3.10.
78 + 3.11.
79         KWin doesn't use the virtual roots technique for creating virtual
80         desktops, so it doesn't set the property.
81 - 3.12.
82 - 3.13.
83 + 4.1.
84 + 4.2.
85 + 4.3.
86         Due to implementation details KWin actually allows moving or resizing
87         by keyboard when requested to be done by mouse, and vice versa.
88 + 5.1.
89 + 5.2.
90 + 5.3.
91 + 5.4.
92 + 5.5.
93 / 5.6.  The handling of _NET_WM_WINDOW_TYPE itself is correct and complete.
94         Supported window types: DESKTOP, DOCK, TOOLBAR, MENU, UTILITY,
95         SPLASH, DIALOG, NORMAL.
96         UTILITY should get better placement.
97         TOOLBAR - many parts in KDE still treat this as "tool" window.
98             - should the decoration be shown for the toolbars?
99         KDE extensions:
100             _KDE_NET_WM_WINDOW_TYPE_TOPMENU - this is used for implementing
101                 standalone menubars for applications. Only the menubar
102                 that is transient for the currently active window will be shown.
103                 See KMenuBar class in libkdeui for details.
104             _KDE_NET_WM_WINDOW_TYPE_OVERRIDE - this seems to mean "this window
105             should be borderless", but it's actually used also for other
106             things, like fullscreen windows. The plan is to get rid of this
107             flawed thing as soon as possible.
108 / 5.7.
109         The handling of _NET_WM_STATE itself is correct and complete.
110         Supported states: MODAL, MAXIMIZED_VERT, MAXIMIZED_HORZ, SHADED,
111             SKIP_TASKBAR, SKIP_PAGER, HIDDEN, ABOVE, BELOW.
112         STICKY is not supported, because KWin doesn't implement viewports.
113         BELOW - in order to make 'allow windows to cover the panel' feature
114             in Kicker work KWin interprets this state a bit differently
115             for DOCK windows. While normal DOCK windows are in their
116             extra layer above normal windows, making them BELOW doesn't
117             move them below normal windows, but only to the same layer, so
118             that windows can hide Kicker, but Kicker can be also raised
119             above the windows. A bit hacky, but it's not really against
120             the spec, and I have no better idea.
121         KDE extensions:
122             _NET_WM_STATE_STAYS_ON_TOP - has the same meaning like ABOVE,
123                 and is deprecated in favour of it; it lacks the _KDE prefix
124 * 5.8.
125         The handling of _NET_WM_ALLOWED_ACTIONS itself is correct and complete.
126         Supported actions: MOVE, RESIZE, MINIMIZE, SHADE, MAXIMIZE_HORZ,
127             MAXIMIZE_VERT, CHANGE_DESKTOP, CLOSE
128         STICK is not supported, because KWin does not implement viewports.
129         Kicker etc. need to be updated.
130 + 5.9.
131 * 5.10.
132         Property is not used in KWin.
133         Kicker needs to be checked.
134 * 5.11.
135         KWin's handling of the property is correct.
136         Qt should be checked.
137 + 5.12.
138 - 5.13.
139         Property is not used in KWin, KWin never provides icons for iconified windows.
140         Kicker or its taskbar don't set it either. However, the property is flawed,
141         and should be replaced by manager selection or similar mechanism.
142 + 6.1.
143 + 6. (rest)
144 + 7.4.
145         The urgency hint is mapped to the _NET_WM_DEMANDS_ATTENTION flag.
146 * 7.5.
147         Qt often sets maximum size smaller than minimum size. This seems to be caused
148         by delayed layout calculations.
149 * 7.6.
150         Kicker should be checked.
151 ? 7.7.
152 + 7. (rest of the section)
154 ICCCM spec compliance (whole document):
155 version 2.0
156 ======================
158 / 1.2.3.
159         KWin uses KWIN_RUNNING atom that's missing the leading underscore.
160         Some parts of KDE perhaps may be missing the leading underscore.
161 / 1.2.6.
162         Should be checked.
163 + 1. (rest of the section)
164 + 2.8. kmanagerselection.* in kdecore
165 + 2. (rest of the section)
166         Not a KWin thing.
167 *   - patch sent to TT to make QClipboard sufficiently compliant
168 + 3.
169         Feature not supported, obsolete.
170 + 4.1.1
171 + 4.1.2 (intro)
172 + 4.1.2.1
173         Used as a fallback for _NET_WM_NAME.
174 + 4.1.2.2
175         Used as a fallback for _NET_WM_ICON_NAME.
176 ? 4.1.2.3
177 ?    - PSize, PPosition, USize, UPosition
178 ?       - clients - Qt simply sets both
179 +    - PWinGravity - window geometry constraints have higher priority than gravity
180 /    - PBaseSize - PMinSize is not used as a fallback for size increments
181 +    - (the rest)
182 / 4.1.2.4
183 +    - input - see 4.1.7
184 +    - initial_state
185 +    - icon - feature not supported
186 +    - window_group
187 +    - urgency - mapped to _NET_WM_DEMANDS_ATTENTION
188 / 4.1.2.5 - it should be checked it's used correctly in Kicker etc.
189 / 4.1.2.6 - should be checked
190         NETWM section 7.3. is supported too, even though it's a slight ICCCM violation.
191 + 4.1.2.7
192 - 4.1.2.8
193         See 4.1.8.
194 + 4.1.2.9 - handled by Xlib call
195 + 4.1.3.1
196 + 4.1.3.2
197         Feature not supported (4.1.2.4 - icons)
198 * 4.1.4 it should be checked Qt/KDE clients handle this properly
199 / 4.1.5
200         This needs fixing.
201 + 4.1.6
202 + 4.1.7
203 - 4.1.8
204         KWin only installs colormap required by the active window.
205 - 4.1.9
206         Feature not supported, except for WM_ICON_NAME as a fallback for _NET_WM_ICON_NAME.
207 + 4.1.10
208 + 4.1.11
209         Window groups are only used for supporting NETWM section 7.3.
210 + 4.2.5
211 / 4.2.7
212         Qt doesn't set revert-to to Parent.
213 + 4.2.8.1 frozen clients may be XKill-ed upon a user request though
214 + 4.3
215 ? 4.4
216 + 4. (rest of the section)
217 + 5.3. not KWin related
218 + 5. (rest of the section )
219 ? 6.1. clients thing
220 ? 6.2. clients thing - Qt perhaps should force rule 2.
221 + 6.3.
222 ? 6. (rest of the section)
223 + 7. - no idea what it is, but it doesn't seem to be KWin related
224 + 8.
227 KDE-specific extensions (for completeness):
229 Property Name                           Type
230 ==========================================================================
231 _KDE_WM_CHANGE_STATE                    root window message
232 _KDE_NET_SYSTEM_TRAY_WINDOWS            root window property
233 _KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR      window property
234 _KDE_NET_WM_FRAME_STRUT                 window property
235 _NET_WM_CONTEXT_HELP
236     - Qt extension
237     - has no vendor prefix even though it's not part of the spec
238 _NET_WM_STATE_STAYS_ON_TOP
239     - KDE extension
240     - has no vendor prefix even though it's not part of the spec
241     - deprecated in favor of _NET_WM_STATE_KEEP_ABOVE
242 _KDE_NET_WM_WINDOW_TYPE_OVERRIDE
243     - window type, makes the window borderless
244     - unclear semantics, used also for fullscreen windows
245     - deprecated in favor of other window types
247 ==========================================================================