Bernhard Roider wrote:
Hello Stefan,
today i finally found some time to investigate the problem we discussed
at the beginning of march concerning the completion list: rtl text does
not work and icons are not displayed for math symbols.
Here is a patch that solves that issue for me using qt 4.2.3. There are
two things that caused the problem:
1. QCompleter::setModel() changed the item delegates internally, so the
specialized ones vanished
2. item delegates for columns are not used --> qt bug?
The attached patch solves both issues so that it works with my qt
version. It should be tested for newer versions of qt.
...
bernhard
Hi!
What exactly is the problem with RTL completion that this patch is trying to
solve? Can you separate out the part dealing with RTL from the rest of the patch?
Without your patch, I'm seeing (Linux, Qt 4.2.1) RTL completion behave
correctly, except for the fact that the inline completion (the grayed out part)
is reversed; the list of completions, though, behaves correctly.
With your patch applied, also the strings in the completions list are reversed.
Applying the attached (very complicated ;) ) patch *instead* of yours fixes the
problem of the inlined strings, without adversely affecting the completions list.
I believe that what's happening is this: the completions list is presumably
getting the strings in "logical" order (the way they're held in memory). When
the strings are painted (both in the list and inlined), since they are being
painted as an entire string at once (and not one character at a time, as we
normally do with RTL text) Qt is applying its own bidi algorithm, and thus the
strings are painted correctly, *provided* that the strings are really composed
of true RTL characters (Qt does not know about our marking text as RTL, it only
knows if text is RTL or not based on the unicode values). You guys were probably
testing the RTL capabilities with Latin characters, so Qt was *not* reversing
the strings, and thus the strings appeared to you to be painted backwards, which
is why you were applying an extra reversal.
I'm not sure whether locale settings affect this or not, but I think that they
don't, as long as there is a *legal* locale setting.
In summary, I think that the reversals should be removed, as in the attached
patch. If most of Bernhard's patch is still relevant for non-RTL issues, then
the RTL-specific issues should be removed from it, as well.
To be sure, this solution isn't perfect, because we're being inconsistent by
letting Qt do some of the bidi work, and doing some of it ourselves; and this
becomes visible precisely in the pathological cases where there's a difference
between us and Qt, such as Latin text which we mark as RTL; but for normal RTL
usage, I believe the reversals should *not* be done.
Dov
diff -r bc5502bbefc5 src/rowpainter.cpp
--- a/src/rowpainter.cpp Thu May 29 23:11:06 2008 +0000
+++ b/src/rowpainter.cpp Fri May 30 11:45:00 2008 +0300
@@ -838,8 +838,6 @@
// right to left?
if (rtl) {
swap(s1, s2);
- reverse(s1.begin(), s1.end());
- reverse(s2.begin(), s2.end());
swap(c1, c2);
}