f501659886
svn path=/trunk/kdebase/kwin/; revision=196281
326 lines
16 KiB
Text
326 lines
16 KiB
Text
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 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. |
|
|
+----------------------------------------------------------------+
|
|
CHECKME : check that the list includes all 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. |
|
|
+----------------------------------------------------------------+
|
|
CHECKME : check updating of properties
|
|
_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 |
|
|
+----------------------------------------------------------------+
|
|
CHECKME : check its setting
|
|
_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
|
|
CHECKME : when changing the number of desktops, some names may
|
|
be lost (permanently), because of Workspace::saveDesktopSettings()
|
|
in Workspace::setNumberOfDesktops() - maybe the kcontrol module
|
|
should otherwise change the properties directly before changing
|
|
the number of desktops, so the save is correct?
|
|
CHECKME : don't save the names to kdeglobals
|
|
CHECKME : should be ok now
|
|
_NET_ACTIVE_WINDOW root window property + message COMPLETE
|
|
CHECKME : both when switching to a completely empty desktop or
|
|
when closing the last client on the desktop (kill kdesktop)
|
|
CHECKME : should be ok now
|
|
_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 |
|
|
+----------------------------------------------------------------+
|
|
CHECKME : most probably fixed in Workspace::setNumberOfDesktops()
|
|
CHECKME : actually, we don't have desktop-specific workareas!!
|
|
CHECKME : should be ok now
|
|
_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. |
|
|
+----------------------------------------------------------------+
|
|
|
|
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 PARTIAL
|
|
+----------------------------------------------------------------+
|
|
| After the WM_Sn (ICCCM) manager selection is implemented, it |
|
|
| should be checked that the property is removed on withdrawal, |
|
|
| but not on shutdown. |
|
|
| Also, Client::is_sticky should be obsoleted (removed if it |
|
|
| weren't BIC), and simply desktop == OnAllDesktops should be |
|
|
| used. |
|
|
+----------------------------------------------------------------+
|
|
_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
|
|
CHECKME : check that Kicker etc. set that they're on all desktops
|
|
_NET_WM_WINDOW_TYPE_TOOLBAR property value (atom)
|
|
_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) NIL
|
|
_NET_WM_WINDOW_TYPE_SPLASH property value (atom) NIL
|
|
_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)
|
|
_NET_WM_STATE_SKIP_PAGER property value (atom)
|
|
_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):
|
|
|
|
CHECKME : we should also check all sections for compliance
|
|
|
|
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):
|
|
======================
|
|
|
|
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
|