X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatlinemodelitem.cpp;h=29efa754057dd19017f7de75015dbab98059f9f5;hp=824e9dabd4bf0bb2cf1e498229317b600453466d;hb=ba9fdf3ef19a32ebb380fbff01362f4fedc0d12d;hpb=2c4a26ca25828bd49a26c683f8d44416c384277d diff --git a/src/qtui/chatlinemodelitem.cpp b/src/qtui/chatlinemodelitem.cpp index 824e9dab..29efa754 100644 --- a/src/qtui/chatlinemodelitem.cpp +++ b/src/qtui/chatlinemodelitem.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-09 by the Quassel Project * + * Copyright (C) 2005-2010 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -183,8 +183,26 @@ void ChatLineModelItem::computeWrapList() const { layout.endLayout(); while((idx = finder.toNextBoundary()) >= 0 && idx <= length) { - if(idx < length) - idx++; // the boundary is *before* the actual character + + // QTextBoundaryFinder has inconsistent behavior in Qt version up to and including 4.6.3 (at least). + // It doesn't point to the position we should break, but to the character before that. + // Unfortunately Qt decided to fix this by changing the behavior of QTBF, so now we have to add a version + // check. At the time of this writing, I'm still trying to get this reverted upstream... + // + // cf. https://bugs.webkit.org/show_bug.cgi?id=31076 and Qt commit e6ac173 + static int needWorkaround = -1; + if(needWorkaround < 0) { + needWorkaround = 0; + QStringList versions = QString(qVersion()).split('.'); + if(versions.count() == 3 && versions.at(0).toInt() == 4) { + if(versions.at(1).toInt() <= 6 && versions.at(2).toInt() <= 3) + needWorkaround = 1; + } + } + if(needWorkaround == 1) { + if(idx < length) + idx++; + } if(idx == oldidx) continue;