Mouse wheel's WM_MOUSEWHEEL requires screen, not client, coordinates
Russ
matchmovie at yahoo.com
Sat Dec 4 22:02:40 CST 2004
Patch by Russ Andersson, matchmovie at yahoo.com vs 12/01/04 source release.
Please CC direct to me re disposition, tnx.
The WM_MOUSEWHEEL message is specified to have absolute screen coordinates,
unlike the WM_LBUTTONDOWN etc messages, which are client coordinate
system. WM_MOUSEWHEEL messages are delivered to the correct window (and appear
to work), but have the wrong coordinates, so programs that use the coordinates
to redistibute the MOUSEWHEEL message (ie to override the focus) wind up
delivering the MOUSEWHEEL messages to grossly incorrect windows, so much so
that
the mouse scroll is unusable. The SynthEyes program at www.ssontech.com shows
this clearly, you can find multiple images of the overall screen-wide scroll
wheel mapping within each subwindow, because the MOUSEWHEEL coordinates are
being sent in client coordinates, not screen coordinates.
The problem is in windows/message.c, which does a translation from screen to
client coordinates right before delivery. This translation needs to be
suppressed for MOUSEWHEEL messages as below. The patch below solves the problem
nicely.
Tnx, Russ
--- message.bac 2004-12-04 15:52:14.000000000 -0500
+++ message.c 2004-12-04 16:09:37.480044664 -0500
@@ -384,7 +384,9 @@
{
/* coordinates don't get translated while tracking a menu */
/* FIXME: should differentiate popups and top-level menus */
- if (!(info.flags & GUI_INMENUMODE)) ScreenToClient( msg->hwnd, &pt );
+ /* also, MOUSEWHEEL messages stay in screen coords (RAndersson) */
+ if (!(info.flags & GUI_INMENUMODE) && msg->message != WM_MOUSEWHEEL)
+ ScreenToClient( msg->hwnd, &pt );
}
msg->lParam = MAKELONG( pt.x, pt.y );
}
__________________________________
Do you Yahoo!?
Yahoo! Mail - Find what you need with new enhanced search.
http://info.mail.yahoo.com/mail_250
More information about the wine-patches
mailing list