Bug 1343037 part 5. Make <textarea> behave more like <input type=text> in terms of reset behavior. r=ehsan

In particular this ensures that our ValueChanged() is correctly set to false
when we call SetValue() on our editor state with our default value.  We will be
relying on this very shortly.

MozReview-Commit-ID: AIIIHwfQPQE
This commit is contained in:
Boris Zbarsky 2017-03-09 14:44:04 -05:00
Родитель 8d88c68a9d
Коммит 56f5644356
1 изменённых файлов: 16 добавлений и 9 удалений

Просмотреть файл

@ -324,11 +324,14 @@ nsresult
HTMLTextAreaElement::SetValueInternal(const nsAString& aValue, HTMLTextAreaElement::SetValueInternal(const nsAString& aValue,
uint32_t aFlags) uint32_t aFlags)
{ {
// Need to set the value changed flag here, so that // Need to set the value changed flag here if our value has in fact changed
// nsTextControlFrame::UpdateValueDisplay retrieves the correct value // (i.e. if eSetValue_Notify is in aFlags), so that
// if needed. // nsTextControlFrame::UpdateValueDisplay retrieves the correct value if
SetValueChanged(true); // needed.
aFlags |= nsTextEditorState::eSetValue_Notify; if (aFlags & nsTextEditorState::eSetValue_Notify) {
SetValueChanged(true);
}
if (!mState.SetValue(aValue, aFlags)) { if (!mState.SetValue(aValue, aFlags)) {
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
} }
@ -350,7 +353,8 @@ HTMLTextAreaElement::SetValue(const nsAString& aValue)
GetValueInternal(currentValue, true); GetValueInternal(currentValue, true);
nsresult rv = nsresult rv =
SetValueInternal(aValue, nsTextEditorState::eSetValue_ByContent); SetValueInternal(aValue, nsTextEditorState::eSetValue_ByContent |
nsTextEditorState::eSetValue_Notify);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
if (mFocusedValue.Equals(currentValue)) { if (mFocusedValue.Equals(currentValue)) {
@ -363,7 +367,9 @@ HTMLTextAreaElement::SetValue(const nsAString& aValue)
NS_IMETHODIMP NS_IMETHODIMP
HTMLTextAreaElement::SetUserInput(const nsAString& aValue) HTMLTextAreaElement::SetUserInput(const nsAString& aValue)
{ {
return SetValueInternal(aValue, nsTextEditorState::eSetValue_BySetUserInput); return SetValueInternal(aValue,
nsTextEditorState::eSetValue_BySetUserInput |
nsTextEditorState::eSetValue_Notify);
} }
NS_IMETHODIMP NS_IMETHODIMP
@ -1043,10 +1049,11 @@ HTMLTextAreaElement::Reset()
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsAutoString resetVal; nsAutoString resetVal;
GetDefaultValue(resetVal); GetDefaultValue(resetVal);
rv = SetValue(resetVal); SetValueChanged(false);
rv = SetValueInternal(resetVal, nsTextEditorState::eSetValue_Internal);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
SetValueChanged(false);
return NS_OK; return NS_OK;
} }