[1/3] comctl32: Do not call parent of tool window for tip text
Alexander Dorofeyev
alexd14 at hushmail.com
Mon Oct 29 03:41:46 CDT 2007
From what I've seen in +tooltips,+toolbar,+msg logs and from running the apps
in IDA Pro disassembler, it works like follows:
* TOOLTIPS_GetTipText calls TOOLTIPS_GetDispInfoA/W
* TOOLTIPS_GetDispInfoA/W sends TTN_GETDISPINFO(=TTN_NEEDTEXT) notification to
tool's notify window, which is toolbar's window; tool's id (which is equal to
toolbar button's commandid) is passed in wparam
* it gets to TOOLBAR_TTGetDispInfo handler
now, what I think really should happen in these apps, is TOOLBAR_TTGetDispInfo
in its last step should send TTN_GETDISPINFO/TTN_NEEDTEXT to the toolbar's
notify window and put button's command id (taken from tooltip tool's id) in
wparam. In both DCPlusPlus and RAdmin this returns a correct tip text. Now the
problem is, because of bugs in TOOLBAR_TTGetDispInfo, it wasn't sending exactly
such message. First, because it wasn't putting any meaningful value in wparam
(fixed by my patch 3/3), second (what I wasn't aware of before you told me of
RAdmin) in ANSI version it wasn't even getting to that last step (sending
TTN_GETDISPINFO/TTN_NEEDTEXT) - fixed by 4/3. So then it was returning to
TOOLTIPS_GetDispInfoA/W which tried to send TTN_GETDISPINFO to the parent with
tool's id in wparam - note that it's essentially the same thing toolbar will do
if bugs in it are fixed. So in RAdmin case tooltips control was sort of
successfully compensating for bugs in toolbar's handler. But, in DCPlusPlus case
, only after the application already got a wrong TTN_GETDISPINFO notification
(with wparam = 0) from toobar's handler.
About that message sequence you describe, can you clarify if it's recorded on
Native or Wine? It looks right for Wine (without my patches applied), but if
that happened on native, then there may be a problem, because I don't know how
that could be happening. Conformance test I've written, for example, indicates
that parent window of tool's notify window doesn't get called by tooltip.
Ann & Jason Edmeades wrote:
>> Sending message to parent in tooltip code
>> probably simply works around toolbar's broken behavior. In this case I
> think
>> I've identified a line in toolbar.c that fails to properly detect empty
> string
>> causing not appearing tooltips in Radmin. I'll try to submit another patch
> with
>> this fix shortly.
>
> Thanks for checking this out - If your new patch makes tooltips work, I
> should probably be quiet...
>
> But.. I was looking through my notes of when I was working on this bug,
> looking at SPY++ logs from windows and comparing them with
> +spy,+message,+msg etc logs from wine.
>
> My notes indicated I was seeing the following sequence (I have hwnds or
> whatever spy logs written down):
> Tooltip sends toolbar needtextW
> Sends to base class tbn_GetInfoTipA which didn't return anything
> Sends tbn_GetInfoTipA to its parent which didn't return anything
> Tooltip sends baseclass ttn NeedTextA
> Which forwards to parent as ttn NeedTextA
>
> My notes and investigations could be wrong, does this tie up with what you
> were seing?
>
> Jason
More information about the wine-devel
mailing list