Fix for 3785211. Make sure to do a layout with the old position before doing a layou...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Dec 2004 01:13:40 +0000 (01:13 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Dec 2004 01:13:40 +0000 (01:13 +0000)
This is actually a regression from my positioned object DHTML optimization.

        Reviewed by kocienda

        * khtml/rendering/render_object.cpp:
        (RenderObject::setStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8211 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/fast/dynamic/012-expected.txt [new file with mode: 0644]
LayoutTests/fast/dynamic/012.html [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/closed.png [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/open.png [new file with mode: 0644]
WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_object.cpp

diff --git a/LayoutTests/fast/dynamic/012-expected.txt b/LayoutTests/fast/dynamic/012-expected.txt
new file mode 100644 (file)
index 0000000..12ec83b
--- /dev/null
@@ -0,0 +1,58 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {H2} at (0,0) size 784x28
+        RenderText {TEXT} at (0,0) size 220x28
+          text run at (0,0) width 220: "Block Collapse Demo"
+      RenderBlock {P} at (0,47) size 784x18
+        RenderText {TEXT} at (0,0) size 687x18
+          text run at (0,0) width 304: "This table below has three hierarchical sections. "
+          text run at (304,0) width 383: "Collapsing a section should cause those below it to move up."
+      RenderBlock {P} at (0,81) size 784x18
+        RenderText {TEXT} at (0,0) size 765x18
+          text run at (0,0) width 765: "This works on the latest Windows IE and Mozilla Firefox (Win and Mac) but not on Safari 1.2.3 (v125.9) {or 2.0 (146)}."
+      RenderBlock {P} at (0,115) size 784x18
+        RenderText {TEXT} at (0,0) size 747x18
+          text run at (0,0) width 579: "Note that the second section is collapsed when the page opens and expanding it works fine. "
+          text run at (579,0) width 168: "Just the collapse is broken."
+      RenderBlock {DIV} at (0,149) size 784x148
+        RenderBlock {HR} at (0,0) size 784x2 [border: (1px inset #000000)]
+        RenderBlock {DIV} at (0,10) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 75x18
+            text run at (16,2) width 75: " Block One"
+        RenderBlock {DIV} at (0,30) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 78x18
+            text run at (16,2) width 78: " Block Two"
+        RenderBlock {DIV} at (0,50) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 88x18
+            text run at (16,2) width 88: " Block Three"
+        RenderBlock {DIV} at (0,70) size 784x68
+          RenderTable {TABLE} at (0,0) size 784x68
+            RenderTableSection {TBODY} at (0,0) size 0x68
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,2) size 32x20 [r=0 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,2) size 746x20 [r=0 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 65x18
+                    text run at (1,1) width 65: "This is the"
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,24) size 32x20 [r=1 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,24) size 746x20 [r=1 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 69x18
+                    text run at (1,1) width 69: "contents of"
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,46) size 32x20 [r=2 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,46) size 746x20 [r=2 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 74x18
+                    text run at (1,1) width 74: "block three."
+        RenderBlock {HR} at (0,146) size 784x2 [border: (1px inset #000000)]
diff --git a/LayoutTests/fast/dynamic/012.html b/LayoutTests/fast/dynamic/012.html
new file mode 100644 (file)
index 0000000..74772b4
--- /dev/null
@@ -0,0 +1,68 @@
+<html>
+  <head>
+    <title>Block Collapse Demo</title>
+    <script>
+      function toggleBlock( pBlockName )
+      {
+        var theImage = document.getElementById( "I-" + pBlockName )
+        var theBlock = document.getElementById( "T-" + pBlockName )
+        
+        if (theImage.alt == "shown")
+        {
+          theImage.src   = "resources/closed.png"
+          theImage.alt   = "hidden"
+          theBlock.style.visibility = "hidden"
+          theBlock.style.position   = "absolute"
+        }
+        else
+        {
+          theImage.src   = "resources/open.png"
+          theImage.alt   = "shown"
+          theBlock.style.position   = "static"
+          theBlock.style.visibility = "visible"
+        }
+      }
+    </script>
+  </head>
+  <body onload="document.body.offsetTop; toggleBlock('Alpha')">
+    <h2>Block Collapse Demo</h2>
+    <p>This table below has three hierarchical sections.  Collapsing a section should cause those below it to move up.</p>
+    <p>This works on the latest Windows IE and Mozilla Firefox (Win and Mac) but not on Safari 1.2.3 (v125.9) {or 2.0 (146)}.</p>
+    <p>Note that the second section is collapsed when the page opens and expanding it works fine.  Just the collapse is broken.</p>
+
+
+    <div>
+      <hr>
+      <div onclick="toggleBlock('Alpha')" style="font-weight:bold;cursor:pointer;"><img src="resources/open.png" alt="shown" id="I-Alpha">&nbsp;Block One</div>
+      <div id="T-Alpha">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block one.</td></tr>
+        </table>
+      </div>
+      
+      <div onclick="toggleBlock('Beta')" style="font-weight:bold;cursor:pointer;"><img src="resources/closed.png" alt="hidden" id="I-Beta">&nbsp;Block Two</div>
+      
+      <div id="T-Beta" style="visibility:hidden;position:absolute;">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block two.</td></tr>
+        </table>
+      </div>
+      
+      <div onclick="toggleBlock('Gamma')" style="font-weight:bold;cursor:pointer;"><img src="resources/open.png" alt="shown" id="I-Gamma">&nbsp;Block Three</div>
+      
+      <div id="T-Gamma">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block three.</td></tr>
+        </table>
+      </div>
+      <hr>
+    </div>
+  </body>
+</html>
+
diff --git a/LayoutTests/fast/dynamic/resources/closed.png b/LayoutTests/fast/dynamic/resources/closed.png
new file mode 100644 (file)
index 0000000..4fdba37
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/closed.png differ
diff --git a/LayoutTests/fast/dynamic/resources/open.png b/LayoutTests/fast/dynamic/resources/open.png
new file mode 100644 (file)
index 0000000..7889e1e
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/open.png differ
index dcf754f..ea9dfbe 100644 (file)
@@ -1,5 +1,15 @@
 2004-12-14  David Hyatt  <hyatt@apple.com>
 
 2004-12-14  David Hyatt  <hyatt@apple.com>
 
+       Fix for 3785211. Make sure to do a layout with the old position before doing a layout after changing to the new position.
+       This is actually a regression from my positioned object DHTML optimization.
+       
+        Reviewed by kocienda
+
+        * khtml/rendering/render_object.cpp:
+        (RenderObject::setStyle):
+
+2004-12-14  David Hyatt  <hyatt@apple.com>
+
        Make sure the class attribute works when newlines are present in the attribute.
 
         Reviewed by kocienda
        Make sure the class attribute works when newlines are present in the attribute.
 
         Reviewed by kocienda
index 74ba9be..c5963aa 100644 (file)
@@ -1561,6 +1561,11 @@ void RenderObject::setStyle(RenderStyle *style)
              m_style->opacity() != style->opacity()))
             layer()->repaintIncludingDescendants();
 
              m_style->opacity() != style->opacity()))
             layer()->repaintIncludingDescendants();
 
+        // When a layout hint happens and an object's position style changes, we have to do a layout
+        // to dirty the render tree using the old position value now.
+        if (d == RenderStyle::Layout && m_parent && m_style->position() != style->position())
+            setNeedsLayoutAndMinMaxRecalc();
+        
         if (isFloating() && (m_style->floating() != style->floating()))
             // For changes in float styles, we need to conceivably remove ourselves
             // from the floating objects list.
         if (isFloating() && (m_style->floating() != style->floating()))
             // For changes in float styles, we need to conceivably remove ourselves
             // from the floating objects list.