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

List:       kde-commits
Subject:    KDE/kdelibs/khtml/xml
From:       Viacheslav Tokarev <tsjoker () gmail ! com>
Date:       2009-03-27 17:32:41
Message-ID: 1238175161.385458.22388.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 945551 by vtokarev:

Use remaind bit in NodeImpl for storing :hover dependency of element on itself
which appeared to be very popular

 M  +2 -1      dom_nodeimpl.cpp  
 M  +3 -1      dom_nodeimpl.h  
 M  +16 -0     dom_restyler.cpp  


--- trunk/KDE/kdelibs/khtml/xml/dom_nodeimpl.cpp #945550:945551
@@ -86,7 +86,8 @@
       m_implicit( false ),
       m_htmlCompat( false ),
       m_hasClass( false ),
-      m_hasCombinedStyle( false )
+      m_hasCombinedStyle( false ),
+      m_hasHoverDependency(false)
 {
 }
 
--- trunk/KDE/kdelibs/khtml/xml/dom_nodeimpl.h #945550:945551
@@ -265,6 +265,8 @@
     void setHasChangedChild( bool b = true ) { m_hasChangedChild = b; }
     void setInDocument(bool b=true) { m_inDocument = b; }
     void setHTMLCompat(bool b) { m_htmlCompat = b; }
+    bool hasHoverDependency() { return m_hasHoverDependency; }
+    void setHasHoverDependency(bool b = true) { m_hasHoverDependency = b; }
     virtual void setFocus(bool b=true) { m_focused = b; }
     virtual void setActive(bool b=true) { m_active = b; }
     virtual void setHovered(bool b=true) { m_hovered = b; }
@@ -524,7 +526,7 @@
     bool m_htmlCompat : 1; // true if element was created in HTML compat mode
     bool m_hasClass : 1;   // true if element has a class property, as relevant to \
                CSS
     bool m_hasCombinedStyle : 1; // true if element has inline styles and \
                presentational styles
-    bool m_unused : 1; // free bit
+    bool m_hasHoverDependency : 1; // true if element has hover dependency on itself
 };
 
 // this is the full Node Implementation with parents and children.
--- trunk/KDE/kdelibs/khtml/xml/dom_restyler.cpp #945550:945551
@@ -32,6 +32,10 @@
 void DynamicDomRestyler::addDependency(ElementImpl* subject, ElementImpl* \
dependency, StructuralDependencyType type)  {
     assert(type < LastStructuralDependency);
+    if (subject == dependency && type == HoverDependency) {
+        subject->setHasHoverDependency(true);
+        return;
+    }
 
     dependency_map[type].insert(dependency, subject);
     reverse_map.insert(subject,dependency);
@@ -39,12 +43,19 @@
 
 void DynamicDomRestyler::removeDependency(ElementImpl* subject, ElementImpl* \
dependency, StructuralDependencyType type)  {
+    if (subject == dependency && type == HoverDependency) {
+        subject->setHasHoverDependency(false);
+        return;
+    }
     dependency_map[type].remove(dependency, subject);
     // don't remove from reverse_map as there might be other dependencies to the \
same element  }
 
 void DynamicDomRestyler::removeDependencies(ElementImpl* subject, \
StructuralDependencyType type)  {
+    if (type == HoverDependency)
+        subject->setHasHoverDependency(false);
+
     QSet<ElementImpl*>* my_dependencies = reverse_map.find(subject);
 
     if (!my_dependencies) return;
@@ -63,6 +74,8 @@
 
 void DynamicDomRestyler::resetDependencies(ElementImpl* subject)
 {
+    subject->setHasHoverDependency(false);
+
     QSet<ElementImpl*>* my_dependencies = reverse_map.find(subject);
 
     if (!my_dependencies) return;
@@ -83,6 +96,9 @@
 void DynamicDomRestyler::restyleDependent(ElementImpl* dependency, \
StructuralDependencyType type)  {
     assert(type < LastStructuralDependency);
+    if (type == HoverDependency && dependency->hasHoverDependency())
+        dependency->setChanged(true);
+
     QSet<ElementImpl*>* dep = dependency_map[type].find(dependency);
 
     if (!dep) return;


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

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