Reviewed by Brady.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Jan 2007 19:31:00 +0000 (19:31 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Jan 2007 19:31:00 +0000 (19:31 +0000)
        - fix <rdar://problem/4956688> move Mac-specific part of icon code into IconMac
        - fix a GC-compatibility problem in the icon code I noticed by code inspection

        * platform/FileChooser.cpp: (WebCore::FileChooser::chooseIcon): Removed Mac-specific
        path check -- that's in newIconForFile now.

        * platform/graphics/Icon.h: Changed the image to be a RetainPtr. The old code was
        using -[NSObject retain] which is not good enough for a pointer in a C++ object.
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::Icon): Got rid of unneeded code to do what RetainPtr does for us.
        (WebCore::Icon::~Icon): Ditto.
        (WebCore::Icon::newIconForFile): Added check for non-absolute file names. Updated
        for use of RetainPtr. Use constructor that takes NSImage.
        (WebCore::Icon::paint): Add get() calls needed now that we are using a RetainPtr.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode do its thing.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@19160 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/platform/FileChooser.cpp
WebCore/platform/graphics/Icon.h
WebCore/platform/graphics/mac/IconMac.mm

index 4324a4f..47aefe2 100644 (file)
@@ -1,3 +1,24 @@
+2007-01-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Brady.
+
+        - fix <rdar://problem/4956688> move Mac-specific part of icon code into IconMac
+        - fix a GC-compatibility problem in the icon code I noticed by code inspection
+
+        * platform/FileChooser.cpp: (WebCore::FileChooser::chooseIcon): Removed Mac-specific
+        path check -- that's in newIconForFile now.
+
+        * platform/graphics/Icon.h: Changed the image to be a RetainPtr. The old code was
+        using -[NSObject retain] which is not good enough for a pointer in a C++ object.
+        * platform/graphics/mac/IconMac.mm:
+        (WebCore::Icon::Icon): Got rid of unneeded code to do what RetainPtr does for us.
+        (WebCore::Icon::~Icon): Ditto.
+        (WebCore::Icon::newIconForFile): Added check for non-absolute file names. Updated
+        for use of RetainPtr. Use constructor that takes NSImage.
+        (WebCore::Icon::paint): Add get() calls needed now that we are using a RetainPtr.
+
+        * WebCore.xcodeproj/project.pbxproj: Let Xcode do its thing.
+
 2007-01-26  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Maciej.
index fa24e0e..180eafb 100644 (file)
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
+                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
                        productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
                        projectDirPath = "";
                        projectRoot = "";
+                       shouldCheckCompatibility = 1;
                        targets = (
                                93F198A508245E59001E9ABC /* WebCore */,
                                DD041FBE09D9DDBE0010AF2A /* Derived Sources */,
index 2ac7342..a8f2764 100644 (file)
@@ -50,10 +50,6 @@ void FileChooser::chooseFile(const String& filename)
 
 PassRefPtr<Icon> FileChooser::chooseIcon(const String& filename)
 {
-    // FIXME: Should the special cases be in Icon::newIconForFile?
-    // Need unsigned 0 here to disambiguate String::operator[] from operator(NSString*, int)[]
-    if (filename.isEmpty() || filename[0U] != '/')
-        return 0;
     return Icon::newIconForFile(filename);
 }
 
index 6c1d77f..b1a12be 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Apple Computer, Inc.
+ * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #define Icon_h
 
 #include "Shared.h"
-
-#include <wtf/PassRefPtr.h>
+#include <wtf/Forward.h>
 
 #if PLATFORM(MAC)
+#include "RetainPtr.h"
 #ifdef __OBJC__
 @class NSImage;
 #else
@@ -58,7 +58,10 @@ public:
 
 private:
 #if PLATFORM(MAC)
-    NSImage* m_nsImage;
+    Icon(NSImage*);
+#endif
+#if PLATFORM(MAC)
+    RetainPtr<NSImage> m_nsImage;
 #elif PLATFORM(WIN)
     HICON m_hIcon;
 #elif PLATFORM(QT)
index a900b6a..9b96b82 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Apple Computer, Inc.
+ * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #import "GraphicsContext.h"
 #import "LocalCurrentGraphicsContext.h"
 #import "PlatformString.h"
-#import <AppKit/NSImage.h>
+#import <wtf/PassRefPtr.h>
 
 namespace WebCore {
 
 Icon::Icon()
-    : m_nsImage(0)
 {
 }
 
+Icon::Icon(NSImage *image)
+    : m_nsImage(image)
+{
+    // Need this because WebCore uses AppKit's flipped coordinate system exclusively.
+    [image setFlipped:YES];
+}
+
 Icon::~Icon()
 {
-    [m_nsImage release];
 }
 
 PassRefPtr<Icon> Icon::newIconForFile(const String& filename)
 {
-    NSImage* fileIcon = [[[NSWorkspace sharedWorkspace] iconForFile:filename] retain];
-    if (!fileIcon)
+    // Don't pass relative filenames -- we don't want a result that depends on the current directory.
+    // Need 0U here to disambiguate String::operator[] from operator(NSString*, int)[]
+    if (filename.isEmpty() || filename[0U] != '/')
         return 0;
-    
-    Icon* icon = new Icon();
 
-    icon->m_nsImage = fileIcon;
-    
-    // Need this because WebCore uses AppKit's flipped coordinate system.
-    [icon->m_nsImage setFlipped:YES];
-    
-    return icon;
+    NSImage* image = [[NSWorkspace sharedWorkspace] iconForFile:filename];
+    if (!image)
+        return 0;
+
+    return new Icon(image);
 }
 
-void Icon::paint(GraphicsContext* context, const IntRect& r)
+void Icon::paint(GraphicsContext* context, const IntRect& rect)
 {
     if (context->paintingDisabled())
         return;
-    
+
     LocalCurrentGraphicsContext localCurrentGC(context);
-    
-    [m_nsImage drawInRect:r
-        fromRect:NSMakeRect(0, 0, [m_nsImage size].width, [m_nsImage size].height)
+
+    [m_nsImage.get() drawInRect:rect
+        fromRect:NSMakeRect(0, 0, [m_nsImage.get() size].width, [m_nsImage.get() size].height)
         operation:NSCompositeSourceOver fraction:1.0];
 }