[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/3.5/kdelibs/khtml
From:       Harri Porten <porten () kde ! org>
Date:       2007-02-18 11:41:18
Message-ID: 1171798878.802434.5664.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 634796 by porten:

fixed bug #120582 ("cloneNode does not clone `checked' attribute in form
inputs"). Had my own patch ready but then discovered Webcore changeset 4457
and applied the relevant part of it to harmonize the code.


 M  +5 -0      ChangeLog  
 M  +11 -5     html/html_formimpl.cpp  
 M  +3 -1      html/html_formimpl.h  


--- branches/KDE/3.5/kdelibs/khtml/ChangeLog #634795:634796
@@ -1,3 +1,8 @@
+2007-02-18  Harri Porten  <porten@kde.org>
+
+	* html/html_formimpl.cpp: fixed bug #120582 ("cloneNode does not
+	clone `checked' attribute in form inputs")
+
 2007-02-11  Harri Porten  <porten@kde.org>
 
 	* ecma/kjs_window.cpp (executeOpenWindow): fixed location href
--- branches/KDE/3.5/kdelibs/khtml/html/html_formimpl.cpp #634795:634796
@@ -1222,6 +1222,8 @@
     m_size = 20;
     m_clicked = false;
     m_checked = false;
+    m_defaultChecked = false; 
+    m_useDefaultChecked = true; 
     m_indeterminate = false;
 
     m_haveType = false;
@@ -1327,7 +1329,7 @@
         return QString::fromLatin1("."); // empty string, avoid restoring
     case CHECKBOX:
     case RADIO:
-        return QString::fromLatin1(m_checked ? "on" : "off");
+        return QString::fromLatin1(checked() ? "on" : "off");
     case TEXT:
         if (autoComplete() && value() != getAttribute(ATTR_VALUE) && getDocument()->view())
             getDocument()->view()->addFormCompletionItem(name().string(), value().string());
@@ -1390,7 +1392,9 @@
         }
         break;
     case ATTR_CHECKED:
-        // WebCore has m_defaultChecked and m_useDefaultChecked code here....
+	m_defaultChecked = attr->val(); 
+ 	if (m_useDefaultChecked) // We only need to setChanged if the form is looking 
+	    setChanged();        // at the default checked state right now. 
         break;
     case ATTR_MAXLENGTH:
     {
@@ -1462,7 +1466,7 @@
                     nvalue += value[i];
             m_value = nvalue;
         }
-        m_checked = (getAttribute(ATTR_CHECKED) != 0);
+        m_defaultChecked = (getAttribute(ATTR_CHECKED) != 0);
         if ( m_type == IMAGE )
             addHTMLAlignment( getAttribute( ATTR_ALIGN ) );
         m_inited = true;
@@ -1657,7 +1661,8 @@
 void HTMLInputElementImpl::reset()
 {
     setValue(getAttribute(ATTR_VALUE));
-    setChecked(getAttribute(ATTR_CHECKED) != 0);
+    m_useDefaultChecked = true; 
+    m_checked = m_defaultChecked; 
     setIndeterminate(true);
 }
 
@@ -1666,7 +1671,8 @@
     if (m_form && m_type == RADIO && _checked && !name().isEmpty())
         m_form->radioClicked(this);
 
-    if (m_checked == _checked) return;
+    if (checked() == _checked) return;
+    m_useDefaultChecked = false;
     m_checked = _checked;
 
 //     setIndeterminate(false);
--- branches/KDE/3.5/kdelibs/khtml/html/html_formimpl.h #634795:634796
@@ -270,7 +270,7 @@
 
     bool autoComplete() const { return m_autocomplete; }
 
-    bool checked() const { return m_checked; }
+    bool checked() const { return m_useDefaultChecked ? m_defaultChecked : m_checked; }
     void setChecked(bool);
     bool indeterminate() const { return m_indeterminate; }
     void setIndeterminate(bool);
@@ -332,6 +332,8 @@
     typeEnum m_type : 4;
     bool m_clicked : 1 ;
     bool m_checked : 1;
+    bool m_defaultChecked : 1; // could do without by checking ATTR_CHECKED
+    bool m_useDefaultChecked : 1;
     bool m_indeterminate : 1;
     bool m_haveType : 1;
     bool m_activeSubmit : 1;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic