# Extended Window Manager Hints

Extended Window Manager Hints, a.k.a. NetWM, is an X Window System standard for the communication between window managers and applications. It builds on the functionality of the Inter-Client Communication Conventions Manual (ICCCM).
These standards formulate protocols for the mediation of access to shared X resources, like the screen and the input focus. Applications request access, while the window manager grants or denies it. Communication occurs via X properties and client messages. The EWMH is a comprehensive set of protocols to implement a desktop environment. It defines both required and optional protocols. The window manager may choose to implement virtual desktops or a layered stacking order, but if it does, then the EWMH defines how this is communicated.

## Protocol overview

All EWMH protocol identifiers start with the five letter prefix _NET_.

### Root window properties

The WM must update a set of properties on the root window:

#### _NET_SUPPORTED

    lists all the EWMH protocols supported by this WM.

#### _NET_CLIENT_LIST

    lists all application windows managed by this WM.

#### _NET_NUMBER_OF_DESKTOPS

    indicates the number of virtual desktops.

#### _NET_DESKTOP_GEOMETRY

    defines the common size of all desktops.

#### _NET_DESKTOP_VIEWPORT

    defines the top left corner of each desktop.

#### _NET_CURRENT_DESKTOP

    gives the index of the current desktop.

#### _NET_DESKTOP_NAMES

    lists the names of all virtual desktops.

#### _NET_ACTIVE_WINDOW

    gives the currently active window.

#### _NET_WORKAREA

    contains a geometry for each desktop.

#### _NET_SUPPORTING_WM_CHECK

    gives the window of the active WM.

#### _NET_VIRTUAL_ROOTS

    if the WM supports virtual root windows.

#### _NET_DESKTOP_LAYOUT

    shows the layout of the active pager.

#### _NET_SHOWING_DESKTOP

    is 1 for "showing the desktop" mode.

### Client messages

An application may send client messages to a window manager:

#### _NET_WM_STATE

    to change the state of an application window.

#### _NET_ACTIVE_WINDOW

    to activate an application window.

#### _NET_SHOWING_DESKTOP

    toggles display of application windows.

#### _NET_CLOSE_WINDOW

    to close an application window.

#### _NET_WM_MOVERESIZE

    to interactively resize an application window.

#### _NET_MOVERESIZE_WINDOW

    to immediately resize an application window.

#### _NET_REQUEST_FRAME_EXTENTS

    consults frame border dimensions.

#### _NET_WM_FULLSCREEN_MONITORS

    defines the monitors for a fullscreen window.
If the WM supports window stacking:

#### _NET_RESTACK_WINDOW

    asks to change the stacking order for a window.
If the WM supports virtual desktops:

#### _NET_CURRENT_DESKTOP

    changes the current desktop.

#### _NET_NUMBER_OF_DESKTOPS

    changes the number of desktops.
A WM may choose to ignore these messages:

#### _NET_DESKTOP_GEOMETRY

    changes the dimension of all desktops.

#### _NET_DESKTOP_VIEWPORT

    changes the viewport for the current desktop.

### Window properties

The EWMH defines these application window properties:

#### _NET_WM_NAME

    the title of the window.

#### _NET_WM_VISIBLE_NAME

    the window title as shown by the WM.

#### _NET_WM_ICON_NAME

    the title of the icon.

#### _NET_WM_VISIBLE_ICON_NAME

    the icon title as shown by the WM.

#### _NET_WM_DESKTOP

    the desktop the window is in.

#### _NET_WM_WINDOW_TYPE

    the functional type of the window.

#### _NET_WM_STATE

    the current window state.

#### _NET_WM_ALLOWED_ACTIONS

    a list of supported user operations.

#### _NET_WM_STRUT

    if the window wishes to reserve space at the edge.

#### _NET_WM_STRUT_PARTIAL

    reserved space details at the screen edge.

#### _NET_WM_ICON_GEOMETRY

    the geometry of a possible icon.

#### _NET_WM_ICON

    an array of possible icons for the client.

#### _NET_WM_PID

    the process ID of the client owning this window.

#### _NET_WM_HANDLED_ICONS

    whether a pager provides icons.

#### _NET_WM_USER_TIME

    time of last user activity in this window.

#### _NET_WM_USER_TIME_WINDOW

    the window which shows user activity.

#### _NET_FRAME_EXTENTS

    the left, right, top and bottom frame sizes.

#### _NET_WM_OPAQUE_REGION

    which window regions are fully opaque.

#### _NET_WM_BYPASS_COMPOSITOR

    requests that the window is uncomposited.

### Window states

The ICCCM defines only three distinct states a window can be in:
* Withdrawn,
* Normal,
* Iconic.
In addition it supports an Urgent flag to request user attention.
The EWMH defines thirteen window state flags:
* Above: show the window above others,
* Below: show the window below others,
* DemandsAttention: same as the urgent flag,
* Focused: the window has input focus,
* Fullscreen: show the window fullscreen,
* Hidden: the window is unmapped,
* MaximizedHorizontal: the window is stretched horizontally,
* MaximizedVertical: the window is stretched vertically,
* Modal: the window is a modal popup,
* Shaded: the window is rolled up,
* SkipPager: the window should not be shown on a pager,
* SkipTaskbar: the window should be ignored by a taskbar,
* Sticky: the window should be shown on all virtual desktops.

### Additional protocols
#### _NET_WM_PING

    a WM can use this to test if a client is alive.

#### _NET_WM_SYNC_REQUEST

    for synchronizing repaints when resizing.

#### _NET_WM_FULL_PLACEMENT

    the WM will handle any window placement.

## List of window managers that support Extended Window Manager Hints
### Tiling and dynamic window managers

* aewm
* awesome
* bspwm
* echinus
* fvwm
* goomwwm
* herbstluftwm
* i3
* LeftWM
* Notion
* Qtile
* spectrwm
* subtle
* Wingo
* wmii
* xmonad (needs to be turned on in the config)

### Stacking window managers

* Blackbox
* Compiz
* CTWM (as of 4.0.0)
* edewm
* Fluxbox
* FVWM (via a plugin prior to v2.4 and native support from v2.5)
* IceWM
* JWM
* KWin
* Metacity
* Marco
* Openbox

### Other window managers

* Enlightenment (E16 and E17)
* evilwm
* interfacewm
* matchbox
* Sawfish (not completely)
* wmfs
* Xfwm