Commit Graph

1518 Commits

Author SHA1 Message Date
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 b99f03cf64 Rename topmost_window to host_window
Since apparently to keep REAPER happy we shouldn't take the _very_
topmost window.
2021-07-17 19:11:29 +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 1e0cf33eba Use a recursive mutex for the Melda deadlock fix
This seems safer with the whole mutual recursion thing.
2021-07-15 16:01:47 +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 0c816b0046 Only ignore -Wmaybe-uninitialized on GCC
An ifdef sounds like a better approach than ignoring two additional
warnings.
2021-07-14 17:18:44 +02:00
Robbert van der Helm f292158889 Silence some more clangd warnings 2021-07-14 17:11:27 +02:00
Robbert van der Helm 8b870a51b0 Remove unnecessary XDND proxy call
This was left over from the original implementation, before we had this
smart pointer-singleton hybrid thing. There's already a handle stored
inside of `Editor`.
2021-07-14 16:41:24 +02:00
Robbert van der Helm 764eb41da9 Remove fixme about Wine deleting windows twice
This should have been fixed as of yabridge 3.2.0 by adding doing a
reparent with a last second flush. Or at least, I haven't heard any
reports about this still being an issue.
2021-07-14 16:35:51 +02:00
Robbert van der Helm 591b2b9ceb Also warn on version mismatch for VST2 plugins 2021-07-13 22:24:02 +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 4013aea63a Include the configuration as a dependency
Apparently this wasn't even supposed to work, so it's probably a good
idea to do it properly before things break.
2021-07-13 22:05:11 +02:00
Robbert van der Helm 3dfb17cf5e Add suggestion to rerun sync after startup failure 2021-07-13 22:05:11 +02:00
Robbert van der Helm d8215e4664 Allow cancelling the drag-and-drop with Escape 2021-07-12 22:58:24 +02:00
Robbert van der Helm 2ebefb1280 Send an escape key press instead of WM_QUIT
This should allow the drag-and-drop operation to quit gracefully.
2021-07-12 21:36:08 +02:00
Robbert van der Helm bbb84cdf2c Remove spurious drag-and-drop tracker WM_QUIT
We don't want to cancel the plugin's own drag-and-drop, oops.
2021-07-12 21:17:12 +02:00
Robbert van der Helm 96fb53be8f Fix the CAS in the XDND check
Oops. We were doing the opposite of what we wanted, which caused the
first drag to always fail.
2021-07-12 14:00:48 +02:00
Robbert van der Helm ad4fb1a0ec Don't define X11 error throwing macro in DND proxy
We didn't need this after all because we don't integrate with the
editor's X11 event loop.
2021-07-12 13:35:10 +02:00
Robbert van der Helm 2f8bb7ef06 Only allow a single XDND operation at a time
MT-PowerDrumkit apparently cancels its drag-and-drop operations and then
immediately starts a new one.
2021-07-12 12:35:07 +02:00
Robbert van der Helm a478436af6 Make sure the Windows dnd operation terminates
I've seen a weird edge case where this doesn't happen once, but i
haven't been able to reproduce it. Hopefully this fixes it.
2021-07-12 12:21:52 +02:00
Robbert van der Helm 11d3ec9010 Also change cursor with the last status message
The idea was that you wouldn't be able to see it anyways, but it feels
better this way.
2021-07-11 21:40:42 +02:00
Robbert van der Helm 4d74963e0a Flush any spooled XDND messages
The last position change message would never reach REAPER under when
using certain plugins because we forgot the flush.
2021-07-11 21:35:39 +02:00
Robbert van der Helm 1b4c4ecfad Remove old warning 2021-07-11 19:43:53 +02:00
Robbert van der Helm c968a357f6 Fall back to HDROP with empty format enumerator
This happens with MeldaProduction plugins.
2021-07-11 19:29:15 +02:00
Robbert van der Helm b1b47ec80d Allow dragging to the right and bottom of plugins 2021-07-11 18:48:32 +02:00
Robbert van der Helm ca5a7b2b96 Continue polling while LMB is held
Instead of while the tracker window is alive. Technically the plugin may
clean up their files after the tracker window is gone, but in practice I
haven't seen it happen.
2021-07-11 18:34:26 +02:00
Robbert van der Helm d21073f866 Escape spaces in URI encoding 2021-07-11 17:24:53 +02:00
Robbert van der Helm 312debc447 URL encode paths in XDND text/uri-list
This should fix drag-and-drop in Bitwig.
2021-07-11 17:21:35 +02:00
Robbert van der Helm d7dc0529a8 URL encode paths in desktop notifications 2021-07-11 17:19:48 +02:00
Robbert van der Helm 83951200bb Add a function for URL encoding file paths 2021-07-11 17:19:45 +02:00
Robbert van der Helm 64fbabd8ce Canonicalize paths during drag-and-drop
Otherwise we will get a path from somewhere in `$WINEPREFIX/dosdevices`.
2021-07-11 17:03:53 +02:00
Robbert van der Helm bfaac67cbc End every URI with a line feed
Bitwig requires this.
2021-07-11 16:53:38 +02:00
Robbert van der Helm 8d94abb257 Only send the drop once
Oops.
2021-07-11 16:30:28 +02:00
Robbert van der Helm a12215de3c Fix URI list length
Apparently you're _not_ supposed to count the trailing lien feed. This
would cause REAPER to freeze.
2021-07-11 16:30:21 +02:00
Robbert van der Helm 8e29b5edf3 Make sure the drop actually goes through
The whole dropping code was nested in the wrong loop (oops), and we also
forgot to send any last spooled messages. We now also use a pair of
booleans instead of an optional boolean here because it makes the
conditionals a bit more readable.
2021-07-11 15:55:34 +02:00
Robbert van der Helm f6d661cd35 Fix the timeout 2021-07-11 15:28:14 +02:00
Robbert van der Helm 7bac138240 Spool XdndPosition messages
In accordance to the spec.
2021-07-11 15:28:01 +02:00
Robbert van der Helm 0e0b120eda Perform the actual drop after releasing the button 2021-07-11 15:13:32 +02:00
Robbert van der Helm 8fc1097f84 Change cursor depending on XdndStatus 2021-07-11 14:32:48 +02:00
Robbert van der Helm 4e67fa9212 Fetch atoms for the remaining two XDND messages
We're going to need these anyways.
2021-07-11 14:14:02 +02:00
Robbert van der Helm 7b5810ae57 Listen for XdndStatus 2021-07-11 14:12:35 +02:00
Robbert van der Helm 2671511dc0 Handle ConvertSelection for XDND 2021-07-11 14:05:09 +02:00
Robbert van der Helm b6fd0405fb Transform the file list into text/uri-list format 2021-07-11 13:20:36 +02:00
Robbert van der Helm 6f3beca32a Send XdndPosition messages 2021-07-11 12:34:04 +02:00
Robbert van der Helm eac9f9433b Clean up X11 client message functions
clang-tidy would warn about all parameters being the same, which is
true, but that's kind of the point here.
2021-07-11 12:15:30 +02:00
Robbert van der Helm e0ff16cd16 Fix XDND transition state when leaving window
Just resetting the last window is of course not enough here. I think
Dolphin/Qt run into the same issue, because their drop seems to stick
when hovering over Emacs (or Emacs is to blame, which could very well be
the case here).
2021-07-11 12:12:02 +02:00
Robbert van der Helm 94125f9eab Announce XdndEnter and XdndLeave 2021-07-10 23:50:39 +02:00
Robbert van der Helm 7d8a252301 Implement the function for sending XDND messages 2021-07-10 23:18:18 +02:00