WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED DUPLICATE of
bug 101857
Bug 85343
Cursor change fires mousemove event
https://bugs.webkit.org/show_bug.cgi?id=85343
Summary
Cursor change fires mousemove event
David Barr
Reported
2012-05-01 20:53:47 PDT
Upstream bug:
http://crbug.com/103041
Simple reproduction:
http://jsfiddle.net/TRF7g/
Ran bisect-builds, bug present in WebKit since at least
r37376
. -- Original report -- Chrome Version : 16.0.912.21 OS Version: OS X 10.6.8 (also checked windows7) URLs (if applicable) : Other browsers tested: Add OK or FAIL after other browsers where you have tested this issue: Safari 5: FAIL Firefox 4.x: OK IE 7/8/9: FAIL* What steps will reproduce the problem? 1. Create an event listener that is triggered by 'mousemove' 2. Change the cursor either with a CSS class change or element.style.cursor 3. Observe the event listener What is the expected result? Cursor changes without firing a mousemove event. What happens instead? Cursor changes and a mousemove event is fired. Please provide any additional information below. Attach a screenshot if possible. Seems like it may be a webkit issue since Safari behaves exactly like Chrome for this issue. *IE9 (haven't tested others) does not change the cursor until the user moves the mouse (this also seems incorrect.) UserAgentString: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.21 Safari/535.7
Attachments
Patch
(6.39 KB, patch)
2012-11-09 07:30 PST
,
Aivo Paas
no flags
Details
Formatted Diff
Diff
Moved test to the fix in 101857
(3.40 KB, patch)
2012-11-11 00:12 PST
,
Aivo Paas
buildbot
: commit-queue-
Details
Formatted Diff
Diff
Show Obsolete
(2)
View All
Add attachment
proposed patch, testcase, etc.
ytplayers
Comment 1
2012-11-05 10:57:55 PST
This issue is a thorn in the side of anyone wishing to change the cursor based on a mousemove timeout - such as hiding a cursor (during video playback, presentations, etc).
Rick Byers
Comment 2
2012-11-08 13:23:59 PST
Is this because currently the only way the mouse cursor ever gets changed is via EventHandler::handleMouseMoveEvent? It looks like it shouldn't be too hard to add another function that sets the mouse cursor based on the current position...
Aivo Paas
Comment 3
2012-11-08 16:12:05 PST
No, it's actually because cursor change is fired through a fake mousemove event. I have a fix that doesn't use the fake mousemove event and thus doesn't fire the event. It also fixes
bug 53341
. I will propose a patch as soon as I get my environment set up correctly.
Aivo Paas
Comment 4
2012-11-09 07:30:27 PST
Created
attachment 173305
[details]
Patch
Rick Byers
Comment 5
2012-11-09 08:03:29 PST
Something along these lines seems reasonable to me (although I'm not a webkit reviewer). I was thinking of refactoring selectMouseCursor to not take a whole mouse event and hit test result, but I'm not sure if that's better (needs a position, node and a few other little things). You'll need to add tests of course, but my
bug 100550
should land soon making it easy to write a layout test for this scenario. Mouse cursors seem like an area that hasn't been touched mouch, I'm not sure who the right reviewers are.
Rick Byers
Comment 6
2012-11-09 11:02:08 PST
Comment on
attachment 173305
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=173305&action=review
> Source/WebCore/page/EventHandler.cpp:146 > +const double updateMouseCursorInterval = 0.05;
Are you sure a timer is necessary in this case? I think fake mouse move codepath has a timer for scrolling where there are lots of updates in a row. If we're getting lots of style updates in a row then I'd guess that there's already a performance problem and mouse cursors might be the least of the concerns. But I guess this is the safer approach without more performance data. But it's a shame to add this complexity if it's not really adding value.
> Source/WebCore/page/EventHandler.cpp:1364 > + ASSERT_UNUSED(timer, timer == &m_updateMouseCursorTimer);
This function shares a lot of code with fakeMouseMoveTimerFired. We should probably refactor to share common code.
Aivo Paas
Comment 7
2012-11-09 11:45:32 PST
Yes, it is safer with the timer, but I'll try how it behaves without it. Should be just fine I guess. Regarding the shared code - should dig up why the fake mousemove event was added in the first place. Maybe that problem could also be solved in better way.
Aivo Paas
Comment 8
2012-11-11 00:12:05 PST
Created
attachment 173492
[details]
Moved test to the fix in 101857
Build Bot
Comment 9
2012-11-11 02:50:47 PST
Comment on
attachment 173492
[details]
Moved test to the fix in 101857
Attachment 173492
[details]
did not pass mac-ews (mac): Output:
http://queues.webkit.org/results/14792669
New failing tests: fast/events/mouse-cursor-no-mousemove.html
Rick Byers
Comment 10
2012-11-18 19:21:55 PST
Comment on
attachment 173492
[details]
Moved test to the fix in 101857 View in context:
https://bugs.webkit.org/attachment.cgi?id=173492&action=review
> LayoutTests/fast/events/mouse-cursor-no-mousemove.html:42 > + }, 10);
We shouldn't rely on specific time outs like this in tests. It's either going to be flaky (under load not long enough) or waste time doing nothing. Is setTimeout 0 not enough here for the style change to take effect?
> LayoutTests/fast/events/mouse-cursor-no-mousemove.html:48 > + }, 50);
If you've already verified you've got the new cursor, then it shouldn't be necessary to wait any longer, right? Once you change it, does this test fail reliably before your fix?
Rick Byers
Comment 11
2012-11-18 19:24:28 PST
You probably want to combine the fix with all the tests that it fixes in the same patch (they should be submitted together).
Aivo Paas
Comment 12
2012-11-19 01:04:38 PST
(In reply to
comment #11
)
> You probably want to combine the fix with all the tests that it fixes in the same patch (they should be submitted together).
Tests are already combined with the fix in
Bug 101857
I will upload an updated patch with updated timeouts.
Allan Sandfeld Jensen
Comment 13
2012-11-28 05:26:01 PST
*** This bug has been marked as a duplicate of
bug 101857
***
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug