Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Feb 2005 17:59:39 +0000 (17:59 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Feb 2005 17:59:39 +0000 (17:59 +0000)
        - fixed <rdar://problem/3987619> in some cases, text doesn't resize with Format->Style->Bigger/Smaller

        * khtml/editing/htmlediting.cpp:
        (khtml::ApplyStyleCommand::applyRelativeFontStyleChange): Only call nodeFullySelected for non-text nodes.
        Text nodes are already split so they're either in the range and full selected or out of the range.
        And nodeFullySelected doesn't work for text nodes.
        (khtml::ApplyStyleCommand::nodeFullySelected): Add an assertion, since this function only works for elements,
        not text nodes.
        (khtml::ApplyStyleCommand::nodeFullyUnselected): Ditto.

        - make big improvement in <rdar://problem/3953636> Mail hung for ~10sec changing font of 84328 characters: khtml::ApplyStyleCommand::nodeFullySelected

        * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::compareBoundaryPoints): Improve algorithm based on suggestion
        from Nate Begeman.

        - fixed <rdar://problem/4020305> REGRESSION (185-186): loading image in new window using document.write fails

        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::open): If there is no parent document, don't blow away the base URL.

        - fixed <rdar://problem/4021701> REGRESSION (188-188+): form not submitted after pressing <return> at http://hrweb.apple.com

        * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::dispatchMouseEvent): Send activate event in the case where the event
        sent is a KHTML_CLICK_EVENT, not CLICK_EVENT.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting.cpp
WebCore/khtml/xml/dom2_rangeimpl.cpp
WebCore/khtml/xml/dom_docimpl.cpp
WebCore/khtml/xml/dom_nodeimpl.cpp

index b11126ac3e88bbd37f93ab66488dfe1553840593..0b490700e3ef4562fb1adf66092ccca1943caa91 100644 (file)
@@ -1,3 +1,31 @@
+2005-02-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3987619> in some cases, text doesn't resize with Format->Style->Bigger/Smaller
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::ApplyStyleCommand::applyRelativeFontStyleChange): Only call nodeFullySelected for non-text nodes.
+        Text nodes are already split so they're either in the range and full selected or out of the range.
+        And nodeFullySelected doesn't work for text nodes.
+        (khtml::ApplyStyleCommand::nodeFullySelected): Add an assertion, since this function only works for elements,
+        not text nodes.
+        (khtml::ApplyStyleCommand::nodeFullyUnselected): Ditto.
+
+        - make big improvement in <rdar://problem/3953636> Mail hung for ~10sec changing font of 84328 characters: khtml::ApplyStyleCommand::nodeFullySelected
+
+        * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::compareBoundaryPoints): Improve algorithm based on suggestion
+        from Nate Begeman.
+
+        - fixed <rdar://problem/4020305> REGRESSION (185-186): loading image in new window using document.write fails
+
+        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::open): If there is no parent document, don't blow away the base URL.
+
+        - fixed <rdar://problem/4021701> REGRESSION (188-188+): form not submitted after pressing <return> at http://hrweb.apple.com
+        
+        * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::dispatchMouseEvent): Send activate event in the case where the event
+        sent is a KHTML_CLICK_EVENT, not CLICK_EVENT.
+
 2005-02-23  Kevin Decker  <kdecker@apple.com>
 
         Reviewed by mjs  
