[QScintilla] Problem with mime-data encoding
Baz Walter
bazwal at ftml.net
Wed Jun 13 17:31:25 BST 2012
Before version 2.5, qscintilla always used the unicode-friendly text
methods when dealing with mime-data. But this was changed when support
for pasting rectangular selections was added, and so there is now a real
risk of data corruption when using the clipboard, or drag and drop.
If, for example, qscintilla is using its default code page, a copy
operation will store latin1 encoded data on the clipboard with a
mime-type of 'text/plain'. If this data is then pasted by another qt
widget which *does* use the text methods (such as a line-edit), all the
non-asciii characters will be lost (i.e. replaced by replacement
characters). This is because QMimeData always uses the utf-8 codec when
converting bytes to a QString, which of course will choke on latin1
encoded data.
Even worse, if two qscintilla editors using different code pages
exchange data, they will end up with mixed encodings. Unlike Qt,
Scintilla does nothing to mitigate against this and so the editors will
be left in an unstable state.
So I was hoping to simply suggest reverting to the unicode-friendly
mime-data methods to avoid such problems.
However, the latest snapshot (2.6.2-75020a35b5eb) may have introduced
some extra complications.
It seems that, on OSX and X11, rectangular selections now no longer have
a mime-type of "text/plain", and instead just get the rectangular-marker
mime-type. This is in conflict with the unicode-friendly text methods,
which would always enforce a mime-type of "text/plain".
The current use of the rectangular-marker mime-type is very puzzling,
since it means rectangular selections can now no longer be copied and
pasted to other widgets/applications (which won't recognize them as text).
Is there a specific reason why this restriction has been imposed?
Rectangular selections are just ordinary lines of text - no special
handling is required to paste them as a stream, rather than as a block.
Personally, I tend to copy and paste them to other applications at least
as much as pasting them as blocks within qscintilla - so, for me, the
change of behaviour is very unwelcome.
More information about the QScintilla
mailing list