1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

LV2 Host: Avoid double-nesting XEmbed views

This fixes an issue where some LV2 plugin UIs failed to display
correctly. The issue seemed to be more likely to manifest on a plain
Xorg session.
This commit is contained in:
reuk 2025-09-22 21:28:22 +01:00
parent 167d9b64c3
commit 1c2d5f69f3
No known key found for this signature in database
2 changed files with 12 additions and 28 deletions

View file

@ -572,29 +572,15 @@ private:
// If possible, try to keep platform-specific handing restricted to the implementation of
// ViewComponent. Keep the interface of ViewComponent consistent on all platforms.
#if JUCE_LINUX || JUCE_BSD
struct InnerHolder
{
struct Inner final : public XEmbedComponent
{
Inner() : XEmbedComponent (true, true)
{
setOpaque (true);
setVisible (true);
addToDesktop (0);
}
};
Inner inner;
};
struct ViewComponent final : public InnerHolder,
public XEmbedComponent
struct ViewComponent final : public XEmbedComponent
{
explicit ViewComponent (PhysicalResizeListener& l)
: XEmbedComponent ((unsigned long) inner.getPeer()->getNativeHandle(), true, false),
listener (inner, l)
: XEmbedComponent (true, false),
listener (*this, l)
{
setOpaque (true);
X11Symbols::getInstance()->xSync (XWindowSystem::getInstance()->getDisplay(), false);
}
~ViewComponent()
@ -604,10 +590,10 @@ private:
void prepareForDestruction()
{
inner.removeClient();
removeClient();
}
LV2UI_Widget getWidget() { return lv2_shared::wordCast<LV2UI_Widget> (inner.getHostWindowID()); }
LV2UI_Widget getWidget() { return lv2_shared::wordCast<LV2UI_Widget> (getHostWindowID()); }
void forceViewToSize() {}
void fitToView() {}

View file

@ -227,10 +227,10 @@ public:
if (shouldReparent)
X11Symbols::getInstance()->xReparentWindow (dpy, client, host, 0, 0);
updateMapping();
if (supportsXembed)
sendXEmbedEvent (CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0, (long) host, xembedVersion);
updateMapping();
}
}
@ -478,11 +478,9 @@ private:
return ((flags & XEMBED_MAPPED) != 0);
}
else
{
supportsXembed = false;
xembedVersion = maxXEmbedVersionToSupport;
}
supportsXembed = false;
xembedVersion = maxXEmbedVersionToSupport;
return true;
}