Reviewed by Hyatt.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Feb 2006 01:20:59 +0000 (01:20 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Feb 2006 01:20:59 +0000 (01:20 +0000)
        - <rdar://problem/4430614> RenderThemeMac crashes under GC

        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac): Initialize all the pointers.
        (WebCore::RenderThemeMac::setCheckboxCellState): Use KWQRetainNSRelease so
        we can retain a pointer to an ObjC object in a C++ class.
        (WebCore::RenderThemeMac::setRadioCellState): Ditto.
        (WebCore::RenderThemeMac::setButtonCellState): Ditto.
        (WebCore::RenderThemeMac::setTextFieldCellState): Ditto.

        * kwq/KWQResourceLoader.h: Remove unneeded forward declaration.

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

WebCore/ChangeLog
WebCore/kwq/KWQResourceLoader.h
WebCore/rendering/render_theme_mac.mm

index a3b54fea0aa892358d9cb298a43f12dcbd2cd18b..f2e6abc1e7d1fd531573b8fa9c5894b53b73c735 100644 (file)
@@ -1,3 +1,19 @@
+2006-02-09  Darin Adler  <darin@apple.com>
+
+        Reviewed by Hyatt.
+
+        - <rdar://problem/4430614> RenderThemeMac crashes under GC
+
+        * rendering/render_theme_mac.mm:
+        (WebCore::RenderThemeMac::RenderThemeMac): Initialize all the pointers.
+        (WebCore::RenderThemeMac::setCheckboxCellState): Use KWQRetainNSRelease so
+        we can retain a pointer to an ObjC object in a C++ class.
+        (WebCore::RenderThemeMac::setRadioCellState): Ditto.
+        (WebCore::RenderThemeMac::setButtonCellState): Ditto.
+        (WebCore::RenderThemeMac::setTextFieldCellState): Ditto.
+
+        * kwq/KWQResourceLoader.h: Remove unneeded forward declaration.
+
 2006-02-09  Darin Adler  <darin@apple.com>
 
         Reviewed by Eric and Geoff.
index 08dc05d1fd8b6b49b333eb1dddecb7c1ccdcad28..69ab35ebcfe25e339e756b9e941c05089f8a8d75 100644 (file)
 
 #import "WebCoreResourceLoader.h"
 
-namespace khtml {
-    class Loader;
-}
-
 namespace KIO {
     class TransferJob;
 }
index 88b8fe6be801371a338d196f14c924aa5f5f4faa..f895a0d8027b9f62f4dcae95cc7e3d2d5a0d97a8 100644 (file)
@@ -1,7 +1,7 @@
-/**
+/*
  * This file is part of the theme implementation for form controls in WebCore.
  *
- * Copyright (C) 2005 Apple Computer, Inc.
+ * Copyright (C) 2005, 2006 Apple Computer, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
  * Boston, MA 02111-1307, USA.
  */
 
-#include "config.h"
+#import "config.h"
 #import "render_theme_mac.h"
 
+#import "DocumentImpl.h"
+#import "FrameView.h"
+#import "KWQFoundationExtras.h"
 #import "cssstyleselector.h"
+#import "dom_elementimpl.h"
 #import "font.h"
-#import "render_style.h"
 #import "render_canvas.h"
-#include "DocumentImpl.h"
-#import "dom_elementimpl.h"
-#import "FrameView.h"
+#import "render_style.h"
 
 // The methods in this file are specific to the Mac OS X platform.
 
-using DOM::ElementImpl;
+namespace WebCore {
 
 enum {
     topMargin,
@@ -40,8 +41,6 @@ enum {
     bottomMargin,
     leftMargin
 };
-    
-namespace khtml {
 
 static const int textFieldMargins[4] = { 3, 4, 3, 4 };
 
@@ -52,8 +51,11 @@ RenderTheme* theme()
 }
 
 RenderThemeMac::RenderThemeMac()
+    : checkbox(nil)
+    , radio(nil)
+    , button(nil)
+    , textField(nil)
 {
-    checkbox = nil;
 }
 
 void RenderThemeMac::adjustRepaintRect(const RenderObject* o, IntRect& r)
@@ -294,11 +296,10 @@ const int* RenderThemeMac::checkboxMargins() const
 void RenderThemeMac::setCheckboxCellState(const RenderObject* o, const IntRect& r)
 {
     if (!checkbox) {
-        checkbox = [[NSButtonCell alloc] init];
+        checkbox = KWQRetainNSRelease([[NSButtonCell alloc] init]);
         [checkbox setButtonType:NSSwitchButton];
         [checkbox setTitle:nil];
         [checkbox setAllowsMixedState:YES];
-        
     }
     
     // Set the control size based off the rectangle we're painting into.
@@ -355,7 +356,7 @@ const int* RenderThemeMac::radioMargins() const
 void RenderThemeMac::setRadioCellState(const RenderObject* o, const IntRect& r)
 {
     if (!radio) {
-        radio = [[NSButtonCell alloc] init];
+        radio = KWQRetainNSRelease([[NSButtonCell alloc] init]);
         [radio setButtonType:NSRadioButton];
         [radio setTitle:nil];
     }
@@ -472,7 +473,7 @@ void RenderThemeMac::setButtonSize(RenderStyle* style) const
 void RenderThemeMac::setButtonCellState(const RenderObject* o, const IntRect& r)
 {
     if (!button) {
-        button = [[NSButtonCell alloc] init];
+        button = KWQRetainNSRelease([[NSButtonCell alloc] init]);
         [button setTitle:nil];
         [button setButtonType:NSMomentaryPushInButton];
     }
@@ -538,7 +539,7 @@ bool RenderThemeMac::paintTextField(RenderObject* o, const RenderObject::PaintIn
 void RenderThemeMac::setTextFieldCellState(const RenderObject* o, const IntRect& r)
 {
     if (!textField) {
-        textField = [[NSTextFieldCell alloc] initTextCell:@""];
+        textField = KWQRetainNSRelease([[NSTextFieldCell alloc] initTextCell:@""]);
         [textField setBezeled:YES];
         [textField setBezelStyle:NSTextFieldSquareBezel];
         [textField setDrawsBackground:NO];