Browse Source

Improve compat with some bad X11 UIs, but break recursion

Signed-off-by: falkTX <falktx@falktx.com>
tags/v1.2
falkTX 2 years ago
parent
commit
4eae8030d9
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 24 additions and 10 deletions
  1. +3
    -3
      plugins/Common/IldaeilUI.cpp
  2. +20
    -6
      plugins/Common/PluginHostWindow.cpp
  3. +1
    -1
      plugins/Common/PluginHostWindow.hpp

+ 3
- 3
plugins/Common/IldaeilUI.cpp View File

@@ -406,8 +406,8 @@ public:
{
DISTRHO_SAFE_ASSERT_RETURN(fPluginRunning,);

fPluginHostWindow.hide();
carla_show_custom_ui(handle, fPluginId, false);
if (fPluginHostWindow.hide())
carla_show_custom_ui(handle, fPluginId, false);
}

void createOrUpdatePluginGenericUI(const CarlaHostHandle handle, const CarlaPluginInfo* info = nullptr)
@@ -664,7 +664,7 @@ protected:

case kIdleHidePluginUI:
fIdleState = kIdleNothing;
carla_show_custom_ui(handle, fPluginId, false);
hidePluginUI(handle);
break;

case kIdleGiveIdleToUI:


+ 20
- 6
plugins/Common/PluginHostWindow.cpp View File

@@ -138,23 +138,34 @@ struct PluginHostWindow::PrivateData
#endif
}

void hide()
bool hide()
{
#if defined(DISTRHO_OS_HAIKU)
#elif defined(DISTRHO_OS_MAC)
if (view != nullptr)
{
[view setHidden:YES];
[NSOpenGLContext clearCurrentContext];
[NSOpenGLContext clearCurrentContext];
return true;
}
#elif defined(DISTRHO_OS_WASM)
#elif defined(DISTRHO_OS_WINDOWS)
if (pluginWindow != nullptr)
{
ShowWindow(pluginWindow, SW_HIDE);
pluginWindow = nullptr;
return true;
}
#else
pluginWindow = 0;
if (pluginWindow != 0)
{
XUnmapWindow(display, pluginWindow);
XSync(display, True);
pluginWindow = 0;
return true;
}
#endif
return false;
}

void idle()
@@ -192,7 +203,9 @@ struct PluginHostWindow::PrivateData

if (numChildren > 0 && childWindows != nullptr)
{
pluginWindow = childWindows[0];
// pick last child, needed for NTK based UIs which do not delete/remove previous windows.
//sadly this breaks ildaeil-within-ildaeil recursion.. :(
pluginWindow = childWindows[numChildren - 1];
XFree(childWindows);
}
}
@@ -294,6 +307,7 @@ struct PluginHostWindow::PrivateData
{
lookingForChildren = false;
XMoveWindow(display, pluginWindow, xOffset, yOffset);
XSync(display, True);
pluginWindowCallbacks->pluginWindowResized(width, height);
}
}
@@ -340,9 +354,9 @@ void* PluginHostWindow::attachAndGetWindowHandle()
return pData->attachAndGetWindowHandle();
}

void PluginHostWindow::hide()
bool PluginHostWindow::hide()
{
pData->hide();
return pData->hide();
}

void PluginHostWindow::idle()


+ 1
- 1
plugins/Common/PluginHostWindow.hpp View File

@@ -36,7 +36,7 @@ public:
~PluginHostWindow();

void* attachAndGetWindowHandle();
void hide();
bool hide();
void idle();
void setPositionAndSize(uint x, uint y, uint width, uint height);
};


Loading…
Cancel
Save