Bug 35949

Summary: Hover states not updated when overflow section scrolls under stationary mouse pointer
Product: WebKit Reporter: mitz
Component: Layout and RenderingAssignee: mitz
Status: RESOLVED FIXED    
Severity: Normal CC: dglazkov, gdk, webkit.review.bot
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
Dispatch a fake mouse move event shrotly after scrolling
none
Dispatch a fake mouse move event shrotly after scrolling
none
Dispatch a fake mouse move event shrotly after scrolling darin: review+

Description mitz 2010-03-09 16:29:01 PST
<rdar://problem/7694674>

When an overflow: scroll; section is scrolled and different elements move under the mosue cursor, hover states don’t update to reflect the change, tool tips don’t update, and mouseover/mouseout events aren’t fired.
Comment 1 mitz 2010-03-09 23:44:47 PST
I have a patch for this but I haven’t finished the regression test yet.
Comment 2 mitz 2010-03-11 17:32:20 PST
Created attachment 50563 [details]
Dispatch a fake mouse move event shrotly after scrolling
Comment 3 WebKit Review Bot 2010-03-11 17:58:36 PST
Attachment 50563 [details] did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/642040
Comment 4 mitz 2010-03-11 19:32:32 PST
Created attachment 50574 [details]
Dispatch a fake mouse move event shrotly after scrolling
Comment 5 WebKit Review Bot 2010-03-11 20:29:40 PST
Attachment 50574 [details] did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/643033
Comment 6 mitz 2010-03-11 22:30:33 PST
Created attachment 50576 [details]
Dispatch a fake mouse move event shrotly after scrolling
Comment 7 Darin Adler 2010-03-12 07:42:23 PST
Comment on attachment 50576 [details]
Dispatch a fake mouse move event shrotly after scrolling

> +void EventHandler::cancelFakeMouseMoveEvent()
> +{
> +    if (!m_fakeMouseMoveEventTimer.isActive())
> +        return;
> +
> +    m_fakeMouseMoveEventTimer.stop();
> +}

I don't think you need to check isActive before calling stop. It's safe to call it even if the timer is not active.

> +void EventHandler::fakeMouseMoveEventTimerFired(Timer<EventHandler>* timer)
> +{
> +    ASSERT_ARG(timer, timer == &m_fakeMouseMoveEventTimer);

You need to use ASSERT_UNUSED here because "timer" is otherwise unused in this function. I think this is why the Mac EWS build indicates a failure.

I'm a little sad that the test requires a timeout and can't run instantaneously. Could it instead be based on the timing of the first mouse move event?

r=me, but please fix the Mac build issue
Comment 8 mitz 2010-03-12 09:07:28 PST
Fixed in <http://trac.webkit.org/projects/webkit/changeset/55909>.
Comment 9 Garret Kelly 2010-03-12 09:58:51 PST
This change broke the Chromium Win Release build: http://build.webkit.org/builders/Chromium%20Win%20Release/builds/3286/steps/compile-webkit/logs/stdio
Comment 10 mitz 2010-03-12 10:09:29 PST
Build fix in <http://trac.webkit.org/projects/webkit/changeset/55911>.