fixing empty chatlines on mac os (hopefully on windows too). This looks very much...
[quassel.git] / src / qtui / chatlinemodelitem.cpp
index aebde9d..84832cd 100644 (file)
@@ -73,7 +73,8 @@ void ChatLineModelItem::computeWrapList() {
 
   QList<ChatLineModel::Word> wplist;  // use a temp list which we'll later copy into a QVector for efficiency
   QTextBoundaryFinder finder(QTextBoundaryFinder::Word, _contents.plainText);
-  int idx, oldidx;
+  int idx;
+  int oldidx = 0;
   bool wordStart = false; bool wordEnd = false;
   Mode mode = SearchEnd;
   ChatLineModel::Word word;
@@ -93,13 +94,19 @@ void ChatLineModelItem::computeWrapList() {
 
   do {
     idx = finder.toNextBoundary();
-    if(idx < 0) idx = _contents.plainText.length();
-    wordStart = finder.boundaryReasons().testFlag(QTextBoundaryFinder::StartWord);
-    wordEnd = finder.boundaryReasons().testFlag(QTextBoundaryFinder::EndWord);
+    if(idx < 0) {
+      idx = _contents.plainText.length();
+      wordStart = false;
+      wordEnd = false;
+      mode = SearchStart;
+    } else {
+      wordStart = finder.boundaryReasons().testFlag(QTextBoundaryFinder::StartWord);
+      wordEnd = finder.boundaryReasons().testFlag(QTextBoundaryFinder::EndWord);
+    }
 
-    //qDebug() << wordStart << wordEnd << _contents.plainText.left(idx) << _contents.plainText.mid(idx);
+    //if(flg) qDebug() << idx << mode << wordStart << wordEnd << _contents.plainText.left(idx) << _contents.plainText.mid(idx);
 
-    if(mode == SearchEnd || !wordStart && wordEnd) {
+    if(mode == SearchEnd || (!wordStart && wordEnd)) {
       if(wordStart || !wordEnd) continue;
       oldidx = idx;
       mode = SearchStart;
@@ -116,7 +123,9 @@ void ChatLineModelItem::computeWrapList() {
       word.start = idx;
       mode = SearchEnd;
     }
-  } while(finder.isAtBoundary());
+    // the part " || (finder.position() == _contents.plainText.length())" shouldn't be necessary
+    // but in rare and indeterministic cases Qt states that the end of the text is not a boundary o_O
+  } while(finder.isAtBoundary() || (finder.position() == _contents.plainText.length()));
 
   // A QVector needs less space than a QList
   _wrapList.resize(wplist.count());