Summary: | (testcase) value of textarea not shown after insert by dom functions | ||
---|---|---|---|
Product: | [Applications] konqueror | Reporter: | T Zachmann <t.zachmann> |
Component: | khtml forms | Assignee: | Konqueror Developers <konq-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | openSUSE | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Test case 1
Test case 2 |
Description
T Zachmann
2002-10-08 17:02:52 UTC
Nearly the same problem exists for textarea. The text in the textarea is not shown. It is shown however in the DOM tree. Thorsten <html> <head> <script> function start() { text = document.createTextNode( "Hallo das ist die Vorbelegung" ); input = document.createElement( "textarea" ); input.setAttribute("name", "new"); input.appendChild( text ); node = document.createElement( "form" ); node.appendChild( input ) ; document.body.appendChild( node ); } </script> </head> <body> <form name="Formular"> <input type="button" value="Start" onClick="start()"><br> </body> </html> The testcase in the initial report works now, with the current Konqueror (CVS, soon 3.1-rc1). I see a button with "hugo" on it when pressing Start. The testcase in the comment still doesn't work though, the textarea doesn't get the text, indeed. KHTML bug (I think in HTMLTextAreaElementImpl but I'm not sure where), reassigning to khtml. Created attachment 4647 [details]
Test case 1
First testcase of this bug report
Created attachment 4648 [details]
Test case 2
Second test case specified in the bug report.
CVS commit by savernik: Fixed spurious deletion of textarea contents. Original patch by me, improved patch by Germain Garand. CCMAIL: 49828-done@bugs.kde.org, 48879-done@bugs.kde.org, 86916-done@bugs.kde.org M +12 -0 ChangeLog 1.283 M +7 -3 html/html_formimpl.cpp 1.383 M +4 -3 html/html_formimpl.h 1.155 M +3 -1 rendering/render_form.cpp 1.271 --- kdelibs/khtml/html/html_formimpl.cpp #1.382:1.383 @@ -2204,4 +2204,5 @@ HTMLTextAreaElementImpl::HTMLTextAreaEle m_wrap = ta_Virtual; m_dirtyvalue = true; + m_initialized = false; m_unsubmittedFormChange = false; } @@ -2313,8 +2314,10 @@ DOMString HTMLTextAreaElementImpl::value { if ( m_dirtyvalue) { - if ( m_render ) + if ( m_render && m_initialized ) m_value = static_cast<RenderTextArea*>( m_render )->text(); - else + else { m_value = defaultValue().string(); + m_initialized = true; + } m_dirtyvalue = false; @@ -2332,4 +2335,5 @@ void HTMLTextAreaElementImpl::setValue(D m_value = str.replace( '\r', '\n' ); m_dirtyvalue = false; + m_initialized = true; setChanged(true); } --- kdelibs/khtml/html/html_formimpl.h #1.154:1.155 @@ -537,6 +537,7 @@ protected: WrapMethod m_wrap; QString m_value; - bool m_dirtyvalue; - bool m_unsubmittedFormChange; + bool m_dirtyvalue: 1; + bool m_unsubmittedFormChange: 1; + bool m_initialized: 1; }; --- kdelibs/khtml/rendering/render_form.cpp #1.270:1.271 @@ -1587,6 +1587,8 @@ void RenderTextArea::setStyle(RenderStyl RenderFormElement::setStyle(_style); + widget()->blockSignals(true); widget()->setAlignment( _style->direction() == RTL ? Qt::AlignRight : Qt::AlignLeft ); + widget()->blockSignals(false); scrollbarsStyled = false; --- kdelibs/khtml/ChangeLog #1.282:1.283 @@ -1,2 +1,14 @@ +2004-09-02 Leo Savernik <l.savernik@aon.at> + + * html_formimpl.{cpp,h} (HTMLTextAreaElementImpl::value): + Only take text from RenderTextArea when it has been fully initialized. + Mark it fully initialized when RenderTextArea has been initialized + from the DOM. + (HTMLTextAreaElementImpl::setValue): Mark element as initialized after + setting. + * render_form.cpp (RenderTextArea::setStyle): + Block signals on call to QTextEdit::setAlignment. Otherwise, a bogus + textChanged signal is emitted. + 2004-08-27 Germain Garand <germain@ebooksfrance.org> CVS commit by savernik: Backport: Fixed spurious deletion of textarea contents. CCMAIL: 49828@bugs.kde.org, 48879@bugs.kde.org, 86916@bugs.kde.org M +7 -3 html/html_formimpl.cpp 1.380.2.2 M +4 -3 html/html_formimpl.h 1.154.2.1 M +3 -1 rendering/render_form.cpp 1.269.2.2 --- kdelibs/khtml/html/html_formimpl.cpp #1.380.2.1:1.380.2.2 @@ -2204,4 +2204,5 @@ HTMLTextAreaElementImpl::HTMLTextAreaEle m_wrap = ta_Virtual; m_dirtyvalue = true; + m_initialized = false; m_unsubmittedFormChange = false; } @@ -2313,8 +2314,10 @@ DOMString HTMLTextAreaElementImpl::value { if ( m_dirtyvalue) { - if ( m_render ) + if ( m_render && m_initialized ) m_value = static_cast<RenderTextArea*>( m_render )->text(); - else + else { m_value = defaultValue().string(); + m_initialized = true; + } m_dirtyvalue = false; @@ -2332,4 +2335,5 @@ void HTMLTextAreaElementImpl::setValue(D m_value = str.replace( '\r', '\n' ); m_dirtyvalue = false; + m_initialized = true; setChanged(true); } --- kdelibs/khtml/html/html_formimpl.h #1.154:1.154.2.1 @@ -537,6 +537,7 @@ protected: WrapMethod m_wrap; QString m_value; - bool m_dirtyvalue; - bool m_unsubmittedFormChange; + bool m_dirtyvalue: 1; + bool m_unsubmittedFormChange: 1; + bool m_initialized: 1; }; --- kdelibs/khtml/rendering/render_form.cpp #1.269.2.1:1.269.2.2 @@ -1587,6 +1587,8 @@ void RenderTextArea::setStyle(RenderStyl RenderFormElement::setStyle(_style); + widget()->blockSignals(true); widget()->setAlignment( _style->direction() == RTL ? Qt::AlignRight : Qt::AlignLeft ); + widget()->blockSignals(false); scrollbarsStyled = false; |