From d1b649055dfdfe17674fec6ef713a33c6f9b09fe Mon Sep 17 00:00:00 2001
From: andreykproductengine <andreykproductengine@lindenlab.com>
Date: Fri, 5 Apr 2019 22:42:04 +0300
Subject: [PATCH] SL-10890 Ban duration edit field shows value with a left
 shift if a large value was set

---
 indra/llui/lllineeditor.cpp | 7 +++++++
 indra/llui/lllineeditor.h   | 3 +++
 indra/llui/llspinctrl.cpp   | 6 +++++-
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index cfab6b7fc89..ff8bf303190 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -499,6 +499,13 @@ void LLLineEditor::setCursorToEnd()
 	deselect();
 }
 
+void LLLineEditor::resetScrollPosition()
+{
+	mScrollHPos = 0;
+	// make sure cursor says in visible range
+	setCursor(getCursor());
+}
+
 BOOL LLLineEditor::canDeselect() const
 {
 	return hasSelection();
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 287837a15c1..f775d53e63d 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -208,6 +208,9 @@ class LLLineEditor
 	void			setCursor( S32 pos );
 	void			setCursorToEnd();
 
+	// set scroll to earliest position it can reasonable set
+	void			resetScrollPosition();
+
 	// Selects characters 'start' to 'end'.
 	void			setSelection(S32 start, S32 end);
 	virtual void	getSelectionRange(S32 *position, S32 *length) const;
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index f6831c6d5ec..ce3fc29d327 100644
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -290,6 +290,7 @@ void LLSpinCtrl::forceSetValue(const LLSD& value )
         LLF32UICtrl::setValue(value);
 		
 		updateEditor();
+		mEditor->resetScrollPosition();
 	}
 }
 
@@ -355,7 +356,9 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
 
 	if( success )
 	{
-		updateEditor();
+		// We commited and clamped value
+		// try to display as much as possible
+		mEditor->resetScrollPosition();
 	}
 	else
 	{
@@ -475,6 +478,7 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask)
 			// text editors don't support revert normally (due to user confusion)
 			// but not allowing revert on a spinner seems dangerous
 			updateEditor();
+			mEditor->resetScrollPosition();
 			mEditor->setFocus(FALSE);
 			return TRUE;
 		}
-- 
GitLab