qt5base-lts/tests/auto/gui/text
Eskil Abrahamsen Blomfeldt ca64365e3a Don't hide object replacement char except in rich text
The object replacement character (U+FFFC) is used to represent
inline objects such as images in rich-text. To enable this,
we have special handling of it in QTextEngine. For classes
where inline images are not supported, it will just be hidden
from the visual text, which is unexpected.

Instead of always special-casing it, we make this dependent
on whether the document layout has registered any object handlers.
If they have not, then there will be no visual representation of
the object, and it is better to show the glyph for it.

For anything based on QTextDocument, there will always be the
image handler, so U+FFFC will still have special handling there,
but for non-rich labels and plain text editors the glyph will
be shown instead.

Note that there was also a bug in QLineEdit, where the object
replacement character was always replaced by a space. This was
introduced in 2007, in a patch which replaced a !ch.isPrint()
with a check for "the most obvious non-printable characters"
to reduce the number of characters that were not shown. However,
U+FFFC is a printable character and would thus not have been
filtered by the !isPrint() condition, so I think this was a
mistake at the time. However, due to the special-casing of
the character in Qt, it would not have had any effect until
now.

This also changes the QTextLayout::cursorToXForInlineObject()
test to actually test proper inline objects, as this was
previously using a hack which depended on the inline object
code to be used even for plain QTextLayouts with no handlers
for these.

[ChangeLog][Text] The object replacement character (U+FFFC)
is now only filtered out in rich text controls, where they
represent inline objects. In other controls, its glyphs will
be shown as with other text.

Pick-to: 6.5
Fixes: QTBUG-101526
Change-Id: I7fcaf2b10918feb41589e1098016efbf79a0e62d
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-12-14 19:19:01 +01:00
..
qabstracttextdocumentlayout Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qcssparser Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qfont Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qfontcache Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qfontdatabase Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qfontmetrics Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qglyphrun Don't hide object replacement char except in rich text 2022-12-14 19:19:01 +01:00
qinputcontrol Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qrawfont Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qstatictext Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qsyntaxhighlighter Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qtextblock Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtextcursor Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qtextdocument Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qtextdocumentfragment Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qtextdocumentlayout QTextDocumentLayout: Account for topMargin when hit-testing 2022-09-05 16:29:11 +00:00
qtextformat Port from container::count() and length() to size() - V5 2022-11-03 14:59:24 +01:00
qtextimagehandler Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
qtextlayout Don't hide object replacement char except in rich text 2022-12-14 19:19:01 +01:00
qtextlist Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtextmarkdownimporter Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtextmarkdownwriter Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtextobject Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtextodfwriter Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qtextpiecetable Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qtextscriptengine Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00
qtexttable Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
qzip Port from container.count()/length() to size() 2022-10-04 07:40:08 +02:00
CMakeLists.txt Change the license of all CMakeLists.txt and *.cmake files to BSD 2022-08-23 23:58:42 +02:00