summaryrefslogtreecommitdiffstats
path: root/generic/tkTextDisp.c
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2014-11-30 21:21:08 (GMT)
committerfvogel <fvogelnew1@free.fr>2014-11-30 21:21:08 (GMT)
commitbdd484f568bb6dfd8d9e05d5ab8b9d8470f83cf6 (patch)
treebe258203cbffcb3296c7d03babd9d74b645dc71f /generic/tkTextDisp.c
parent34b765f14f011c5b1d1f836997b5bfbcf89b6b1e (diff)
downloadtk-bdd484f568bb6dfd8d9e05d5ab8b9d8470f83cf6.zip
tk-bdd484f568bb6dfd8d9e05d5ab8b9d8470f83cf6.tar.gz
tk-bdd484f568bb6dfd8d9e05d5ab8b9d8470f83cf6.tar.bz2
Fixed bbox caller of FindDLine, see case 'B' in bug [7703f947aa]
Diffstat (limited to 'generic/tkTextDisp.c')
-rw-r--r--generic/tkTextDisp.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c
index 2b88ad6..c1b477c 100644
--- a/generic/tkTextDisp.c
+++ b/generic/tkTextDisp.c
@@ -6826,15 +6826,29 @@ TkTextIndexBbox(
*/
dlPtr = FindDLine(dInfoPtr->dLinePtr, indexPtr);
+
+ /*
+ * Two cases shall be trapped here because the logic later really
+ * needs dlPtr to be the display line containing indexPtr:
+ * 1. if no display line contains the desired index (NULL dlPtr)
+ * 2. if indexPtr is before the first display line, in which case
+ * dlPtr currently points to the first display line
+ */
+
if ((dlPtr == NULL) || (TkTextIndexCmp(&dlPtr->index, indexPtr) > 0)) {
return -1;
}
/*
- * Find the chunk within the line that contains the desired index.
+ * Find the chunk within the display line that contains the desired
+ * index. The chunks making the display line are skipped up to but not
+ * including the one crossing indexPtr. Skipping is done based on
+ * a byteIndex offset possibly spanning several logical lines in case
+ * they are elided.
*/
- byteIndex = indexPtr->byteIndex - dlPtr->index.byteIndex;
+ byteIndex = TkTextIndexCount(textPtr, &dlPtr->index, indexPtr,
+ COUNT_INDICES);
for (chunkPtr = dlPtr->chunkPtr; ; chunkPtr = chunkPtr->nextPtr) {
if (chunkPtr == NULL) {
return -1;