aboutsummaryrefslogtreecommitdiff
path: root/dw/textblock_iterator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dw/textblock_iterator.cc')
-rw-r--r--dw/textblock_iterator.cc24
1 files changed, 21 insertions, 3 deletions
diff --git a/dw/textblock_iterator.cc b/dw/textblock_iterator.cc
index cfb235ac..285921b2 100644
--- a/dw/textblock_iterator.cc
+++ b/dw/textblock_iterator.cc
@@ -198,6 +198,11 @@ void Textblock::TextblockIterator::highlight (int start, int end,
if (!oofm) {
Textblock *textblock = (Textblock*)getWidget();
int index1 = index, index2 = index;
+
+ int oldStartIndex = textblock->hlStart[layer].index;
+ int oldStartChar = textblock->hlStart[layer].nChar;
+ int oldEndIndex = textblock->hlEnd[layer].index;
+ int oldEndChar = textblock->hlEnd[layer].nChar;
if (textblock->hlStart[layer].index > textblock->hlEnd[layer].index) {
/* nothing is highlighted */
@@ -216,8 +221,12 @@ void Textblock::TextblockIterator::highlight (int start, int end,
textblock->hlEnd[layer].index = index;
textblock->hlEnd[layer].nChar = end;
}
-
- textblock->queueDrawRange (index1, index2);
+
+ if (oldStartIndex != textblock->hlStart[layer].index ||
+ oldStartChar != textblock->hlStart[layer].nChar ||
+ oldEndIndex != textblock->hlEnd[layer].index ||
+ oldEndChar != textblock->hlEnd[layer].nChar)
+ textblock->queueDrawRange (index1, index2);
}
// TODO What about OOF widgets?
@@ -233,6 +242,11 @@ void Textblock::TextblockIterator::unhighlight (int direction,
if (textblock->hlStart[layer].index > textblock->hlEnd[layer].index)
return;
+ int oldStartIndex = textblock->hlStart[layer].index;
+ int oldStartChar = textblock->hlStart[layer].nChar;
+ int oldEndIndex = textblock->hlEnd[layer].index;
+ int oldEndChar = textblock->hlEnd[layer].nChar;
+
if (direction == 0) {
index1 = textblock->hlStart[layer].index;
index2 = textblock->hlEnd[layer].index;
@@ -248,7 +262,11 @@ void Textblock::TextblockIterator::unhighlight (int direction,
textblock->hlEnd[layer].nChar = INT_MAX;
}
- textblock->queueDrawRange (index1, index2);
+ if (oldStartIndex != textblock->hlStart[layer].index ||
+ oldStartChar != textblock->hlStart[layer].nChar ||
+ oldEndIndex != textblock->hlEnd[layer].index ||
+ oldEndChar != textblock->hlEnd[layer].nChar)
+ textblock->queueDrawRange (index1, index2);
}
// TODO What about OOF widgets?