Bug 13544

Summary: REGRESSION (r21120): Member profile frame not erased at Yahoo! Answers
Product: WebKit Reporter: mitz
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal Keywords: HasReduction, Regression
Priority: P1    
Version: 523.x (Safari 3)   
Hardware: Mac   
OS: OS X 10.4   
URL: http://answers.yahoo.com/question/index;_ylt=AlI3YLa80K83KWiexkufjz3py6IX?qid=20070429145338AA5bJni
Attachments:
Description Flags
Reduction
none
Repaint layers becoming invisible even if they also need layout hyatt: review+

Description mitz 2007-04-29 15:16:58 PDT
Repaint regression, probably introduced in <http://trac.webkit.org/projects/webkit/changeset/21120>: open the URL and hover over a member's avatar and wait for the member info box to appear, then move the mouse away to make the box disappear. Three sides of the gray frame remain visible until you force a repaint.
Comment 1 mitz 2007-04-29 16:14:37 PDT
Created attachment 14271 [details]
Reduction

Layers need to repaint when turning invisible.
Comment 2 mitz 2007-04-29 16:39:42 PDT
Created attachment 14272 [details]
Repaint layers becoming invisible even if they also need layout

Includes change log and repaint test.
Comment 3 Dave Hyatt 2007-04-29 17:41:36 PDT
Random unrelated question, but why did your previous change remove a setNeedsLayout(false) call?  Was it redundant?
Comment 4 Dave Hyatt 2007-04-29 17:43:25 PDT
Comment on attachment 14272 [details]
Repaint layers becoming invisible even if they also need layout

r=me
Comment 5 Mark Rowe (bdash) 2007-04-29 20:49:35 PDT
Landed in r21186.
Comment 6 mitz 2007-04-29 22:42:53 PDT
(In reply to comment #3)
> Random unrelated question, but why did your previous change remove a
> setNeedsLayout(false) call?  Was it redundant?
> 

layoutBlockChildren uses the logic that "we don't need to repaint children if the parent needs layout, because in that case it will do a full repaint". But by resetting the bit in layoutBlockChildren it was invalidating this logic since by the time layoutBlock called repaintAfterLayoutIfNeeded, the latter couldn't tell that it needed to do a full repaint. I think I explained it in my ChangeLog ;-) and it's covered by one of the repaint tests IIRC.
Comment 7 Dave Hyatt 2007-04-29 22:58:01 PDT
Reading ChangeLogs is hard.