Commit Graph

410 Commits

Author SHA1 Message Date
Robbert van der Helm a020d97863 Reword changelog 2021-08-08 14:23:04 +02:00
Robbert van der Helm 9160de6483 Implement VST2 SysEx events
Apparently these _are_ actually used. Sometimes.
2021-08-04 21:40:09 +02:00
Robbert van der Helm 2e6732c0e2 Fix regression for VST3 editor initial sizing
We accidentally reverted a little bit too much code in
762e622416. This didn't appear any sooner
because plugins are supposed to call `IPlugFrame::resizeView()` during
`IPlugView::attached()`, so this only affects plugins that don't confirm
to the spec.
2021-08-02 14:47:21 +02:00
Robbert van der Helm 1db6e853da Bump to version 3.5.1 2021-07-31 21:29:48 +02:00
Robbert van der Helm baabc45793 Fix wrong date in old changelog entry 2021-07-31 21:29:22 +02:00
Robbert van der Helm aff0e38e1f Reword changelog 2021-07-31 21:26:28 +02:00
Robbert van der Helm e430c5f015 Directly focus wine_window while holding Shift
This lets you type spaces in Bitwig, and it also allows you to interact
with the settings/license popup dialogs in Voxengo plugins in a normal
way.
2021-07-31 16:31:53 +02:00
Robbert van der Helm bf59e5e8ce Also grab keyboard focus on parent window focus
This allows you to directly focus plugin GUIs that are open in the
background in REAPER.
2021-07-31 16:14:02 +02:00
Robbert van der Helm c98a9519fe Handle X11 events within the Win32 event loop
This unifies event handling and it allows X11 events to still be
processed even when the event loop is blocked.
2021-07-31 15:19:44 +02:00
Robbert van der Helm 2f0b88d5c8 Reword workaround revert changelog entry 2021-07-29 14:19:28 +02:00
Robbert van der Helm 6e684452fe Also mention Ardour being affected 2021-07-29 13:59:55 +02:00
Robbert van der Helm 762e622416 Revert "Inhibit the event loop during VST3 editor init"
This reverts commit ff76e482f2.

This was a workaround for a race condition in Nimble Kick when opening
the editor while the plugin has not yet been authorized (a Win32 timer
proc between `IEditController::createView()` and `IPlugView::attached()`
would cause a stack overflow because the plugin doesn't check if the
things it wants to use have actually been initialized yet).

But as it turns out, Bitwig Studio now calls
`IEditController::createView()` unconditionally when loading a VST3
plugin, regardless of whether the user wants to open the editor or not.
So this workaround would cause the message loop to be stalled
indefinitely until you open the editor. Since this would also cause
Nimble Kick to break in the Windows version of Bitwig, we'll simply
revert this workaround. If you need to activate the plugin on Linux, you
can load it in the Windows version of REAPER running under Wine instead.
After that the plugin will work just fine under yabridge.
2021-07-29 13:56:26 +02:00
Robbert van der Helm d053eab35a Filter LeaveNotify based on window under pointer
Instead of ignoring all `NonlinearVirtual` events. This lets us release
focus when instantly moving the mouse from a plugin GUI to something
else. This generates `NonlinearVirtual` event, and previously we ignored
those because that also happens when opening a dropdown menu in a TDR
plugin (which uses popup windows instead of actual dropdowns).
2021-07-27 18:05:47 +02:00
Robbert van der Helm 186a6c01a2 Filter Win32 windows for XDND by class name
Instead of ignoring all windows that have an associated X11 window. That
would otherwise treat standalone applications like yabridge GUI
wrappers.
2021-07-26 14:29:06 +02:00
Robbert van der Helm 890c534573 Trace input focus grabbing 2021-07-26 12:38:17 +02:00
Robbert van der Helm 4b256d456b Bump to version 3.5.0 2021-07-23 16:38:00 +02:00
Robbert van der Helm 68cfb2b4cb Reword changelog 2021-07-23 16:16:05 +02:00
Robbert van der Helm 0e838fa947 Change wording in changelog 2021-07-23 15:41:18 +02:00
Robbert van der Helm 7a2febfffb Support the older XDND versions 3 and 4
This is needed for Tracktion Waveform and other JUCE based hosts.
2021-07-23 13:19:10 +02:00
Robbert van der Helm 75a6bed1b9 Reword changelog 2021-07-23 00:57:54 +02:00
Robbert van der Helm f6fb45fee3 Mention Ardour VST3 editor resizing
Ardour ignores the `IPlugView::resizeView()` and only listens to
`ConfigureNotify` events for growing its VST3 editorsZ, so now this
works.
2021-07-21 17:16:21 +02:00
Robbert van der Helm e95f381fa0 Remove unnecessary unreparent check
Or at least, hopefully this is not needed.
2021-07-21 17:01:02 +02:00
Robbert van der Helm f3bce6ee15 Mention the embedding rewrite in the changelog 2021-07-21 17:01:02 +02:00
Robbert van der Helm ff76e482f2 Inhibit the event loop during VST3 editor init
This should in theory prevent Nimble Kick from triggering a stack
overflow when the event loop timer procs before `IPlugView::attached()`
gets called and the plugin hasn't been registered yet. I haven't seen
any other VST3 plugins trigger a race condition here.
2021-07-20 16:24:25 +02:00
Robbert van der Helm a1cb3b614b Add a +editor flag to YABRIDGE_DEBUG_LEVEL 2021-07-20 03:01:16 +02:00
Robbert van der Helm fae8314017 Merge branch 'removeme/reparenting-tracing' 2021-07-20 02:18:55 +02:00
Robbert van der Helm 6d76daff80 [yabridgectl] Print yabridge host paths in status 2021-07-20 02:02:39 +02:00
Robbert van der Helm f2ffb68b55 Attempt to fix rare multiple displays issue
(cherry picked from 1950206159fbc830718803fa152b636b2a914a95)

