https://bugs.winehq.org/show_bug.cgi?id=41161
Bug ID: 41161 Summary: Embedding child process' window in own window does not draw the child window properly Product: Wine Version: 1.9.16 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: wine@sagagames.de Distribution: ---
OpenMPT (https://openmpt.org/) has a plugin bridge, which can be used to run VST plugins in a separate process. However, compared to a native Windows environment (or not bridging the plugins), there is a problem when drawing the plugin UI.
The plugin UI window itself is a borderless window that belongs to the bridge process, and is then set as a child of the actual plugin window that belongs to the OpenMPT process using SetParent(...). This works just fine on Windows, but in Wine, the child window remains completely black. If parts of the child window are redrawn by the bridged process, they become visible, but as soon as a redraw for the parent window is issued (e.g. by setting the focus to it), these areas become black again.
Steps to reproduce: 1) Install OpenMPT. 2) Create a new module. 3) Open the plugin manager ("Select" button at the bottom of the created module's window) and add any VST plugin that provides its own UI (e.g. http://www.geocities.jp/daichi1969/softsynth/index.html#down) 4) Be sure the "Use Plugin Bridge" checkbox is checked (it is also fine if it is checked but greyed out) 5) Click "Put in FX01" to load the plugin. 6) Click the "Edit" button next to the "Select" button to open the plugin's UI. 7) The UI will be completely black, with child controls becoming occasionally visible if you click them.
Note that I am an OpenMPT developer, so I would be both happy with incorporating a Wine-specific fix in our codebase if there is a way to make this scenario work with Wine, or with a fix in Wine itself to make child windows from other processes work correctly.