Fix T84701: Popup closes on release while dragging parameter.

Windows Ghost cursor movement was previously changed to use SendInput
because SetCursorPos sporadically allows the cursor to escape the
window. This is now reverted because SendInput causes mouse history via
GetMouseMovePointsEx to contain invalid movement history, likely due to
interaction with mouse acceleration. This resulted in popups closing
when the cursor appeared to leave their range.
This commit is contained in:
Nicholas Rishel 2021-02-16 17:45:57 -08:00
parent c13754e647
commit ab21009842
Notes: blender-bot 2023-02-14 02:27:51 +01:00
Referenced by issue #85737, Color Picker popup in secondary monitor immediately closes while still hovering
Referenced by issue #84701, Popup closes when dragging and letting RMB go while mouse is still moved
Referenced by issue #84659, Walk navigation stylus issues in 2.92 - no mouse input until alt tabbing (regression)
1 changed files with 1 additions and 14 deletions

View File

@ -531,20 +531,7 @@ GHOST_TSuccess GHOST_SystemWin32::setCursorPosition(GHOST_TInt32 x, GHOST_TInt32
{
if (!::GetActiveWindow())
return GHOST_kFailure;
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.time = ::GetTickCount();
/* Map from virtual screen to 0-65535 inclusive. */
input.mi.dx = (x - GetSystemMetrics(SM_XVIRTUALSCREEN)) * 65535 /
(GetSystemMetrics(SM_CXVIRTUALSCREEN) - 1);
input.mi.dy = (y - GetSystemMetrics(SM_YVIRTUALSCREEN)) * 65535 /
(GetSystemMetrics(SM_CYVIRTUALSCREEN) - 1);
input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;
SendInput(1, &input, sizeof(input));
return GHOST_kSuccess;
return ::SetCursorPos(x, y) == TRUE ? GHOST_kSuccess : GHOST_kFailure;
}
GHOST_TSuccess GHOST_SystemWin32::getModifierKeys(GHOST_ModifierKeys &keys) const