Closed Bug 987121 Opened 6 years ago Closed 6 years ago

Auto-scroll doesn't stop anymore in center position (autoscroll)

Categories

(Firefox :: General, defect)

30 Branch
defect
Not set

Tracking

()

VERIFIED FIXED
Firefox 31
Tracking Status
firefox29 --- unaffected
firefox30 - fixed
firefox31 + verified

People

(Reporter: ts.bugzilla, Assigned: billm)

References

(Depends on 1 open bug)

Details

(Keywords: regression)

Attachments

(1 file, 1 obsolete file)

Autoscroll used to stop moving when the mouse cursor is placed in a "neutral" position, e.g. on a position with the same y-coordinate as the auto-scroll indicator for vertical scrolling.

Maybe related to/caused by bug 938359?
(In reply to Thomas Stache from comment #0)
> Autoscroll used to stop moving when the mouse cursor is placed in a
> "neutral" position, e.g. on a position with the same y-coordinate as the
> auto-scroll indicator for vertical scrolling.

Sigh... Missed to say that it keeps scrolling slowly now!
This is also reproducible on Aurora 30.0a2 (2014-03-23).
Regression window:
http://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=a2ec4ab256e8&tochange=7d192442dfca
Blocks: 938359
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: regression
Product: Core → Firefox
Version: Trunk → 30 Branch
Assignee: nobody → wmccloskey
Being more specific: the scrolling doesn't stop when the mouse is over the auto-scroll symbol.(In reply to Thomas Stache from comment #0)
> Autoscroll used to stop moving when the mouse cursor is placed in a
> "neutral" position, e.g. on a position with the same y-coordinate as the
> auto-scroll indicator for vertical scrolling.

Being more specific: the scrolling doesn't stop when the mouse is over the auto-scroll symbol. Next to it (offset to the side for the vertical case) it stops.
I can reproduce this. It looks like as long as the cursor is within the autoscroll circle its position is ignored.
Attached patch fix-autoscroll (obsolete) — Splinter Review
It looks like the problem is that the content script doesn't get mousemove events when the cursor is over the autoscroll circle. The XUL window does get mousemove events in that case, which is why this worked before.

The only way I can see around this is to forward the mousemove events from the parent to the child. That's what this patch does.
Attachment #8398255 - Flags: review?(felipc)
Wow, the irony...  Alternatively, we could set up auto-forwarding from the circle too by modifying 
nsEventStateManager::IsRemoteTarget (and/or HandleCrossProcessEvent). What do you think makes most sense from an implementation point of view?
(In reply to :Felipe Gomes from comment #7)
> Wow, the irony...  Alternatively, we could set up auto-forwarding from the
> circle too by modifying 
> nsEventStateManager::IsRemoteTarget (and/or HandleCrossProcessEvent). What
> do you think makes most sense from an implementation point of view?

Err, I don't know. I guess we could add a special attribute to the autoscroll circle's DOM node. I still think I prefer forwarding though. If the same problem occurs in other circumstances, then we could consider modifying IsRemoteTarget.
Oh, or I guess much simpler: we could just add pointer-events: none on the circle's DOM node, and it should just work. Can you see if that works? If not we will go with your patch
(In reply to :Felipe Gomes from comment #9)
> Oh, or I guess much simpler: we could just add pointer-events: none on the
> circle's DOM node, and it should just work. Can you see if that works? If
> not we will go with your patch

That doesn't seem to help, although I'm not sure why. I'm having a hard time tracing through how the code handles the pointer-events property.
On IRC, Felipe suggested using the mousethrough="always" attribute on the autoscroller XUL node. That worked. I looked into the code a little more to figure out why the one works and the other doesn't. I found this special handling of mousethrough here:

http://mxr.mozilla.org/mozilla-central/source/layout/xul/nsMenuPopupFrame.cpp#249

Apparently the autoscroller gets its own widget, and so we need to tell the widget code to handle mouse events specially. If I comment out this code, the mousethrough="always" attribute no longer fixes the problem in this bug.

I guess we might be able to change nsMenuPopupFrame to deal with pointer-events: none, but I'm probably not the best person to do that.
Attachment #8398255 - Attachment is obsolete: true
Attachment #8398255 - Flags: review?(felipc)
Attachment #8398739 - Flags: review?(felipc)
Attachment #8398739 - Flags: review?(felipc) → review+
(In reply to Bill McCloskey (:billm) from comment #11)
> I guess we might be able to change nsMenuPopupFrame to deal with
> pointer-events: none, but I'm probably not the best person to do that.

pointer-events: none will cause the mouse events to be ignored entirely, as it only deals within the same window. mousethrough="always" will forward the event to another window that is underneath the popup using OS layer mechanisms, so your use of mousethrough is correct here.
https://hg.mozilla.org/mozilla-central/rev/0e01c0304046
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → Firefox 31
We would be interested in an uplift request for this!
Bug 938359 was backed out on aurora so 31 is now the only affected release.
QA Whiteboard: [good first verify]
status-firefox 30 : fixed -> disabled
I think this should get some QA attention since it was a regression.
QA Whiteboard: [good first verify]
Flags: in-testsuite?
Keywords: verifyme
Reproduced the issue using Nightly from 2014-03-16 (BuildID: 20140316030202).

Verified as fixed on Win 7 x64, Mac OS X 10.9.3, Ubuntu 13.04 x64, with latest Firefox 31 Beta 6 (BuildID: 20140630185627). Scrolling now stops as expected when the cursor is anywhere inside the autoscroll circle.
Status: RESOLVED → VERIFIED
Keywords: verifyme
Depends on: 1180057
Blocks: 1099491
No longer blocks: 1099491
Depends on: 1099491
Depends on: 1445964
You need to log in before you can comment on or make changes to this bug.