Browse Source

Fix isStandalone for external window; More macOS tests

pull/316/head
falkTX 3 years ago
parent
commit
0c33dcc8d4
3 changed files with 22 additions and 8 deletions
  1. +1
    -0
      distrho/src/DistrhoUI.cpp
  2. +0
    -1
      distrho/src/DistrhoUIPrivateData.hpp
  3. +21
    -7
      examples/EmbedExternalUI/EmbedExternalExampleUI.cpp

+ 1
- 0
distrho/src/DistrhoUI.cpp View File

@@ -52,6 +52,7 @@ UI::PrivateData::createNextWindow(UI* const ui, const uint width, const uint hei
ewData.height = height; ewData.height = height;
ewData.scaleFactor = pData->scaleFactor; ewData.scaleFactor = pData->scaleFactor;
ewData.title = DISTRHO_PLUGIN_NAME; ewData.title = DISTRHO_PLUGIN_NAME;
ewData.isStandalone = DISTRHO_UI_IS_STANDALONE;
return ewData; return ewData;
#else #else
pData->window = new PluginWindow(ui, pData->app, pData->winId, width, height, pData->scaleFactor); pData->window = new PluginWindow(ui, pData->app, pData->winId, width, height, pData->scaleFactor);


+ 0
- 1
distrho/src/DistrhoUIPrivateData.hpp View File

@@ -130,7 +130,6 @@ public:
: ui(uiPtr) : ui(uiPtr)
{ {
app.ui = ui; app.ui = ui;
ui->pData.isStandalone = DISTRHO_UI_IS_STANDALONE;
} }


// fetch cached data // fetch cached data


+ 21
- 7
examples/EmbedExternalUI/EmbedExternalExampleUI.cpp View File

@@ -43,9 +43,10 @@
@implementation NSExternalWindow { @implementation NSExternalWindow {
@public @public
bool closed; bool closed;
bool standalone;
} }
- (BOOL)canBecomeKeyWindow { return YES; } - (BOOL)canBecomeKeyWindow { return YES; }
- (BOOL)canBecomeMainWindow { return NO; }
- (BOOL)canBecomeMainWindow { return standalone ? YES : NO; }
- (BOOL)windowShouldClose:(id)_ { closed = true; return YES; } - (BOOL)windowShouldClose:(id)_ { closed = true; return YES; }
@end @end
#endif #endif
@@ -78,17 +79,19 @@ public:
#endif #endif
fValue(0.0f) fValue(0.0f)
{ {
const bool standalone = isStandalone();
d_stdout("isStandalone %d", (int)standalone);

#if defined(DISTRHO_OS_MAC) #if defined(DISTRHO_OS_MAC)
if (isStandalone())
NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc]init];
[NSApplication sharedApplication];

if (standalone)
{ {
[[NSApplication sharedApplication]new];
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES]; [NSApp activateIgnoringOtherApps:YES];
} }


NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc] init];
[NSApplication sharedApplication];

fView = [NSView new]; fView = [NSView new];
DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,);


@@ -118,6 +121,7 @@ public:
DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,);


fWindow->closed = false; // is this needed? fWindow->closed = false; // is this needed?
fWindow->standalone = standalone;
[fWindow setIsVisible:NO]; [fWindow setIsVisible:NO];


if (NSString* const nsTitle = [[NSString alloc] if (NSString* const nsTitle = [[NSString alloc]
@@ -129,7 +133,6 @@ public:
[fWindow setContentView:fView]; [fWindow setContentView:fView];
[fWindow setContentSize:NSMakeSize(getWidth(), getHeight())]; [fWindow setContentSize:NSMakeSize(getWidth(), getHeight())];
[fWindow makeFirstResponder:fView]; [fWindow makeFirstResponder:fView];
[fWindow makeKeyAndOrderFront:fWindow];
} }


[pool release]; [pool release];
@@ -234,6 +237,8 @@ protected:
#if defined(DISTRHO_OS_MAC) #if defined(DISTRHO_OS_MAC)
DISTRHO_SAFE_ASSERT_RETURN(fWindow != nil,); DISTRHO_SAFE_ASSERT_RETURN(fWindow != nil,);
[fWindow orderFrontRegardless]; [fWindow orderFrontRegardless];
[fWindow makeKeyWindow];
[fWindow makeFirstResponder:fView];
#elif defined(DISTRHO_OS_WINDOWS) #elif defined(DISTRHO_OS_WINDOWS)
#else #else
DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,);
@@ -291,9 +296,18 @@ protected:
#if defined(DISTRHO_OS_MAC) #if defined(DISTRHO_OS_MAC)
DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,);
if (fWindow != nil) if (fWindow != nil)
{
[fWindow setIsVisible:(visible ? YES : NO)]; [fWindow setIsVisible:(visible ? YES : NO)];

if (isStandalone())
[fWindow makeMainWindow];

[fWindow makeKeyAndOrderFront:fWindow];
}
else else
{
[fView setHidden:(visible ? NO : YES)]; [fView setHidden:(visible ? NO : YES)];
}
#elif defined(DISTRHO_OS_WINDOWS) #elif defined(DISTRHO_OS_WINDOWS)
#else #else
DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,);


Loading…
Cancel
Save