From 14138d9f74c7b56e600166a993ea62818fa0f840 Mon Sep 17 00:00:00 2001 From: Sultan Qasim Khan Date: Mon, 4 Apr 2016 04:11:25 -0400 Subject: 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 --- gui/input.cpp | 58 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'gui/input.cpp') diff --git a/gui/input.cpp b/gui/input.cpp index 4bf01ada2..ec370abe5 100644 --- a/gui/input.cpp +++ b/gui/input.cpp @@ -71,6 +71,7 @@ GUIInput::GUIInput(xml_node<>* node) CursorWidth = 3; ConvertStrToColor("black", &mBackgroundColor); ConvertStrToColor("white", &mCursorColor); + mValue = ""; displayValue = ""; if (!node) @@ -124,10 +125,6 @@ GUIInput::GUIInput(xml_node<>* node) 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 @@ void GUIInput::HandleTextLocation(int x) { lastX = x; } -void GUIInput::UpdateTextWidth() { +void GUIInput::UpdateDisplayText() { void* fontResource = NULL; if (mFont) { @@ -206,14 +203,17 @@ void GUIInput::UpdateTextWidth() { 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= 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 @@ int GUIInput::NotifyVarChange(const std::string& varName, const std::string& val 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 @@ int GUIInput::NotifyCharInput(int key) 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 @@ int GUIInput::NotifyCharInput(int key) 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 @@ int GUIInput::NotifyCharInput(int key) 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) -- cgit v1.2.3