Add shortcut that jumps to the markerline
[quassel.git] / src / qtui / chatlinemodelitem.cpp
index ea0b44a..29efa75 100644 (file)
@@ -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  *
@@ -182,8 +182,30 @@ void ChatLineModelItem::computeWrapList() const {
   line.setNumColumns(length);
   layout.endLayout();
 
-  while((idx = finder.toNextBoundary()) >= 0 && idx < length) {
-    idx++;  // the boundary is *before* the actual character
+  while((idx = finder.toNextBoundary()) >= 0 && idx <= length) {
+
+    // 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;
 
     word.start = oldidx;
     int wordend = idx;