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:
parent
167d9b64c3
commit
1c2d5f69f3
2 changed files with 12 additions and 28 deletions
|
|
@ -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() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue