|
|
|
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>
|
|
|
|
|
|
|
|
(
|
|
|
|
compliance :
|
|
|
|
- = none,
|
|
|
|
/ = partial,
|
|
|
|
+ = complete,
|
|
|
|
* = KWin is compliant, but something else needs checking (e.g. Qt)
|
|
|
|
? = unknown
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
NETWM spec compliance (whole document):
|
|
|
|
version 1.2
|
|
|
|
======================
|
|
|
|
|
|
|
|
+ 1.
|
|
|
|
+ 2.3. Feature not implemented.
|
|
|
|
+ 2.4. Feature not implemented.
|
|
|
|
+ 2.5.
|
|
|
|
+ 2. (rest of the section)
|
|
|
|
+ 3.1.
|
|
|
|
This property is complete in the sence that all implemented properties
|
|
|
|
are listed here.
|
|
|
|
CHECKME : check it's complete
|
|
|
|
/ 3.2.
|
|
|
|
The spec requires that _NET_CLIENT_LIST contains the windows in their
|
|
|
|
initial mapping order, which is currently not true for NET::Desktop
|
|
|
|
windows.
|
|
|
|
Note that xprop lists only first element in WINDOW type properties.
|
|
|
|
+ 3.3.
|
|
|
|
Note that KWin does not use the virtual root windows technique,
|
|
|
|
so it doesn't set _NET_VIRTUAL_ROOTS at all.
|
|
|
|
+ 3.4.
|
|
|
|
KWin doesn't implement large desktops, so it ignores
|
|
|
|
the message, and only sets the property to the screen size.
|
|
|
|
+ 3.5.
|
|
|
|
KWin doesn't implement viewports, so it correctly sets
|
|
|
|
the property to (0,0) pairs and ignores the message.
|
|
|
|
+ 3.6.
|
|
|
|
+ 3.7.
|
|
|
|
+ 3.8.
|
|
|
|
KWin currently extends the message a bit, with data.l[0] being 1 or 2,
|
|
|
|
meaning 'from application'/'from pager', and data.l[1] contains
|
|
|
|
timestamp. This is used for focus stealing prevention purposes, and
|
|
|
|
will be proposed for next version of the spec.
|
|
|
|
+ 3.9.
|
|
|
|
+ 3.10.
|
|
|
|
+ 3.11.
|
|
|
|
KWin doesn't use the virtual roots technique for creating virtual
|
|
|
|
desktops, so it doesn't set the property.
|
|
|
|
- 3.12.
|
|
|
|
- 3.13.
|
|
|
|
+ 4.1.
|
|
|
|
+ 4.2.
|
|
|
|
+ 4.3.
|
|
|
|
Due to implementation details KWin actually allows moving or resizing
|
|
|
|
by keyboard when requested to be done by mouse, and vice versa.
|
|
|
|
+ 5.1.
|
|
|
|
+ 5.2.
|
|
|
|
+ 5.3.
|
|
|
|
+ 5.4.
|
|
|
|
+ 5.5.
|
|
|
|
/ 5.6. The handling of _NET_WM_WINDOW_TYPE itself is correct and complete.
|
|
|
|
Supported window types: DESKTOP, DOCK, TOOLBAR, MENU, UTILITY,
|
|
|
|
SPLASH, DIALOG, NORMAL.
|
|
|
|
UTILITY should get better placement.
|
|
|
|
TOOLBAR - many parts in KDE still treat this as "tool" window.
|
|
|
|
- should the decoration be shown for the toolbars?
|
|
|
|
KDE extensions:
|
|
|
|
_KDE_NET_WM_WINDOW_TYPE_TOPMENU - this is used for implementing
|
|
|
|
standalone menubars for applications. Only the menubar
|
|
|
|
that is transient for the currently active window will be shown.
|
|
|
|
See KMenuBar class in libkdeui for details.
|
|
|
|
_KDE_NET_WM_WINDOW_TYPE_OVERRIDE - this seems to mean "this window
|
|
|
|
should be borderless", but it's actually used also for other
|
|
|
|
things, like fullscreen windows. The plan is to get rid of this
|
|
|
|
flawed thing as soon as possible.
|
|
|
|
/ 5.7.
|
|
|
|
The handling of _NET_WM_STATE itself is correct and complete.
|
|
|
|
Supported states: MODAL, MAXIMIZED_VERT, MAXIMIZED_HORZ, SHADED,
|
|
|
|
SKIP_TASKBAR, SKIP_PAGER, HIDDEN, ABOVE, BELOW.
|
|
|
|
STICKY is not supported, because KWin doesn't implement viewports.
|
|
|
|
BELOW - in order to make 'allow windows to cover the panel' feature
|
|
|
|
in Kicker work KWin interprets this state a bit differently
|
|
|
|
for DOCK windows. While normal DOCK windows are in their
|
|
|
|
extra layer above normal windows, making them BELOW doesn't
|
|
|
|
move them below normal windows, but only to the same layer, so
|
|
|
|
that windows can hide Kicker, but Kicker can be also raised
|
|
|
|
above the windows. A bit hacky, but it's not really against
|
|
|
|
the spec, and I have no better idea.
|
|
|
|
KDE extensions:
|
|
|
|
_NET_WM_STATE_STAYS_ON_TOP - has the same meaning like ABOVE,
|
|
|
|
and is deprecated in favour of it; it lacks the _KDE prefix
|
|
|
|
* 5.8.
|
|
|
|
The handling of _NET_WM_ALLOWED_ACTIONS itself is correct and complete.
|
|
|
|
Supported actions: MOVE, RESIZE, MINIMIZE, SHADE, MAXIMIZE_HORZ,
|
|
|
|
MAXIMIZE_VERT, CHANGE_DESKTOP, CLOSE
|
|
|
|
STICK is not supported, because KWin does not implement viewports.
|
|
|
|
Kicker etc. need to be updated.
|
|
|
|
+ 5.9.
|
|
|
|
* 5.10.
|
|
|
|
Property is not used in KWin.
|
|
|
|
Kicker needs to be checked.
|
|
|
|
* 5.11.
|
|
|
|
KWin's handling of the property is correct.
|
|
|
|
Qt should be checked.
|
|
|
|
+ 5.12.
|
|
|
|
- 5.13.
|
|
|
|
Property is not used in KWin, KWin never provides icons for iconified windows.
|
|
|
|
Kicker or its taskbar don't set it either. However, the property is flawed,
|
|
|
|
and should be replaced by manager selection or similar mechanism.
|
|
|
|
+ 6.1.
|
|
|
|
+ 6. (rest)
|
|
|
|
+ 7.4.
|
|
|
|
The urgency hint is mapped to the _NET_WM_DEMANDS_ATTENTION flag.
|
|
|
|
* 7.5.
|
|
|
|
Qt often sets maximum size smaller than minimum size. This seems to be caused
|
|
|
|
by delayed layout calculations.
|
|
|
|
* 7.6.
|
|
|
|
Kicker should be checked.
|
|
|
|
? 7.7.
|
|
|
|
+ 7. (rest of the section)
|
|
|
|
|
|
|
|
ICCCM spec compliance (whole document):
|
|
|
|
version 2.0
|
|
|
|
======================
|
|
|
|
|
|
|
|
/ 1.2.3.
|
|
|
|
KWin uses KWIN_RUNNING atom that's missing the leading underscore.
|
|
|
|
Some parts of KDE perhaps may be missing the leading underscore.
|
|
|
|
/ 1.2.6.
|
|
|
|
Should be checked.
|
|
|
|
+ 1. (rest of the section)
|
|
|
|
+ 2.8. kmanagerselection.* in kdecore
|
|
|
|
+ 2. (rest of the section)
|
|
|
|
Not a KWin thing.
|
|
|
|
* - patch sent to TT to make TQClipboard sufficiently compliant
|
|
|
|
+ 3.
|
|
|
|
Feature not supported, obsolete.
|
|
|
|
+ 4.1.1
|
|
|
|
+ 4.1.2 (intro)
|
|
|
|
+ 4.1.2.1
|
|
|
|
Used as a fallback for _NET_WM_NAME.
|
|
|
|
+ 4.1.2.2
|
|
|
|
Used as a fallback for _NET_WM_ICON_NAME.
|
|
|
|
? 4.1.2.3
|
|
|
|
? - PSize, PPosition, USize, UPosition
|
|
|
|
? - clients - Qt simply sets both
|
|
|
|
+ - PWinGravity - window geometry constraints have higher priority than gravity
|
|
|
|
/ - PBaseSize - PMinSize is not used as a fallback for size increments
|
|
|
|
+ - (the rest)
|
|
|
|
/ 4.1.2.4
|
|
|
|
+ - input - see 4.1.7
|
|
|
|
+ - initial_state
|
|
|
|
+ - icon - feature not supported
|
|
|
|
+ - window_group
|
|
|
|
+ - urgency - mapped to _NET_WM_DEMANDS_ATTENTION
|
|
|
|
/ 4.1.2.5 - it should be checked it's used correctly in Kicker etc.
|
|
|
|
/ 4.1.2.6 - should be checked
|
|
|
|
NETWM section 7.3. is supported too, even though it's a slight ICCCM violation.
|
|
|
|
+ 4.1.2.7
|
|
|
|
- 4.1.2.8
|
|
|
|
See 4.1.8.
|
|
|
|
+ 4.1.2.9 - handled by Xlib call
|
|
|
|
+ 4.1.3.1
|
|
|
|
+ 4.1.3.2
|
|
|
|
Feature not supported (4.1.2.4 - icons)
|
|
|
|
* 4.1.4 it should be checked Qt/KDE clients handle this properly
|
|
|
|
/ 4.1.5
|
|
|
|
This needs fixing.
|
|
|
|
+ 4.1.6
|
|
|
|
+ 4.1.7
|
|
|
|
- 4.1.8
|
|
|
|
KWin only installs colormap required by the active window.
|
|
|
|
- 4.1.9
|
|
|
|
Feature not supported, except for WM_ICON_NAME as a fallback for _NET_WM_ICON_NAME.
|
|
|
|
+ 4.1.10
|
|
|
|
+ 4.1.11
|
|
|
|
Window groups are only used for supporting NETWM section 7.3.
|
|
|
|
+ 4.2.5
|
|
|
|
/ 4.2.7
|
|
|
|
Qt doesn't set revert-to to Parent.
|
|
|
|
+ 4.2.8.1 frozen clients may be XKill-ed upon a user request though
|
|
|
|
+ 4.3
|
|
|
|
? 4.4
|
|
|
|
+ 4. (rest of the section)
|
|
|
|
+ 5.3. not KWin related
|
|
|
|
+ 5. (rest of the section )
|
|
|
|
? 6.1. clients thing
|
|
|
|
? 6.2. clients thing - Qt perhaps should force rule 2.
|
|
|
|
+ 6.3.
|
|
|
|
? 6. (rest of the section)
|
|
|
|
+ 7. - no idea what it is, but it doesn't seem to be KWin related
|
|
|
|
+ 8.
|
|
|
|
|
|
|
|
|
|
|
|
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_CONTEXT_HELP
|
|
|
|
- Qt extension
|
|
|
|
- has no vendor prefix even though it's not part of the spec
|
|
|
|
_NET_WM_STATE_STAYS_ON_TOP
|
|
|
|
- KDE extension
|
|
|
|
- has no vendor prefix even though it's not part of the spec
|
|
|
|
- deprecated in favor of _NET_WM_STATE_KEEP_ABOVE
|
|
|
|
_KDE_NET_WM_WINDOW_TYPE_OVERRIDE
|
|
|
|
- window type, makes the window borderless
|
|
|
|
- unclear semantics, used also for fullscreen windows
|
|
|
|
- deprecated in favor of other window types
|
|
|
|
|
|
|
|
==========================================================================
|