Back to the clipboard, part II.
Lubos Lunak
l.lunak at suse.cz
Thu Oct 31 11:27:51 GMT 2002
CC-ing kde-usability@ as that's maybe the list where this discussion belongs.
This mail is going to be a bit longer, as I'll try to explain how the system
works, and I'll also repeat some of the things Havoc said.
Both the selection and clipboard are implemented using a mechanism which X11
calls 'selections' (and clipboard is called CLIPBOARD there and selection in
the non-X11 sense is PRIMARY). They're completely separate, and there's only
one of them (there's one PRIMARY and one CLIPBOARD, you cannot have e.g. two
PRIMARY selections). Also, as usually, nobody really bothered to define how
they work, Xlib reference doesn't even seem to bother mentioning CLIPBOARD,
and ICCCM is pretty vague about the meaning of PRIMARY (section 2.1.1.1).
ICCCM doesn't also describe CLIPBOARD from the users' point of view much, but
I don't think there's any problem with CLIPBOARD - it's simply the thing that
things are explicitly copied into (usually Ctrl+C, not simply only selecting
text), and the contents are explicitly pasted (usually Ctrl+V, but not MMB).
Qt1/2 didn't even follow this, as it was only using PRIMARY all the time,
even for Ctrl+C/V. Since QClipboard changed in Qt3 to behave like other X11
apps (=more reasonably), and had PRIMARY and CLIPBOARD separated, the only
way to get the old behaviour is syncing PRIMARY contents into CLIPBOARD. I
personally see no good reason for doing this, but I don't really mind - it's
broken behaviour, but only from the user's point of view, technically it's
ok.
Now, here comes PRIMARY, which will be a problem. I couldn't find in any
"oficial" X11 docs the definiton of its behaviour, only independent docs
describing how apps should do it (e.g. [2] or [3]). They of course either
don't go into sufficient level of details, or they contradict each other in
the details. I personally consider the right behaviour to be the table in
[3], which the small change that the first row shouldn't say 'text
highlighted with mouse', but simply 'highlighted, not matter how'. If you
asked, most X11 developers would probably say this is the way it should be,
as it makes things quite simple to implement, and it's one possibility how we
can do it "right".
The problem, of course, is that I don't think users would share this opinion.
>From the users point of view, it means that there is only one selection, THE
selection, so in the whole X11 session, there's exactly one place where a
text is selected. For example, Gtk+ apps do it this way (Gtk+1 apps have a
small exception of the 'almost selected' gray selections). E.g. if you run
gedit, write something, select it, then open it's configuration dialog and
select one lineedit, the selected edited text will be unselected. If you
select something in one Gtk+ app, and select something in another one, the
first thing gets unselected. If you select something, and then click
somewhere in order to unselect, MMB no longer works. The only selected text
is simply THE selection, even if you select the text using Shift+arrows.
Now say I'm reading some text in text editor, highlight one sentence (e.g. so
that I can find the sentence quickly again), go to another texteditor, do
some work, possibly selecting something, and when I go back to the first
texteditor, the sentence is unselected. Not really pleasing, especially if I
as Joe User have no clue about PRIMARY. This also means that 'copy link
location' this way shouldn't set PRIMARY, as the link wouldn't be the
selection (I couldn't find any example of this feature in Gtk apps though).
Moreover I remember a bugreport, where somebody complained that opening a
dialog which has a lineedit preselected changes PRIMARY.
I also tried with MS Windows. There's usually one selection per application,
so the problems with unselecting usually don't happen (unless you do 'New
Window' in IE, they it looks like two apps, but in fact it's only one, having
only one selection). Lineedits in config dialogs unselect as soon as they
loose the focus. I also noted that selecting something in Notepad and
selecting a lineedit in its config dialog doesn't unselect the edited text.
Not that the selection in Windows matters much, as it's simply a visual
representation of a selected text, and nothing more.
In KDE/Qt right now, we probably have all possible styles mixed, as a legacy
of all the hacks trying to workaround the old broken QClipboard behaviour.
Selected text is not THE selection. If you select a lineedit and unselect,
MMB still works. If you select e.g. in Kate using Shift+arrows, MMB won't
paste that. In many cases, selection doesn't go away if you select something
somewhere else (most Qt widgets do, I remember it was fixed before KDE3.0 in
Nurnberg). If a lineedit looses focus, it unselects (but as said above, it
remembers the selected text). Also 'copy link location' sets PRIMARY without
showing it visually as the selection.
I basically see two solutions:
First one is the 'selection is THE selection' way of doing things. Should be
easy to implement, consistent (also with other X11 apps, hmm, besides those
not getting it right, or having their "right" different :-/ ). The problem
here is the unselecting in other app, which maybe isn't that big problem, and
the fact that 'copy link location' wouldn't work. We could probably loosen a
bit the requirement and allow things like this 'copy link location' to set
the selection (=PRIMARY) too, without having any visual representation. For
apps which wouldn't set both CLIPBOARD and PRIMARY on such actions, there
could be a Klipper action doing one time CLIPBOARD->PRIMARY sync (such
syncing wouldn't cause any problems). The problem with autoselecting changing
PRIMARY would remain, if it's actually a problem (PRIMARY is meant to be
short-lived).
The other possibility I see is saying that PRIMARY is something the user
explicitly selected (maybe even only with the mouse, as Shift+arrows
selection and MMB later isn't a thing I'd expect anybody to do). Selection as
'the highlighted text' would be something independent, and it could be even
done the MS Window style (having more selections, lineedits unselecting on
focus out,...). In this case, one wouldn't of course know what PRIMARY is, on
the other hand, PRIMARY is supposed to be short-lived. The biggest problem
here would be beating TT to make necessary Qt changes, and beating everybody
else to use it the same way, or living with the fact that we again do it
differently than the others. I'm not sure if others would agree to this kind
of behaviour, especially the die-hard old-fashioned X11 people wouldn't like
it. But as far as I can say, this would be only breaking the common
convention, as I'm not aware of anything forbidding this kind of behaviour.
I forgot, there's actually third option - leaving it as it is. Easiest one.
Erm, whatever. Did I miss something important?
[1] ICCCM - http://tronche.com/gui/x/icccm/ (section 2 mainly)
[2] http://www.freedesktop.org/standards/clipboards.txt
[3] http://www.jwz.org/doc/x-cut-and-paste.html
--
Lubos Lunak
KDE developer
---------------------------------------------------------------------
SuSE CR, s.r.o. e-mail: l.lunak at suse.cz , l.lunak at kde.org
Drahobejlova 27 tel: +420 2 9654 2373
190 00 Praha 9 fax: +420 2 9654 2374
Czech Republic http://www.suse.cz/
More information about the kde-core-devel
mailing list