diff options
| -rw-r--r-- | doc/contributions.txt | 2 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 34 | 
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  } | 
