Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jan 2005 18:05:19 +0000 (18:05 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jan 2005 18:05:19 +0000 (18:05 +0000)
        - fixed <rdar://problem/3922980> Mail not crashing, just quitting itself suddenly in -[WebHTMLView(MailExtras) findString:options:]

        * khtml/dom/dom2_range.cpp: (DOM::operator==): Handle null and detached ranges without raising exceptions.
        The uncaught exception would make the entire program terminate.

        - fixed <rdar://problem/3885729> attempting to modify a computed style does nothing, but should raise a DOM exception

        * kwq/DOM-CSS.mm: (-[DOMCSSStyleDeclaration setProperty:::]): Uncommented this code which I had to disable
        back in November because Mail was stumbling over it.

        - fixed <rdar://problem/3943049> focus() called during onload handler results in square text field on <input type=search>

        * kwq/KWQLineEdit.mm: (QLineEdit::baselinePosition): Change computation so it will work even for fields
        that position their text in a way that depends on vertical size. In the case of a search field, the text
        is centered, so the old logic was broken.
        * kwq/KWQTextField.mm: (-[KWQTextFieldController initWithTextField:QLineEdit:]): Set the frame size to
        something large enough to accomodate the field editor. If we start the frame at size 0,0 we run into
        AppKit trouble when it insets the frame to figure out the frame for the field editor. In the case of this
        bug this happens because we become first responder before being sized and positioned by the HTML layout code.

        - improved debugging output when using "po" from gdb with Objective-C DOM

        * kwq/DOM.mm:
        (-[DOMNode description]): Added. Includes node name ("<tr>") and node value (e.g., string for text node).
        (-[DOMRange description]): Tweaked format.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/dom/dom2_range.cpp
WebCore/kwq/DOM-CSS.mm
WebCore/kwq/DOM.mm
WebCore/kwq/KWQLineEdit.mm
WebCore/kwq/KWQTextField.mm

index bda3b99ffe6a2e036f3100c158545a8e19c3ead7..9f13178095792c114d69593d16035d5869289f1d 100644 (file)
@@ -1,3 +1,33 @@
+2005-01-20  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3922980> Mail not crashing, just quitting itself suddenly in -[WebHTMLView(MailExtras) findString:options:]
+
+        * khtml/dom/dom2_range.cpp: (DOM::operator==): Handle null and detached ranges without raising exceptions.
+        The uncaught exception would make the entire program terminate.
+
+        - fixed <rdar://problem/3885729> attempting to modify a computed style does nothing, but should raise a DOM exception
+
+        * kwq/DOM-CSS.mm: (-[DOMCSSStyleDeclaration setProperty:::]): Uncommented this code which I had to disable
+        back in November because Mail was stumbling over it.
+
+        - fixed <rdar://problem/3943049> focus() called during onload handler results in square text field on <input type=search>        
+
+        * kwq/KWQLineEdit.mm: (QLineEdit::baselinePosition): Change computation so it will work even for fields
+        that position their text in a way that depends on vertical size. In the case of a search field, the text
+        is centered, so the old logic was broken.
+        * kwq/KWQTextField.mm: (-[KWQTextFieldController initWithTextField:QLineEdit:]): Set the frame size to
+        something large enough to accomodate the field editor. If we start the frame at size 0,0 we run into
+        AppKit trouble when it insets the frame to figure out the frame for the field editor. In the case of this
+        bug this happens because we become first responder before being sized and positioned by the HTML layout code.
+
+        - improved debugging output when using "po" from gdb with Objective-C DOM
+
+        * kwq/DOM.mm:
+        (-[DOMNode description]): Added. Includes node name ("<tr>") and node value (e.g., string for text node).
+        (-[DOMRange description]): Tweaked format.
+
 2005-01-19  Richard Williamson   <rjw@apple.com>
 
        After further discussion with Real we have decided to NOT include the
index 356c08ce92f7983631b02ad2d13a3e74d5bd568e..9c68711e7042dcdbf48993000e9ffebebb38f12d 100644 (file)
@@ -404,6 +404,18 @@ void Range::throwException(int exceptioncode) const
 
 bool operator==(const Range &a, const Range &b)
 {
+    RangeImpl *ai = a.handle();
+    RangeImpl *bi = b.handle();
+    if (ai == bi)
+        return true;
+    if (!ai || !bi)
+        return false;
+    bool ad = ai->isDetached();
+    bool bd = bi->isDetached();
+    if (ad && bd)
+        return true;
+    if (ad || bd)
+        return false;
     return a.startContainer() == b.startContainer()
         && a.endContainer() == b.endContainer()
         && a.startOffset() == b.startOffset()
index 62b11923d39336f9ca2ec5f4635dfa23df70a930..79a1bdf8d1f153791a04e9554c8fc7500b502190 100644 (file)
@@ -838,9 +838,7 @@ static inline int getPropertyID(NSString *string)
     bool important = strcasecmp(DOMString(priority), "important") == 0;
     int exceptionCode;
     [self _styleDeclarationImpl]->setProperty(propid, value, important, exceptionCode);
-    // Can't raise an exception here until we fix the code in Mail that is
-    // trying to set a property on a computed style.  See <rdar://problem/3886832>.
-    //raiseOnDOMError(exceptionCode);
+    raiseOnDOMError(exceptionCode);
 }
 
 - (unsigned long)length
index fc17aa7a420264dd01eec1d64ab7b6f3566c9bee..22bdaff538f6f9aad987ee6cc6f0357b828d3963 100644 (file)
@@ -203,6 +203,21 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
     [super finalize];
 }
 
