Hello!
I tried to look into Bug 4791 (Civ4 crashes because of recent explorer/systray changes http://bugs.winehq.org/show_bug.cgi?id=4791 ).
Pretty early during initialization (before the application creates any windows itsself) a WM_FONTCHANGE message is broadcasted. The only window to which the message gets actually send is the Wine Systray Listener window. The message is immediately pulled by peek_message as a MSG_NOTIFY message.
A few seconds later the WM_FONTCHANGE message is pulled from the queue of the Wine Systray Listener window again, this time of the type MSG_CALLBACK. the callback function pointer is a nullpointer resulting in a pagefault.
If the Wine Desktop window is set as its own parent (like described in the bugzilla thread), the WM_FONTCHANGE message does not get send to the window and the program starts up fine.
Now, I do not really understand the wine messaging system (particularly the difference between notify and callback messages) so I thought maybe somebody here could help me with that or point me to some introduction other than http://winehq.org/site/docs/winedev-guide/c3762#AEN3825 and message.c.
Should the fontchange-message really be send to the Wine Systray Listener window?
All test were run using wine-0.9.30, civ4 v1.61 with nocd-patch and native msxml3.
Fabian
Hello!
In my last mail I confused a few message types. However, I think I know why this bug occurs. Apparently windows silently ignores nullpointer callbacks passed to SendMessageCallback (although it does deliver the message).
Fabian