From bbbbd8eda987e4c4fb539a579486a83d6f5ce84a Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Sat, 12 May 2007 08:17:02 +0000 Subject: [PATCH] Fixed the 'select one line twice' bug. It's always helpfull to talk to a koffice developer, thanks to Thomas :) svn path=/trunk/KDE/kdegraphics/okular/; revision=663744 --- core/textdocumentgenerator.cpp | 4 +++- core/textdocumentgenerator_p.h | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/textdocumentgenerator.cpp b/core/textdocumentgenerator.cpp index d45fcc80a..c76ab936b 100644 --- a/core/textdocumentgenerator.cpp +++ b/core/textdocumentgenerator.cpp @@ -63,9 +63,11 @@ Okular::TextPage* TextDocumentGenerator::Private::createTextPage( int pageNumber cursor.setPosition( i + 1, QTextCursor::KeepAnchor ); QString text = cursor.selectedText(); - if ( text.length() == 1 && text[ 0 ].isPrint() ) { + if ( text.length() == 1 ) { QRectF rect; Utils::calculateBoundingRect( mDocument, i, i + 1, rect, pageNumber ); + if ( pageNumber == -1 ) + text = "\n"; textPage->append( text, new Okular::NormalizedRect( rect.left(), rect.top(), rect.right(), rect.bottom() ) ); } diff --git a/core/textdocumentgenerator_p.h b/core/textdocumentgenerator_p.h index fc14d7608..258b1abb7 100644 --- a/core/textdocumentgenerator_p.h +++ b/core/textdocumentgenerator_p.h @@ -49,6 +49,13 @@ class Utils int offset = qRound( y ) % qRound( pageSize.height() ); + if ( x > r ) { // line break, so return a pseudo character on the start line + rect = QRectF( x / pageSize.width(), offset / pageSize.height(), + 3 / pageSize.width(), startLine.height() / pageSize.height() ); + page = -1; + return; + } + page = qRound( y ) / qRound( pageSize.height() ); rect = QRectF( x / pageSize.width(), offset / pageSize.height(), (r - x) / pageSize.width(), (b - y) / pageSize.height() );