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,
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@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@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@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@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@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@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@gmail.com ICQ: 19290419
I Know, "Where you wanted to go today", but I decided to stop here instead! MS Windows