Problems with TAB_GetCurFocus
Hello, I'm having problems with the result of the message TCM_GETCURFOCUS. In Windows, it returns "0" while in wine I got -1 (0xFFFFFFFF). This results in a Segfault for a 3rd party proprietary application (no source). 0009:Ret KERNEL32.TlsGetValue() retval=001445f8 ret=00501fc1 0009:Call user32.CallWindowProcA(ffff001b,00010056,0000132f,00000000,00000000) ret=004ebf11 0009:Call window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call user32.GetWindowLongW(00010056,00000000) ret=7e88f103 0009:Ret user32.GetWindowLongW() retval=0014e928 ret=7e88f103 0009:Ret window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.CallWindowProcA() retval=ffffffff ret=004ebf11 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.SendMessageA() retval=ffffffff ret=00416cad 0009:Call KERNEL32.GetLastError() ret=004d3ff9 (...) 0009:Call KERNEL32.UnhandledExceptionFilter(00338b9c) ret=004d8a7d Sometime in the past, wine 0.9.24 (suse 10.2), this app worked flawless. I filtered just TAB/TCM messages for version 0.9.24 and current. For current wine (0.9.48), I got: # WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000 And for 0.9.24, #WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) fixme:tab:TAB_GetCurFocus we have not to return negative value 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000 The line: fixme:tab:TAB_GetCurFocus we have not to return negative value In 0.9.24 log migth be intersting... I guess the message TCM_GETCURFOCUS should never returns negative values. BTW, the test file test/tab.c expects -1. /* Testing CurFocus with largest appropriate value */ SendMessage(hTab, TCM_SETCURFOCUS, nTabs-1, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(nTabs-1, focusIndex); /* Testing CurFocus with negative value */ SendMessage(hTab, TCM_SETCURFOCUS, -10, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(-1, focusIndex); /* Testing CurFocus with value larger than number of tabs */ focusIndex = SendMessage(hTab, TCM_SETCURSEL, 1, 0); todo_wine{ expect(-1, focusIndex); } Thanks in advance, -- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419 I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
It seems that this happens when the tab is not painted yet (window created hidden) and the current focused tab read. 2297 static void TAB_Refresh (TAB_INFO *infoPtr, HDC hdc) 2298 { (...) 2328 /* If we haven't set the current focus yet, set it now. 2329 * Only happens when we first paint the tab controls */ 2330 if (infoPtr->uFocus == -1) 2331 TAB_SetCurFocus(infoPtr, infoPtr->iSelected); 2332 } 2007/10/29, Luiz Angelo Daros de Luca <luizluca(a)gmail.com>:
Hello,
I'm having problems with the result of the message TCM_GETCURFOCUS. In Windows, it returns "0" while in wine I got -1 (0xFFFFFFFF). This results in a Segfault for a 3rd party proprietary application (no source).
0009:Ret KERNEL32.TlsGetValue() retval=001445f8 ret=00501fc1 0009:Call user32.CallWindowProcA(ffff001b,00010056,0000132f,00000000,00000000) ret=004ebf11 0009:Call window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call user32.GetWindowLongW(00010056,00000000) ret=7e88f103 0009:Ret user32.GetWindowLongW() retval=0014e928 ret=7e88f103 0009:Ret window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.CallWindowProcA() retval=ffffffff ret=004ebf11 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.SendMessageA() retval=ffffffff ret=00416cad 0009:Call KERNEL32.GetLastError() ret=004d3ff9 (...) 0009:Call KERNEL32.UnhandledExceptionFilter(00338b9c) ret=004d8a7d
Sometime in the past, wine 0.9.24 (suse 10.2), this app worked flawless. I filtered just TAB/TCM messages for version 0.9.24 and current. For current wine (0.9.48), I got:
# WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000
And for 0.9.24,
#WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) fixme:tab:TAB_GetCurFocus we have not to return negative value 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000
The line:
fixme:tab:TAB_GetCurFocus we have not to return negative value
In 0.9.24 log migth be intersting... I guess the message TCM_GETCURFOCUS should never returns negative values. BTW, the test file test/tab.c expects -1.
/* Testing CurFocus with largest appropriate value */ SendMessage(hTab, TCM_SETCURFOCUS, nTabs-1, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(nTabs-1, focusIndex);
/* Testing CurFocus with negative value */ SendMessage(hTab, TCM_SETCURFOCUS, -10, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(-1, focusIndex);
/* Testing CurFocus with value larger than number of tabs */ focusIndex = SendMessage(hTab, TCM_SETCURSEL, 1, 0); todo_wine{ expect(-1, focusIndex); }
Thanks in advance,
-- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419
I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
-- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419 I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
This patch seems to cause the problem... Author: Hagop Hagopian <shaitani(a)gmail.com> Date: 17-03-2007 19:16:08 Parent: comctl32: tab: Added message sequence tests for the tab c... Child: winex11.drv: In the case requested glyphs do not present... Branch: master (d3drm: Implement D3DRMCreateColorRGB.) Follows: wine-0.9.33 (Release 0.9.33.) Precedes: wine-0.9.34 (Release 0.9.34.) comctl32: tab: Minor bug fixes in the curSel and curFocus getters and setters. I'll fill a bug 2007/10/29, Luiz Angelo Daros de Luca <luizluca(a)gmail.com>:
It seems that this happens when the tab is not painted yet (window created hidden) and the current focused tab read.
2297 static void TAB_Refresh (TAB_INFO *infoPtr, HDC hdc) 2298 { (...) 2328 /* If we haven't set the current focus yet, set it now. 2329 * Only happens when we first paint the tab controls */ 2330 if (infoPtr->uFocus == -1) 2331 TAB_SetCurFocus(infoPtr, infoPtr->iSelected); 2332 }
2007/10/29, Luiz Angelo Daros de Luca <luizluca(a)gmail.com>:
Hello,
I'm having problems with the result of the message TCM_GETCURFOCUS. In Windows, it returns "0" while in wine I got -1 (0xFFFFFFFF). This results in a Segfault for a 3rd party proprietary application (no source).
0009:Ret KERNEL32.TlsGetValue() retval=001445f8 ret=00501fc1 0009:Call user32.CallWindowProcA(ffff001b,00010056,0000132f,00000000,00000000) ret=004ebf11 0009:Call window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call user32.GetWindowLongW(00010056,00000000) ret=7e88f103 0009:Ret user32.GetWindowLongW() retval=0014e928 ret=7e88f103 0009:Ret window proc 0x7e88f0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.CallWindowProcA() retval=ffffffff ret=004ebf11 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret user32.SendMessageA() retval=ffffffff ret=00416cad 0009:Call KERNEL32.GetLastError() ret=004d3ff9 (...) 0009:Call KERNEL32.UnhandledExceptionFilter(00338b9c) ret=004d8a7d
Sometime in the past, wine 0.9.24 (suse 10.2), this app worked flawless. I filtered just TAB/TCM messages for version 0.9.24 and current. For current wine (0.9.48), I got:
# WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=0033908c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=0033908c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=0033908c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=003390b4) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=ffffffff 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Call window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e87a0b0 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETIMAGELIST,wp=00000000,lp=00000000) retval=00000000
And for 0.9.24,
#WINEDEBUG=+relay wine VirtFone.exe 2>&1 | egrep '(TCM|TAB)' 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000000,lp=00338e6c) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000001,lp=00338e6c) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMCOUNT,wp=00000000,lp=00000000) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_INSERTITEMA,wp=00000002,lp=00338e6c) retval=00000002 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETITEMRECT,wp=00000000,lp=00338e94) retval=00000001 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_SETCURSEL,wp=00000000,lp=00000000) retval=00000000 0009:Call window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) 0009:Call window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) fixme:tab:TAB_GetCurFocus we have not to return negative value 0009:Ret window proc 0x7e6ddac0 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000 0009:Ret window proc 0x4eb6b7 (hwnd=0x10056,msg=TCM_GETCURFOCUS,wp=00000000,lp=00000000) retval=00000000
The line:
fixme:tab:TAB_GetCurFocus we have not to return negative value
In 0.9.24 log migth be intersting... I guess the message TCM_GETCURFOCUS should never returns negative values. BTW, the test file test/tab.c expects -1.
/* Testing CurFocus with largest appropriate value */ SendMessage(hTab, TCM_SETCURFOCUS, nTabs-1, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(nTabs-1, focusIndex);
/* Testing CurFocus with negative value */ SendMessage(hTab, TCM_SETCURFOCUS, -10, 0); focusIndex = SendMessage(hTab, TCM_GETCURFOCUS, 0, 0); expect(-1, focusIndex);
/* Testing CurFocus with value larger than number of tabs */ focusIndex = SendMessage(hTab, TCM_SETCURSEL, 1, 0); todo_wine{ expect(-1, focusIndex); }
Thanks in advance,
-- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419
I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
-- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419
I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
-- Luiz Angelo Daros de Luca luizluca(a)gmail.com ICQ: 19290419 I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows
participants (1)
-
Luiz Angelo Daros de Luca