summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-04-30 17:16:13 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-30 19:23:05 +0200
commitc90486066914d7c63716c12f6e2f1c8086f0eb37 (patch)
tree4bf99c027005efafaa41013f8a30283b1e62e1d1 /src/plugins
parent08ac38a6e368b56d4dfdd872b62eafe13cd93157 (diff)
Cocoa: Port QCocoaTheme::fileIconPixmap() to Cocoa
Task-number: QTBUG-30907 Change-Id: Ie460db63413ab9c8e0fb5fb85af907e1c7f12759 Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm29
1 files changed, 10 insertions, 19 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index 8337e00eb6..36d7a49746 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -54,6 +54,7 @@
#include "qcocoamenu.h"
#include "qcocoamenubar.h"
#include "qcocoahelpers.h"
+#include "qcocoaautoreleasepool.h"
#include <QtCore/qfileinfo.h>
#include <QtGui/private/qguiapplication_p.h>
@@ -250,27 +251,17 @@ QPixmap QCocoaTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
QPixmap QCocoaTheme::fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size) const
{
- FSRef macRef;
- OSStatus status = FSPathMakeRef(reinterpret_cast<const UInt8*>(fileInfo.canonicalFilePath().toUtf8().constData()),
- &macRef, 0);
- if (status != noErr)
- return QPixmap();
- FSCatalogInfo info;
- HFSUniStr255 macName;
- status = FSGetCatalogInfo(&macRef, kIconServicesCatalogInfoMask, &info, &macName, 0, 0);
- if (status != noErr)
- return QPixmap();
- IconRef iconRef;
- SInt16 iconLabel;
- status = GetIconRefFromFileInfo(&macRef, macName.length, macName.unicode,
- kIconServicesCatalogInfoMask, &info, kIconServicesNormalUsageFlag,
- &iconRef, &iconLabel);
- if (status != noErr)
- return QPixmap();
+ QCocoaAutoReleasePool pool;
- QPixmap pixmap = qt_mac_convert_iconref(iconRef, size.width(), size.height());
- ReleaseIconRef(iconRef);
+ NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile:QCFString::toNSString(fileInfo.canonicalFilePath())];
+ if (!iconImage)
+ return QPixmap();
+ NSRect iconRect = NSMakeRect(0, 0, size.width(), size.height());
+ CGImageRef cgImage = [iconImage CGImageForProposedRect:&iconRect
+ context:[NSGraphicsContext currentContext]
+ hints:nil];
+ QPixmap pixmap = QPixmap::fromImage(qt_mac_toQImage(cgImage));
return pixmap;
}