Date: Mon, 27 Apr 2009 19:31:24 +1000 From: Lawrence Stewart <lstewart@freebsd.org> To: FreeBSD-ports@freebsd.org Subject: Minor fix for KDE 4.2.2 Konsole text selection regression Message-ID: <49F57B6C.30703@freebsd.org>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------060806070303010300070900 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 --------------060806070303010300070900 Content-Type: text/plain; name="patch-konsole_text_selection_fix_bug189651" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-konsole_text_selection_fix_bug189651" 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); --------------060806070303010300070900--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49F57B6C.30703>