mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-02 15:15:23 +00:00
Bug 230474 - Bug 829606 - No longer scroll to the beginning of the editor when the value is changed in a text field. r=bz
This commit is contained in:
parent
6bcee6bb6d
commit
22e270dcf4
@ -1899,19 +1899,6 @@ nsTextEditorState::SetValue(const nsAString& aValue, bool aUserInput,
|
|||||||
selPriv->EndBatchChanges();
|
selPriv->EndBatchChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This second check _shouldn't_ be necessary, but let's be safe.
|
|
||||||
if (!weakFrame.IsAlive()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nsIScrollableFrame* scrollableFrame = do_QueryFrame(mBoundFrame->GetFirstPrincipalChild());
|
|
||||||
if (scrollableFrame)
|
|
||||||
{
|
|
||||||
// Scroll the upper left corner of the text control's
|
|
||||||
// content area back into view.
|
|
||||||
scrollableFrame->ScrollTo(nsPoint(0, 0), nsIScrollableFrame::INSTANT);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (!mValue) {
|
if (!mValue) {
|
||||||
mValue = new nsCString;
|
mValue = new nsCString;
|
||||||
|
@ -52,6 +52,7 @@ MOCHITEST_FILES = \
|
|||||||
test_input_sanitization.html \
|
test_input_sanitization.html \
|
||||||
test_valueasdate_attribute.html \
|
test_valueasdate_attribute.html \
|
||||||
test_input_file_b2g_disabled.html \
|
test_input_file_b2g_disabled.html \
|
||||||
|
test_input_textarea_set_value_no_scroll.html \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
include $(topsrcdir)/config/rules.mk
|
include $(topsrcdir)/config/rules.mk
|
||||||
|
@ -0,0 +1,122 @@
|
|||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<!--
|
||||||
|
https://bugzilla.mozilla.org/show_bug.cgi?id=829606
|
||||||
|
-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test for Bug 829606</title>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||||
|
<script type="application/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||||
|
<script type="application/javascript;version=1.7">
|
||||||
|
|
||||||
|
/** Test for Bug 829606 **/
|
||||||
|
/*
|
||||||
|
* This test checks that setting .value on an text field (input or textarea)
|
||||||
|
* doesn't scroll the field to its beginning.
|
||||||
|
*/
|
||||||
|
|
||||||
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
|
var gTestRunner = null;
|
||||||
|
|
||||||
|
function test(aElementName)
|
||||||
|
{
|
||||||
|
var element = document.getElementsByTagName(aElementName)[0];
|
||||||
|
element.focus();
|
||||||
|
|
||||||
|
var baseSnapshot = snapshotWindow(window);
|
||||||
|
|
||||||
|
// This is a sanity check.
|
||||||
|
var s2 = snapshotWindow(window);
|
||||||
|
var results = compareSnapshots(baseSnapshot, snapshotWindow(window), true);
|
||||||
|
ok(results[0], "sanity check: screenshots should be the same");
|
||||||
|
|
||||||
|
element.selectionStart = element.selectionEnd = element.value.length;
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
synthesizeKey('f', {});
|
||||||
|
|
||||||
|
var selectionAtTheEndSnapshot = snapshotWindow(window);
|
||||||
|
results = compareSnapshots(baseSnapshot, selectionAtTheEndSnapshot, false);
|
||||||
|
ok(results[0], "after appending a character, string should have changed");
|
||||||
|
|
||||||
|
element.value = element.value;
|
||||||
|
var tmpSnapshot = snapshotWindow(window);
|
||||||
|
|
||||||
|
results = compareSnapshots(baseSnapshot, tmpSnapshot, false);
|
||||||
|
ok(results[0], "re-settig the value should change nothing");
|
||||||
|
|
||||||
|
results = compareSnapshots(selectionAtTheEndSnapshot, tmpSnapshot, true);
|
||||||
|
ok(results[0], "re-settig the value should change nothing");
|
||||||
|
|
||||||
|
element.selectionStart = element.selectionEnd = 0;
|
||||||
|
element.blur();
|
||||||
|
|
||||||
|
gTestRunner.next();
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This test checks that when a textarea has a long list of values and the
|
||||||
|
// textarea's value is then changed, the values are shown correctly.
|
||||||
|
function testCorrectUpdateOnScroll()
|
||||||
|
{
|
||||||
|
var textarea = document.createElement('textarea');
|
||||||
|
textarea.rows = 5;
|
||||||
|
textarea.cols = 10;
|
||||||
|
textarea.value = 'a\nb\nc\nd';
|
||||||
|
document.getElementById('content').appendChild(textarea);
|
||||||
|
|
||||||
|
var baseSnapshot = snapshotWindow(window);
|
||||||
|
|
||||||
|
textarea.value = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n';
|
||||||
|
textarea.selectionStart = textarea.selectionEnd = textarea.value.length;
|
||||||
|
|
||||||
|
var fullSnapshot = snapshotWindow(window);
|
||||||
|
var results = compareSnapshots(baseSnapshot, fullSnapshot, false);
|
||||||
|
ok(results[0], "sanity check: screenshots should not be the same");
|
||||||
|
|
||||||
|
textarea.value = 'a\nb\nc\nd';
|
||||||
|
|
||||||
|
var tmpSnapshot = snapshotWindow(window);
|
||||||
|
results = compareSnapshots(baseSnapshot, tmpSnapshot, true);
|
||||||
|
ok(results[0], "textarea view should look like the beginning");
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
gTestRunner.next();
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function runTest()
|
||||||
|
{
|
||||||
|
test('input');
|
||||||
|
yield;
|
||||||
|
test('textarea');
|
||||||
|
yield;
|
||||||
|
testCorrectUpdateOnScroll();
|
||||||
|
yield;
|
||||||
|
SimpleTest.finish();
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
|
||||||
|
gTestRunner = runTest();
|
||||||
|
|
||||||
|
SimpleTest.waitForFocus(function() {
|
||||||
|
gTestRunner.next();
|
||||||
|
});;
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=829606">Mozilla Bug 829606</a>
|
||||||
|
<p id="display"></p>
|
||||||
|
<div id="content">
|
||||||
|
<textarea rows='1' cols='5'>this is a \n long text</textarea>
|
||||||
|
<input size='5' value="this is a very long text">
|
||||||
|
</div>
|
||||||
|
<pre id="test">
|
||||||
|
</pre>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user