gui: don't mix up display value with actual value

In the case of password entry, the two differ. Password entry was broken
by the earlier commit entitled "Improve input box text handling" because
it started using the displayValue as the actual value, even in cases where
they differ because of a mask value.

Change-Id: Iaf5a67e1d928f34595962a1f1b80eebb64e8b493
diff --git a/gui/input.cpp b/gui/input.cpp
index 4bf01ad..ec370ab 100644
--- a/gui/input.cpp
+++ b/gui/input.cpp
@@ -71,6 +71,7 @@
 	CursorWidth = 3;
 	ConvertStrToColor("black", &mBackgroundColor);
 	ConvertStrToColor("white", &mCursorColor);
+	mValue = "";
 	displayValue = "";
 
 	if (!node)
@@ -124,10 +125,6 @@
 		mFontHeight = mFont->GetHeight();
 	}
 
-	child = FindNode(node, "text");
-	if (child)  mText = child->value();
-	mLastValue = gui_parse_text(mText);
-
 	child = FindNode(node, "data");
 	if (child)
 	{
@@ -196,7 +193,7 @@
 	lastX = x;
 }
 
-void GUIInput::UpdateTextWidth() {
+void GUIInput::UpdateDisplayText() {
 	void* fontResource = NULL;
 
 	if (mFont) {
@@ -206,14 +203,17 @@
 		return;
 	}
 
-	DataManager::GetValue(mVariable, displayValue);
+	DataManager::GetValue(mVariable, mValue);
 	if (HasMask) {
-		int index, string_size = displayValue.size();
+		int index, string_size = mValue.size();
 		string maskedValue;
 		for (index=0; index<string_size; index++)
 			maskedValue += mMask;
 		displayValue = maskedValue;
+	} else {
+		displayValue = mValue;
 	}
+
 	textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
 }
 
@@ -274,19 +274,19 @@
 		return;
 	}
 
-	int cursorWidth = textWidth;
+	int cursorTextWidth = textWidth; // width of text to the left of the cursor
 
 	if (mCursorLocation != -1) {
 		string cursorDisplay = displayValue;
 		cursorDisplay.resize(mCursorLocation);
-		cursorWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource);
+		cursorTextWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource);
 	}
-	cursorX = mRenderX + cursorWidth + scrollingX;
+	cursorX = mRenderX + cursorTextWidth + scrollingX;
 	if (cursorX >= mRenderX + mRenderW) {
-		scrollingX = mRenderW - cursorWidth;
+		scrollingX = mRenderW - cursorTextWidth;
 		cursorX = mRenderX + mRenderW - CursorWidth;
 	} else if (cursorX < mRenderX) {
-		scrollingX = cursorWidth * -1;
+		scrollingX = cursorTextWidth * -1;
 		cursorX = mRenderX;
 	}
 }
@@ -425,14 +425,14 @@
 
 	if (varName == mVariable) {
 		if (!isLocalChange) {
-			UpdateTextWidth();
+			UpdateDisplayText();
 			HandleTextLocation(TW_INPUT_NO_UPDATE);
 		} else
 			isLocalChange = false;
 		return 0;
 	}
 	if (varName.empty()) {
-		UpdateTextWidth();
+		UpdateDisplayText();
 		HandleTextLocation(TW_INPUT_NO_UPDATE);
 		HandleCursorByText();
 	}
@@ -497,16 +497,16 @@
 	if (HasInputFocus) {
 		if (key == KEYBOARD_BACKSPACE) {
 			//Backspace
-			if (displayValue.size() > 0 && mCursorLocation != 0) {
+			if (mValue.size() > 0 && mCursorLocation != 0) {
 				if (mCursorLocation == -1) {
-					displayValue.resize(displayValue.size() - 1);
+					mValue.resize(mValue.size() - 1);
 				} else {
-					displayValue.erase(mCursorLocation - 1, 1);
+					mValue.erase(mCursorLocation - 1, 1);
 					mCursorLocation--;
 				}
 				isLocalChange = true;
-				DataManager::SetValue(mVariable, displayValue);
-				UpdateTextWidth();
+				DataManager::SetValue(mVariable, mValue);
+				UpdateDisplayText();
 				HandleTextLocation(TW_INPUT_NO_UPDATE);
 				HandleCursorByText();
 			}
@@ -515,15 +515,15 @@
 			isLocalChange = true;
 			if (mCursorLocation == -1) {
 				DataManager::SetValue (mVariable, "");
-				displayValue = "";
+				mValue = "";
 				textWidth = 0;
 				mCursorLocation = -1;
 			} else {
-				displayValue.erase(0, mCursorLocation);
-				DataManager::SetValue(mVariable, displayValue);
-				UpdateTextWidth();
+				mValue.erase(0, mCursorLocation);
+				DataManager::SetValue(mVariable, mValue);
 				mCursorLocation = 0;
 			}
+			UpdateDisplayText();
 			cursorX = mRenderX;
 			scrollingX = 0;
 			mRendered = false;
@@ -536,24 +536,24 @@
 			if (HasDisabled && DisabledList.find((char)key) != string::npos) {
 				return 0;
 			}
-			if (MaxLen != 0 && displayValue.size() >= MaxLen) {
+			if (MaxLen != 0 && mValue.size() >= MaxLen) {
 				return 0;
 			}
 			if (mCursorLocation == -1) {
-				displayValue += key;
+				mValue += key;
 			} else {
-				displayValue.insert(mCursorLocation, 1, key);
+				mValue.insert(mCursorLocation, 1, key);
 				mCursorLocation++;
 			}
 			isLocalChange = true;
-			DataManager::SetValue(mVariable, displayValue);
-			UpdateTextWidth();
+			DataManager::SetValue(mVariable, mValue);
+			UpdateDisplayText();
 			HandleTextLocation(TW_INPUT_NO_UPDATE);
 			HandleCursorByText();
 		} else if (key == KEYBOARD_ACTION) {
 			// Action
 			if (mAction) {
-				unsigned inputLen = displayValue.length();
+				unsigned inputLen = mValue.length();
 				if (inputLen < MinLen)
 					return 0;
 				else if (MaxLen != 0 && inputLen > MaxLen)