W A R N I N G: 
--------------
This document is a work in progress and is in no way complete or accurate!
Its current purpose is in aiding the KWin NetWM audit for a future KWin release.

NetWM Compliance Document:
==========================

Listed below are all the NetWM (or EWM) hints decided upon on freedesktop.org 
(as of version 1.3draft, Nov 27, 2002) and KWin's current level of 
compliance with the spec. Some parts also involve the pager and clients which
this document will cater for as well where applicable.

If you modify the level of NetWM compliance (via modification of kwin/*,
kdecore/netwm.* or kdecore/kwin.* etc.), or notice any new hints that
were added after version 1.2, please modify this document appropriately.
Properties are ordered in the table in the order they are found in the 
specification. To list any important notes regarding a property, just 
add them as follows:

_NET_NUMBER_OF_DESKTOPS		root window property		done
        +----------------------------------------------------------------+
	| This property SHOULD be updated by the Window Manager to 	 |
	| indicate the number of virtual desktops. KWin DOES update this |
	| property when the pager changes the number of desktops.	 |
	+----------------------------------------------------------------+

If you have any questions regarding the specification, feel free to ask on the KWin 
mailing list <kwin@kde.org>, or on the Window Manager Spec list <wm-spec-list@gnome.org>.
  -- Karol <kszwed@kde.org>


Property Name			Type				Compliance
==========================================================================

Root Window Properties (and Related Messages):

_NET_SUPPORTED			root window property		COMPLETE
	+----------------------------------------------------------------+
	| Please add all other supported _NET properties here            |
	| after they are implemented. This property is complete in the   |
	| sence that all implemented properties are listed here.	 |
	+----------------------------------------------------------------+
        CHECKME : check it's complete
_NET_CLIENT_LIST		root window property		PARTIAL
	+----------------------------------------------------------------+
	| With xprop it seems only one WinID is stored, whereas an array |
	| of all managed windows should be stored instead!               |
        | This is caused by xprop printing only first element of WINDOW  |
        | type properties, xprop has to be patched to see them all.      |
        | The spec requires this list contains the windows in their      |
        | initial mapping order, which is not true for NET::Desktop      |
        | windows.                                                       |
	+----------------------------------------------------------------+
_NET_CLIENT_LIST_STACKING	root window property		COMPLETE
	+----------------------------------------------------------------+
	| With xprop it seems only one WinID is stored, whereas an array |
	| of all managed windows should be stored instead!               |
        | This is caused by xprop printing only first element of WINDOW  |
        | type properties, xprop has to be patched to see them all.      |
	+----------------------------------------------------------------+
_NET_NUMBER_OF_DESKTOPS		root window property + message	COMPLETE
	+----------------------------------------------------------------+
	| _NET_VIRTUAL_ROOTS MUST be set to the new number of desktop    |
	| virtual root window IDs. Currently this property is NOT set,   |
	| but a WM SHOULD set this property and respond to the message.  |
	| We have NETRootInfo::setVirtualRoots() but we don't use it!!   |
        | This is because KWin doesn't use the virtual root windows      |
        | technique for creating virtual desktops, so it doesn't have    |
        | to set this property.                                          |
	+----------------------------------------------------------------+
_NET_DESKTOP_GEOMETRY		root window property + message	COMPLETE
	+----------------------------------------------------------------+
        | KWin doesn't implement large desktops, so it ignores           |
        | the message, and only sets the property to the screen size     |
	+----------------------------------------------------------------+
_NET_DESKTOP_VIEWPORT		root window property + message	COMPLETE
	+----------------------------------------------------------------+
        | KWin doesn't implement viewports, so it correctly sets         |
        | the property to (0,0) pairs and ignores the message            |
	+----------------------------------------------------------------+
_NET_CURRENT_DESKTOP		root window property + message	COMPLETE
_NET_DESKTOP_NAMES		root window property		COMPLETE
_NET_ACTIVE_WINDOW		root window property + message	COMPLETE
_NET_WORKAREA			root window property		COMPLETE
	+----------------------------------------------------------------+
	| Work Area takes into account the _NET_WM_STRUT property set on |
	| client windows. I had a problem where _NET_NUMBER_OF_DESKTOPS  |
	| was 3, but _NET_WORKAREA had only two geometries set.          |
	| I need to investigate this -- Karol                            |
	+----------------------------------------------------------------+
_NET_SUPPORTING_WM_CHECK	root window property		COMPLETE
_NET_VIRTUAL_ROOTS		root window property		COMPLETE
	+----------------------------------------------------------------+
        | The spec requires this property to be set only for WMs using   |
        | the virtual roots technique for creating virtual desktops.     |
        | KWin doesn't use it, so it doesn't set the property.           |
	+----------------------------------------------------------------+
_NET_DESKTOP_LAYOUT (pager)	root window property		NIL
_NET_SHOWING_DESKTOP		root window property + message	NIL

Other Root Window Messages:

_NET_CLOSE_WINDOW		root window message		COMPLETE
	+----------------------------------------------------------------+
        | KWin should use _NET_WM_PING and offer killing the client.     |
	+----------------------------------------------------------------+
_NET_MOVERESIZE_WINDOW		root window message		NIL
_NET_WM_MOVERESIZE		root window message		PARTIAL
	+----------------------------------------------------------------+
        | Lacks keyboard modes and button support.                       |
	| Direction::KeyboardSize + KeyboardMove are in kdecore.         |
	+----------------------------------------------------------------+

Application Window Properties:

_NET_WM_NAME			window property			COMPLETE
	+----------------------------------------------------------------+
        | Set by clients                                                 |
	+----------------------------------------------------------------+
_NET_WM_VISIBLE_NAME		window property                 COMPLETE
_NET_WM_ICON_NAME		window property			PARTIAL
	+----------------------------------------------------------------+
        | Doesn't seem to be used at all, not even as a fallback         |
        | in KWin::icon(). Seems to be obsoleted by _NET_WM_ICON anyway? |
        | The code in netwm.cpp itself seems to be correct.              |
	+----------------------------------------------------------------+
_NET_WM_VISIBLE_ICON_NAME	window property			PARTIAL
	+----------------------------------------------------------------+
        | The same like _NET_WM_ICON_NAME, but this property should be   |
        | set by the WM only if it uses different one than               |
        | _NET_WM_ICON_NAME. Since KWin doesn't use it at all, it's ok.  |
	+----------------------------------------------------------------+
_NET_WM_DESKTOP			window property + message	COMPLETE
_NET_WM_WINDOW_TYPE		window property			PARTIAL
	+----------------------------------------------------------------+
        | Set by clients, and the handling of _NET_WM_WINDOW_TYPE itself |
        | is compliant.                                                  |
	+----------------------------------------------------------------+
  _NET_WM_WINDOW_TYPE_DESKTOP	property value (atom)		COMPLETE
  _NET_WM_WINDOW_TYPE_DOCK	property value (atom)		COMPLETE
  _NET_WM_WINDOW_TYPE_TOOLBAR	property value (atom)		
	+----------------------------------------------------------------+
        | KWin knows this type, but in most places treats it as          |
        | Utility (="tool" windows, hence the obsolete TOOL)             |
        | Should we show the border for toolbars?                        |
	+----------------------------------------------------------------+
  _NET_WM_WINDOW_TYPE_MENU	property value (atom)		PARTIAL
	+----------------------------------------------------------------+
        | Qt doesn't support this type yet.                              |
        | Up to KDE3.0, this window type was incorrectly used            |
        | for the toplevel menubar, and not for torn-off menus. This was |
        | fixed in KDE3.1 by introducing _KDE_NET_WM_WINDOW_TYPE_TOPMENU |
        | and KWin tries to detect old KDE apps using the old type.      |
	+----------------------------------------------------------------+
  _NET_WM_WINDOW_TYPE_UTILITY	property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Support is only in kdecore.                                    |
	+----------------------------------------------------------------+
  _NET_WM_WINDOW_TYPE_SPLASH	property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Support is only in kdecore.                                    |
	+----------------------------------------------------------------+
  _NET_WM_WINDOW_TYPE_DIALOG	property value (atom)
  _NET_WM_WINDOW_TYPE_NORMAL	property value (atom)		
_NET_WM_STATE			window property + message			
  _NET_WM_STATE_MODAL		property value (atom)		
  _NET_WM_STATE_STICKY		property value (atom)		COMPLETE
	+----------------------------------------------------------------+
        | KWin doesn't implement large desktops, so this state is        |
        | ignored. Note that 'sticky' here is not 'on all desktops'.     |
	+----------------------------------------------------------------+
  _NET_WM_STATE_MAXIMIZED_VERT	property value (atom)		COMPLETE
  _NET_WM_STATE_MAXIMIZED_HORZ	property value (atom)		COMPLETE
  _NET_WM_STATE_SHADED		property value (atom)		
  _NET_WM_STATE_SKIP_TASKBAR	property value (atom)		PARTIAL
	+----------------------------------------------------------------+
        | Support of this state itself is correct, but it's misused      |
        | for working around(?) some problems with the ICCCM             |
        | non-compliant handling of WM_STATE (at least I think).         |
	+----------------------------------------------------------------+
  _NET_WM_STATE_SKIP_PAGER	property value (atom)		COMPLETE
  _NET_WM_STATE_HIDDEN		property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Done in kdecore/netwm.cpp. Implementation required in KWin.    |
	+----------------------------------------------------------------+
  _NET_WM_STATE_FULLSCREEN	property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Done in kdecore/netwm.cpp. Implementation required in KWin.    |
	+----------------------------------------------------------------+
  _NET_WM_STATE_ABOVE		property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Done in kdecore/netwm.cpp. Implementation required in KWin.    |
	| Possibly a simple replace with STAYS_ON_TOP, but we need       |
	| proper layering.                                               |
	+----------------------------------------------------------------+
  _NET_WM_STATE_BELOW		property value (atom)		PARTIAL
	+----------------------------------------------------------------+
	| Done in kdecore/netwm.cpp. Implementation required in KWin.    |
	+----------------------------------------------------------------+
  _NET_WM_STATE_STAYS_ON_TOP	property value (atom)	
	+----------------------------------------------------------------+
	| This seems to be deprecated by _NET_WM_STATE_ABOVE and its use |
	| is non-standard as far as the current spec goes (although it   |
	| was 'pending' around July 2002). Should we leave this for      |
	| backwards compatibility (we have had it since Sept. 2000) or   |
	| replace it with STATE_ABOVE?                                   |
	| I suggest we deprecate it as we're using the _NET_WM namespace |
	| 'illegally' - Karol                                            |
	+----------------------------------------------------------------+
_NET_WM_ALLOWED_ACTIONS		window property			NIL
  _NET_WM_ACTION_MOVE		property value (atom)		
  _NET_WM_ACTION_RESIZE		property value (atom)		
  _NET_WM_ACTION_MINIMIZE	property value (atom)		
  _NET_WM_ACTION_MAXIMIZE_VERT	property value (atom)		
  _NET_WM_ACTION_MAXIMIZE_HORZ	property value (atom)		
  _NET_WM_ACTION_SHADE		property value (atom)		
  _NET_WM_ACTION_STICK		property value (atom)		
  _NET_WM_ACTION_FULLSCREEN	property value (atom)		
  _NET_WM_ACTION_CHANGE_DESKTOP	property value (atom)		
  _NET_WM_ACTION_CLOSE		property value (atom)		
_NET_WM_STRUT			window property			
_NET_WM_ICON_GEOMETRY		window property
_NET_WM_ICON			window property
        CHECKME : the code in netwm.cpp is incorrect on 64bit platforms?
_NET_WM_PID			window property			
	+----------------------------------------------------------------+
	| The ICCCM specified property WM_CLIENT_MACHINE must be set to  |
	| a fully qualified domain name of client's host to allow the WM |
	| to kill windows that do not respond to a _NET_WM_PING.         |
        | Note that due to gethostname(2) not returning FQDN on some     |
        | systems WM_CLIENT_MACHINE may not be actually FQDN.            |
	+----------------------------------------------------------------+
_NET_WM_HANDLED_ICONS		window property                 COMPLETE
	+----------------------------------------------------------------+
        | This property should be set by a taskbar, so it has nothing to |
        | do with KWin. But this property is broken anyway and should be |
        | replaced by a manager selection in future NETWM versions.      |
	+----------------------------------------------------------------+


Window Manager Protocols:

_NET_WM_PING			window property + message	NIL
===========================================================================


KDE-specific extensions (for completeness):

Property Name				Type
==========================================================================
_KDE_WM_CHANGE_STATE			root window message
_KDE_NET_SYSTEM_TRAY_WINDOWS		root window property
_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR	window property
_KDE_NET_WM_FRAME_STRUT			window property

_NET_WM_WINDOW_TYPE additions:
  _KDE_NET_WM_WINDOW_TYPE_OVERRIDE	property value (atom)
  _KDE_NET_WM_WINDOW_TYPE_TOPMENU	property value (atom)
==========================================================================


Inter-Client Communication Conventions Manual (ICCCM) specs (for completeness):

Property Name		Type				Contents / Format
==========================================================================

Client properties:

WM_NAME			window property			String / 8
WM_ICON_NAME		window property			Text
WM_NORMAL_HINTS		window property			Window / 32
WM_HINTS		window property			WM_HINTS / 32
WM_CLASS		window property			Text
WM_TRANSIENT_FOR	window property			WM_ICON_SIZE / 32
WM_PROTOCOLS		window property			Atom / 32
WM_COLORMAP_WINDOWS	top-level window property	WM_STATE / 32
WM_CLIENT_MACHINE	window property			Window / 32
WM_STATE				
WM_CLIENT_LEADER	window property			Window / 32
WM_CLIENT_ROLE		window property			String / 8

Window manager properties:

WM_STATE		window property			WM_STATE / 8?
WM_ICON_SIZE		window property			WM_ICON_SIZE / 8?
==========================================================================



NETWM spec compliance (whole document):
version 1.2
======================

1. COMPLETE
2.3. COMPLETE - FEATURE NOT IMPLEMENTED
2.4. COMPLETE - FEATURE NOT IMPLEMENTED
2.5. PARTIAL - minimized windows are not in IconicState - see _NET_WM_STATE_HIDDEN
2. (rest of the section) COMPLETE
3.1.
3.2. COMPLETE
3.3. COMPLETE
3.4. COMPLETE - FEATURE NOT IMPLEMENTED
3.5. COMPLETE - FEATURE NOT IMPLEMENTED
3.6. COMPLETE
3.7. COMPLETE
3.8. COMPLETE
3.9. COMPLETE
3.10. COMPLETE
3.11. COMPLETE - NOT USED
3.12.
3.13.
4.1. COMPLETE
4.2.
4.3. PARTIAL
5.1. COMPLETE
5.2. COMPLETE
5.3.
5.4.
5.5. PARTIAL
5.6. PARTIAL
5.7. PARTIAL
5.8. NIL
5.9.
5.10.
5.11.
5.12.
5.13. COMPLETE
6.1. NIL
7.3.
7.4.
7.6.
7.7.
7.9.
7.10.
7. (rest of the section) COMPLETE

ICCCM spec compliance (whole document):
version 2.0
======================

1.2.3. ?
1.2.6. ?
1. (rest of the section) COMPLETE
2.8.
2. (rest of the section) COMPLETE (selections, not a KWin thing)
3. COMPLETE - NOT SUPPORTED, OBSOLETE
4.
5. PARTIAL - patch sent to TT to make it COMPLETE (not KWin thing anyway)
5.3. COMPLETE - not KWin related
6.1. clients thing
6.2. clients thing
6.3. COMPLETE
6. (rest of the section) ?
7. COMPLETE - no idea what it is, but it doesn't seem to be KWin related
8. COMPLETE
