You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
356 lines
17 KiB
356 lines
17 KiB
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 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. | |
|
+----------------------------------------------------------------+ |
|
_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) |
|
_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 |
|
+----------------------------------------------------------------+ |
|
| After the WM_Sn (ICCCM) manager selection is implemented, it | |
|
| should be checked that the property is removed on withdrawal, | |
|
| but not on shutdown. | |
|
+----------------------------------------------------------------+ |
|
_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): |
|
|
|
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
|
|
|