From d635a475fd9b63242c304836bf2bccd76703c4a9 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 17 Aug 2021 11:11:52 +0100 Subject: [PATCH] Revert "Merge pull request #6199 from AvaloniaUI/fixes/osx-com-issues" This reverts commit 3c2ccdc0edd3a85e7738c55cdb884bc23dec3956. # Conflicts: # native/Avalonia.Native/src/OSX/window.mm --- native/Avalonia.Native/inc/comimpl.h | 12 -- native/Avalonia.Native/src/OSX/AvnString.mm | 32 +-- native/Avalonia.Native/src/OSX/Screens.mm | 4 - native/Avalonia.Native/src/OSX/cgl.mm | 8 - native/Avalonia.Native/src/OSX/clipboard.mm | 82 +++---- native/Avalonia.Native/src/OSX/controlhost.mm | 63 +++--- native/Avalonia.Native/src/OSX/cursor.mm | 52 ++--- native/Avalonia.Native/src/OSX/main.mm | 174 ++++----------- native/Avalonia.Native/src/OSX/menu.mm | 22 -- .../src/OSX/platformthreading.mm | 2 - .../Avalonia.Native/src/OSX/rendertarget.mm | 6 - native/Avalonia.Native/src/OSX/window.mm | 200 +++++------------- 12 files changed, 180 insertions(+), 477 deletions(-) diff --git a/native/Avalonia.Native/inc/comimpl.h b/native/Avalonia.Native/inc/comimpl.h index 8baf51b98b..0ff64b7215 100644 --- a/native/Avalonia.Native/inc/comimpl.h +++ b/native/Avalonia.Native/inc/comimpl.h @@ -8,18 +8,6 @@ #include -/** - START_COM_CALL causes AddRef to be called at the beggining of a function. - When a function is exited, it causes ReleaseRef to be called. - This ensures that the object cannot be destroyed whilst the function is running. - For example: Window Show is called, which triggers an event, and user calls Close inside the event - causing the refcount to reach 0, and the object to be destroyed. Function then continues and this pointer - will now be invalid. - - START_COM_CALL protects against this scenario. - */ -#define START_COM_CALL auto r = this->UnknownSelf() - __IID_DEF(IUnknown, 0, 0, 0, C0, 00, 00, 00, 00, 00, 00, 46); class ComObject : public virtual IUnknown diff --git a/native/Avalonia.Native/src/OSX/AvnString.mm b/native/Avalonia.Native/src/OSX/AvnString.mm index cd0e2cdf94..001cf151d8 100644 --- a/native/Avalonia.Native/src/OSX/AvnString.mm +++ b/native/Avalonia.Native/src/OSX/AvnString.mm @@ -43,8 +43,6 @@ public: virtual HRESULT Pointer(void**retOut) override { - START_COM_CALL; - @autoreleasepool { if(retOut == nullptr) @@ -60,19 +58,14 @@ public: virtual HRESULT Length(int*retOut) override { - START_COM_CALL; - - @autoreleasepool + if(retOut == nullptr) { - if(retOut == nullptr) - { - return E_POINTER; - } - - *retOut = _length; - - return S_OK; + return E_POINTER; } + + *retOut = _length; + + return S_OK; } }; @@ -116,15 +109,10 @@ public: virtual HRESULT Get(unsigned int index, IAvnString**ppv) override { - START_COM_CALL; - - @autoreleasepool - { - if(_list.size() <= index) - return E_INVALIDARG; - *ppv = _list[index].getRetainedReference(); - return S_OK; - } + if(_list.size() <= index) + return E_INVALIDARG; + *ppv = _list[index].getRetainedReference(); + return S_OK; } }; diff --git a/native/Avalonia.Native/src/OSX/Screens.mm b/native/Avalonia.Native/src/OSX/Screens.mm index b9c75ed742..10f698ff45 100644 --- a/native/Avalonia.Native/src/OSX/Screens.mm +++ b/native/Avalonia.Native/src/OSX/Screens.mm @@ -8,8 +8,6 @@ class Screens : public ComSingleObject public: virtual HRESULT GetScreenCount (int* ret) override { - START_COM_CALL; - @autoreleasepool { *ret = (int)[NSScreen screens].count; @@ -20,8 +18,6 @@ public: virtual HRESULT GetScreen (int index, AvnScreen* ret) override { - START_COM_CALL; - @autoreleasepool { if(index < 0 || index >= [NSScreen screens].count) diff --git a/native/Avalonia.Native/src/OSX/cgl.mm b/native/Avalonia.Native/src/OSX/cgl.mm index 085037978e..a9d94cdf04 100644 --- a/native/Avalonia.Native/src/OSX/cgl.mm +++ b/native/Avalonia.Native/src/OSX/cgl.mm @@ -69,8 +69,6 @@ public: virtual HRESULT LegacyMakeCurrent() override { - START_COM_CALL; - if(CGLSetCurrentContext(Context) != 0) return E_FAIL; return S_OK; @@ -78,8 +76,6 @@ public: virtual HRESULT MakeCurrent(IUnknown** ppv) override { - START_COM_CALL; - CGLContextObj saved = CGLGetCurrentContext(); CGLLockContext(Context); if(CGLSetCurrentContext(Context) != 0) @@ -132,8 +128,6 @@ public: virtual HRESULT CreateContext(IAvnGlContext* share, IAvnGlContext**ppv) override { - START_COM_CALL; - CGLContextObj shareContext = nil; if(share != nil) { @@ -150,8 +144,6 @@ public: virtual HRESULT WrapContext(void* native, IAvnGlContext**ppv) override { - START_COM_CALL; - if(native == nil) return E_INVALIDARG; *ppv = new AvnGlContext((CGLContextObj) native); diff --git a/native/Avalonia.Native/src/OSX/clipboard.mm b/native/Avalonia.Native/src/OSX/clipboard.mm index 9966971b73..f148374759 100644 --- a/native/Avalonia.Native/src/OSX/clipboard.mm +++ b/native/Avalonia.Native/src/OSX/clipboard.mm @@ -25,8 +25,6 @@ public: virtual HRESULT GetText (char* type, IAvnString**ppv) override { - START_COM_CALL; - @autoreleasepool { if(ppv == nullptr) @@ -44,8 +42,6 @@ public: virtual HRESULT GetStrings(char* type, IAvnStringArray**ppv) override { - START_COM_CALL; - @autoreleasepool { *ppv= nil; @@ -73,71 +69,56 @@ public: virtual HRESULT SetText (char* type, char* utf8String) override { - START_COM_CALL; - + Clear(); @autoreleasepool { - Clear(); - auto string = [NSString stringWithUTF8String:(const char*)utf8String]; auto typeString = [NSString stringWithUTF8String:(const char*)type]; if(_item == nil) [_pb setString: string forType: typeString]; else [_item setString: string forType:typeString]; - - return S_OK; } + + return S_OK; } virtual HRESULT SetBytes(char* type, void* bytes, int len) override { - START_COM_CALL; - - @autoreleasepool - { - auto typeString = [NSString stringWithUTF8String:(const char*)type]; - auto data = [NSData dataWithBytes:bytes length:len]; - if(_item == nil) - [_pb setData:data forType:typeString]; - else - [_item setData:data forType:typeString]; - return S_OK; - } + auto typeString = [NSString stringWithUTF8String:(const char*)type]; + auto data = [NSData dataWithBytes:bytes length:len]; + if(_item == nil) + [_pb setData:data forType:typeString]; + else + [_item setData:data forType:typeString]; + return S_OK; } virtual HRESULT GetBytes(char* type, IAvnString**ppv) override { - START_COM_CALL; - - @autoreleasepool + *ppv = nil; + auto typeString = [NSString stringWithUTF8String:(const char*)type]; + NSData*data; + @try { - *ppv = nil; - auto typeString = [NSString stringWithUTF8String:(const char*)type]; - NSData*data; - @try - { - if(_item) - data = [_item dataForType:typeString]; - else - data = [_pb dataForType:typeString]; - if(data == nil) - return E_FAIL; - } - @catch(NSException* e) - { + if(_item) + data = [_item dataForType:typeString]; + else + data = [_pb dataForType:typeString]; + if(data == nil) return E_FAIL; - } - *ppv = CreateByteArray((void*)data.bytes, (int)data.length); - return S_OK; } + @catch(NSException* e) + { + return E_FAIL; + } + *ppv = CreateByteArray((void*)data.bytes, (int)data.length); + return S_OK; } virtual HRESULT Clear() override { - START_COM_CALL; - @autoreleasepool { if(_item != nil) @@ -147,20 +128,15 @@ public: [_pb clearContents]; [_pb setString:@"" forType:NSPasteboardTypeString]; } - - return S_OK; } + + return S_OK; } virtual HRESULT ObtainFormats(IAvnStringArray** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = CreateAvnStringArray(_item == nil ? [_pb types] : [_item types]); - return S_OK; - } + *ppv = CreateAvnStringArray(_item == nil ? [_pb types] : [_item types]); + return S_OK; } }; diff --git a/native/Avalonia.Native/src/OSX/controlhost.mm b/native/Avalonia.Native/src/OSX/controlhost.mm index f8e9a3b6d1..5ee2344ac7 100644 --- a/native/Avalonia.Native/src/OSX/controlhost.mm +++ b/native/Avalonia.Native/src/OSX/controlhost.mm @@ -16,16 +16,11 @@ public: virtual HRESULT CreateDefaultChild(void* parent, void** retOut) override { - START_COM_CALL; + NSView* view = [NSView new]; + [view setWantsLayer: true]; - @autoreleasepool - { - NSView* view = [NSView new]; - [view setWantsLayer: true]; - - *retOut = (__bridge_retained void*)view; - return S_OK; - } + *retOut = (__bridge_retained void*)view; + return S_OK; }; virtual IAvnNativeControlHostTopLevelAttachment* CreateAttachment() override @@ -74,42 +69,32 @@ public: virtual HRESULT InitializeWithChildHandle(void* child) override { - START_COM_CALL; - - @autoreleasepool - { - if(_child != nil) - return E_FAIL; - _child = (__bridge NSView*)child; - if(_child == nil) - return E_FAIL; - [_holder addSubview:_child]; - [_child setHidden: false]; - return S_OK; - } + if(_child != nil) + return E_FAIL; + _child = (__bridge NSView*)child; + if(_child == nil) + return E_FAIL; + [_holder addSubview:_child]; + [_child setHidden: false]; + return S_OK; }; virtual HRESULT AttachTo(IAvnNativeControlHost* host) override { - START_COM_CALL; - - @autoreleasepool + if(host == nil) + { + [_holder removeFromSuperview]; + [_holder setHidden: true]; + } + else { - if(host == nil) - { - [_holder removeFromSuperview]; - [_holder setHidden: true]; - } - else - { - AvnNativeControlHost* chost = dynamic_cast(host); - if(chost == nil || chost->View == nil) - return E_FAIL; - [_holder setHidden:true]; - [chost->View addSubview:_holder]; - } - return S_OK; + AvnNativeControlHost* chost = dynamic_cast(host); + if(chost == nil || chost->View == nil) + return E_FAIL; + [_holder setHidden:true]; + [chost->View addSubview:_holder]; } + return S_OK; }; virtual void ShowInBounds(float x, float y, float width, float height) override diff --git a/native/Avalonia.Native/src/OSX/cursor.mm b/native/Avalonia.Native/src/OSX/cursor.mm index dc38294a18..1732d6e71f 100644 --- a/native/Avalonia.Native/src/OSX/cursor.mm +++ b/native/Avalonia.Native/src/OSX/cursor.mm @@ -53,46 +53,36 @@ public: virtual HRESULT GetCursor (AvnStandardCursorType cursorType, IAvnCursor** retOut) override { - START_COM_CALL; + *retOut = s_cursorMap[cursorType]; - @autoreleasepool + if(*retOut != nullptr) { - *retOut = s_cursorMap[cursorType]; - - if(*retOut != nullptr) - { - (*retOut)->AddRef(); - } - - return S_OK; + (*retOut)->AddRef(); } + + return S_OK; } virtual HRESULT CreateCustomCursor (void* bitmapData, size_t length, AvnPixelSize hotPixel, IAvnCursor** retOut) override { - START_COM_CALL; - - @autoreleasepool + if(bitmapData == nullptr || retOut == nullptr) { - if(bitmapData == nullptr || retOut == nullptr) - { - return E_POINTER; - } - - NSData *imageData = [NSData dataWithBytes:bitmapData length:length]; - NSImage *image = [[NSImage alloc] initWithData:imageData]; - - - NSPoint hotSpot; - hotSpot.x = hotPixel.Width; - hotSpot.y = hotPixel.Height; - - *retOut = new Cursor([[NSCursor new] initWithImage: image hotSpot: hotSpot]); - - (*retOut)->AddRef(); - - return S_OK; + return E_POINTER; } + + NSData *imageData = [NSData dataWithBytes:bitmapData length:length]; + NSImage *image = [[NSImage alloc] initWithData:imageData]; + + + NSPoint hotSpot; + hotSpot.x = hotPixel.Width; + hotSpot.y = hotPixel.Height; + + *retOut = new Cursor([[NSCursor new] initWithImage: image hotSpot: hotSpot]); + + (*retOut)->AddRef(); + + return S_OK; } }; diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm index 3e152a6125..aaaf381b26 100644 --- a/native/Avalonia.Native/src/OSX/main.mm +++ b/native/Avalonia.Native/src/OSX/main.mm @@ -107,42 +107,27 @@ public: virtual HRESULT SetApplicationTitle(char* utf8String) override { - START_COM_CALL; + auto appTitle = [NSString stringWithUTF8String: utf8String]; - @autoreleasepool - { - auto appTitle = [NSString stringWithUTF8String: utf8String]; - - [[NSProcessInfo processInfo] setProcessName:appTitle]; - - - SetProcessName(appTitle); - - return S_OK; - } + [[NSProcessInfo processInfo] setProcessName:appTitle]; + + + SetProcessName(appTitle); + + return S_OK; } virtual HRESULT SetShowInDock(int show) override { - START_COM_CALL; - - @autoreleasepool - { - AvnDesiredActivationPolicy = show - ? NSApplicationActivationPolicyRegular : NSApplicationActivationPolicyAccessory; - return S_OK; - } + AvnDesiredActivationPolicy = show + ? NSApplicationActivationPolicyRegular : NSApplicationActivationPolicyAccessory; + return S_OK; } virtual HRESULT SetDisableDefaultApplicationMenuItems (bool enabled) override { - START_COM_CALL; - - @autoreleasepool - { - SetAutoGenerateDefaultAppMenuItems(!enabled); - return S_OK; - } + SetAutoGenerateDefaultAppMenuItems(!enabled); + return S_OK; } }; @@ -180,8 +165,6 @@ public: FORWARD_IUNKNOWN() virtual HRESULT Initialize(IAvnGCHandleDeallocatorCallback* deallocator, IAvnApplicationEvents* events) override { - START_COM_CALL; - _deallocator = deallocator; @autoreleasepool{ [[ThreadingInitializer new] do]; @@ -197,154 +180,89 @@ public: virtual HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnWindow** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - if(cb == nullptr || ppv == nullptr) - return E_POINTER; - *ppv = CreateAvnWindow(cb, gl); - return S_OK; - } + if(cb == nullptr || ppv == nullptr) + return E_POINTER; + *ppv = CreateAvnWindow(cb, gl); + return S_OK; }; virtual HRESULT CreatePopup(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnPopup** ppv) override { - START_COM_CALL; + if(cb == nullptr || ppv == nullptr) + return E_POINTER; - @autoreleasepool - { - if(cb == nullptr || ppv == nullptr) - return E_POINTER; - - *ppv = CreateAvnPopup(cb, gl); - return S_OK; - } + *ppv = CreateAvnPopup(cb, gl); + return S_OK; } virtual HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = CreatePlatformThreading(); - return S_OK; - } + *ppv = CreatePlatformThreading(); + return S_OK; } virtual HRESULT CreateSystemDialogs(IAvnSystemDialogs** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateSystemDialogs(); - return S_OK; - } + *ppv = ::CreateSystemDialogs(); + return S_OK; } virtual HRESULT CreateScreens (IAvnScreens** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateScreens (); - return S_OK; - } + *ppv = ::CreateScreens (); + return S_OK; } virtual HRESULT CreateClipboard(IAvnClipboard** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateClipboard (nil, nil); - return S_OK; - } + *ppv = ::CreateClipboard (nil, nil); + return S_OK; } virtual HRESULT CreateDndClipboard(IAvnClipboard** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateClipboard (nil, [NSPasteboardItem new]); - return S_OK; - } + *ppv = ::CreateClipboard (nil, [NSPasteboardItem new]); + return S_OK; } virtual HRESULT CreateCursorFactory(IAvnCursorFactory** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateCursorFactory(); - return S_OK; - } + *ppv = ::CreateCursorFactory(); + return S_OK; } virtual HRESULT ObtainGlDisplay(IAvnGlDisplay** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - auto rv = ::GetGlDisplay(); - if(rv == NULL) - return E_FAIL; - rv->AddRef(); - *ppv = rv; - return S_OK; - } + auto rv = ::GetGlDisplay(); + if(rv == NULL) + return E_FAIL; + rv->AddRef(); + *ppv = rv; + return S_OK; } virtual HRESULT CreateMenu (IAvnMenuEvents* cb, IAvnMenu** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateAppMenu(cb); - return S_OK; - } + *ppv = ::CreateAppMenu(cb); + return S_OK; } virtual HRESULT CreateMenuItem (IAvnMenuItem** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateAppMenuItem(); - return S_OK; - } + *ppv = ::CreateAppMenuItem(); + return S_OK; } virtual HRESULT CreateMenuItemSeparator (IAvnMenuItem** ppv) override { - START_COM_CALL; - - @autoreleasepool - { - *ppv = ::CreateAppMenuItemSeparator(); - return S_OK; - } + *ppv = ::CreateAppMenuItemSeparator(); + return S_OK; } virtual HRESULT SetAppMenu (IAvnMenu* appMenu) override { - START_COM_CALL; - - @autoreleasepool - { - ::SetAppMenu(s_appTitle, appMenu); - return S_OK; - } + ::SetAppMenu(s_appTitle, appMenu); + return S_OK; } }; diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm index 38f8c2a7cb..b9a95e7b3c 100644 --- a/native/Avalonia.Native/src/OSX/menu.mm +++ b/native/Avalonia.Native/src/OSX/menu.mm @@ -95,8 +95,6 @@ NSMenuItem* AvnAppMenuItem::GetNative() HRESULT AvnAppMenuItem::SetSubMenu (IAvnMenu* menu) { - START_COM_CALL; - @autoreleasepool { if(menu != nullptr) @@ -116,8 +114,6 @@ HRESULT AvnAppMenuItem::SetSubMenu (IAvnMenu* menu) HRESULT AvnAppMenuItem::SetTitle (char* utf8String) { - START_COM_CALL; - @autoreleasepool { if (utf8String != nullptr) @@ -132,8 +128,6 @@ HRESULT AvnAppMenuItem::SetTitle (char* utf8String) HRESULT AvnAppMenuItem::SetGesture (AvnKey key, AvnInputModifiers modifiers) { - START_COM_CALL; - @autoreleasepool { if(key != AvnKeyNone) @@ -189,8 +183,6 @@ HRESULT AvnAppMenuItem::SetGesture (AvnKey key, AvnInputModifiers modifiers) HRESULT AvnAppMenuItem::SetAction (IAvnPredicateCallback* predicate, IAvnActionCallback* callback) { - START_COM_CALL; - @autoreleasepool { _predicate = predicate; @@ -201,8 +193,6 @@ HRESULT AvnAppMenuItem::SetAction (IAvnPredicateCallback* predicate, IAvnActionC HRESULT AvnAppMenuItem::SetIsChecked (bool isChecked) { - START_COM_CALL; - @autoreleasepool { [_native setState:(isChecked && _isCheckable ? NSOnState : NSOffState)]; @@ -212,8 +202,6 @@ HRESULT AvnAppMenuItem::SetIsChecked (bool isChecked) HRESULT AvnAppMenuItem::SetToggleType(AvnMenuItemToggleType toggleType) { - START_COM_CALL; - @autoreleasepool { switch(toggleType) @@ -243,8 +231,6 @@ HRESULT AvnAppMenuItem::SetToggleType(AvnMenuItemToggleType toggleType) HRESULT AvnAppMenuItem::SetIcon(void *data, size_t length) { - START_COM_CALL; - @autoreleasepool { if(data != nullptr) @@ -331,8 +317,6 @@ void AvnAppMenu::RaiseClosed() HRESULT AvnAppMenu::InsertItem(int index, IAvnMenuItem *item) { - START_COM_CALL; - @autoreleasepool { if([_native hasGlobalMenuItem]) @@ -353,8 +337,6 @@ HRESULT AvnAppMenu::InsertItem(int index, IAvnMenuItem *item) HRESULT AvnAppMenu::RemoveItem (IAvnMenuItem* item) { - START_COM_CALL; - @autoreleasepool { auto avnMenuItem = dynamic_cast(item); @@ -370,8 +352,6 @@ HRESULT AvnAppMenu::RemoveItem (IAvnMenuItem* item) HRESULT AvnAppMenu::SetTitle (char* utf8String) { - START_COM_CALL; - @autoreleasepool { if (utf8String != nullptr) @@ -385,8 +365,6 @@ HRESULT AvnAppMenu::SetTitle (char* utf8String) HRESULT AvnAppMenu::Clear() { - START_COM_CALL; - @autoreleasepool { [_native removeAllItems]; diff --git a/native/Avalonia.Native/src/OSX/platformthreading.mm b/native/Avalonia.Native/src/OSX/platformthreading.mm index 6d5bd4aa02..e83bf53331 100644 --- a/native/Avalonia.Native/src/OSX/platformthreading.mm +++ b/native/Avalonia.Native/src/OSX/platformthreading.mm @@ -114,8 +114,6 @@ public: virtual HRESULT RunLoop(IAvnLoopCancellation* cancel) override { - START_COM_CALL; - auto can = dynamic_cast(cancel); if(can->Cancelled) return S_OK; diff --git a/native/Avalonia.Native/src/OSX/rendertarget.mm b/native/Avalonia.Native/src/OSX/rendertarget.mm index dc5c24e41e..b2d4341bb9 100644 --- a/native/Avalonia.Native/src/OSX/rendertarget.mm +++ b/native/Avalonia.Native/src/OSX/rendertarget.mm @@ -247,8 +247,6 @@ public: virtual HRESULT GetPixelSize(AvnPixelSize* ret) override { - START_COM_CALL; - if(!_surface) return E_FAIL; *ret = _surface->size; @@ -257,8 +255,6 @@ public: virtual HRESULT GetScaling(double* ret) override { - START_COM_CALL; - if(!_surface) return E_FAIL; *ret = _surface->scale; @@ -285,8 +281,6 @@ public: virtual HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret) override { - START_COM_CALL; - ComPtr releaseContext; @synchronized (_target->lock) { if(_target->surface == nil) diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index c0c42fa2e8..c891611245 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -57,8 +57,6 @@ public: virtual HRESULT ObtainNSWindowHandle(void** ret) override { - START_COM_CALL; - if (ret == nullptr) { return E_POINTER; @@ -71,8 +69,6 @@ public: virtual HRESULT ObtainNSWindowHandleRetained(void** ret) override { - START_COM_CALL; - if (ret == nullptr) { return E_POINTER; @@ -85,8 +81,6 @@ public: virtual HRESULT ObtainNSViewHandle(void** ret) override { - START_COM_CALL; - if (ret == nullptr) { return E_POINTER; @@ -99,8 +93,6 @@ public: virtual HRESULT ObtainNSViewHandleRetained(void** ret) override { - START_COM_CALL; - if (ret == nullptr) { return E_POINTER; @@ -118,8 +110,6 @@ public: virtual HRESULT Show(bool activate, bool isDialog) override { - START_COM_CALL; - @autoreleasepool { SetPosition(lastPositionSet); @@ -151,8 +141,6 @@ public: virtual HRESULT Hide () override { - START_COM_CALL; - @autoreleasepool { if(Window != nullptr) @@ -167,8 +155,6 @@ public: virtual HRESULT Activate () override { - START_COM_CALL; - @autoreleasepool { if(Window != nullptr) @@ -183,8 +169,6 @@ public: virtual HRESULT SetTopMost (bool value) override { - START_COM_CALL; - @autoreleasepool { [Window setLevel: value ? NSFloatingWindowLevel : NSNormalWindowLevel]; @@ -195,8 +179,6 @@ public: virtual HRESULT Close() override { - START_COM_CALL; - @autoreleasepool { if (Window != nullptr) @@ -210,8 +192,6 @@ public: virtual HRESULT GetClientSize(AvnSize* ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -227,8 +207,6 @@ public: virtual HRESULT GetScaling (double* ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -247,8 +225,6 @@ public: virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize) override { - START_COM_CALL; - @autoreleasepool { [Window setMinSize: ToNSSize(minSize)]; @@ -315,8 +291,6 @@ public: virtual HRESULT Invalidate (AvnRect rect) override { - START_COM_CALL; - @autoreleasepool { [View setNeedsDisplayInRect:[View frame]]; @@ -327,8 +301,6 @@ public: virtual HRESULT SetMainMenu(IAvnMenu* menu) override { - START_COM_CALL; - _mainMenu = menu; auto nativeMenu = dynamic_cast(menu); @@ -347,8 +319,6 @@ public: virtual HRESULT BeginMoveDrag () override { - START_COM_CALL; - @autoreleasepool { auto lastEvent = [View lastMouseDownEvent]; @@ -366,15 +336,11 @@ public: virtual HRESULT BeginResizeDrag (AvnWindowEdge edge) override { - START_COM_CALL; - return S_OK; } virtual HRESULT GetPosition (AvnPoint* ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -395,8 +361,6 @@ public: virtual HRESULT SetPosition (AvnPoint point) override { - START_COM_CALL; - @autoreleasepool { lastPositionSet = point; @@ -408,8 +372,6 @@ public: virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -428,8 +390,6 @@ public: virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -447,16 +407,12 @@ public: virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose) override { - START_COM_CALL; - [View setSwRenderedFrame: fb dispose: dispose]; return S_OK; } virtual HRESULT SetCursor(IAvnCursor* cursor) override { - START_COM_CALL; - @autoreleasepool { Cursor* avnCursor = dynamic_cast(cursor); @@ -486,8 +442,6 @@ public: virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv) override { - START_COM_CALL; - if(View == NULL) return E_FAIL; *ppv = [renderTarget createSurfaceRenderTarget]; @@ -496,8 +450,6 @@ public: virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut) override { - START_COM_CALL; - if(View == NULL) return E_FAIL; *retOut = ::CreateNativeControlHost(View); @@ -506,8 +458,6 @@ public: virtual HRESULT SetBlurEnabled (bool enable) override { - START_COM_CALL; - [StandardContainer ShowBlur:enable]; return S_OK; @@ -517,8 +467,6 @@ public: IAvnClipboard* clipboard, IAvnDndResultCallback* cb, void* sourceHandle) override { - START_COM_CALL; - auto item = TryGetPasteboardItem(clipboard); [item setString:@"" forType:GetAvnCustomDataType()]; if(item == nil) @@ -652,8 +600,6 @@ private: virtual HRESULT Show (bool activate, bool isDialog) override { - START_COM_CALL; - @autoreleasepool { _isDialog = isDialog; @@ -667,8 +613,6 @@ private: virtual HRESULT SetEnabled (bool enable) override { - START_COM_CALL; - @autoreleasepool { [Window setEnabled:enable]; @@ -678,8 +622,6 @@ private: virtual HRESULT SetParent (IAvnWindow* parent) override { - START_COM_CALL; - @autoreleasepool { if(parent == nullptr) @@ -798,8 +740,6 @@ private: virtual HRESULT SetCanResize(bool value) override { - START_COM_CALL; - @autoreleasepool { _canResize = value; @@ -810,8 +750,6 @@ private: virtual HRESULT SetDecorations(SystemDecorations value) override { - START_COM_CALL; - @autoreleasepool { auto currentWindowState = _lastWindowState; @@ -877,8 +815,6 @@ private: virtual HRESULT SetTitle (char* utf8title) override { - START_COM_CALL; - @autoreleasepool { _lastTitle = [NSString stringWithUTF8String:(const char*)utf8title]; @@ -890,8 +826,6 @@ private: virtual HRESULT SetTitleBarColor(AvnColor color) override { - START_COM_CALL; - @autoreleasepool { float a = (float)color.Alpha / 255.0f; @@ -921,8 +855,6 @@ private: virtual HRESULT GetWindowState (AvnWindowState*ret) override { - START_COM_CALL; - @autoreleasepool { if(ret == nullptr) @@ -956,111 +888,86 @@ private: virtual HRESULT TakeFocusFromChildren () override { - START_COM_CALL; - - @autoreleasepool - { - if(Window == nil) - return S_OK; - if([Window isKeyWindow]) - [Window makeFirstResponder: View]; - + if(Window == nil) return S_OK; - } + if([Window isKeyWindow]) + [Window makeFirstResponder: View]; + + return S_OK; } virtual HRESULT SetExtendClientArea (bool enable) override { - START_COM_CALL; + _isClientAreaExtended = enable; - @autoreleasepool + if(enable) { - _isClientAreaExtended = enable; + Window.titleVisibility = NSWindowTitleHidden; - if(enable) + [Window setTitlebarAppearsTransparent:true]; + + auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome); + + if (wantsTitleBar) { - Window.titleVisibility = NSWindowTitleHidden; - - [Window setTitlebarAppearsTransparent:true]; - - auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome); - - if (wantsTitleBar) - { - [StandardContainer ShowTitleBar:true]; - } - else - { - [StandardContainer ShowTitleBar:false]; - } - - if(_extendClientHints & AvnOSXThickTitleBar) - { - Window.toolbar = [NSToolbar new]; - Window.toolbar.showsBaselineSeparator = false; - } - else - { - Window.toolbar = nullptr; - } + [StandardContainer ShowTitleBar:true]; } else { - Window.titleVisibility = NSWindowTitleVisible; - Window.toolbar = nullptr; - [Window setTitlebarAppearsTransparent:false]; - View.layer.zPosition = 0; + [StandardContainer ShowTitleBar:false]; } - [Window setIsExtended:enable]; - - HideOrShowTrafficLights(); - - UpdateStyle(); - - return S_OK; + if(_extendClientHints & AvnOSXThickTitleBar) + { + Window.toolbar = [NSToolbar new]; + Window.toolbar.showsBaselineSeparator = false; + } + else + { + Window.toolbar = nullptr; + } } + else + { + Window.titleVisibility = NSWindowTitleVisible; + Window.toolbar = nullptr; + [Window setTitlebarAppearsTransparent:false]; + View.layer.zPosition = 0; + } + + [Window setIsExtended:enable]; + + HideOrShowTrafficLights(); + + UpdateStyle(); + + return S_OK; } virtual HRESULT SetExtendClientAreaHints (AvnExtendClientAreaChromeHints hints) override { - START_COM_CALL; + _extendClientHints = hints; - @autoreleasepool - { - _extendClientHints = hints; - - SetExtendClientArea(_isClientAreaExtended); - return S_OK; - } + SetExtendClientArea(_isClientAreaExtended); + return S_OK; } virtual HRESULT GetExtendTitleBarHeight (double*ret) override { - START_COM_CALL; - - @autoreleasepool + if(ret == nullptr) { - if(ret == nullptr) - { - return E_POINTER; - } - - *ret = [Window getExtendedTitleBarHeight]; - - return S_OK; + return E_POINTER; } + + *ret = [Window getExtendedTitleBarHeight]; + + return S_OK; } virtual HRESULT SetExtendTitleBarHeight (double value) override { - START_COM_CALL; - - @autoreleasepool - { - [StandardContainer SetTitleBarHeightHint:value]; - return S_OK; - } + [StandardContainer SetTitleBarHeightHint:value]; + return S_OK; } void EnterFullScreenMode () @@ -1089,15 +996,8 @@ private: virtual HRESULT SetWindowState (AvnWindowState state) override { - START_COM_CALL; - @autoreleasepool { - if(Window == nullptr) - { - return S_OK; - } - if(_actualWindowState == state) { return S_OK;