Problems with TAB_GetCurFocus

Luiz Angelo Daros de Luca luizluca at gmail.com
Mon Oct 29 15:56:11 CDT 2007


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 at gmail.com
              ICQ: 19290419

 I Know, "Where you wanted to go today",
    but I decided to stop here instead!
                        MS Windows



More information about the wine-devel mailing list