Alexandre Julliard : user32: Support the MOUSEEVENTF_VIRTUALDESK flag in SendInput().

Alexandre Julliard julliard at winehq.org
Mon Aug 27 16:18:15 CDT 2018


Module: wine
Branch: master
Commit: ac3e887e5d0bcfef13546ed0441b8179ec4430f2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ac3e887e5d0bcfef13546ed0441b8179ec4430f2

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Aug 27 14:17:19 2018 +0200

user32: Support the MOUSEEVENTF_VIRTUALDESK flag in SendInput().

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/input.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 9d87393..72a68dd 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -141,8 +141,17 @@ static void update_mouse_coords( INPUT *input )
 
     if (input->u.mi.dwFlags & MOUSEEVENTF_ABSOLUTE)
     {
-        input->u.mi.dx = (input->u.mi.dx * GetSystemMetrics( SM_CXSCREEN )) >> 16;
-        input->u.mi.dy = (input->u.mi.dy * GetSystemMetrics( SM_CYSCREEN )) >> 16;
+        if (input->u.mi.dwFlags & MOUSEEVENTF_VIRTUALDESK)
+        {
+            RECT rc = get_virtual_screen_rect();
+            input->u.mi.dx = rc.left + ((input->u.mi.dx * (rc.right - rc.left)) >> 16);
+            input->u.mi.dy = rc.top  + ((input->u.mi.dy * (rc.bottom - rc.top)) >> 16);
+        }
+        else
+        {
+            input->u.mi.dx = (input->u.mi.dx * GetSystemMetrics( SM_CXSCREEN )) >> 16;
+            input->u.mi.dy = (input->u.mi.dy * GetSystemMetrics( SM_CYSCREEN )) >> 16;
+        }
     }
     else
     {




More information about the wine-cvs mailing list