Browse Source

ensure cast to protocol instead of concrete types.

pull/8091/head
Dan Walmsley 4 years ago
parent
commit
d6a4a6c901
  1. 5
      native/Avalonia.Native/src/OSX/AutoFitContentView.mm
  2. 7
      native/Avalonia.Native/src/OSX/AvnView.mm
  3. 6
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  4. 4
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  5. 8
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

5
native/Avalonia.Native/src/OSX/AutoFitContentView.mm

@ -5,7 +5,8 @@
#include "AvnView.h" #include "AvnView.h"
#include "AutoFitContentView.h" #include "AutoFitContentView.h"
#import "WindowInterfaces.h" #include "WindowInterfaces.h"
#include "WindowProtocol.h"
@implementation AutoFitContentView @implementation AutoFitContentView
{ {
@ -84,7 +85,7 @@
_settingSize = true; _settingSize = true;
[super setFrameSize:newSize]; [super setFrameSize:newSize];
auto window = objc_cast<AvnWindow>([self window]); auto window = static_cast<id <AvnWindowProtocol>>([self window]);
// TODO get actual titlebar size // TODO get actual titlebar size

7
native/Avalonia.Native/src/OSX/AvnView.mm

@ -195,7 +195,12 @@
- (bool) ignoreUserInput:(bool)trigerInputWhenDisabled - (bool) ignoreUserInput:(bool)trigerInputWhenDisabled
{ {
auto parentWindow = objc_cast<AvnWindow>([self window]); if(_parent == nullptr)
{
return TRUE;
}
auto parentWindow = _parent->GetWindowProtocol();
if(parentWindow == nil || ![parentWindow shouldTryToHandleEvents]) if(parentWindow == nil || ![parentWindow shouldTryToHandleEvents])
{ {

6
native/Avalonia.Native/src/OSX/AvnWindow.mm

@ -212,8 +212,7 @@
// If the window has a child window being shown as a dialog then don't allow it to become the key window. // If the window has a child window being shown as a dialog then don't allow it to become the key window.
for(NSWindow* uch in [self childWindows]) for(NSWindow* uch in [self childWindows])
{ {
// TODO protocol auto ch = static_cast<id <AvnWindowProtocol>>(uch);
auto ch = objc_cast<CLASS_NAME>(uch);
if(ch == nil) if(ch == nil)
continue; continue;
if (ch.isDialog) if (ch.isDialog)
@ -256,8 +255,7 @@
-(void) restoreParentWindow; -(void) restoreParentWindow;
{ {
// TODO protocol auto parent = static_cast<id <AvnWindowProtocol>>([self parentWindow]);
auto parent = objc_cast<CLASS_NAME>([self parentWindow]);
if(parent != nil) if(parent != nil)
{ {
[parent removeChildWindow:self]; [parent removeChildWindow:self];

4
native/Avalonia.Native/src/OSX/WindowBaseImpl.h

@ -114,13 +114,13 @@ BEGIN_INTERFACE_MAP()
virtual bool IsDialog(); virtual bool IsDialog();
id<AvnWindowProtocol> GetWindowProtocol ();
protected: protected:
virtual NSWindowStyleMask GetStyle(); virtual NSWindowStyleMask GetStyle();
void UpdateStyle(); void UpdateStyle();
id<AvnWindowProtocol> GetWindowProtocol ();
private: private:
void CreateNSWindow (bool isDialog); void CreateNSWindow (bool isDialog);
void InitialiseNSWindow (); void InitialiseNSWindow ();

8
native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

@ -561,12 +561,12 @@ void WindowBaseImpl::InitialiseNSWindow() {
} }
id <AvnWindowProtocol> WindowBaseImpl::GetWindowProtocol() { id <AvnWindowProtocol> WindowBaseImpl::GetWindowProtocol() {
id instance; if(Window == nullptr)
if ([Window conformsToProtocol:@protocol(AvnWindowProtocol)]) { {
instance = Window; return nullptr;
} }
return instance; return static_cast<id <AvnWindowProtocol>>(Window);
} }
extern IAvnWindow* CreateAvnWindow(IAvnWindowEvents*events, IAvnGlContext* gl) extern IAvnWindow* CreateAvnWindow(IAvnWindowEvents*events, IAvnGlContext* gl)

Loading…
Cancel
Save