Problems with TAB_GetCurFocus

Luiz Angelo Daros de Luca luizluca at gmail.com
Mon Oct 29 16:17:47 CDT 2007


This patch seems to cause the problem...

Author: Hagop Hagopian <shaitani at 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 at 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 at 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 at 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 at 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 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