Summary: | Layout of site in konqueror is wrong | ||
---|---|---|---|
Product: | [Applications] konqueror | Reporter: | Darin McBride <Tanktalus> |
Component: | khtml | Assignee: | Konqueror Developers <konq-bugs> |
Status: | VERIFIED FIXED | ||
Severity: | normal | CC: | reavertm |
Priority: | NOR | ||
Version: | 4.3.4 | ||
Target Milestone: | --- | ||
Platform: | unspecified | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Attachments: |
Screen shot of funky layout
test case |
Description
Darin McBride
2010-01-25 21:43:43 UTC
Created attachment 40227 [details]
Screen shot of funky layout
Created attachment 40232 [details]
test case
SVN commit 1081435 by ggarand: rework the behaviour of flowing-around-floats objects /wrt floats, to match the general evolution of CSS engines. We used to match mostly Gecko 1.8, but the behaviour has changed a lot in the 1.9 serie. Notably, the clearing of floats by those objects is now allowed even in auto-width containers, and generally uses the computed width. WebCore has some similar logic in recent trunk though the algorithm is a bit wasteful and not so compatible in some aspects, so I only followed part of it. All in all, we agree the most with Opera/MSIE 7+ now (especially considering the table-with-align-attribute behaviour). BUG: 224228 M +26 -10 render_block.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1081435 I took your patch, applied it to my 4.3.5 kdelibs, and the site works fine now. Thanks! Patch seems not to be applicable to 4.4 - it causes khtml to freeze (likely infinite loop) on some pages here - https://bugs.gentoo.org for instance. Apparently exit conditions within "while (true) { ... }" are not met. if (!childw || needsRecalc) { int oy = child->yPos(); int ow = child->width(); child->setPos(child->xPos(), cury); child->calcWidth(); childw = child->width(); child->setPos(child->xPos(), oy); child->setWidth(ow); } I don't know the code, but looks like needsRecalc should be set to false before leaving this conditional block: if (!childw || needsRecalc) { [...] childw = child->width(); child->setPos(child->xPos(), oy); child->setWidth(ow); needsRecalc = false; } |