We've been working around various problems with the core X protocol for
about 15 years now. I think it's time to build an extension that includes
small changes that fix big problems.
Such an extension would be limited to problems with existing core
functionality that can be easily fixed in the server but for which client
side workarounds are kludgy or broken.
I've got three proposed problems and fixes implemented already and would
like to hear other issues of interest to the community.
1) XEMBED error recovery
The XEMBED specification http://www.freedesktop.org/standards/xembed/html
uses nested windows to place one application window within another. One of
the authors (Owen Taylor) brought a problem with error recover in this
model to my attention and proposed a solution. The problem is caused by
how SaveSet processing is done within the X server during (abnormal) client
termination. Normal SaveSet processing reparents (embedded) windows to the
nearest enclosing non-client window. In an embedding environment, that
will be the window manager frame holding the embedding application. The
window manager won't expect new windows to suddenly appear in this context
and (generally) ignores them and goes about destroying the frame which
takes the embedded application window along with the frame.
The proposal is to select the root window as the SaveSet target window so
that the window manager simply sees them as regular windows.
A further refinement is to permit these windows to remain unmapped instead
of suddenly popping up on the screen.
2) Selection Tracking
Applications like the KDE 'klipper' monitor selection contents to save
them and also perform actions based on them. Right now, this happens by
having these clients contantly polling the selection.
The proposal is to have a event delivered whenever the selection changes.
3) Cursor Image Echoing
Applications like VNC or screen magnifiers work by duplicating the
contents of the screen, but cannot succesfully track the cursor image in
the duplicate screen. This makes the forwarded environment harder to use
as the cursor image often contains significant semantic content -- like
the precise location of window borders or application state like busy/idle.
The proposal is to have an event reported when the cursor image changes
and a request to fetch the current cursor image.
I've stuck these features into a new XFIXES extension and included that in
XFree86 CVS so that others might see the code and specification and test
whether they solve the issues they're supposed to. This does not represent
any endorsement by the XFree86 project or it's members (other than me), nor
any assurance that the extension will be included in future XFree86
Keith Packard XFree86 Core Team HP Cambridge Research Lab
Xpert mailing list