http://bugs.winehq.org/show_bug.cgi?id=1733
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|REOPENED |NEW Component|winex11.drv |user32
--- Comment #21 from Nikolay Sivov bunglehead@gmail.com 2010-05-10 17:54:54 --- Still present with current wine-1.1.44-72-g658209b.
It's not a drawing problem, a possible issue with custom window colour is fixed by commit dcddea361f3cd2717c92757adddb87badc55d3ff (isn't directly related to this bug, just for record).
A real problem is that application (most likely VFP runtime itself) does something like this:
--- 0009:Call KERNEL32.Sleep(00000001) ret=0c15fc55 0009:Ret KERNEL32.Sleep() retval=00000000 ret=0c15fc55 0009:Call user32.GetQueueStatus(00000006) ret=0c120292 0009:Ret user32.GetQueueStatus() retval=00000000 ret=0c120292 0009:Call user32.GetCursorPos(0033e034) ret=0c029a19 0009:Ret user32.GetCursorPos() retval=00000001 ret=0c029a19 0009:Call user32.ScreenToClient(00010078,0033e0a8) ret=0c03415f 0009:Ret user32.ScreenToClient() retval=00000001 ret=0c03415f 0009:Call gdi32.GetTextExtentPoint32A(00001138,0033dfec " +\x08\x0c\x15",00000015,0033df28) ret=0c0177e6 0009:Ret gdi32.GetTextExtentPoint32A() retval=00000001 ret=0c0177e6 0009:Call user32.SetCaretPos(000000b8,00000010) ret=0c12077d trace:msg:SetSystemTimer Added 0x10078 ffff 0xffff0028 timeout 500 0009:Ret user32.SetCaretPos() retval=00000001 ret=0c12077d ---
And this is constantly repeated - Sleep() -> GetQueueStatus() -> SetCaretPos(). In SetCaretPos() we're doing SetSystemTimer again and again which starts it every time and timer callback is never reached. Consecutive SetCaretPos() calls happen really fast - always <=50ms (normally 10ms) on mine vbox.
Removing SetSystemTimer() from SetCaretPos() fixes this, and lets a caret blink normally. I'll test it more.