Bug 128738 - problem with new slashdot.org design
Summary: problem with new slashdot.org design
Status: RESOLVED FIXED
Alias: None
Product: konqueror
Classification: Applications
Component: khtml renderer (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: Konqueror Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-06-07 13:54 UTC by Christophe Prud'Homme
Modified: 2006-06-14 00:18 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
screen snapshot (23.55 KB, image/png)
2006-06-07 14:46 UTC, Christophe Prud'Homme
Details
screen snapshot (23.85 KB, image/png)
2006-06-07 14:47 UTC, Christophe Prud'Homme
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Christophe Prud'Homme 2006-06-07 13:54:14 UTC
Version:           3.5.3 (using KDE 3.5.3, Debian Package 4:3.5.3-1 (testing/unstable))
Compiler:          Target: x86_64-linux-gnu
OS:                Linux (x86_64) release 2.6.16-1-amd64-k8-smp

slashdot.org just changed its design. konqueror has problems 
showing it properly:

 1- some of the menus on the left are aggregated at the top left of
   the page
 2- if the window is resized, then the menus appear properly at
   their rightful place.
 3- if the windows was resized and menus ok, and I click on a new
   menu item, the same problem described in (1) occurs and I need
   to resize like in (2) to correct it.


Since the rendering bug gets fixed when the konqueror window
is resized, my conclusion is that it is a konqueror bug.

Best regards
Comment 1 Christophe Prud'Homme 2006-06-07 14:46:06 UTC
Created attachment 16501 [details]
screen snapshot

menus are scrambled on the left
Comment 2 Christophe Prud'Homme 2006-06-07 14:47:02 UTC
Created attachment 16502 [details]
screen snapshot

after resize, menus are ok
Comment 3 Allan Sandfeld 2006-06-07 15:02:26 UTC
Confirmed. There are lot of things wrong with the redesign, but this is most likely a Konqueror bug.
Comment 4 Timo Springmann 2006-06-07 15:33:22 UTC
You also can mark the broken menu with your mouse + left button and it suddenly appears at the right position.
Comment 5 Denys Duchier 2006-06-07 16:10:42 UTC
on my machine, when initally loading the slashdot page the menus are properly laid out for a brief instant, and then all but the topmost get warped into the top left corner.  subsequently, any operation affecting size gets the menus back into place.  Switching between existing tabs sometimes has a (partial) effect, sometimes not.
Comment 6 Allan Sandfeld 2006-06-13 23:59:39 UTC
The content is misplaced after this JS-statement:
 this.el.style.overflow = "hidden";

It seems creating the newly created overflow clip gets an incorrect position. I am still unsure why, but so far the following patch can solve it:

Index: xml/dom_nodeimpl.cpp
===================================================================
--- xml/dom_nodeimpl.cpp        (revision 550627)
+++ xml/dom_nodeimpl.cpp        (working copy)
@@ -781,8 +781,10 @@
     EDisplay display2 = s2 ? s2->display() : NONE;
     EPosition position1 = s1 ? s1->position() : STATIC;
     EPosition position2 = s2 ? s2->position() : STATIC;
+    EOverflow overflow1 = s1 ? s1->overflow() : OVISIBLE;
+    EOverflow overflow2 = s2 ? s2->overflow() : OVISIBLE;

-    if (display1 != display2 || position1 != position2)
+    if (display1 != display2 || position1 != position2 || overflow1 != overflow2)
         ch = Detach;
     else if ( !s1 || !s2 )
        ch = Inherit;
Comment 7 Allan Sandfeld 2006-06-14 00:18:50 UTC
SVN commit 551201 by carewolf:

Set position when inserting a new layer.
BUG: 128738


 M  +2 -0      render_box.cpp  


--- branches/KDE/3.5/kdelibs/khtml/rendering/render_box.cpp #551200:551201
@@ -159,6 +159,8 @@
         if (!m_layer) {
             m_layer = new (renderArena()) RenderLayer(this);
             m_layer->insertOnlyThisLayer();
+            if (parent() && containingBlock())
+                m_layer->updateLayerPosition();
         }
     }
     else if (m_layer && !isCanvas()) {