commit 0c33dcc8d4181bc8d647e53b8ae2c617c978cf87
parent e8ce902285257324f3de6f01f59fe47074e3fa4a
Author: falkTX <falktx@falktx.com>
Date: Fri, 27 Aug 2021 12:58:43 +0100
Fix isStandalone for external window; More macOS tests
Diffstat:
3 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/distrho/src/DistrhoUI.cpp b/distrho/src/DistrhoUI.cpp
@@ -52,6 +52,7 @@ UI::PrivateData::createNextWindow(UI* const ui, const uint width, const uint hei
ewData.height = height;
ewData.scaleFactor = pData->scaleFactor;
ewData.title = DISTRHO_PLUGIN_NAME;
+ ewData.isStandalone = DISTRHO_UI_IS_STANDALONE;
return ewData;
#else
pData->window = new PluginWindow(ui, pData->app, pData->winId, width, height, pData->scaleFactor);
diff --git a/distrho/src/DistrhoUIPrivateData.hpp b/distrho/src/DistrhoUIPrivateData.hpp
@@ -130,7 +130,6 @@ public:
: ui(uiPtr)
{
app.ui = ui;
- ui->pData.isStandalone = DISTRHO_UI_IS_STANDALONE;
}
// fetch cached data
diff --git a/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp b/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp
@@ -43,9 +43,10 @@
@implementation NSExternalWindow {
@public
bool closed;
+ bool standalone;
}
- (BOOL)canBecomeKeyWindow { return YES; }
-- (BOOL)canBecomeMainWindow { return NO; }
+- (BOOL)canBecomeMainWindow { return standalone ? YES : NO; }
- (BOOL)windowShouldClose:(id)_ { closed = true; return YES; }
@end
#endif
@@ -78,17 +79,19 @@ public:
#endif
fValue(0.0f)
{
+ const bool standalone = isStandalone();
+ d_stdout("isStandalone %d", (int)standalone);
+
#if defined(DISTRHO_OS_MAC)
- if (isStandalone())
+ NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc]init];
+ [NSApplication sharedApplication];
+
+ if (standalone)
{
- [[NSApplication sharedApplication]new];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
}
- NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc] init];
- [NSApplication sharedApplication];
-
fView = [NSView new];
DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,);
@@ -118,6 +121,7 @@ public:
DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,);
fWindow->closed = false; // is this needed?
+ fWindow->standalone = standalone;
[fWindow setIsVisible:NO];
if (NSString* const nsTitle = [[NSString alloc]
@@ -129,7 +133,6 @@ public:
[fWindow setContentView:fView];
[fWindow setContentSize:NSMakeSize(getWidth(), getHeight())];
[fWindow makeFirstResponder:fView];
- [fWindow makeKeyAndOrderFront:fWindow];
}
[pool release];
@@ -234,6 +237,8 @@ protected:
#if defined(DISTRHO_OS_MAC)
DISTRHO_SAFE_ASSERT_RETURN(fWindow != nil,);
[fWindow orderFrontRegardless];
+ [fWindow makeKeyWindow];
+ [fWindow makeFirstResponder:fView];
#elif defined(DISTRHO_OS_WINDOWS)
#else
DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,);
@@ -291,9 +296,18 @@ protected:
#if defined(DISTRHO_OS_MAC)
DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,);
if (fWindow != nil)
+ {
[fWindow setIsVisible:(visible ? YES : NO)];
+
+ if (isStandalone())
+ [fWindow makeMainWindow];
+
+ [fWindow makeKeyAndOrderFront:fWindow];
+ }
else
+ {
[fView setHidden:(visible ? NO : YES)];
+ }
#elif defined(DISTRHO_OS_WINDOWS)
#else
DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,);