+- (NSString *)description
+{
+    if (!_internal) {
+        return [NSString stringWithFormat:@"<%@: null>",
+            [[self class] description], self];
+    }
+    NSString *value = [self nodeValue];
+    if (value) {
+        return [NSString stringWithFormat:@"<%@ [%@]: %p '%@'>",
+            [[self class] description], [self nodeName], _internal, value];
+    }
+    return [NSString stringWithFormat:@"<%@ [%@]: %p>",
+        [[self class] description], [self nodeName], _internal];
+}
+
 - (NSString *)nodeName
 {
     return [self _nodeImpl]->nodeName();
@@ -1747,8 +1762,8 @@ inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 - (NSString *)description
 {
     if (!_internal)
-        return @"DOMRange: null";
-    return [NSString stringWithFormat:@"DOMRange: %@ %ld %@ %ld",
+        return @"<DOMRange: null>";
+    return [NSString stringWithFormat:@"<DOMRange: %@ %ld %@ %ld>",
         [self startContainer], [self startOffset],
         [self endContainer], [self endOffset]];
 }
index 106b664fdad17583eadecd6704be361e31114637..64d7f10e4d9d404f35f2adb84a1e5f159e67e3c1 100644 (file)
@@ -201,6 +201,8 @@ void QLineEdit::setEdited(bool flag)
     [m_controller setEdited:flag];
 }
 
+static const NSSize textFieldMargins = { 8, 6 };
+
 QSize QLineEdit::sizeForCharacterWidth(int numCharacters) const
 {
     // Figure out how big a text field needs to be for a given number of characters
@@ -212,7 +214,8 @@ QSize QLineEdit::sizeForCharacterWidth(int numCharacters) const
 
     // We empirically determined these dimensions.
     // It would be better to get this info from AppKit somehow, but bug 3711080 shows we can't yet.
-    NSSize size = { 8, 6 };
+    // Note: baselinePosition below also has the height computation.
+    NSSize size = textFieldMargins;
 
     KWQ_BLOCK_EXCEPTIONS;
 
@@ -244,10 +247,11 @@ int QLineEdit::baselinePosition(int height) const
     NSTextField *textField = (NSTextField *)getView();
 
     KWQ_BLOCK_EXCEPTIONS;
-    NSRect bounds = [textField bounds];
     NSFont *font = [textField font];
-    return static_cast<int>(ceilf([[textField cell] drawingRectForBounds:bounds].origin.y - bounds.origin.y
-        + [font defaultLineHeightForFont] + [font descender]));
+    float lineHeight = [font defaultLineHeightForFont];
+    NSRect bounds = NSMakeRect(0, 0, 100, textFieldMargins.height + lineHeight); // bounds width is arbitrary, height same as what sizeForCharacterWidth returns
+    NSRect drawingRect = [[textField cell] drawingRectForBounds:bounds];
+    return static_cast<int>(ceilf(drawingRect.origin.y - bounds.origin.y + lineHeight + [font descender]));
     KWQ_UNBLOCK_EXCEPTIONS;
 
     return 0;
index 0c5c4f5eca8487019c31cccae1b9dae1514509ad..4f71589cead9c07520b64f3a47ba1d09f3d03ea2 100644 (file)
@@ -79,7 +79,7 @@
 - (id)initWithTextField:(NSTextField *)f QLineEdit:(QLineEdit *)w
 {
     [self init];
-    
+
     // This is initialization that's shared by all types of text fields.
     widget = w;
     field = f;
         [field setAction:@selector(action:)];
     }
     
+    // Set a non-empty size in case the field is made first responder before it
+    // is positioned and sized by KHTML code. This dodges bad behavior in AppKit
+    // if you try to create an editor for a 0-sized text field.
+    [field setFrameSize:NSMakeSize(100, 100)];
+
     return self;
 }