| 
				
				
				
				 | 
			
			 | 
			@@ -1,503 +0,0 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/* | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * DISTRHO Plugin Framework (DPF) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * Permission to use, copy, modify, and/or distribute this software for any purpose with | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * or without fee is hereby granted, provided that the above copyright notice and this | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * permission notice appear in all copies. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include "DistrhoUI.hpp" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# import <Cocoa/Cocoa.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define WIN32_CLASS_NAME "DPF-EmbedExternalExampleUI" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define WIN32_LEAN_AND_MEAN | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# include <windows.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# include <sys/types.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# include <X11/Xatom.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# include <X11/Xlib.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# include <X11/Xutil.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# define X11Key_Escape 9 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# ifndef __MAC_10_12 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#  define NSEventMaskAny NSAnyEventMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#  define NSWindowStyleMaskClosable NSClosableWindowMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#  define NSWindowStyleMaskMiniaturizable NSMiniaturizableWindowMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#  define NSWindowStyleMaskResizable NSResizableWindowMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#  define NSWindowStyleMaskTitled NSTitledWindowMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			# endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			@interface NSExternalWindow : NSWindow | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			@end | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			@implementation NSExternalWindow { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			@public | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    bool closed; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    bool standalone; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			- (BOOL)canBecomeKeyWindow { return YES; } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			- (BOOL)canBecomeMainWindow { return standalone ? YES : NO; } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			- (BOOL)windowShouldClose:(id)_ { closed = true; return YES; } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			@end | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			START_NAMESPACE_DISTRHO | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			// -------------------------------------------------------------------------------------------------------------------- | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			struct NativeWindow { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    struct Callbacks { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        virtual ~Callbacks() {} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        virtual void nativeHide() = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        virtual void nativeResize(uint width, uint height) = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    Callbacks* const fCallbacks; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const bool fIsStandalone; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const bool fIsEmbed; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    bool fIsVisible; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    NSView* fView; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    NSExternalWindow* fWindow; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ::HWND fWindow; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ::Display* fDisplay; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ::Window fWindow; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    NativeWindow(Callbacks* callbacks, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 const char* title, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 uintptr_t parentWindowHandle, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 uint width, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 uint height, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                 bool isStandalone); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ~NativeWindow(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void idle(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void focus(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void setSize(uint width, uint height); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void setTitle(const char* title); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void setTransientParentWindow(uintptr_t winId); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void setVisible(bool visible); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void hide() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fCallbacks->nativeHide(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uintptr_t getNativeWindowHandle() const noexcept | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return (uintptr_t)fView; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return (uintptr_t)fWindow; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return (uintptr_t)fWindow; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			// -------------------------------------------------------------------------------------------------------------------- | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			NativeWindow::NativeWindow(Callbacks* const callbacks, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           const char* const title, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           const uintptr_t parentWindowHandle, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           const uint width, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           const uint height, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                           const bool isStandalone) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    : fCallbacks(callbacks), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fIsStandalone(isStandalone), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fIsEmbed(parentWindowHandle != 0), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fIsVisible(parentWindowHandle != 0), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fView(nullptr), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fWindow(nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fWindow(nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fDisplay(nullptr), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fWindow(0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc] init]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [NSApplication sharedApplication]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (standalone) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [NSApp activateIgnoringOtherApps:YES]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    fView = [NSView new]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fView setFrame:NSMakeRect(0, 0, width, height)]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fView setAutoresizesSubviews:YES]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fView setWantsLayer:YES]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [[fView layer] setBackgroundColor:[[NSColor blueColor] CGColor]]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fIsEmbed) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fView retain]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [(NSView*)parentWindowHandle addSubview:fView]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        const ulong styleMask = NSWindowStyleMaskClosable | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                              | NSWindowStyleMaskMiniaturizable | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                              | NSWindowStyleMaskResizable | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                              | NSWindowStyleMaskTitled; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fWindow = [[[NSExternalWindow alloc] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        initWithContentRect:[fView frame] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                styleMask:styleMask | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    backing:NSBackingStoreBuffered | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    defer:NO] retain]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fWindow->closed = false; // is this needed? | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fWindow->standalone = standalone; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow setIsVisible:NO]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (NSString* const nsTitle = [[NSString alloc] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        initWithBytes:title | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                length:std::strlen(title) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                encoding:NSUTF8StringEncoding]) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [fWindow setTitle:nsTitle]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [nsTitle release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow setContentView:fView]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow setContentSize:NSMakeSize(width, height)]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow makeFirstResponder:fView]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [pool release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WNDCLASS windowClass = {}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.style         = CS_OWNDC; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.lpfnWndProc   = DefWindowProc; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.hInstance     = nullptr; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.hIcon         = LoadIcon(nullptr, IDI_APPLICATION); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.hCursor       = LoadCursor(nullptr, IDC_ARROW); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    windowClass.lpszClassName = WIN32_CLASS_NAME; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(RegisterClass(&windowClass),); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const int winFlags = fIsEmbed | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       ? WS_CHILD | WS_VISIBLE | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                       : WS_POPUPWINDOW | WS_CAPTION | WS_SIZEBOX; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    RECT rect = { 0, 0, static_cast<LONG>(width), static_cast<LONG>(height) }; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AdjustWindowRectEx(&rect, winFlags, FALSE, WS_EX_TOPMOST); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    fWindow = CreateWindowEx(WS_EX_TOPMOST, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                WIN32_CLASS_NAME, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                title, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                winFlags, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                CW_USEDEFAULT, CW_USEDEFAULT, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                rect.right - rect.left, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                rect.bottom - rect.top, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                (HWND)parentWindowHandle, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                nullptr, nullptr, nullptr); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SetWindowLongPtr(fWindow, GWLP_USERDATA, (LONG_PTR)this); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    fDisplay = XOpenDisplay(nullptr); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fDisplay != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const ::Window parent = fIsEmbed | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            ? (::Window)parentWindowHandle | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                            : RootWindow(fDisplay, DefaultScreen(fDisplay)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    fWindow = XCreateSimpleWindow(fDisplay, parent, 0, 0, width, height, 0, 0, 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XSizeHints sizeHints = {}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sizeHints.flags      = PMinSize; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sizeHints.min_width  = width; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sizeHints.min_height = height; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XSetNormalHints(fDisplay, fWindow, &sizeHints); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XStoreName(fDisplay, fWindow, title); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fIsEmbed) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // start with window mapped, so host can access it | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XMapWindow(fDisplay, fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // grab Esc key for auto-close | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XGrabKey(fDisplay, X11Key_Escape, AnyModifier, fWindow, 1, GrabModeAsync, GrabModeAsync); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // destroy window on close | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        Atom wmDelete = XInternAtom(fDisplay, "WM_DELETE_WINDOW", True); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XSetWMProtocols(fDisplay, fWindow, &wmDelete, 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // set pid WM hint | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        const pid_t pid = getpid(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        const Atom _nwp = XInternAtom(fDisplay, "_NET_WM_PID", False); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XChangeProperty(fDisplay, fWindow, _nwp, XA_CARDINAL, 32, PropModeReplace, (const uchar*)&pid, 1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // set the window to both dialog and normal to produce a decorated floating dialog | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // order is important: DIALOG needs to come before NORMAL | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        const Atom _wt = XInternAtom(fDisplay, "_NET_WM_WINDOW_TYPE", False); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        const Atom _wts[2] = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            XInternAtom(fDisplay, "_NET_WM_WINDOW_TYPE_DIALOG", False), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            XInternAtom(fDisplay, "_NET_WM_WINDOW_TYPE_NORMAL", False) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XChangeProperty(fDisplay, fWindow, _wt, XA_ATOM, 32, PropModeReplace, (const uchar*)&_wts, 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			NativeWindow::~NativeWindow() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fView != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fWindow != nil) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [fWindow close]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fView release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fWindow != nil) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [fWindow release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fWindow != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        DestroyWindow(fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    UnregisterClass(WIN32_CLASS_NAME, nullptr); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fDisplay != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fWindow != 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            XDestroyWindow(fDisplay, fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XCloseDisplay(fDisplay); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::idle() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fIsStandalone) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        NSAutoreleasePool* const pool = [[NSAutoreleasePool alloc] init]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        NSDate* const date = [NSDate distantPast]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (NSEvent* event;;) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            event = [NSApp | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        nextEventMatchingMask:NSEventMaskAny | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    untilDate:date | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    inMode:NSDefaultRunLoopMode | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    dequeue:YES]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (event == nil) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [NSApp sendEvent:event]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fWindow->closed) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            fWindow->closed = false; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            close(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [pool release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fIsStandalone && fWindow != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        MSG msg; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (::GetMessage(&msg, nullptr, 0, 0) > 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            d_stdout("msg %u %u", msg.message, WM_SIZING); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            switch (msg.message) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case WM_SYSCOMMAND: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (msg.wParam != SC_CLOSE) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // fall-through | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case WM_QUIT: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                hide(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                return; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case WM_SIZING: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            TranslateMessage(&msg); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            DispatchMessage(&msg); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fDisplay != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (XEvent event; XPending(fDisplay) > 0;) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            XNextEvent(fDisplay, &event); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (! fIsVisible) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                continue; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            switch (event.type) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case ClientMessage: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (char* const type = XGetAtomName(fDisplay, event.xclient.message_type)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    if (std::strcmp(type, "WM_PROTOCOLS") == 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        hide(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            case KeyRelease: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (event.xkey.keycode == X11Key_Escape) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    hide(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::focus() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    d_stdout("focus"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fWindow orderFrontRegardless]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fWindow makeKeyWindow]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fWindow makeFirstResponder:fView]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SetForegroundWindow(fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SetActiveWindow(fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SetFocus(fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XRaiseWindow(fDisplay, fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::setSize(uint width, uint height) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    NSRect rect = [fView frame]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    rect.size = CGSizeMake((CGFloat)width, (CGFloat)height); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    [fView setFrame:rect]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fWindow != nullptr) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        SetWindowPos(fWindow, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        HWND_TOP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        0, 0, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        width, height, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fWindow != 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XResizeWindow(fDisplay, fWindow, width, height); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::setTitle(const char* const title) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fWindow != nil) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (NSString* const nsTitle = [[NSString alloc] | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        initWithBytes:title | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                length:strlen(title) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                            encoding:NSUTF8StringEncoding]) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [fWindow setTitle:nsTitle]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [nsTitle release]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XStoreName(fDisplay, fWindow, title); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::setTransientParentWindow(const uintptr_t winId) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    XSetTransientForHint(fDisplay, fWindow, (::Window)winId); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void NativeWindow::setVisible(const bool visible) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    fIsVisible = visible; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #if defined(DISTRHO_OS_HAIKU) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_MAC) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fView != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (fWindow != nil) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow setIsVisible:(visible ? YES : NO)]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fIsStandalone) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            [fWindow makeMainWindow]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fWindow makeKeyAndOrderFront:fWindow]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        [fView setHidden:(visible ? NO : YES)]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #elif defined(DISTRHO_OS_WINDOWS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ShowWindow(fWindow, visible ? SW_SHOWNORMAL : SW_HIDE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    DISTRHO_SAFE_ASSERT_RETURN(fWindow != 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (visible) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XMapRaised(fDisplay, fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        XUnmapWindow(fDisplay, fWindow); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   #endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			// -------------------------------------------------------------------------------------------------------------------- | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			END_NAMESPACE_DISTRHO |