user32: Set correct caret state in the server in SetCaretPos (try 2)

Sebastian Lackner sebastian at fds-team.de
Sun Dec 20 17:17:08 CST 2015


On 20.12.2015 19:42, Anton Baskanov wrote:
> Signed-off-by: Anton Baskanov <baskanov at gmail.com>
> 
> The code in SetCaretPos doesn't change the caret state if it's position is unchanged.
> Reflect this at the server side to avoid caret corruption.
> 
> try2:
>  - fixed incorrect if statement in the server
> ---
>  dlls/user32/caret.c | 2 +-
>  server/protocol.def | 3 ++-
>  server/queue.c      | 5 +++++
>  3 files changed, 8 insertions(+), 2 deletions(-)
> 

I assume the "corruption" you mean is that the state could get out of sync between wineserver
and child process. However, is there a specific reason (for example testcase) which shows that
this is the right way to fix it? A different (and much easier) possibility would be:

-    if (ret && !hidden && (x != r.left || y != r.top))
+    if (ret && !hidden && (x != r.left || y != r.top || !old_state))

Regards,
Sebastian




More information about the wine-devel mailing list