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
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>
37
* = KWin is compliant, but something else needs checking (e.g. Qt)
42
NETWM spec compliance (whole document):
44
======================
47
+ 2.3. Feature not implemented.
48
+ 2.4. Feature not implemented.
50
+ 2. (rest of the section)
52
This property is complete in the sence that all implemented properties
54
CHECKME : check it's complete
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
59
Note that xprop lists only first element in WINDOW type properties.
61
Note that KWin does not use the virtual root windows technique,
62
so it doesn't set _NET_VIRTUAL_ROOTS at all.
64
KWin doesn't implement large desktops, so it ignores
65
the message, and only sets the property to the screen size.
67
KWin doesn't implement viewports, so it correctly sets
68
the property to (0,0) pairs and ignores the message.
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.
79
KWin doesn't use the virtual roots technique for creating virtual
80
desktops, so it doesn't set the property.
86
Due to implementation details KWin actually allows moving or resizing
87
by keyboard when requested to be done by mouse, and vice versa.
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?
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.
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.
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
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.
132
Property is not used in KWin.
133
Kicker needs to be checked.
135
KWin's handling of the property is correct.
136
Qt should be checked.
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.
145
The urgency hint is mapped to the _NET_WM_DEMANDS_ATTENTION flag.
147
Qt often sets maximum size smaller than minimum size. This seems to be caused
148
by delayed layout calculations.
150
Kicker should be checked.
152
+ 7. (rest of the section)
155
+ _NET_WM_FULLSCREEN_MONITORS Status: Done.
156
+----------------------------------------------------------------+
157
| The Window Manager MUST keep this list updated to reflect the |
158
| current state of the window. The application window sends this |
159
| in a ClientMessage to the root window. KWin persists this info |
160
| both internally as well as against the application window. |
161
| This data is used to spread the fullscreen application window |
162
| across the requested topology, if valid. |
163
+----------------------------------------------------------------+
165
ICCCM spec compliance (whole document):
167
======================
170
KWin uses KWIN_RUNNING atom that's missing the leading underscore.
171
Some parts of KDE perhaps may be missing the leading underscore.
174
+ 1. (rest of the section)
175
+ 2.8. kmanagerselection.* in kdecore
176
+ 2. (rest of the section)
178
* - patch sent to TT to make QClipboard sufficiently compliant
180
Feature not supported, obsolete.
184
Used as a fallback for _NET_WM_NAME.
186
Used as a fallback for _NET_WM_ICON_NAME.
188
? - PSize, PPosition, USize, UPosition
189
? - clients - Qt simply sets both
190
+ - PWinGravity - window geometry constraints have higher priority than gravity
191
/ - PBaseSize - PMinSize is not used as a fallback for size increments
194
+ - input - see 4.1.7
196
+ - icon - feature not supported
198
+ - urgency - mapped to _NET_WM_DEMANDS_ATTENTION
199
/ 4.1.2.5 - it should be checked it's used correctly in Kicker etc.
200
/ 4.1.2.6 - should be checked
201
NETWM section 7.3. is supported too, even though it's a slight ICCCM violation.
205
+ 4.1.2.9 - handled by Xlib call
208
Feature not supported (4.1.2.4 - icons)
209
* 4.1.4 it should be checked Qt/KDE clients handle this properly
215
KWin only installs colormap required by the active window.
217
Feature not supported, except for WM_ICON_NAME as a fallback for _NET_WM_ICON_NAME.
220
Window groups are only used for supporting NETWM section 7.3.
223
Qt doesn't set revert-to to Parent.
224
+ 4.2.8.1 frozen clients may be XKill-ed upon a user request though
227
+ 4. (rest of the section)
228
+ 5.3. not KWin related
229
+ 5. (rest of the section )
231
? 6.2. clients thing - Qt perhaps should force rule 2.
233
? 6. (rest of the section)
234
+ 7. - no idea what it is, but it doesn't seem to be KWin related
238
KDE-specific extensions (for completeness):
241
==========================================================================
242
_KDE_WM_CHANGE_STATE root window message
243
_KDE_NET_SYSTEM_TRAY_WINDOWS root window property
244
_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR window property
245
_KDE_NET_WM_FRAME_STRUT window property
248
- has no vendor prefix even though it's not part of the spec
249
_NET_WM_STATE_STAYS_ON_TOP
251
- has no vendor prefix even though it's not part of the spec
252
- deprecated in favor of _NET_WM_STATE_KEEP_ABOVE
253
_KDE_NET_WM_WINDOW_TYPE_OVERRIDE
254
- window type, makes the window borderless
255
- unclear semantics, used also for fullscreen windows
256
- deprecated in favor of other window types
258
==========================================================================