Closed
Bug 513684
Opened 15 years ago
Closed 15 years ago
Hovering over drop down popup can get content underneath in a hovered state
Categories
(Core :: Layout, defect, P1)
Tracking
()
RESOLVED
FIXED
mozilla1.9.3a1
Tracking | Status | |
---|---|---|
status1.9.2 | --- | beta1-fixed |
People
(Reporter: martijn.martijn, Assigned: khuey)
References
Details
(Keywords: regression, testcase)
Attachments
(3 files, 1 obsolete file)
988 bytes,
text/html
|
Details | |
1.24 KB,
patch
|
roc
:
review+
|
Details | Diff | Splinter Review |
1.36 KB,
patch
|
Details | Diff | Splinter Review |
See testcase, between 2009-07-20 and 2009-07-22: http://hg.mozilla.org/mozilla-central/pushloghtml?startdate=2009-07-20+04%3A00%3A00&enddate=2009-07-22+06%3A00%3A00 I think a regression from bug 352093.
Assignee: nobody → roc
Flags: blocking1.9.2?
Assignee | ||
Comment 1•15 years ago
|
||
Interestingly if you scroll the dropdown then the content underneath does not hover until you move off of it and back on again.
Assignee | ||
Comment 2•15 years ago
|
||
Regressing changeset is http://hg.mozilla.org/mozilla-central/rev/dfa7ab1fe97c
No longer blocks: widget-removal
Assignee | ||
Updated•15 years ago
|
Blocks: widget-removal
Assignee | ||
Comment 3•15 years ago
|
||
So it seems this bug and Bug 514026 are caused by using GetRootView instead of GetViewFor. I don't understand Bug 352093 well enough to know using GetViewFor is simply undoing what was intended to be done there. Comment 9 on that bug seems to indicate that calling GetViewFor was seen as unnecessary but not something that needed to be removed. If my understanding is correct, the fix for this is pretty straightforward.
You're probably right, but where exactly do you think we should be using GetViewFor instead of GetRootView?
Assignee | ||
Comment 5•15 years ago
|
||
Ah, woops, that is an important detail. PresShell::DispatchSynthMouseMove is where the change would be made.
Ah yes, that makes sense.
Kyle, were you planning to patch this, or should I work on it?
Assignee | ||
Comment 8•15 years ago
|
||
Yes I was, I just won't get around to it till the weekend.
Awesome, thanks!
Assignee: roc → me
Flags: blocking1.9.2? → blocking1.9.2+
Priority: -- → P2
Assignee | ||
Comment 10•15 years ago
|
||
Switch back to using GetViewFor instead of GetRootView to ensure that hover events end up where they are supposed to. The test is a little odd because synthesizeMouse does funny things. Immediately checking the style after calling synthesizeMouse gives you the hovered style before, during, and after the regression, while waiting a few milliseconds catches only the regression. This only happens with synthesizeMouse, not with an actual mouse. This is why all of the checks are wrapped in a setTimeout call.
Attachment #400296 -
Flags: review?(roc)
Assignee | ||
Updated•15 years ago
|
Status: NEW → ASSIGNED
The code looks good.
+<div id="underdiv" style="height: 700px; width=200px">
incorrect CSS syntax
> Immediately checking the style after calling synthesizeMouse gives you the
> hovered style before, during, and after the regression
Hmm. I'd rather not have this test if it depends on inexplicable timeouts, that's usually a recipe for sporadic test failures.
One thing you may not have realized is that DispatchSynthMouseMove is not dealing with events generated by synthesizeMouse --- synthesizeMouse generates "real" mouse events. DispatchSynthMouseMove is dealing with mouse events we synthesized because reflow happened and we want to make sure that if an element moved or appeared or disappeared then it gets appropriate mouseenter/exit events.
What may be happening here is that the dropdown doesn't appear instantly so without timeouts your mouse moves get fired while the dropdown is not showing. nsComboboxControlFrame::ShowPopup fires a popupshowing event so try listening it before you start your test?
Assignee | ||
Comment 12•15 years ago
|
||
(In reply to comment #11) > The code looks good. > > +<div id="underdiv" style="height: 700px; width=200px"> > > incorrect CSS syntax Noted. > > Immediately checking the style after calling synthesizeMouse gives you the > > hovered style before, during, and after the regression > > Hmm. I'd rather not have this test if it depends on inexplicable timeouts, > that's usually a recipe for sporadic test failures. > > One thing you may not have realized is that DispatchSynthMouseMove is not > dealing with events generated by synthesizeMouse --- synthesizeMouse generates > "real" mouse events. DispatchSynthMouseMove is dealing with mouse events we > synthesized because reflow happened and we want to make sure that if an element > moved or appeared or disappeared then it gets appropriate mouseenter/exit > events. Yes I was not aware of that. Certainly explains why they are called synthetic mouse events then. That this patch fixes this bug seems to imply that reflow is happening everytime the mouse is moved. I know very little about how layout works internally but that seems undesirable. > What may be happening here is that the dropdown doesn't appear instantly so > without timeouts your mouse moves get fired while the dropdown is not showing. > nsComboboxControlFrame::ShowPopup fires a popupshowing event so try listening > it before you start your test? That does appear to be the case, in a way. If I place a timeout only on the first move but not on the subsequent ones the mouse moves still appear to get fired while the dropdown is not showing. That seems to me to be consistent with reflowing everytime the mouse moves. What is weird is that when using a regular mouse I don't see this behavior in the test at all. I will try the popupshowing event later. Do you want me to go ahead and just post the actual patch by itself?
(In reply to comment #12) > I will try the popupshowing event later. Do you want me to go ahead and just > post the actual patch by itself? Yes please. I'm not sure why we're firing synthetic mouse events here, it would be nice to know...
Assignee | ||
Comment 14•15 years ago
|
||
As before, but sans test.
Attachment #400296 -
Attachment is obsolete: true
Attachment #400421 -
Flags: review?(roc)
Attachment #400421 -
Flags: approval1.9.2?
Attachment #400296 -
Flags: review?(roc)
Attachment #400421 -
Flags: review?(roc) → review+
Keywords: checkin-needed
Comment 15•15 years ago
|
||
Comment on attachment 400421 [details] [diff] [review] Patch Doesn't need approval since it's a blocker.
Attachment #400421 -
Flags: approval1.9.2?
Whiteboard: [needs landing]
Priority: P2 → P1
Assignee | ||
Comment 18•15 years ago
|
||
I don't have commit access so I can't check this in. I asked if anyone was willing to check this in on IRC yesterday but it seems nobody got around to it (tree being closed part of the day probably didn't help). If anyone reading this wants to check this in that would be awesome :-)
Flags: in-testsuite?
Comment 19•15 years ago
|
||
http://hg.mozilla.org/mozilla-central/rev/a2d46929bcbd
Status: ASSIGNED → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla1.9.3a1
Assignee | ||
Comment 20•15 years ago
|
||
(In reply to comment #19) > http://hg.mozilla.org/mozilla-central/rev/a2d46929bcbd Thanks Dao!
Keywords: checkin-needed
Whiteboard: [needs landing] → [needs 1.9.2 landing]
I pushed this to try a few hours ago, and the mac unit test build showed: 7917 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | didn't receive expected event: {"type":"mouseout","target":"panel","screenX":387,"screenY":170} 7918 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | didn't receive expected event: {"type":"mouseover","target":"window","screenX":387,"screenY":170} 7921 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | 51 | wrong event type for event {"type":"mousemove","target":"panel","screenX":387,"screenY":171} - got "mousemove", expected "mouseout" 7922 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | 51 | wrong target for event {"type":"mousemove","target":"panel","screenX":387,"screenY":171} - got [object XULElement], expected [object XULElement] 7924 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | didn't receive expected event: {"type":"mouseover","target":"panel","screenX":387,"screenY":171} 7925 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/widget/tests/test_native_mouse_mac.xul | didn't receive expected event: {"type":"mousemove","target":"panel","screenX":387,"screenY":171} It looks like the same errors just came up on mozilla-central; I think dao is backing it out.
Comment 22•15 years ago
|
||
backed out
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Whiteboard: [needs 1.9.2 landing]
Comment 23•15 years ago
|
||
This is my test, I'll look into it.
Comment 24•15 years ago
|
||
The test failures were of the "unexpected pass" kind, the test just doesn't detect that properly.
Updated•15 years ago
|
Keywords: checkin-needed
Pushed as http://hg.mozilla.org/mozilla-central/rev/9ed976f3d466 (last 2 patches combined).
Status: REOPENED → RESOLVED
Closed: 15 years ago → 15 years ago
Keywords: checkin-needed
Resolution: --- → FIXED
Keywords: checkin-needed
Whiteboard: [needs 192 landing]
You need to log in
before you can comment on or make changes to this bug.
Description
•