summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2019-08-28 20:06:26 (GMT)
committerfvogel <fvogelnew1@free.fr>2019-08-28 20:06:26 (GMT)
commit481ab0db7369e50a9ca7e74b5319efb2eb541385 (patch)
treefa0769747c2fe89dc4a832fc63364ba08d74c0e8 /win
parent7d686add2939fd812eb8a6bc45c19294a3e137ca (diff)
parent22c0838d14ecb72a77398d446537fdc313666811 (diff)
downloadtk-481ab0db7369e50a9ca7e74b5319efb2eb541385.zip
tk-481ab0db7369e50a9ca7e74b5319efb2eb541385.tar.gz
tk-481ab0db7369e50a9ca7e74b5319efb2eb541385.tar.bz2
Fix [69b48f427e]: Test 'textTag-18.1' fails since Win10 Creator Falls Update
Diffstat (limited to 'win')
-rw-r--r--win/tkWinInt.h6
-rw-r--r--win/tkWinPointer.c35
-rw-r--r--win/tkWinWindow.c4
3 files changed, 37 insertions, 8 deletions
diff --git a/win/tkWinInt.h b/win/tkWinInt.h
index 0e2c844..9cd49cd 100644
--- a/win/tkWinInt.h
+++ b/win/tkWinInt.h
@@ -201,6 +201,12 @@ MODULE_SCOPE void TkpWinToplevelDetachWindow(TkWindow *winPtr);
MODULE_SCOPE int TkpWmGetState(TkWindow *winPtr);
/*
+ * The following is implemented in tkWinPointer.c and also used in tkWinWindow.c
+ */
+
+MODULE_SCOPE void TkSetCursorPos(int x, int y);
+
+/*
* Common routines used in Windows implementation
*/
MODULE_SCOPE Tcl_Obj * TkWin32ErrorObj(HRESULT hrError);
diff --git a/win/tkWinPointer.c b/win/tkWinPointer.c
index 251b5b9..8ab512c 100644
--- a/win/tkWinPointer.c
+++ b/win/tkWinPointer.c
@@ -336,10 +336,10 @@ XQueryPointer(
/*
*----------------------------------------------------------------------
*
- * XWarpPointer --
+ * XWarpPointer, TkpWarpPointer --
*
- * Move pointer to new location. This is not a complete implementation of
- * this function.
+ * Move pointer to new location. Note that implementation of XWarpPointer
+ * is incomplete.
*
* Results:
* None.
@@ -350,6 +350,29 @@ XQueryPointer(
*----------------------------------------------------------------------
*/
+/*
+ * TkSetCursorPos is a helper function replacing SetCursorPos since this
+ * latter Windows function appears to have been broken by Microsoft
+ * since Win10 Falls Creator Update - See ticket [69b48f427e] along with
+ * several other Internet reports about this breakage.
+ */
+
+void TkSetCursorPos(
+ int x,
+ int y)
+{
+ INPUT input;
+
+ input.type = INPUT_MOUSE;
+ input.mi.dx = x * (65535.0 / (GetSystemMetrics(SM_CXSCREEN) - 1));
+ input.mi.dy = y * (65535.0 / (GetSystemMetrics(SM_CYSCREEN) - 1));
+ input.mi.mouseData = 0;
+ input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
+ input.mi.time = 0;
+ input.mi.dwExtraInfo = 0;
+ SendInput(1, &input, sizeof(input));
+}
+
int
XWarpPointer(
Display *display,
@@ -365,7 +388,7 @@ XWarpPointer(
RECT r;
GetWindowRect(Tk_GetHWND(dest_w), &r);
- SetCursorPos(r.left+dest_x, r.top+dest_y);
+ TkSetCursorPos(r.left+dest_x, r.top+dest_y);
return Success;
}
@@ -377,9 +400,9 @@ TkpWarpPointer(
RECT r;
GetWindowRect(Tk_GetHWND(Tk_WindowId(dispPtr->warpWindow)), &r);
- SetCursorPos(r.left + dispPtr->warpX, r.top + dispPtr->warpY);
+ TkSetCursorPos(r.left + dispPtr->warpX, r.top + dispPtr->warpY);
} else {
- SetCursorPos(dispPtr->warpX, dispPtr->warpY);
+ TkSetCursorPos(dispPtr->warpX, dispPtr->warpY);
}
}
diff --git a/win/tkWinWindow.c b/win/tkWinWindow.c
index 445ff9c..57c948e 100644
--- a/win/tkWinWindow.c
+++ b/win/tkWinWindow.c
@@ -882,7 +882,7 @@ TkpShowBusyWindow(
*/
GetCursorPos(&point);
- SetCursorPos(point.x, point.y);
+ TkSetCursorPos(point.x, point.y);
}
/*
@@ -924,7 +924,7 @@ TkpHideBusyWindow(
*/
GetCursorPos(&point);
- SetCursorPos(point.x, point.y);
+ TkSetCursorPos(point.x, point.y);
}
/*