TODO for XtoW
=============

goals:

* use xcb
* not built into server
* use native composing

new features

* we always have access to full contents of window (when mapped), so resizing one X window covering another, previewing, thumbnailing, etc. works correctly
* we have access to a window pixmap with alpha channel, so windows are composed into native desktop
* interleaving of native and X windows in Z-order should work correctly
* update WM without restarting X applications or server (for faster development :-))
* separate window message pump thread, so we can update window during modal loops (e.g. resizing)
* ICCCM/EWMH compliance may be limited, but at least it's been audited
* solves the problem that minimized windows are still sensitive in the non-client area of unminimized windows they overlap ('punch-through'), as minimized windows aren't still mapped on the root window

features missing compared to XWin's integrated WM

those that probably need libxcwm support:
* WM_DISPLAYCHANGE should use RANDR to change the display size
* multiple native screens should be known to XINERAMA
* the ability to ring the bell
* XWarpCursor() should be able to move the native cursor (at least around and between X windows and maybe everywhere)
* accelerate OpenGL? (requires cunning plan, see http://lists.x.org/archives/xorg-devel/2012-April/030244.html for a clue...)

those that just need writing:
* 'keyhook' option, so we can catch all keypress and consider if we want to process them, rather than only
getting the ones that the windows shell isn't using (e.g. Windows key, Menu key, Alt-Tab)
* 3 button mouse emulation (if anyone actually needs this anymore...)
* Set the X keyboard configuration to match the native one (external layout mapping program?)
* Synchronize the X server modifier key state with the native one at startup, and whenever an X window gains focus (as modifiers might have been latched or unlatched without us noticing)
* Faster way of getting the bits onto the screen than GDI BitBlt() (e.g. DirectDraw)
* -hostintitle option to add WM_CLIENT_MACHINE to window title, if not localhost
* Override window style settings using a config file (useful?)
* set native application id from class hint for native window grouping

features that are done:
* Convert icon found in icon property to native icon for window (done)
* SHAPE extension support (done)
* Change the native cursor to the X cursor image when it's over an X window (done)

other stuff:

TODO
* libxcwm doesn't look at _MOTIF_WM_HINTS (maybe only hints we get from old motif applications?) (dealt with in XtoW for the moment, should be pushed into libxcwm)
* XtoW needs to use libxcwm style conversion
* libxcwm assumes window properties are constant while mapped; this isn't true; for every property it looks at, it should also listen for changes to that property (prototype done)
* libxcwm doesn't really take advantage of xcb async in all places
* Add WM_ICON_SIZE property to root window (belongs in libxcwm)

DONE
* libxcwm doesn't adopt any existing windows when it starts (done)
* libxcwm doesn't understand about InputOnly windows (probably should just ignore them) (done)
* Libraryize the code which is currently copied out of the Xserver (done)
- Initially, make it a library in the xserver codebase, so we can share it?
- XWin on MinGW is going to be around for a while, and I don't need the maintainance headache
* Implement -version command line option (done)
* support the _NET_WM_WINDOW_OPACITY property using layered windows on XP, even if we can't use alpha (done)

native compostion notes (08/11/11):

- DwmEnableBlurBehindWindows()
- UdpateLayeredWindow() - compose in a src bitmap with alpha channel; use for window position/size change as well for maximum rendering performance
- SetLayeredWindowAttributes() - sets an alpha value for whole windows

* Need to store bits so we can draw them for WM_PAINT without having to ask server..
(xcwm_image_copy_full() to get the full window image, but do we need to do this on init map, or will whole window get damage?)
(Or would using UpdatedLayeredWindow() avoid that need...)

libXwinWMUtil
* should contain at least:
- [x] Icon conversion
- [x] Cursor conversion
- [x] mouse event conversion
- [x] keyboard event conversion
- [ ] keyboard layout mapping (separate executable?)
- [ ] taskbar interface
- [.] X region to HRGN conversion (appears to be not worthwhile)

WM_ICON_NAME should be used for minimized windows?

XQueryBestCursor()
- only the DDX gets to decide the the answer given to this
- we'd like to tell things that GetSystemMetrics(SM_C(X|Y)CURSOR) is the best size to use
- It's not clear that anything actually uses this, though...
- WM_ICON_SIZE is the way for a WM to do this
