Browse Source

Ensure virtual destructor chain

pull/1977/head
Nikita Tsukanov 8 years ago
parent
commit
8ac77adb76
  1. 4
      src/Avalonia.Native.OSX/window.h
  2. 12
      src/Avalonia.Native.OSX/window.mm
  3. 12
      src/headers/comimpl.h

4
src/Avalonia.Native.OSX/window.h

@ -3,7 +3,7 @@
#ifndef window_h
#define window_h
#import "ArcTraceWindow.h"
class WindowBaseImpl;
@interface AvnView : NSView<NSTextInputClient>
@ -13,7 +13,7 @@ class WindowBaseImpl;
-(void) setSwRenderedFrame: (AvnFramebuffer* _Nonnull) fb dispose: (IUnknown* _Nonnull) dispose;
@end
@interface AvnWindow : NSWindow <NSWindowDelegate>
@interface AvnWindow : ArcTraceWindow <NSWindowDelegate>
-(AvnWindow* _Nonnull) initWithParent: (WindowBaseImpl* _Nonnull) parent;
-(void) setCanBecomeKeyAndMain;
-(void) pollModalSession: (NSModalSession _Nonnull) session;

12
src/Avalonia.Native.OSX/window.mm

@ -13,6 +13,7 @@ private:
public:
FORWARD_IUNKNOWN()
virtual ~WindowBaseImpl(){}
AvnView* View;
AvnWindow* Window;
ComPtr<IAvnWindowBaseEvents> BaseEvents;
@ -23,6 +24,7 @@ public:
{
BaseEvents = events;
View = [[AvnView alloc] initWithParent:this];
Window = [[AvnWindow alloc] initWithParent:this];
lastPositionSet.X = 100;
@ -343,14 +345,13 @@ private:
CGRect _lastUndecoratedFrame;
AvnWindowState _lastWindowState;
FORWARD_IUNKNOWN()
BEGIN_INTERFACE_MAP()
INHERIT_INTERFACE_MAP(WindowBaseImpl)
INTERFACE_MAP_ENTRY(IAvnWindow, IID_IAvnWindow)
END_INTERFACE_MAP()
virtual uint Release()
{
return ComObject::Release();
virtual ~WindowImpl(){
NSLog(@"~WindowImpl");
}
ComPtr<IAvnWindowEvents> WindowEvents;
@ -1017,7 +1018,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
- (BOOL)windowShouldClose:(NSWindow *)sender
{
auto window = dynamic_cast<WindowImpl*>(_parent.operator->());
auto window = dynamic_cast<WindowImpl*>(_parent.getRaw());
if(window != nullptr)
{
@ -1087,6 +1088,7 @@ private:
INHERIT_INTERFACE_MAP(WindowBaseImpl)
INTERFACE_MAP_ENTRY(IAvnPopup, IID_IAvnPopup)
END_INTERFACE_MAP()
virtual ~PopupImpl(){}
ComPtr<IAvnWindowEvents> WindowEvents;
PopupImpl(IAvnWindowEvents* events) : WindowBaseImpl(events)
{

12
src/headers/comimpl.h

@ -90,6 +90,7 @@ public:
{
return E_NOINTERFACE;
};
virtual ~ComUnknownObject(){}
};
template<class TInterface, GUID const* TIID> class ComSingleObject : public ComObject, public virtual TInterface
@ -97,6 +98,9 @@ template<class TInterface, GUID const* TIID> class ComSingleObject : public ComO
BEGIN_INTERFACE_MAP()
INTERFACE_MAP_ENTRY(TInterface, *TIID)
END_INTERFACE_MAP()
public:
virtual ~ComSingleObject(){}
};
template<class TInterface>
@ -151,8 +155,12 @@ public:
_obj = 0;
}
}
public:
TInterface* getRaw()
{
return _obj;
}
operator TInterface*() const
{
return _obj;

Loading…
Cancel
Save