New clipboard proposal

Hi there fellow hackers, programmers and other people involved in the
development of the freedesktop.

There's been many problems with the current implementation of the X11
clipboard. Before I start with my new proposal I'll guide you through
the current implementation so you'll understand some terminology. If you
already know everything about the clipboard on X11, you can skip all
this, of course.

Very very short . . .

There's three standard clipboards: The PRIMARY, SECONDARY and the
CLIPBOARD. Another name for such a clipboard is "a selection". So you
say "the CLIPBOARD selection".

Only one xclient application can own such a clipboard at a time. All
three work independent from each other.

When an xclient requests the selection, it will typically ask X about
the selection-owner of a specific selection (PRIMARY, CLIPBOARD or

Such a selection-owner can advertise the formats it's supporting. Those
formats are called TARGETs. One selection-owner can have multiple
targets. It can advertise the supported ones in a standard target called
the TARGETS target. 

So a typical requester (an application that is going to paste something)
will first ask for the TARGETS target, then it will pick a format it
knows, then it will ask the selection-owner to start converting data to
the format it had been advertising. Then it will retrieve this data from
that selection-owner through the xserver.

Lets take an example:

In Mozilla you selected some text. Thats the PRIMARY selection.

In Evolution's E-mail composer you do "paste". Evolution's E-mail
composer will now ask X about the selection-owner. Through X it will ask
for the TARGETS target of that selection-owner (Mozilla). 

Mozilla will say it supports a "text/html"-target.

Evolution's E-mail composer will request Mozilla to convert it's own
format to that "text/html"-format and Evolution's E-mail composer will,
through X, receive the data in the requested format.

There's many problems with this method:

o. What happens when Mozilla got shut down before Evolution got
   the chance to paste the clipboard?

o. What happens when Mozilla has 400MB of data to deliver? A better
   example might be "copying a large table from
   gnumeric to Mozilla composer"

o. What happens when you shutdown your X session. Is your
   clipboard lost?

To address these issues, I've cooked up a proposal. The proposal aims to
replace the entire clipboard in the long run. But will provide full
backwards compatibility for older X-clients. The proposal won't depends
on any technology disliked by both KDE or GNOME.

The proposal itself is incomplete. There's still a lot to agree upon.

The proposal

o. We'll still use the current protocol for advertising the fact
   that there's support for the new-type clipboard. There's no problem
   with still using the old-style clipboard.

o. We add a TARGET "x-extension/dbus"

o. The contents of the target explane the available
   services on dbus. The format of the contents isn't
   defined yet.

o. We'll create a library that will do most for the application

o. That library will initiate dbus in such a way that both
   xclients/processes can enjoy the wonders of inter process
   communication. This will address the "large clipboards" issue.

o. The library will fallback to the oldstyle X11 protocol if the
   dbus connection failed. This way it isn't necessary to let
   dbus serve on tcp/ip or to open ports. If both processes
   aren't on the same host, it will use the current (working)

o. A clipboard manager will, using the new Xfixes extensions,
   catch clipboards that will be lost if the selection-owner
   gets destroyed. That same clipboard manager will persist
   the clipboard when the session is about to get shutdown. 

o. Whether or not to support a clipboard history is an option or a
   plugin for that clipboard manager.

o. The clipboard manager can also function as a hybride between
   old X11 applications and newer applications. The clipboard
   manager can, for example, add the "x-extension/dbus" target and can
   provide a service that will deliver the data if a newer application
   wants to receive the data using that channel.

I attached two dia diagrams. You can view them using the app "dia" which
is available here: They might be incomplete or
inaccurate or whatever. And no there's not really anything done yet
(except a very basic sample application using the new XFixes events
related to clipboard handling).

Philip Van Hoof, Software Developer @ Cronos
home: me at freax dot org
gnome: pvanhoof at gnome dot org
work: philip dot vanhoof at cronos dot be
junk: philip dot vanhoof at gmail dot com,

Attachment: normal new situation.dia
Description: application/dia-diagram

Attachment: owner destroys situation.dia
Description: application/dia-diagram

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]