Closed
Bug 263671
Opened 20 years ago
Closed 20 years ago
nsStyleUserInterface::CalcDifference does wrong stuff if more than one property differs
Categories
(Core :: CSS Parsing and Computation, defect)
Core
CSS Parsing and Computation
Tracking
()
RESOLVED
FIXED
mozilla1.8alpha6
People
(Reporter: Biesinger, Assigned: Biesinger)
References
()
Details
Attachments
(2 files, 3 obsolete files)
578 bytes,
text/html
|
Details | |
5.68 KB,
patch
|
Details | Diff | Splinter Review |
if both mUserInput and mCursor differ, then NS_STYLE_HINT_VISUAL will be returned, rather than NS_STYLE_HINT_REFLOW.
Assignee | ||
Comment 2•20 years ago
|
||
unfortunately I was unable to create a testcase showing this bug...
Assignee | ||
Updated•20 years ago
|
Attachment #161625 -
Flags: superreview?(bzbarsky)
Attachment #161625 -
Flags: review?(bzbarsky)
Assignee | ||
Updated•20 years ago
|
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla1.8alpha5
Comment 3•20 years ago
|
||
Comment on attachment 161625 [details] [diff] [review] patch >Index: layout/html/style/src/nsCSSFrameConstructor.cpp >+ if (hint & nsChangeHint_UpdateCursor) { >+ nsIViewManager* viewMgr = aPresContext->GetViewManager(); >+ if (viewMgr) >+ viewMgr->SynthesizeMouseMove(PR_FALSE); So if there is a reframe we won't do this? I guess that makes sense, but should we perhaps put UpdateCursor before ReconstructFrame in nsChangeHint so the "... subsumes ..." comment will reflect reality better? Don't you also need to change nsStyleContext::CalcStyleDifference to add the UpdateCursor hint to the initial maxHint value? Otherwise, you should be getting asserts whenever UpdateCursor is actually returned...
Assignee | ||
Comment 4•20 years ago
|
||
whoops, meant to mention that this patch contains some code from the layout patch in bug 38447 (attachment 155496 [details] [diff] [review]) > So if there is a reframe we won't do this? I guess that makes sense oh. I can't remember why I put it into this else... I _think_ I actually want to move it before the else. >Don't you also need to change nsStyleContext::CalcStyleDifference to add the >UpdateCursor hint to the initial maxHint value? probably, if you say so ;)
Comment 5•20 years ago
|
||
(In reply to comment #4) > whoops, meant to mention that this patch contains some code from the layout > patch in bug 38447 (attachment 155496 [details] [diff] [review]) I assume that code is landing with this patch, right? (Not the whole layout patch, just the parts in the diff in this bug.) > oh. I can't remember why I put it into this else... I _think_ I actually want > to move it before the else. Yeah, I think you do. Or after the whole thing, better yet? Though note that it may be possible that the initial reflow of the new frame (which happens sometime later) will do its own mousemove stuff (per the code David added). In that case, this is correct. The way to find out is to test, of course. Do something where off a timer you change the display of a div and the cursor value of something, and then see whether the cursor changes before the mouse moves. > probably, if you say so ;) I do say so. :)
Comment 6•20 years ago
|
||
Comment on attachment 161625 [details] [diff] [review] patch Marking r- per comments.
Attachment #161625 -
Flags: superreview?(bzbarsky)
Attachment #161625 -
Flags: superreview-
Attachment #161625 -
Flags: review?(bzbarsky)
Attachment #161625 -
Flags: review-
Assignee | ||
Comment 7•20 years ago
|
||
(In reply to comment #5) > I assume that code is landing with this patch, right? (Not the whole layout > patch, just the parts in the diff in this bug.) Indeed. > In that case, this is correct. The way to find out is to test, ok, will test
Assignee | ||
Comment 8•20 years ago
|
||
attaching this just for reference; it is unchanged from the above patch except that it now patches the files in their new location
Attachment #161625 -
Attachment is obsolete: true
Assignee | ||
Comment 9•20 years ago
|
||
> Do something where off a timer you change the display of a div and > the cursor value of something, and then see whether the cursor changes before > the mouse moves. does the ordering of these two actions matter? i.e. will this work: 10 document.all.change2.style.cursor='url(http://www.mozilla.org/images/ico-ff.png), pointer'; 11 document.all.change2.style.display='inline';
Comment 10•20 years ago
|
||
In a recent build, order should not matter there.
Assignee | ||
Comment 11•20 years ago
|
||
hm... if I move the UpdateCursor check after the ReconstructFrame check, this does not work... I get the cursor I specified for <html> instead of the one I set in the .style.cursor... shouldn't this way always work?
Comment 12•20 years ago
|
||
I'm not sure. What is "this way"?
Assignee | ||
Comment 13•20 years ago
|
||
this is "this way" :-)
Comment 14•20 years ago
|
||
You also need to fix nsStyleContext::CalcDifference accordingly, no?
Assignee | ||
Comment 15•20 years ago
|
||
(In reply to comment #14) > You also need to fix nsStyleContext::CalcDifference accordingly, no? I can't seem to find such a function? http://lxr.mozilla.org/seamonkey/search?string=nsStyleContext%3A%3ACalcDifferenc I am patching nsStyleContext::CalcStyleDifference in this patch; are you saying it's missing a change?
Comment 16•20 years ago
|
||
Er... I missed that part. So yes, what you have there should work. Perhaps the problem is that the newly-created frame has not been reflowed, so has 0 size? As a result, the mousemove that's synthesized doesn't see it? But I'd expect the reflow to synthesize a mousemove too...
Assignee | ||
Comment 17•20 years ago
|
||
Comment on attachment 168467 [details] [diff] [review] patch hm.. that sounds like a different issue though... I still think this is a good change.
Attachment #168467 -
Flags: superreview?(bzbarsky)
Attachment #168467 -
Flags: review?(bzbarsky)
Comment 18•20 years ago
|
||
Comment on attachment 168467 [details] [diff] [review] patch So... the comments in nsChangeHint.h about "subsumes all of the above" are wrong... Also, there are short-circuit checks in ReResolveStyleContext that bail out on nsChangeHint_ReconstructFrame. So if a change causes a node to get a new cursor and causes its parent to be reframed, we won't show the new cursor... In other words, we may need to do the cursor updating only in the "not reframing" branch and fix things so frame construction under the pointer updates the cursor....
Comment 19•20 years ago
|
||
Comment on attachment 168467 [details] [diff] [review] patch r+sr=bzbarsky if the issues in my last comment are addressed or have bugs filed on them.
Attachment #168467 -
Flags: superreview?(bzbarsky)
Attachment #168467 -
Flags: superreview+
Attachment #168467 -
Flags: review?(bzbarsky)
Attachment #168467 -
Flags: review+
Assignee | ||
Comment 20•20 years ago
|
||
(In reply to comment #11) > hm... if I move the UpdateCursor check after the ReconstructFrame check, this > does not work... I get the cursor I specified for <html> instead of the one I > set in the .style.cursor... shouldn't this way always work? so, I don't know what happened there, but I now have a new testcase in which this works just fine w/ the attached patch...
Assignee | ||
Comment 21•20 years ago
|
||
Assignee | ||
Comment 22•20 years ago
|
||
and it also works inside the else of the ReconstructFrame if. this way, I believe the "subsumes" comment is correct.
Attachment #168430 -
Attachment is obsolete: true
Attachment #168467 -
Attachment is obsolete: true
Assignee | ||
Comment 23•20 years ago
|
||
afaict all issues are addressed now, w/o filing new bugs. checked in. Checking in layout/base/nsCSSFrameConstructor.cpp; /cvsroot/mozilla/layout/base/nsCSSFrameConstructor.cpp,v <-- nsCSSFrameConstructor.cpp new revision: 1.1031; previous revision: 1.1030 done Checking in layout/base/nsChangeHint.h; /cvsroot/mozilla/layout/base/nsChangeHint.h,v <-- nsChangeHint.h new revision: 3.8; previous revision: 3.7 done Checking in layout/style/nsStyleContext.cpp; /cvsroot/mozilla/layout/style/nsStyleContext.cpp,v <-- nsStyleContext.cpp new revision: 3.251; previous revision: 3.250 done Checking in layout/style/nsStyleStruct.cpp; /cvsroot/mozilla/layout/style/nsStyleStruct.cpp,v <-- nsStyleStruct.cpp new revision: 3.115; previous revision: 3.114 done
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Target Milestone: mozilla1.8alpha5 → mozilla1.8alpha6
Blocks: 293510
You need to log in
before you can comment on or make changes to this bug.
Description
•