toolbar.c problem (ATTN: Duane)
Duane Clark
dclark at akamail.com
Thu Apr 18 11:44:40 CDT 2002
Dusan Vujosevic wrote:
> Hi,
>
> I am having a problem with the way toolbar.c was modified between
> revisions 1.107 & 1.108. My application (Signlab) pops flyout toolbars
> that stay around until they lose focus. The parent toolbar receives a
> 'TBN_DROPDOWN' message when someone clicks on one of its flyout buttons
> (button style: TBSTYLE_DROPDOWN). It creates a flyout at that point.
>
> With revision 1.108 of toolbar.c in Wine the parent toolbar also
> receives an WN_COMMAND after TBN_DROPDOWN message which causes Wine
> (rightly so) to send an WM_SETFOCUS (and WM_ACTIVATE). That causes the
> parent to regain focus and kills the flyout. The line that sends
> the WN_COMMAND is in toolbar.c at line 4540 (TOOLBAR_LButtonUp() function):
> SendMessageA (infoPtr->hwndNotify, WM_COMMAND,
> MAKEWPARAM(infoPtr->buttons[nHit].idCommand, 0), (LPARAM)hwnd);
> In revision 1.107 it used to be:
>
> if (bSendMessage)
> SendMessageA (infoPtr->hwndNotify, WM_COMMAND,
> MAKEWPARAM(btnPtr->idCommand, 0), (LPARAM)hwnd);
>
> And that worked fine because it would never send WM_COMMAND for a flyout
> button. Note that WinXP (that's where I tested) doesn't send WM_COMMAND
> after TBN_DROPDOWN has been handled. I would like to suggest revert that
> line back to 1.106 because it is the correct way.
It is not "the correct way", since I have tested it with control spy
under WinNT and Wine. That is not to say that my patch is correct
either, but it fixes two different applications I have and in my mind is
closer to the correct way. There may well be some conditions under which
the message should not be sent, but the previous way was not correct. So
I guess Alexandre gets to pick which incorrect version to use ;)
And there is more going on in your app, because the flying toolbars also
disappear when the mouse is simply slid over them, without clicking.
This behavior is not there under Windows, and has nothing to do with the
ButtonUp change I made. The two may not be related, but I cannot help
thinking they are. Unfortunately, I was not able to get a spy program to
work with your app in windows, so I have not been able to figure out
what messages should really be sent, and when. Certainly a common
problem is that a fix in one area exposes a problem elsewhere, and that
possibly is what happened here.
More information about the wine-devel
mailing list