https://bugs.winehq.org/show_bug.cgi?id=47104
Gabriel Ivăncescu gabrielopcode@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Assignee|wine-bugs@winehq.org |gabrielopcode@gmail.com Ever confirmed|0 |1 Status|UNCONFIRMED |ASSIGNED
--- Comment #5 from Gabriel Ivăncescu gabrielopcode@gmail.com --- Ok, I've managed to reproduce it. The problem is this 'vst-bridge' from: https://github.com/abique/vst-bridge
Note that it's actually a Linux native app that hosts Windows plugins via Wine.
It uses a hack to get the whole window from Wine, using GetPropA(g_host.hwnd, "__wine_x11_whole_window"); and then the plugin calls XReparentWindow on it. This messes it up on the Wine side because root_window is not updated when that happens so it becomes out of sync with Wine's expectations.
The coordinates sent now (with x_root and y_root) are correct for the entire screen, but because of the hack, Wine believes they are in a completely different spot. It believes the plugin itself is at the top-left on the desktop. The (0,0) for Wine's root is now not the screen's top-left but rather where the Window was reparented to by vst-bridge.
For example, its (0,0) coord is (0,0) after MapWindowPoints to the desktop, so MapWindowPoints actually does nothing. This is obviously out of sync with event->x_root which has the proper full-screen coordinate, because root_window doesn't get updated by vst-bridge (it can't since it's internal).
I don't know how to fix this cleanly and honestly I don't know if it's Wine's fault to begin with. I expected __wine stuff to be for internal-use only.
A somewhat ugly workaround for vst-bridge would be to do the MapWindowPoints and check whether the result is identical to what was put in. If so, use that instead of x_root. This would help with this particular hack, and of course we'll have to document it why. It still fixes the original bug with Winamp so it's still good.
I tested this workaround crudely, but I'd like to know if it's a good idea before I factor it properly.
Thoughts?