Hi All,

The upgrade from KDE 4.2.1 to 4.2.2 introduced a small but annoying regression into the Konsole app. Double click text selection no longer works correctly.

The bug is documented here:

https://bugs.kde.org/show_bug.cgi?id=189651

The attached patch can be stuck in the files directory of the x11/kdebase4 port to fix the issue until KDE ships an update.

Cheers,
Lawrence
Index: TerminalDisplay.cpp
===================================================================
--- ../apps/konsole/src/TerminalDisplay.cpp     
(.../4.2.2/kdebase/apps/konsole/src/TerminalDisplay.cpp)        (revision 
959808)
+++ ../apps/konsole/src/TerminalDisplay.cpp     
(.../4.2.1/kdebase/apps/konsole/src/TerminalDisplay.cpp)        (revision 
959808)
@@ -2172,12 +2155,11 @@
   _wordSelectionMode = true;
 
   // find word boundaries...
-  QChar selClass = charClass(_image[i].character);
   {
      // find the start of the word
      int x = bgnSel.x();
      while ( ((x>0) || (bgnSel.y()>0 && (_lineProperties[bgnSel.y()-1] & 
LINE_WRAPPED) )) 
-                     && charClass(_image[i-1].character) == selClass )
+                     && !isCharBoundary(_image[i-1].character) )
      {  
        i--; 
        if (x>0) 
@@ -2196,7 +2178,7 @@
      i = loc( endSel.x(), endSel.y() );
      x = endSel.x();
      while( ((x<_usedColumns-1) || (endSel.y()<_usedLines-1 && 
(_lineProperties[endSel.y()] & LINE_WRAPPED) )) 
-                     && charClass(_image[i+1].character) == selClass )
+                     && !isCharBoundary(_image[i+1].character) )
      { 
          i++; 
          if (x<_usedColumns-1) 
@@ -2350,7 +2332,16 @@
   return QWidget::focusNextPrevChild( next );
 }
 
+// Returns true upon a word boundary
+// TODO determine if the below charClass() is actually required
+bool TerminalDisplay::isCharBoundary(QChar qch) const
+{
+    if ( _wordCharacters.contains(qch, Qt::CaseInsensitive) ) return true;
+    if ( qch.isSpace() ) return true;
 
+    return false;
+}
+
 QChar TerminalDisplay::charClass(QChar qch) const
 {
     if ( qch.isSpace() ) return ' ';
Index: TerminalDisplay.h
===================================================================
--- ../apps/konsole/src/TerminalDisplay.h       
(.../4.2.2/kdebase/apps/konsole/src/TerminalDisplay.h)  (revision 959808)
+++ ../apps/konsole/src/TerminalDisplay.h       
(.../4.2.1/kdebase/apps/konsole/src/TerminalDisplay.h)  (revision 959808)
@@ -566,6 +563,9 @@
     //     - Other characters (returns the input character)
     QChar charClass(QChar ch) const;
 
+    // Returns true upon a word boundary
+    bool isCharBoundary(QChar ch) const;
+
     void clearImage();
 
     void mouseTripleClickEvent(QMouseEvent* ev);
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to