Cocoa: fix memory leaks

Change-Id: I2e805aa64c65b90d33924ea4a8671735dee581fd
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
This commit is contained in:
Teemu Katajisto 2012-10-22 14:55:00 +03:00 committed by The Qt Project
parent 715902051a
commit 8e22d05dc9
4 changed files with 14 additions and 3 deletions

View File

@ -66,6 +66,8 @@ class QT_PREPEND_NAMESPACE(QCocoaWindow);
- (BOOL)canBecomeKeyWindow;
@end
@class QNSWindowDelegate;
QT_BEGIN_NAMESPACE
// QCocoaWindow
//
@ -157,6 +159,7 @@ public: // for QNSView
QNSView *m_contentView;
NSWindow *m_nsWindow;
QNSWindowDelegate *m_nsWindowDelegate;
Qt::WindowFlags m_windowFlags;
Qt::WindowState m_synchedWindowState;
Qt::WindowModality m_windowModality;

View File

@ -186,6 +186,7 @@ static bool isMouseEvent(NSEvent *ev)
QCocoaWindow::QCocoaWindow(QWindow *tlw)
: QPlatformWindow(tlw)
, m_nsWindow(0)
, m_nsWindowDelegate(0)
, m_synchedWindowState(Qt::WindowActive)
, m_windowModality(Qt::NonModal)
, m_inConstructor(true)
@ -217,6 +218,7 @@ QCocoaWindow::~QCocoaWindow()
clearNSWindow(m_nsWindow);
[m_contentView release];
[m_nsWindow release];
[m_nsWindowDelegate release];
}
void QCocoaWindow::setGeometry(const QRect &rect)
@ -619,6 +621,8 @@ void QCocoaWindow::recreateWindow(const QPlatformWindow *parentWindow)
[m_nsWindow close];
[m_nsWindow release];
m_nsWindow = 0;
[m_nsWindowDelegate release];
m_nsWindowDelegate = 0;
}
if (!parentWindow) {
@ -697,8 +701,8 @@ NSWindow * QCocoaWindow::createNSWindow()
void QCocoaWindow::setNSWindow(NSWindow *window)
{
QNSWindowDelegate *delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:this];
[window setDelegate:delegate];
m_nsWindowDelegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:this];
[window setDelegate:m_nsWindowDelegate];
[window setAcceptsMouseMovedEvents:YES];
// Prevent Cocoa from releasing the window on close. Qt

View File

@ -193,7 +193,10 @@ QMacPasteboard::hasOSType(int c_flavor) const
const int type_count = CFArrayGetCount(types);
for (int i = 0; i < type_count; ++i) {
CFStringRef flavor = (CFStringRef)CFArrayGetValueAtIndex(types, i);
const int os_flavor = UTGetOSTypeFromString(UTTypeCopyPreferredTagWithClass(flavor, kUTTagClassOSType));
CFStringRef preferredTag = UTTypeCopyPreferredTagWithClass(flavor, kUTTagClassOSType);
const int os_flavor = UTGetOSTypeFromString(preferredTag);
if (preferredTag)
CFRelease(preferredTag);
if (os_flavor == c_flavor) {
#ifdef DEBUG_PASTEBOARD
qDebug(" - Found!");

View File

@ -263,6 +263,7 @@ static CGImageRef qt_mac_toCGImage(QImage *qImage, bool isMask, uchar **dataCopy
kCGRenderingIntentDefault);
CGColorSpaceRelease(cgColourSpaceRef);
}
CGDataProviderRelease(cgDataProviderRef);
return cgImage;
}