index 75885e25afb09feaddff958b26fa61eea33dc04c..172d4a22de5d850630fb15568875d5c6832d2df2 100644 (file)
@@ -1410,12 +1410,11 @@ void ApplyStyleCommand::applyRelativeFontStyleChange(CSSMutableStyleDeclarationI
     
     NodeImpl *lastStyledNode = 0;
     for (NodeImpl *node = start.node(); node != beyondEnd; node = node->traverseNextNode()) {
-        // Only work on fully selected nodes.
-        if (!nodeFullySelected(node, start, end))
-            continue;
-
         HTMLElementImpl *elem = 0;
         if (node->isHTMLElement()) {
+            // Only work on fully selected nodes.
+            if (!nodeFullySelected(node, start, end))
+                continue;
             elem = static_cast<HTMLElementImpl *>(node);
         }
         else if (node->isTextNode() && node->parentNode() != lastStyledNode) {
@@ -1865,6 +1864,7 @@ void ApplyStyleCommand::removeInlineStyle(CSSMutableStyleDeclarationImpl *style,
 bool ApplyStyleCommand::nodeFullySelected(NodeImpl *node, const Position &start, const Position &end) const
 {
     ASSERT(node);
+    ASSERT(node->isElementNode());
 
     Position pos = Position(node, node->childNodeCount()).upstream();
     return RangeImpl::compareBoundaryPoints(node, 0, start.node(), start.offset()) >= 0 &&
@@ -1874,6 +1874,7 @@ bool ApplyStyleCommand::nodeFullySelected(NodeImpl *node, const Position &start,
 bool ApplyStyleCommand::nodeFullyUnselected(NodeImpl *node, const Position &start, const Position &end) const
 {
     ASSERT(node);
+    ASSERT(node->isElementNode());
 
     Position pos = Position(node, node->childNodeCount()).upstream();
     bool isFullyBeforeStart = RangeImpl::compareBoundaryPoints(pos, start) < 0;
index 84fc279da1307d4f435512bcd94547e89e0ffaa9..a550f4587a1d647f77d7367c1c757c17e4d17904 100644 (file)
@@ -372,22 +372,21 @@ short RangeImpl::compareBoundaryPoints( NodeImpl *containerA, long offsetA, Node
     if (!childB)
         childB = cmnRoot;
 
+    if (childA == childB)
+        return 0; // A is equal to B
+
     NodeImpl *n = cmnRoot->firstChild();
-    int i = 0;
-    int childAOffset = -1;
-    int childBOffset = -1;
-    while (n && (childAOffset < 0 || childBOffset < 0)) {
+    while (n) {
         if (n == childA)
-            childAOffset = i;
+            return -1; // A is before B
         if (n == childB)
-            childBOffset = i;
+            return 1; // A is after B
         n = n->nextSibling();
-        i++;
     }
 
-    if( childAOffset == childBOffset )  return 0;    // A is equal to B
-    if( childAOffset < childBOffset )   return -1;    // A is before B
-    else  return 1;                        // A is after B
+    // Should never reach this point.
+    assert(0);
+    return 0;
 }
 
 short RangeImpl::compareBoundaryPoints( const Position &a, const Position &b )
index 297993190be653cfc5ff5d5a8ac0b674006c8bef..6e5646904db1ff1142a7343348b2f221f2a047b2 100644 (file)
@@ -1341,7 +1341,9 @@ void DocumentImpl::open(  )
     // happen when implicitOpen() is called unless we reorganize KHTMLPart code.
     setURL(QString());
     DocumentImpl *parent = parentDocument();
-    setBaseURL(parent ? parent->baseURL() : QString());
+    if (parent) {
+        setBaseURL(parent->baseURL());
+    }
 }
 
 void DocumentImpl::implicitOpen()
index 27972049bbe9bdf63d1e7029f7fccd2b0a321c2f..aaec0e5a14ec96cd7115e0ece5ad291fac13d1b0 100644 (file)
@@ -737,6 +737,8 @@ bool NodeImpl::dispatchMouseEvent(QMouseEvent *_mouse, int overrideId, int overr
     // as there is no way to tell the difference between single & double clicks using DOM (only the click count is
     // stored, which is not necessarily the same)
     if (evtId == EventImpl::CLICK_EVENT) {
+        evtId = EventImpl::KHTML_CLICK_EVENT;
+
         me = new MouseEventImpl(EventImpl::KHTML_CLICK_EVENT,
                                 true,cancelable,getDocument()->defaultView(),
                                 detail,screenX,screenY,clientX,clientY,
@@ -768,13 +770,13 @@ bool NodeImpl::dispatchMouseEvent(QMouseEvent *_mouse, int overrideId, int overr
                 swallowEvent = true;
             me->deref();
         }
-
-        // Also send a DOMActivate event, which causes things like form submissions to occur.
-        if (!defaultPrevented && !disabled())
-            dispatchUIEvent(EventImpl::DOMACTIVATE_EVENT, detail);
     }
 #endif
-    
+
+    // Also send a DOMActivate event, which causes things like form submissions to occur.
+    if (evtId == EventImpl::KHTML_CLICK_EVENT && !defaultPrevented && !disabled())
+        dispatchUIEvent(EventImpl::DOMACTIVATE_EVENT, detail);
+
     return swallowEvent;
 }