summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-07-31 11:52:57 +1000
committerWarwick Allison <warwick.allison@nokia.com>2009-07-31 11:52:57 +1000
commitaa9cf406d62004519ad54596e1c391f9a6439210 (patch)
treedd562b9c296981f2761b76623911be8496c7af84 /src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp
parent987aec28b950e1c9817a20a9dd71afc071cd93ea (diff)
parent56b6a5924008ab5cdbae36e9662eddba923acd5e (diff)
Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt
Diffstat (limited to 'src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp
index e19ac0af8..6a1dcf87d 100644
--- a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp
+++ b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp
@@ -27,6 +27,7 @@
#include "HTMLTextAreaElement.h"
#include "ChromeClient.h"
+#include "CSSValueKeywords.h"
#include "Document.h"
#include "Event.h"
#include "EventNames.h"
@@ -106,32 +107,34 @@ int HTMLTextAreaElement::selectionEnd()
return toRenderTextControl(renderer())->selectionEnd();
}
+static RenderTextControl* rendererAfterUpdateLayout(HTMLTextAreaElement* element)
+{
+ element->document()->updateLayoutIgnorePendingStylesheets();
+ return toRenderTextControl(element->renderer());
+}
+
void HTMLTextAreaElement::setSelectionStart(int start)
{
- if (!renderer())
- return;
- toRenderTextControl(renderer())->setSelectionStart(start);
+ if (RenderTextControl* renderer = rendererAfterUpdateLayout(this))
+ renderer->setSelectionStart(start);
}
void HTMLTextAreaElement::setSelectionEnd(int end)
{
- if (!renderer())
- return;
- toRenderTextControl(renderer())->setSelectionEnd(end);
+ if (RenderTextControl* renderer = rendererAfterUpdateLayout(this))
+ renderer->setSelectionEnd(end);
}
void HTMLTextAreaElement::select()
{
- if (!renderer())
- return;
- toRenderTextControl(renderer())->select();
+ if (RenderTextControl* renderer = rendererAfterUpdateLayout(this))
+ renderer->select();
}
void HTMLTextAreaElement::setSelectionRange(int start, int end)
{
- if (!renderer())
- return;
- toRenderTextControl(renderer())->setSelectionRange(start, end);
+ if (RenderTextControl* renderer = rendererAfterUpdateLayout(this))
+ renderer->setSelectionRange(start, end);
}
void HTMLTextAreaElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
@@ -172,6 +175,15 @@ void HTMLTextAreaElement::parseMappedAttribute(MappedAttribute* attr)
wrap = SoftWrap;
if (wrap != m_wrap) {
m_wrap = wrap;
+
+ if (shouldWrapText()) {
+ addCSSProperty(attr, CSSPropertyWhiteSpace, CSSValuePreWrap);
+ addCSSProperty(attr, CSSPropertyWordWrap, CSSValueBreakWord);
+ } else {
+ addCSSProperty(attr, CSSPropertyWhiteSpace, CSSValuePre);
+ addCSSProperty(attr, CSSPropertyWordWrap, CSSValueNormal);
+ }
+
if (renderer())
renderer()->setNeedsLayoutAndPrefWidthsRecalc();
}
@@ -229,7 +241,8 @@ bool HTMLTextAreaElement::isMouseFocusable() const
void HTMLTextAreaElement::updateFocusAppearance(bool restorePreviousSelection)
{
ASSERT(renderer());
-
+ ASSERT(!document()->childNeedsAndNotInStyleRecalc());
+
if (!restorePreviousSelection || m_cachedSelectionStart < 0) {
#if ENABLE(ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
// Devices with trackballs or d-pads may focus on a textarea in route