summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim ProductEngine <vsavchuk@productengine.com>2010-10-29 23:48:46 +0300
committerVadim ProductEngine <vsavchuk@productengine.com>2010-10-29 23:48:46 +0300
commit463969116fa64c6f90cd7eb455e2432db375d359 (patch)
treeb6e2eba044d88b5983cb8f9773a9549adc83a3bf
parent8209e35643cd21bde2b52bfa26cd77732f4fca9f (diff)
STORM-501 FIXED Script-editor shows ERRORS in the wrong line.
LLTextBase::setCursor() sometimes failed to work properly if line wrapping was enabled. This is a slightly optimized version of the patch made by Satomi Ahn.
-rw-r--r--doc/contributions.txt2
-rw-r--r--indra/llui/lltextbase.cpp34
2 files changed, 29 insertions, 7 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt
index ee2dea7344..b3d30c3a54 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -594,6 +594,8 @@ Salahzar Stenvaag
CT-321
Sammy Frederix
VWR-6186
+Satomi Ahn
+ STORM-501
Scrippy Scofield
VWR-3748
Seg Baphomet
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 758df418e8..5721df6b36 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2214,19 +2214,39 @@ bool LLTextBase::scrolledToEnd()
return mScroller->isAtBottom();
}
-
bool LLTextBase::setCursor(S32 row, S32 column)
{
- if (0 <= row && row < (S32)mLineInfoList.size())
+ if (row < 0 || column < 0) return false;
+
+ S32 n_lines = mLineInfoList.size();
+ for (S32 line = row; line < n_lines; ++line)
{
- S32 doc_pos = mLineInfoList[row].mDocIndexStart;
- column = llclamp(column, 0, mLineInfoList[row].mDocIndexEnd - mLineInfoList[row].mDocIndexStart - 1);
- doc_pos += column;
- updateCursorXPos();
+ const line_info& li = mLineInfoList[line];
+
+ if (li.mLineNum < row)
+ {
+ continue;
+ }
+ else if (li.mLineNum > row)
+ {
+ break; // invalid column specified
+ }
+
+ // Found the given row.
+ S32 line_length = li.mDocIndexEnd - li.mDocIndexStart;;
+ if (column >= line_length)
+ {
+ column -= line_length;
+ continue;
+ }
+ // Found the given column.
+ updateCursorXPos();
+ S32 doc_pos = li.mDocIndexStart + column;
return setCursorPos(doc_pos);
}
- return false;
+
+ return false; // invalid row or column specified
}