Under certain DEs/WMs, the window might not render at all when using
multiple displays and the primary display is set to the rightmost
display.

This seems like a reasonably candidate for fixing this.

https://github.com/robbert-vdh/yabridge/issues/89
https://github.com/robbert-vdh/yabridge/issues/104
2021-07-20 01:10:31 +02:00
Robbert van der Helm 8fbc13fc25 Steal the window back when the WM reparents it
I've seen this happen once or twice. Earlier on (in #40) we could get
away with just reparenting the window another time. But here both
reparents succeed, and the issue still happens. But a reparent notify
for `parent_window` did appear on system affected by this issue, which
is very odd. Hopefully this will help.
2021-07-20 01:10:31 +02:00
Robbert van der Helm 0e57f410a9 Warn on startup if RLIMIT_MEMLOCK is set too low
This should diagnose issues like #119.
2021-07-18 23:13:51 +02:00
Robbert van der Helm fe61a28524 Print a distinct error when mmap() returns EAGAIN
As mentioned in #119.
2021-07-18 23:13:42 +02:00
Robbert van der Helm 28ab46e3c1 Explicitly check for CF_HDROP
We should of course not expect all global memory to be a HDROP, oops.
Apparently REAKTOR sometimes uses the drag-and-drop system for its own
internal data.
2021-07-18 19:20:44 +02:00
Robbert van der Helm d99f571c05 Treat EACCES for pid_running() as alive
When the user has some sort of hardening going on, we might not be able
to read the Wine process's memory. In that case this check would return
`false` even though the process is still running. To combat this, we
should explicitly check for `EINVAL` which is returned when the file
doesn't exist at all or when it's a broken 'symlink' (even though it
isn't really a symlink).
2021-07-18 14:54:12 +02:00
Robbert van der Helm f75cdc9019 Mention FrozenPlain Obelisk in the changelog 2021-07-17 22:02:25 +02:00
Robbert van der Helm 5f5a7bbdd2 Only call ftruncate() when size > 0
Either Boost or Linux really doesn't like it if you ftruncate() shared
memory down to 0 bytes.
2021-07-17 22:01:29 +02:00
Robbert van der Helm f43e9c2153 Only consider host windows with WM_STATE set
This is the same way (minus the mapping check part) that `xprop` and
`xwininfo` filter windows when clicking on them. REAPER's toplevel
window apparently doesn't process any keyboard input when the mouse
cursor is located outside of that window.
2021-07-17 21:05:27 +02:00
Robbert van der Helm e4f2e8c27f Add a separate audio thread mutual recursion stack
This should fix #118 without breaking our _other_ workaround from
yabridge 3.4.0 to fix the issue where a plugin would freeze if it would
try to resize itself while at the same time it sent parameter changes
from the audio thread. (and both of these issues of course are caused by
the same JUCE bug)
2021-07-15 21:05:36 +02:00
Robbert van der Helm f5ce56e180 Reword changelog 2021-07-15 16:11:41 +02:00
Robbert van der Helm ae454be4b5 Bump to version 3.4.0 2021-07-15 16:06:15 +02:00
Robbert van der Helm 22fb74bcfa Remove mention of Wine->X11 DnD not working
Because now it does work!
2021-07-15 16:05:20 +02:00
Robbert van der Helm 5f7fb2e2c3 Work around thread safety issue in Melda plugins
This is super difficult to trigger on purpose, but I did run into it at
least once just now so it seems like a good idea to at least make sure
that this doesn't happen.
2021-07-15 15:45:15 +02:00
Robbert van der Helm f02341e77f Fix focus handling when reopening REAPER FX window
REAPER initializes the plugin's editor first before reparenting the
parent window to the FX window, so our `topmost_window` didn't actually
refer to the FX window.
2021-07-15 14:21:50 +02:00
Robbert van der Helm 0250d62173 Reword changelog, again 2021-07-14 19:37:16 +02:00
Robbert van der Helm 9b70d4b6d6 Reword changelog 2021-07-14 12:38:03 +02:00
Robbert van der Helm 5fc7acccd1 Show a notification on version mismatch
Between the plugin and the Wine plugin host application.
2021-07-13 22:14:31 +02:00
Robbert van der Helm 4c7ffd5a3a Fix emphasis in changelog 2021-07-11 20:32:06 +02:00
Robbert van der Helm 1c84c4a02a Mention Wine->X11 drag-and-drop in the changelog 2021-07-11 17:40:06 +02:00
Robbert van der Helm 1946693244 Expand on the new mutual recursion changelog entry 2021-07-10 14:40:06 +02:00
Robbert van der Helm 3c94ee7049 Only perform mutual recursion from the GUI thread
JUCE incorrectly calls `IComponentHandler::performEdit()` from the audio
thread instead of using the output parameter changes queue, so this
would also cause GUI resizes to be handled from the audio thread if they
come in at the same time as such a parameter change.
2021-07-10 14:30:52 +02:00
Robbert van der Helm bf84057044 [yabridgectl] Normalize symlinks for plugin counts
Now this should actually be correct with partially overlapping plugin
directories when symlinks were used.
2021-07-05 17:56:22 +02:00