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

Reply via email to