diff options
author | Teemu Katajisto <teemu.katajisto@digia.com> | 2012-10-22 14:55:00 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-06 22:06:28 +0100 |
commit | 8e22d05dc908cf7f4f8d20ece012520d98707ee8 (patch) | |
tree | 8e18c81e3f42b1bb214fedabd29ebd33aa955cf4 /src | |
parent | 715902051a6ba28b6a9f86fce28c12c1b977630c (diff) |
Cocoa: fix memory leaks
Change-Id: I2e805aa64c65b90d33924ea4a8671735dee581fd
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 8 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qmacclipboard.mm | 5 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 1 |
4 files changed, 14 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index db3a20c2be..a9ea135b3e 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -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; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index de6e7dc43e..b9c5a401d0 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -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 diff --git a/src/plugins/platforms/cocoa/qmacclipboard.mm b/src/plugins/platforms/cocoa/qmacclipboard.mm index e7c03726d6..e8d12abaed 100644 --- a/src/plugins/platforms/cocoa/qmacclipboard.mm +++ b/src/plugins/platforms/cocoa/qmacclipboard.mm @@ -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!"); diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index d62913a7af..bbd74dd58b 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -263,6 +263,7 @@ static CGImageRef qt_mac_toCGImage(QImage *qImage, bool isMask, uchar **dataCopy kCGRenderingIntentDefault); CGColorSpaceRelease(cgColourSpaceRef); } + CGDataProviderRelease(cgDataProviderRef); return cgImage; } |