http://bugs.winehq.org/show_bug.cgi?id=35347
--- Comment #9 from Sebastian Lackner sebastian@fds-team.de --- @ Tobias:
Thanks for providing the links. Concerning the Windows side: this looks fine to me, in fact we're using a similar way for our project Pipelight.
For the Linux side: The QX11EmbedContainer is pretty much broken. We also had several issues when developing Pipelight with this one, and I think their code contains several issues which makes them incompatible with for example the GTK XEmbed containers. While developing Pipelight I took a look at their code (for example: http://qt4-x11.sourcearchive.com/documentation/4.5.3really4.5.2/qx11embed__x... ) and immediately noticed several things which seem to be incorrect, like:
* the QX11EmbedWidget watches for changes in _XEMBED_INFO to hide/show the window. This is incorrect, the specification states that "The embedder must track the flags field [...] on the client and map and unmap the client appropriately" - basically they've implemented it exactly the other way round.
* The code of QX11EmbedContainer::showEvent and QX11EmbedContainer::hideEvent is exactly the same - which should make pretty obvious that one of both is incorrect. In fact both are incorrect, since (as stated above) they've implemented it the wrong way.
I think there were some more problems, but I don't remember them by heart.
Concerning the problem in exactly this case - in their code its:
sendXEmbedMessage(client, q->x11Info().display(), XEMBED_EMBEDDED_NOTIFY, q->internalWinId(), minversion);
where internalWinId() should be the ID of the container, but somehow isn't? I assume that the container is somehow not yet initialized when the window is embedded, but I'll take a closer look at all this later when I'm home.
Nevertheless the workaround above should (most probably) have the effect that it works at least "as good" as in previous versions of Wine. To make the whole XEmbed stuff work better, the easiest solution would probably to switch to GTK ;-)