Root cause: commit 0632681 removed setAlwaysOnTop(true) and replaced it
with manual objc_msgSend level tricks. Those tricks don't keep the window
in the same Space as Ableton when fullscreen.
Fix: put back setAlwaysOnTop(true) + keep the X button fix (closeButtonPressed
hides window instead of quitting). Removed all objc_msgSend hacks.
STOP β revert HelperPluginHost to last known working state (GUI in Helper but with original window behavior before all my 'fixes')β
I've been making this worse. The original code worked β GUI opened inside
Ableton's window. The problem started when close-button fix changed window
behavior. Need to go back to what worked and make minimal close-button fix only."
fix: show plugin GUI in-process (inside Ableton window) not from Helperβ
ROOT CAUSE: Moving GUI to Helper process broke it. macOS treats Helper
as separate app β opens in different Space when fullscreen.
SOLUTION: PluginBridge.vst3 (in-process) loads a GUI-only plugin instance.
This instance doesn't process audio β it's only for displaying the editor.
Ableton manages it as a normal plugin window (same as Pro-Q 4 native).
Parameter sync: GUI instance β Helper via IPC (bidirectional).
- User moves knob on GUI β notify Helper β Helper updates real instance
- MCP/automation changes param on Helper β notify Plugin β update GUI instance
Helper no longer shows any GUI window.
fix: set fullscreen-compatible behavior BEFORE making window visibleβ
Previous fix set collection behavior after setVisible(true) which is
too late β macOS has already assigned the window to a Space.
Now sets canJoinAllSpaces + fullScreenAuxiliary + stationary (1<<4)
BEFORE the window becomes visible. Also uses NSPanel-level behavior
and moves window to active Space explicitly via orderWindow:relativeTo:.
If this still fails in fullscreen, the only remaining option is to
render the plugin GUI in-process (framebuffer sharing).
fix: GUI now floats over Ableton in fullscreen modeβ
Root cause: NSWindow needs collection behavior flags to appear in
fullscreen Spaces. Without them, macOS puts the window in a separate
Space (different desktop), causing the 'opens in new window' behavior.
Fix adds to showAsFloatingPanel():
- canJoinAllSpaces (1 << 0) β window can appear on any Space
- fullScreenAuxiliary (1 << 8) β window can overlay fullscreen apps
- Window level raised to 25 (NSStatusWindowLevel) which is above
fullscreen app level
This means the plugin GUI will float over Ableton whether Ableton
is windowed OR fullscreen.
Fix GUI focus: Remove makeAccessoryProcess entirely, use NSWindow level trick to float without activation