| Index: Source/core/html/HTMLOptionElement.cpp
|
| diff --git a/Source/core/html/HTMLOptionElement.cpp b/Source/core/html/HTMLOptionElement.cpp
|
| index 7b5bc1ff0043e6e5f1a0c07259eb15684654972e..cf346f448327afaa8d97e56c1f5127b743feb2fb 100644
|
| --- a/Source/core/html/HTMLOptionElement.cpp
|
| +++ b/Source/core/html/HTMLOptionElement.cpp
|
| @@ -81,8 +81,15 @@ PassRefPtr<HTMLOptionElement> HTMLOptionElement::createForJSConstructor(Document
|
|
|
| void HTMLOptionElement::attach(const AttachContext& context)
|
| {
|
| - updateNonRenderStyle();
|
| - HTMLElement::attach(context);
|
| + AttachContext optionContext(context);
|
| + if (context.resolvedStyle) {
|
| + ASSERT(!m_style || m_style == context.resolvedStyle);
|
| + m_style = context.resolvedStyle;
|
| + } else {
|
| + updateNonRenderStyle();
|
| + optionContext.resolvedStyle = m_style.get();
|
| + }
|
| + HTMLElement::attach(optionContext);
|
| }
|
|
|
| void HTMLOptionElement::detach(const AttachContext& context)
|
| @@ -296,19 +303,16 @@ RenderStyle* HTMLOptionElement::nonRendererStyle() const
|
|
|
| PassRefPtr<RenderStyle> HTMLOptionElement::customStyleForRenderer()
|
| {
|
| + updateNonRenderStyle();
|
| return m_style;
|
| }
|
|
|
| -void HTMLOptionElement::willRecalcStyle(StyleRecalcChange change)
|
| +void HTMLOptionElement::didRecalcStyle(StyleRecalcChange change)
|
| {
|
| - if (!needsAttach() && (needsStyleRecalc() || change >= Inherit))
|
| - updateNonRenderStyle();
|
| -}
|
| + if (change == NoChange)
|
| + return;
|
|
|
| -void HTMLOptionElement::didRecalcStyle(StyleRecalcChange)
|
| -{
|
| - // FIXME: This is nasty, we ask our owner select to repaint even if the new
|
| - // style is exactly the same.
|
| + // FIXME: We ask our owner select to repaint regardless of which property changed.
|
| if (HTMLSelectElement* select = ownerSelectElement()) {
|
| if (RenderObject* renderer = select->renderer())
|
| renderer->repaint();
|
|
|