Reviewed by Kevin.
[WebKit.git] / WebCore / ChangeLog-2005-08-23
1 2005-05-09  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by Kevin.
4
5         - remove isFirstVisiblePositionInBlock and isLastVisiblePositionInBlock, in favor of isStartOfBlock and isEndOfBlock
6
7         It turned out that both isEndOfBlock and isLastVisiblePositionInBlock had (different) bugs,
8         and there was code relying on the bugs of each. So in addition I fixed isEndOfBlock and fixed 
9         the parts of the code relying on buggy behavior.
10
11         I also removed the includeEndOfLine parameter to endOfBlock since no one used it and it's not
12         clear if it would ever be useful.
13         
14         * khtml/editing/htmlediting.cpp:
15         (khtml::InsertLineBreakCommand::doApply): Use new calls.
16         (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Don't gratuitously make
17         an UPSTREAM VisiblePosition, as this will cause trouble comparing it to end of block.
18         (khtml::InsertParagraphSeparatorCommand::doApply): Use new calls.
19         (khtml::ReplaceSelectionCommand::doApply): Use new calls. Also, don't make a position <BR,0> and test
20         if it is the end of a block, that can never be true, although the buggy code in 
21         isLastVisiblePositionInBlock would say it is. Make <BR,1> instead.
22         * khtml/editing/markup.cpp:
23         (khtml::createMarkup): Instead of checking isEndOfBlock on the start position, check if the start's
24         next is in a different block, to avoid relying on the buggy old isEndOfBlock behavior.
25         * khtml/editing/visible_position.cpp:
26         (khtml::isFirstVisiblePositionInParagraph): Use isStartOfBlock.
27         (khtml::isLastVisiblePositionInParagraph): Use isEndOfBlock.
28         * khtml/editing/visible_position.h:
29         * khtml/editing/visible_units.cpp:
30         (khtml::endOfBlock): Greatly simplify, and no longer consider the start of a descendant
31         block to be the end of the block. That's inconsistent with how startOfBlock works. Also
32         remove include end of line parameter.
33         (khtml::isEndOfBlock): Don't pass unneeded parameter.
34         * khtml/editing/visible_units.h:
35
36 2005-05-09  Adele Peterson  <adele@apple.com>
37
38         fix for <rdar://problem/4110775> Crash will occur when double-clicking outerHTML link on W3 DOM test
39
40         Reviewed by Darin.
41
42         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::setOuterHTML): added nil check.  
43         This was causing a crash when you tried to set the outerHTML on an element that was no longer in the DOM tree.
44
45         * layout-tests/fast/dom/outerText-no-element.html: Added. Tests case where you try to set outerText on an element no longer in the DOM tree.
46         * layout-tests/fast/dom/outerText-no-element-expected.txt: Added.
47         * layout-tests/fast/dynamic/outerHTML-doc.html: Added.  Tests case where someone tries to set outerHTML on the document.
48         * layout-tests/fast/dynamic/outerHTML-doc-expected.txt: Added..
49         * layout-tests/fast/dynamic/outerHTML-no-element.html: Added. Tests case where you try to set outerHTML on an element no longer in the DOM tree.
50         * layout-tests/fast/dynamic/outerHTML-no-element-expected.txt: Added.
51         * layout-tests/fast/dynamic/outerHTML-img.html: moved images to resources directory
52         * layout-tests/fast/dynamic/resources/apple.gif: Added.
53         * layout-tests/fast/dynamic/resources/mozilla.gif: Added.
54
55 2005-05-09  Maciej Stachowiak  <mjs@apple.com>
56
57         Reviewed by Kevin.
58
59         - remove code for DoNotStayInBlock variant of upstream/downstream and make
60         the methods take no parameters
61
62         * khtml/editing/htmlediting.cpp:
63         (khtml::CompositeEditCommand::deleteInsignificantTextDownstream):
64         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
65         (khtml::ApplyStyleCommand::applyRelativeFontStyleChange):
66         (khtml::ApplyStyleCommand::applyInlineStyle):
67         (khtml::ApplyStyleCommand::removeInlineStyle):
68         (khtml::ApplyStyleCommand::nodeFullySelected):
69         (khtml::ApplyStyleCommand::nodeFullyUnselected):
70         (khtml::DeleteSelectionCommand::initializePositionData):
71         (khtml::DeleteSelectionCommand::fixupWhitespace):
72         (khtml::InsertLineBreakCommand::insertNodeAfterPosition):
73         (khtml::InsertLineBreakCommand::insertNodeBeforePosition):
74         (khtml::InsertLineBreakCommand::doApply):
75         (khtml::InsertParagraphSeparatorCommand::doApply):
76         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
77         (khtml::InsertTextCommand::prepareForTextInsertion):
78         (khtml::InsertTextCommand::input):
79         (khtml::InsertTextCommand::insertSpace):
80         (khtml::ReplaceSelectionCommand::doApply):
81         * khtml/editing/selection.cpp:
82         (khtml::Selection::toRange):
83         (khtml::Selection::validate):
84         * khtml/editing/visible_position.cpp:
85         (khtml::VisiblePosition::previousVisiblePosition):
86         (khtml::VisiblePosition::nextVisiblePosition):
87         (khtml::VisiblePosition::downstreamDeepEquivalent):
88         (khtml::isFirstVisiblePositionInParagraph):
89         (khtml::isFirstVisiblePositionInBlock):
90         (khtml::isLastVisiblePositionInParagraph):
91         * khtml/xml/dom2_rangeimpl.cpp:
92         (DOM::RangeImpl::editingStartPosition):
93         * khtml/xml/dom_position.cpp:
94         (DOM::isStreamer):
95         (DOM::Position::upstream):
96         (DOM::Position::downstream):
97         (DOM::Position::leadingWhitespacePosition):
98         (DOM::Position::trailingWhitespacePosition):
99         * khtml/xml/dom_position.h:
100         * kwq/WebCoreBridge.mm:
101         (-[WebCoreBridge smartDeleteRangeForProposedRange:]):
102
103 2005-05-08  Maciej Stachowiak  <mjs@apple.com>
104
105         Reviewed by Dave Harrison.
106
107         - remove remaining uses of upstream/downstream DoNotStayInBlock
108         
109         * khtml/editing/htmlediting.cpp:
110         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
111         (khtml::ApplyStyleCommand::nodeFullySelected):
112         (khtml::ApplyStyleCommand::nodeFullyUnselected):
113         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
114         (khtml::InsertParagraphSeparatorCommand::doApply):
115         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
116         (khtml::InsertTextCommand::insertSpace):
117         (khtml::ReplaceSelectionCommand::doApply):
118         
119         * khtml/editing/visible_position.cpp:
120         (khtml::enclosingBlockFlowElement): New helper function.
121         * khtml/editing/visible_position.h:
122
123         * khtml/editing/visible_units.cpp:
124         (khtml::inSameBlock): Check enclosing block flows instead of comparing
125         visible block starts. Two nested blocks may have the same visible start but
126         different visible ends, so the old check would give false positives.
127
128 2005-05-09  David Harrison  <harrison@apple.com>
129
130         Add layout test for <rdar://problem/4110366>.
131
132         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-011-expected.txt: Added.
133         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-011.html: Added.
134
135 2005-05-09  Darin Adler  <darin@apple.com>
136
137         - checked in a result for the Flash replacement test that Dave added
138
139         * layout-tests/fast/dynamic/flash-replacement-test-expected.txt: Added.
140         Hope it's right! If not, Dave can update it.
141
142 2005-05-09  Darin Adler  <darin@apple.com>
143
144         * Makefile.am: Don't set up PBXIntermediatesDirectory explicitly;
145         Not needed to make builds work, spews undesirable error messages too.
146
147         * WebCore.pbproj/project.pbxproj: Remove unneeded $(DSTROOT) in framework paths.
148
149 2005-05-07  Maciej Stachowiak  <mjs@apple.com>
150
151         Reviewed by Kevin.
152
153         - remove some of the uses of upstream/downstream DoNotStayInBlock
154         
155         * khtml/editing/markup.cpp:
156         (khtml::createMarkup): Instead of using upstream to decide if a line break should be 
157         added at the end, use inSameParagraph.
158         * khtml/editing/selection.cpp:
159         (khtml::Selection::debugPosition): Remove the code to print upstream and downstream,
160         the selection endpoints themselves are adequate for debugging and are what we use for
161         layout tests.
162         * khtml/xml/dom2_rangeimpl.cpp:
163         (DOM::RangeImpl::editingStartPosition): Skip a possible paragraph break at the start
164         of the selection in a more explicit way to avoid DoNotStayInBlock.
165
166 2005-05-07  David Harrison  <harrison@apple.com>
167
168         Reviewed by John.
169
170         <rdar://problem/4110366> Deleting text at the end of email moves insertion point to the top of the document
171         
172         * khtml/editing/htmlediting.cpp:
173         (khtml::DeleteSelectionCommand::handleGeneralDelete):
174         Update m_upstreamStart when deleting m_downstreamEnd.node() if the former is no longer in the document.
175         Better to update here than trying to recover later in calculateEndingPosition().
176
177 2005-05-07  David Harrison  <harrison@apple.com>
178         
179         Remove workaround for <rdar://problem/4103339>.
180         
181         * khtml/editing/htmlediting.cpp:
182         (khtml::DeleteSelectionCommand::initializePositionData):
183
184 2005-05-06  Maciej Stachowiak  <mjs@apple.com>
185
186         Reviewed by Dave Harrison.
187
188         - make StayInBlock vs DoNotStayInBlock explicit in all calls to
189         upstream/downstream, in preparation for phasing out the
190         DoNotStayInBlock variant.
191
192         * khtml/editing/htmlediting.cpp:
193         (khtml::ApplyStyleCommand::nodeFullySelected):
194         (khtml::ApplyStyleCommand::nodeFullyUnselected):
195         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
196         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
197         (khtml::InsertTextCommand::insertSpace):
198         (khtml::ReplaceSelectionCommand::doApply):
199         * khtml/editing/markup.cpp:
200         (khtml::createMarkup):
201         * khtml/editing/selection.cpp:
202         (khtml::Selection::debugPosition):
203         * khtml/xml/dom_position.h:
204
205 2005-05-06  David Harrison  <harrison@apple.com>
206
207         Reviewed by Maciej, Darin.
208
209         <rdar://problem/4103339> VisiblePosition and PositionIterator iterators do not return positions in order
210
211         * WebCore.pbproj/project.pbxproj:
212         Removed dom_positioniterator.h and dom_positioniterator.cpp.
213         
214         * khtml/editing/htmlediting.cpp:
215         Removed unused include of dom_positioniterator.h and "using" of PositionIterator.
216         
217         * khtml/editing/selection.cpp:
218         Removed unused include of dom_positioniterator.h.
219
220         * khtml/editing/visible_position.h:
221         * khtml/editing/visible_position.cpp:
222         (khtml::VisiblePosition::previousVisiblePosition):
223         (khtml::VisiblePosition::nextVisiblePosition):
224         (khtml::VisiblePosition::downstreamDeepEquivalent):
225         Use Position::next(), Position::previous(), Position::atStart(), Position::atEnd() instead of duplicated code.
226         
227         * khtml/xml/dom_nodeimpl.h:
228         * khtml/xml/dom_nodeimpl.cpp:
229         (NodeImpl::maxDeepOffset):
230         Added to support Position::next(), Position::previous(), Position::atStart(), Position::atEnd()
231         
232         * khtml/xml/dom_position.h:
233         * khtml/xml/dom_position.cpp:
234         (DOM::Position::previous):
235         (DOM::Position::next):
236         (DOM::Position::atStart):
237         (DOM::Position::atEnd):
238         Moved here, replacing VisiblePosition's duplicate and PositionIterator.  Fixed to
239         return positions in order and not skip positions.
240         
241         (DOM::Position::previousCharacterPosition):
242         (DOM::Position::nextCharacterPosition):
243         Use Position::next(), Position::previous(), Position::atStart(), Position::atEnd() instead of PositionIterator.
244
245         (DOM::isStreamer):
246         (DOM::Position::upstream):
247         (DOM::Position::downstream):
248         Use Position::next(), Position::previous(), Position::atStart(), Position::atEnd() instead of PositionIterator.
249
250         * khtml/xml/dom_positioniterator.cpp: Removed.
251         * khtml/xml/dom_positioniterator.h: Removed.
252         Removed in favor of Position::next(), Position::previous(), Position::atStart(), Position::atEnd()
253
254 2005-05-05  Maciej Stachowiak  <mjs@apple.com>
255
256         Reviewed by Darin.
257
258         <rdar://problem/4058167> Unit Converter and Weather widgets crashed in KJS::Collector::markCurrentThreadConservatively
259         
260         Avoid possibly allocating new prototype objects as parameters to
261         superclass constructors - there may be an allocated but
262         uninitilized object so this is a bad time to allocate. Instead,
263         set the prototype in the constructor body, since the object is
264         happily allocated by then.
265
266         * khtml/ecma/kjs_binding.h:
267         * khtml/ecma/kjs_css.cpp:
268         (DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
269         (DOMMediaList::DOMMediaList):
270         (DOMCSSStyleSheet::DOMCSSStyleSheet):
271         (DOMCSSPrimitiveValue::DOMCSSPrimitiveValue):
272         (DOMCSSValueList::DOMCSSValueList):
273         * khtml/ecma/kjs_css.h:
274         (KJS::DOMStyleSheet::DOMStyleSheet):
275         (KJS::DOMCSSValue::DOMCSSValue):
276         * khtml/ecma/kjs_dom.cpp:
277         (DOMNode::DOMNode):
278         (DOMDocument::DOMDocument):
279         (DOMElement::DOMElement):
280         (DOMDOMImplementation::DOMDOMImplementation):
281         (DOMNamedNodeMap::DOMNamedNodeMap):
282         (DOMNamedNodesCollection::DOMNamedNodesCollection):
283         (DOMCharacterData::DOMCharacterData):
284         (DOMText::DOMText):
285         * khtml/ecma/kjs_dom.h:
286         (KJS::NodeConstructor::NodeConstructor):
287         (KJS::DOMExceptionConstructor::DOMExceptionConstructor):
288         * khtml/ecma/kjs_events.cpp:
289         (DOMEvent::DOMEvent):
290         (Clipboard::Clipboard):
291         * khtml/ecma/kjs_html.cpp:
292         (HTMLCollection::HTMLCollection):
293         * khtml/ecma/kjs_range.cpp:
294         (DOMRange::DOMRange):
295         * khtml/ecma/kjs_traversal.cpp:
296         (DOMNodeIterator::DOMNodeIterator):
297         (DOMNodeFilter::DOMNodeFilter):
298         (DOMTreeWalker::DOMTreeWalker):
299         * khtml/ecma/xmlhttprequest.cpp:
300         (KJS::XMLHttpRequest::XMLHttpRequest):
301         * khtml/ecma/xmlserializer.cpp:
302         (KJS::XMLSerializer::XMLSerializer):
303
304 2005-05-06  Darin Adler  <darin@apple.com>
305
306         Reviewed by Maciej.
307
308         - make building multiple trees with make work better
309
310         * Makefile.am: Set up Xcode build directory before invoking xcodebuild.
311
312 2005-05-05  David Hyatt  <hyatt@apple.com>
313
314         Eliminate the FOUCS on wired.com.  innerWidth and innerHeight on window should not do a layout that ignores
315         pending stylesheets, since even if stylesheets are loading the correct window dimensions can be determined with
316         a normal layout.
317
318         The radar # is 4109888.
319         
320         Reviewed by rjw
321
322         * khtml/ecma/kjs_window.cpp:
323         (Window::get):
324         (Window::updateLayout):
325         * khtml/ecma/kjs_window.h:
326
327 2005-05-05  David Hyatt  <hyatt@apple.com>
328
329         Fix for 4109667, sIFR flash replacement technique often malfunctions.  This bug occurs when the plugin
330         widget update causes the onload for the document to fire.  Because you can be in the middle of a style
331         recalc when doing an attach (in response to a stylesheet load), the onload fires in the middle of the attach
332         process when the tree is in a bogus state.
333
334         The fix is to add a bit to the document that tells style recalc that the implicitClose() method was invoked
335         during the style recalc process and the code has been patched so that when this situation occurs, the close is
336         deferred until after the style recalc has finished.
337         
338         Reviewed by John Sullivan
339
340         * khtml/xml/dom_docimpl.cpp:
341         (DocumentImpl::DocumentImpl):
342         (DocumentImpl::recalcStyle):
343         (DocumentImpl::implicitClose):
344         * khtml/xml/dom_docimpl.h:
345         * layout-tests/fast/dynamic/flash-replacement-test.html: Added.
346
347 2005-05-05  Darin Adler  <darin@apple.com>
348
349         Reviewed by Dave Hyatt.
350
351         - fixed <rdar://problem/4109564> REGRESSION (Atlanta): maps.google.com doesn't always center California correctly
352
353         * khtml/ecma/kjs_events.cpp: (offsetFromTarget): Fix two places that said X where they should say Y.
354
355 2005-05-05  David Harrison  <harrison@apple.com>
356
357         Restore fixed setEndingSelection.  Fixed method was ifdef'd out
358         because change was at end of Tiger development, but method is
359         unused.  You just can never be _too_ safe.
360         
361         * khtml/editing/htmlediting.cpp:
362         (khtml::EditCommandPtr::setEndingSelection):
363
364 2005-05-02  Maciej Stachowiak  <mjs@apple.com>
365
366         Reviewed by Vicki.
367
368         - renamed NodeBaseImpl to ContainerNodeImpl
369
370         * khtml/ecma/kjs_dom.cpp:
371         (DOMNodeProtoFunc::tryCall): Avoid use of NodeBaseImpl and avoid
372         use of obsolete checkNoOwner call, use isAncestor instead.
373         * khtml/html/html_elementimpl.cpp:
374         (HTMLElementImpl::setOuterText): Avoid gratuitous use of
375         NodeBaseImpl.
376         * khtml/xml/dom_nodeimpl.cpp:
377         (NodeBaseImpl::checkNoOwner): Removed.
378         
379         Ther rest is all just simple renaming.
380         
381         * khtml/xml/dom_docimpl.cpp:
382         (DocumentImpl::DocumentImpl):
383         (DocumentImpl::attach):
384         (DocumentImpl::detach):
385         (DocumentFragmentImpl::DocumentFragmentImpl):
386         * khtml/xml/dom_docimpl.h:
387         * khtml/xml/dom_elementimpl.cpp:
388         (AttrImpl::AttrImpl):
389         (ElementImpl::ElementImpl):
390         (ElementImpl::insertedIntoDocument):
391         (ElementImpl::removedFromDocument):
392         (ElementImpl::attach):
393         (ElementImpl::dump):
394         * khtml/xml/dom_elementimpl.h:
395         * khtml/xml/dom_nodeimpl.cpp:
396         (ContainerNodeImpl::ContainerNodeImpl):
397         (ContainerNodeImpl::~ContainerNodeImpl):
398         (ContainerNodeImpl::firstChild):
399         (ContainerNodeImpl::lastChild):
400         (ContainerNodeImpl::insertBefore):
401         (ContainerNodeImpl::replaceChild):
402         (ContainerNodeImpl::removeChild):
403         (ContainerNodeImpl::removeChildren):
404         (ContainerNodeImpl::appendChild):
405         (ContainerNodeImpl::hasChildNodes):
406         (ContainerNodeImpl::setFirstChild):
407         (ContainerNodeImpl::setLastChild):
408         (ContainerNodeImpl::checkSameDocument):
409         (ContainerNodeImpl::checkIsChild):
410         (ContainerNodeImpl::addChild):
411         (ContainerNodeImpl::attach):
412         (ContainerNodeImpl::detach):
413         (ContainerNodeImpl::insertedIntoDocument):
414         (ContainerNodeImpl::removedFromDocument):
415         (ContainerNodeImpl::cloneChildNodes):
416         (ContainerNodeImpl::getElementsByTagNameNS):
417         (ContainerNodeImpl::getUpperLeftCorner):
418         (ContainerNodeImpl::getLowerRightCorner):
419         (ContainerNodeImpl::getRect):
420         (ContainerNodeImpl::setFocus):
421         (ContainerNodeImpl::setActive):
422         (ContainerNodeImpl::childNodeCount):
423         (ContainerNodeImpl::childNode):
424         (ContainerNodeImpl::dispatchChildInsertedEvents):
425         (ContainerNodeImpl::dispatchChildRemovalEvents):
426         * khtml/xml/dom_nodeimpl.h:
427         * khtml/xml/dom_xmlimpl.cpp:
428         (DOM::EntityImpl::EntityImpl):
429         (DOM::EntityReferenceImpl::EntityReferenceImpl):
430         (DOM::NotationImpl::NotationImpl):
431         (DOM::ProcessingInstructionImpl::ProcessingInstructionImpl):
432         * khtml/xml/dom_xmlimpl.h:
433
434 2005-05-04  Vicki Murley  <vicki@apple.com>
435
436         Reviewed by Darin.
437
438         - fix mismatched parentheses in one of the ifdefs
439  
440         * khtml/html/html_headimpl.cpp:
441         (HTMLTitleElementImpl::childrenChanged):
442
443 2005-05-04  Darin Adler  <darin@apple.com>
444
445         Reviewed by Dave Hyatt.
446
447         - fixed build rules to match other projects
448
449         * WebCore.pbproj/project.pbxproj: Set deployment target to 10.3 in the build styles.
450         When built without a build style (by Apple B&I) we want to get the target from the
451         environment. But when built with a build style (by Safari engineers and others), we want
452         to use 10.3.
453
454         * Makefile.am: Took out extra parameters that make command-line building different from
455         Xcode building. Now that this is fixed, you should not get a full rebuild if you switch
456         from command line to Xcode or back.
457
458 2005-05-04  Vicki Murley  <vicki@apple.com>
459
460         Reviewed by darin.
461
462         - fixed <rdar://problem/3986228> Not able to load additional script blocks dynamically
463
464         Run scripts when they're inserted into the document. Use createdByParser bit to make sure
465         that scripts aren't run twice, once while parsing and again when inserting.
466
467         * khtml/html/html_headimpl.cpp:
468         (HTMLScriptElementImpl::HTMLScriptElementImpl):
469         (HTMLScriptElementImpl::~HTMLScriptElementImpl):
470         (HTMLScriptElementImpl::insertedIntoDocument): 
471         (HTMLScriptElementImpl::removedFromDocument): 
472         (HTMLScriptElementImpl::notifyFinished): 
473         * khtml/html/html_headimpl.h:
474         (DOM::HTMLScriptElementImpl::setCreatedByParser):
475         * khtml/html/htmlparser.cpp:
476         (KHTMLParser::getElement): 
477         * khtml/xml/xml_tokenizer.cpp:
478         (khtml::XMLTokenizer::startElement): 
479
480 2005-05-03  David Hyatt  <hyatt@apple.com>
481
482         Normalize all our custom properties in our implementation to be -khtml (remove all the -apple).
483
484         Make sure that -apple, -khtml, and -moz are all able to be used.  -apple and -moz just map to -khtml.
485
486         Add support for automatically converting -khtml-opacity to opacity (for legacy Safari 1.1 compat).
487         
488         Reviewed by darin
489
490         * khtml/css/css_computedstyle.cpp:
491         (DOM::):
492         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
493         * khtml/css/cssparser.cpp:
494         (CSSParser::parseValue):
495         * khtml/css/cssproperties.in:
496         * khtml/css/cssstyleselector.cpp:
497         (khtml::CSSStyleSelector::applyDeclarations):
498         (khtml::CSSStyleSelector::applyProperty):
499         * khtml/css/parser.y:
500         * khtml/ecma/kjs_css.cpp:
501         (cssPropertyName):
502
503 2005-05-03  Darin Adler  <darin@apple.com>
504
505         - fix the build
506
507         * WebCore.pbproj/project.pbxproj: Fix some SYMROOTS that should have been SYMROOT.
508
509 2005-05-03  David Hyatt  <hyatt@apple.com>
510
511         Fix for 4098281, news.com missing a bunch of content.  Make sure not to apply strict SGML parsing
512         when stripping comments out of scripts.
513
514         New test is comments-in-script.html
515         
516         * khtml/html/htmltokenizer.cpp:
517         (khtml::HTMLTokenizer::parseComment):
518
519 2005-05-03  David Hyatt  <hyatt@apple.com>
520
521         Remove unused notification to avoid ERROR messages spewing on the acid2 test.
522         
523         Reviewed by darin
524
525         * khtml/khtml_part.cpp:
526         (KHTMLPart::processObjectRequest):
527         * khtml/rendering/render_frames.cpp:
528         (RenderPartObject::updateWidget):
529         * khtml/rendering/render_frames.h:
530
531 2005-05-03  Darin Adler  <darin@apple.com>
532
533         Reviewed by Dave Hyatt.
534         No new layout tests needed.
535
536         - eliminated the bogus kMin/kMax macros that we had in addition to inline functions
537           of the same name
538
539         * kwq/KWQKGlobal.h: Remove the kMin/kMax macros.
540
541         * khtml/css/cssstyleselector.cpp:
542         (khtml::CSSStyleSelector::applyProperty): Change type of constant so both sides
543         of kMin calls match.
544         (khtml::CSSStyleSelector::fontSizeForKeyword): Ditto.
545         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseEntity): Ditto.
546
547         - remove unused parameter to dirtyLinesFromChangedChild for clarity
548
549         * khtml/rendering/render_object.h: Don't take the parameter.
550         * khtml/rendering/render_object.cpp: (RenderObject::dirtyLinesFromChangedChild): Ditto.
551
552         * khtml/rendering/render_flow.h: Don't take the parameter.
553         * khtml/rendering/render_flow.cpp:
554         (RenderFlow::detach): Don't pass the parameter.
555         (RenderFlow::dirtyLinesFromChangedChild): Don't take the parameter.
556
557         * khtml/rendering/render_text.cpp: (RenderText::detach): Don't pass the parameter.
558
559         - convert DOM::NodeImpl into an abstract base class by making a couple of functions
560           pure virtual for clarity
561
562         * khtml/xml/dom_nodeimpl.h: Made nodeName and nodeType pure virtual.
563         * khtml/xml/dom_nodeimpl.cpp: Remove bodies of nodeName and nodeType.
564
565 2005-05-03  David Hyatt  <hyatt@apple.com>
566
567         Fix for object element to support fallback content.  WIth this change Safari passes the Acid2 test.
568         
569         Reviewed by Maciej
570
571         * khtml/css/html4.css:
572         * khtml/html/html_objectimpl.cpp:
573         (HTMLObjectElementImpl::HTMLObjectElementImpl):
574         (HTMLObjectElementImpl::parseHTMLAttribute):
575         (HTMLObjectElementImpl::rendererIsNeeded):
576         (HTMLObjectElementImpl::createRenderer):
577         (HTMLObjectElementImpl::attach):
578         (HTMLObjectElementImpl::detach):
579         (HTMLObjectElementImpl::recalcStyle):
580         (HTMLObjectElementImpl::childrenChanged):
581         (HTMLObjectElementImpl::isURLAttribute):
582         (HTMLObjectElementImpl::isImageType):
583         (HTMLObjectElementImpl::renderFallbackContent):
584         * khtml/html/html_objectimpl.h:
585         * khtml/khtml_part.cpp:
586         (KHTMLPart::requestObject):
587         (KHTMLPart::selectFrameElementInParentIfFullySelected):
588         (KHTMLPart::handleFallbackContent):
589         * khtml/khtml_part.h:
590         * khtml/khtmlpart_p.h:
591         (khtml::ChildFrame::ChildFrame):
592         * khtml/rendering/render_frames.cpp:
593         (RenderPartObject::RenderPartObject):
594         (RenderPartObject::updateWidget):
595         * khtml/rendering/render_frames.h:
596         (khtml::RenderPart::hasFallbackContent):
597         * khtml/rendering/render_replaced.cpp:
598         (RenderReplaced::RenderReplaced):
599         * kwq/KWQKHTMLPart.mm:
600         (KWQKHTMLPart::createPart):
601         * kwq/WebCoreBridge.h:
602         * kwq/WebCoreBridge.mm:
603         (-[WebCoreBridge mainResourceError]):
604
605 2005-05-01  Darin Adler  <darin@apple.com>
606
607         - move to Xcode native targets and stop checking in generated files
608
609         * WebCore.pbproj/project.pbxproj: Updated to use native targets and generate all the generated
610         files, so we don't have to check them in any more.
611         * Info.plist: Added. Native targets use a separate file for this.
612
613         * Makefile.am: Removed rule to generate WebCore-combined.exp since this is now handled by the
614         Xcode project. Removed the code to remove the embedded copy of the framework since we don't
615         do that any more. Removed timestamp cleaning rules since we don't use those any more.
616
617         * WebCore-tests.exp: Removed symbols that aren't really needed. The native target gives an
618         error when you mention a nonexistent symbol, so we can't have them any more.
619
620         * khtml/css/parser_wrapper.cpp: Added. Shell used to compile parser.cpp since we can't add
621         a generated file easily to the list of files to be compiled.
622
623         * .cvsignore: Removed various timestamp files.
624
625         * WebCore-combined.exp: Removed.
626         * force-clean-timestamp: Removed.
627         * force-js-clean-timestamp: Removed.
628         * khtml/.cvsignore: Removed.
629         * khtml/Makefile.am: Removed.
630         * khtml/css/.cvsignore: Removed.
631         * khtml/css/Makefile.am: Removed.
632         * khtml/css/cssproperties.c: Removed.
633         * khtml/css/cssproperties.h: Removed.
634         * khtml/css/cssvalues.c: Removed.
635         * khtml/css/cssvalues.h: Removed.
636         * khtml/css/parser.cpp: Removed.
637         * khtml/css/parser.h: Removed.
638         * khtml/css/tokenizer.cpp: Removed.
639         * khtml/ecma/.cvsignore: Removed.
640         * khtml/ecma/Makefile.am: Removed.
641         * khtml/ecma/kjs_css.lut.h: Removed.
642         * khtml/ecma/kjs_dom.lut.h: Removed.
643         * khtml/ecma/kjs_events.lut.h: Removed.
644         * khtml/ecma/kjs_html.lut.h: Removed.
645         * khtml/ecma/kjs_navigator.lut.h: Removed.
646         * khtml/ecma/kjs_range.lut.h: Removed.
647         * khtml/ecma/kjs_traversal.lut.h: Removed.
648         * khtml/ecma/kjs_views.lut.h: Removed.
649         * khtml/ecma/kjs_window.lut.h: Removed.
650         * khtml/ecma/xmlhttprequest.lut.h: Removed.
651         * khtml/ecma/xmlserializer.lut.h: Removed.
652         * khtml/html/.cvsignore: Removed.
653         * khtml/html/Makefile.am: Removed.
654         * khtml/html/doctypes.cpp: Removed.
655         * khtml/html/kentities.c: Removed.
656         * khtml/misc/.cvsignore: Removed.
657         * khtml/misc/Makefile.am: Removed.
658         * khtml/misc/htmlattrs.c: Removed.
659         * khtml/misc/htmlattrs.h: Removed.
660         * khtml/misc/htmltags.c: Removed.
661         * khtml/misc/htmltags.h: Removed.
662         * kwq/.cvsignore: Removed.
663         * kwq/KWQCharsetData.c: Removed.
664         * kwq/KWQColorData.c: Removed.
665         * kwq/Makefile.am: Removed.
666
667 2005-05-02  Darin Adler  <darin@apple.com>
668
669         Reviewed by Vicki.
670         Added two layout tests for regression testing.
671
672         - redid frameElement (fix for 4091082 below)
673
674         The first version lacked a security check, and was also broken.
675
676         * khtml/ecma/kjs_window.cpp:
677         (frameElement): Refactored into separate function; added isSafeScript check.
678         (Window::get): Call the new frameElement function.
679
680         * layout-tests/fast/frames/frameElement-frame.html: Added.
681         * layout-tests/fast/frames/frameElement-frame-expected.txt: Added.
682         * layout-tests/fast/frames/frameElement-iframe.html: Added.
683         * layout-tests/fast/frames/frameElement-iframe-expected.txt: Added.
684         * layout-tests/fast/frames/resources/frameElement-contents.html: Added.
685
686 2005-05-02  David Harrison  <harrison@apple.com>
687
688         Reviewed by Vicki.
689
690         Fix isStartOfEditableContent and isEndOfEditableContent to return actual, rather than inverted, answers.
691         No Radar.  Found this when trying to use isEndOfEditableContent() in some new code.
692         
693         * khtml/editing/visible_units.cpp:
694         (khtml::isStartOfEditableContent):
695         (khtml::isEndOfEditableContent):
696         Flip expressions.
697
698 2005-04-29  Darin Adler  <darin@apple.com>
699
700         Reviewed by David Harrison.
701
702         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Turn newlines into \n for better dumping.
703
704 2005-04-29  David Harrison  <harrison@apple.com>
705
706         Reviewed by Darin.
707
708         <rdar://problem/4083333> When deleting link at end of sentence, entire sentence gets deleted
709         
710         * khtml/editing/htmlediting.cpp:
711         (khtml::DeleteSelectionCommand::initializePositionData):
712         Work around bug #4103339 (whose real fix is somewhat risky), so this fix can get into a software update.
713         
714         (khtml::DeleteSelectionCommand::handleGeneralDelete):
715         Add isAncestor check when comparing m_downstreamEnd.node() and m_startNode.
716
717         * layout-tests/editing/deleting/delete-4083333-fix-expected.txt: Added.
718         * layout-tests/editing/deleting/delete-4083333-fix.html: Added.
719
720 2005-04-29  Darin Adler  <darin@apple.com>
721
722         Reviewed by Dave Harrison.
723
724         - changed layout tests to dump more minimal information about caret and selection
725
726         * kwq/KWQRenderTreeDebug.cpp:
727         (nodePosition): Changed name; now does position relative to document.
728         (writeSelection): Removed upstream/downstream code and changed format slightly.
729
730         * layout-tests/editing/*-expected.txt: Regenerated in new format.
731
732 2005-04-29  Darin Adler  <darin@apple.com>
733
734         Reviewed by Chris Blumenberg.
735         Added two layout tests for regression testing.
736
737         - fixed <rdar://problem/4097849> REGRESSION (162-163): importNode creates non-HTML elements, thus style attributes (and some others) don't work
738
739         * khtml/xml/dom_docimpl.cpp:
740         (DocumentImpl::importNode): Reorganized and partly rewrote this. The change that fixes the bug at
741         hand is to explicitly use XHTML_NAMESPACE for HTML elements, since the old way of getting the namespace
742         will return the null string for HTML elements, and createElementNS will not create an HTML element
743         if passed a null string for the namespace.
744         (DocumentImpl::processHttpEquiv): Removed some bogus getDocument() calls -- no need to call getDocument()
745         in a document object.
746         (DocumentImpl::attrName): Ditto.
747         (DocumentImpl::tagName): Ditto.
748         (DocumentImpl::setFocusNode): Ditto.
749
750         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::cloneNode): Moved the actual cloning here
751         from ElementImpl::cloneNode, because XMLElementImpl already had its own version, and in here
752         we can use createHTMLElement, which will work properly even in an XML document, and is also slightly
753         more efficient.
754
755         * khtml/xml/dom_nodeimpl.h: Added a namespaceURI method function to go along with localName.
756         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::namespaceURI): Added. Returns null string to be consistent
757         with localName (only works on certain types of elements as documented).
758         * khtml/xml/dom_elementimpl.h: Removed ElementImpl::cloneNode (see above). Added an override of
759         namespaceURI for XMLElementImpl.
760         * khtml/xml/dom_elementimpl.cpp: (XMLElementImpl::namespaceURI): Added. Returns the namespace
761         (consistent with localName).
762
763         * layout-tests/fast/dom/importNodeHTML.html: Added. Tests both importNode and cloneNode (for comparison).
764         * layout-tests/fast/dom/importNodeHTML-expected.txt: Added.
765         * layout-tests/fast/dom/importNodeXML.xhtml: Added. XML version of the same test as above. Tests a different
766         code path, so useful to have.
767         * layout-tests/fast/dom/importNodeXML-expected.txt: Added.
768
769 2005-04-28  Darin Adler  <darin@apple.com>
770
771         Reviewed by Dave Harrison.
772
773         - fixed problems preventing us from compiling with gcc 4.0
774
775         * WebCore.pbproj/project.pbxproj: Removed -fobjc-exceptions because I can't figure out an easy
776         way to pass it only when compiling Objective-C/C++. Removed -Wmissing-prototypes from
777         WARNING_CPLUSPLUSFLAGS since it's now a C-only warning.
778
779         * khtml/css/parser.y: Changed some rules that were using a float to pass around an enum to use an
780         int instead to avoid a warning.
781         * khtml/css/parser.cpp: Regenerated.
782         * khtml/css/parser.h: Regenerated.
783
784         * khtml/ecma/kjs_dom.cpp: (DOMTextProtoFunc::tryCall): Rearranged a return statement to avoid an incorrect
785         warning.
786         * khtml/ecma/kjs_html.cpp: (KJS::Context2DFunction::tryCall): Initialized a couple of variables to avoid
787         an incorrect warning.
788         * khtml/ecma/kjs_proxy.cpp: (KJSProxyImpl::evaluate): Rearranged how we exit from the function to avoid
789         an incorret warning.
790         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Changed some %d to %ld where the
791         parameters where long ints.
792         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
793         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
794         * kwq/DOMEvents.mm: (-[DOMMouseEvent initMouseEvent:::::::::::::::]): Rearranged code to avoid a cast
795         that was causing an incorrect warning.
796         * kwq/DOMUtility.mm:
797         (createObjCDOMNode): Broke out as a separate function.
798         (KJS::ScriptInterpreter::createObjcInstanceForValue): Rearranged code to avoid a namespace collision with
799         KJS::DOMNode and the Objective-C DOMNode class.
800         * kwq/KWQFileButton.mm: Made fields of KWQFileButtonAdapter public to avoid an error, new to gcc 4.0,
801         about accessing protected Objective-C fields.
802         * kwq/KWQKHTMLPart.mm:
803         (KWQKHTMLPart::matchLabelsAgainstElement): Rearranged a return statement to avoid an incorrect warning.
804         (KWQKHTMLPart::imageFromRect): Rearranged how this function does its exception handling to avoid a
805         "may be clobbered" warning.
806         * kwq/KWQKJavaAppletWidget.mm: Fixed incorrect import that said "KHTMLView.h" instead of "khtmlview.h".
807         * kwq/KWQObject.mm: Made fields of KWQObjectTimerTarget public to avoid an error, new to gcc 4.0,
808         about accessing protected Objective-C fields.
809         * kwq/WebCoreBridge.mm: (partHasSelection): Used [bridge part] instead of getting directly at instance
810         variable to avoid an error, new to gcc 4.0, about accessing protected Objective-C fields.
811
812         * WebCore-combined.exp: Regenerated.
813         * WebCore-tests.exp: Added some additional symbols needed by the tests under gcc 4.0.
814
815 2005-04-28  Darin Adler  <darin@apple.com>
816
817         * WebCore.pbproj/project.pbxproj: Add back the main_thread_malloc files, rolled out by accident.
818
819 2005-04-27 Adele Peterson  <adele@apple.com>
820
821         Rolling out fix for <rdar://problem/4097849> because the following layout tests were failing:
822
823         fast/css/namespaces/001
824         fast/css/namespaces/002
825         fast/css/namespaces/004
826         fast/css/namespaces/005
827         fast/css/namespaces/006
828         fast/overflow/003
829         
830
831         * khtml/html/html_documentimpl.cpp:
832         * khtml/html/html_documentimpl.h:
833         * khtml/html/html_elementimpl.cpp:
834         (HTMLElementImpl::namespaceURI):
835         * khtml/xml/dom_docimpl.cpp:
836         (DocumentImpl::importNode):
837         (DocumentImpl::createElementNS):
838         (DocumentImpl::createHTMLElement):
839         (DocumentImpl::attrId):
840         (DocumentImpl::tagId):
841         * khtml/xml/dom_docimpl.h:
842
843 2005-04-27  John Sullivan  <sullivan@apple.com>
844
845         Reviewed by Darin.
846         
847         Experimental prototype of user-resizable textareas. All the new code is guarded by
848         #if ALLOW_RESIZING_TEXTAREAS, which is false unless you remove a comment and rebuild.
849         
850         This code allows you to press near the bottom-right corner of any textarea and drag
851         to resize the textarea on the page. It works correctly with textareas in left-aligned
852         or centered blocks, but is weird in right-aligned blocks. It also does something
853         sensible if the width is specified as a % (in that case, you can resize vertically only).
854         The user-created-size survives resizing the window and survives the back/forward cache.
855         It does not survive reloading the page.
856         
857         This complete-lack-of-affordance UI is obviously not shippable, but this proof of concept
858         code could lead to a real user feature.
859
860         * kwq/KWQTextArea.mm:
861         (-[KWQTextArea getNumColumns:andNumRows:forSize:]):
862         new method that determines cols and rows for a given textarea frame size
863         (-[KWQTextAreaTextView _trackResizeFromMouseDown:]):
864         new method that tracks a drag and does a live resize-and-relayout
865         (-[KWQTextAreaTextView mouseDown:]):
866         if the mouse down is in the bottom-right corner, call _trackResizeFromMouseDown:
867
868 2005-04-27  John Sullivan  <sullivan@apple.com>
869
870         Reviewed by Adele.
871
872         - fixed problem with mouse wheel patch where alt and shift keys were switched
873
874         * khtml/xml/dom2_eventsimpl.h:
875         use the order cntl, alt, shift, meta in KeyboardEventImpl constructors to match
876         superclass. This isn't necessary to fix the bug, but is better for clarity.
877         
878         * khtml/xml/dom2_eventsimpl.cpp:
879         (KeyboardEventImpl::KeyboardEventImpl):
880         switch parameter order to match superclass. Then pass the parameters to superclass's
881         constructor in the right order.
882         (KeyboardEventImpl::initKeyboardEvent):
883         Pass parameters to superclass's constructor in the right order.
884
885 2005-04-26  Adele Peterson  <adele@apple.com>
886
887         Fixed by Darin, reviewed by me.
888
889         Fix for <rdar://problem/4084029> designMode doesn't allow editing when iframe src = "" or = about:blank
890         
891         This change will add an HTML element for empty documents.  Now that there will be an HTMLDocument in this case, 
892         a body will also be created (see rdar://problem/3758785). This was preventing frames with empty documents from 
893         being editable.
894
895         * khtml/html/htmlparser.cpp: (KHTMLParser::finished):
896
897         Updated these tests to expect the HTML and BODY elements
898         * layout-tests/fast/flexbox/016-expected.txt:
899         * layout-tests/fast/frames/001-expected.txt:
900         * layout-tests/fast/frames/002-expected.txt:
901         * layout-tests/fast/frames/contentWindow_Frame-expected.txt:
902         * layout-tests/fast/frames/contentWindow_iFrame-expected.txt:
903         * layout-tests/fast/frames/empty-frame-src-expected.txt:
904
905 2005-04-26  Maciej Stachowiak  <mjs@apple.com>
906
907         New test case for <rdar://problem/4092136> reproducible crash in KJS::kjs_fast_realloc loading maps.google.com
908
909         * layout-tests/fast/js/string-from-char-code-expected.txt: Added.
910         * layout-tests/fast/js/string-from-char-code.html: Added.
911
912 2005-04-26  Darin Adler  <darin@apple.com>
913
914         Reviewed by John.
915
916         - fixed <rdar://problem/3655817> please add support for mouse wheel events and the onmousewheel handler
917
918         Loose ends:
919
920             - need to test behavior of Windows IE with horizontal scroll wheeling; we currently send a distinct event
921               for that relatively obscure case, which means the event handlers won't fire at all; might be incorrect
922             - overflow scrolling is done after all DOM event handling, but ideally should be done in the overflowing
923               element's default event handler; not important in practice
924             - frame scrolling is done after all DOM event handling, but probably should be done in a default event handler;
925               not sure about this, but it's probably not important in practice and definitely not required
926
927         - JavaScript
928
929         * khtml/ecma/kjs_events.h: Added DOMWheelEvent.
930         * khtml/ecma/kjs_events.cpp:
931         (KJS::getDOMEvent): Added a case for wheel event. To be forward looking, I use the event's impl pointer
932         instead of a C++ DOM wrapper. Eventually it will all work this way.
933         (offsetFromTarget): Added. Factored out code to compute offsetX/Y for an event.
934         (DOMMouseEvent::getValueProperty): Changed to call offsetFromTarget for offsetX/Y.
935         (DOMWheelEvent::DOMWheelEvent): Added.
936         (DOMWheelEvent::tryGet): Added.
937         (DOMWheelEvent::getValueProperty): Added.
938         (DOMWheelEventProtoFunc::tryCall): Added. Nothing at the moment, but might get contents later.
939
940         * khtml/ecma/kjs_dom.h: Added OnMouseWheel to the enum with the list of properties.
941         * khtml/ecma/kjs_dom.cpp: Added onmousewheel as a property of DOM nodes.
942         (DOMNode::getValueProperty): Return the mouse wheel event handler.
943         (DOMNode::putValue): Set the mouse wheel event handler.
944
945         * khtml/ecma/kjs_window.cpp: Added onmousewheel as a property of the window.
946         (Window::get): Return the mouse wheel event handler.
947         (Window::put): Set the mouse wheel event handler.
948
949         * khtml/ecma/kjs_window.h: Added OnWindowMouseWheel to the enum with the list of properties.
950         (Other properties distinguish the window handler by lower-casing the initial letter, way too subtle,
951         so I did this one a good way.)
952
953         * khtml/dom/dom2_events.h: Made the constructors for Event and UIEvent public. There's no good reason
954         for them to be private, and I had to use the UIEvent one in the JavaScript implementation.
955
956         - DOM
957         
958         * khtml/xml/dom2_eventsimpl.h: Added events for mouse wheel and horizontal mouse wheel.
959         Added isWheelEvent function to EventImpl.
960         (DOM::UIEventWithKeyStateImpl): Added. Base class shared by mouse, wheel, and keyboard events.
961         (DOM::MouseRelatedEventImpl): Added. Base class shared by mouse and wheel events.
962         (DOM::WheelEventImpl): Added.
963
964         * khtml/xml/dom2_eventsimpl.cpp: Added "mousewheel" to list of event names and a placeholder for
965         the horizontal mouse wheel.
966         (EventImpl::isWheelEvent): Added. Returns false.
967         (MouseRelatedEventImpl::MouseRelatedEventImpl): Added. Factored out what's shared between mouse
968         events and wheel events to avoid duplicated code.
969         (MouseRelatedEventImpl::computeLayerPos): Moved to MouseRelatedWheelEventImpl.
970         (MouseEventImpl::MouseEventImpl): Changed since MouseRelatedWheelEventImpl is now the base class
971         so we can share more code with wheel events.
972         (KeyboardEventImpl::KeyboardEventImpl): Changed since UIEventWithKeyStateImpl is now the base class
973         so we can share more code with mouse and wheel events.
974         (WheelEventImpl::WheelEventImpl): Added.
975         (WheelEventImpl::isWheelEvent): Added. Returns true.
976
977         * khtml/misc/htmlattrs.in: Added "onmousewheel" attribute name.
978         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::parseHTMLAttribute): Added parsing of the
979         "onmousewheel" atribute, consistent with other event handler attributes.
980
981         - event handling
982
983         * kwq/WebCoreBridge.h: Renamed scrollOverflowWithScrollWheelEvent to sendScrollWheelEvent.
984         * kwq/WebCoreBridge.mm: (-[WebCoreBridge sendScrollWheelEvent:]): Renamed.
985
986         * kwq/KWQEvent.h: Added Wheel as an event type value.
987         (QWheelEvent::QWheelEvent): Added.
988         * kwq/KWQEvent.mm:
989         (positionForEvent): Updated to know that wheel events have valid positions in them.
990         (orientationForEvent): Added.
991         (deltaForEvent): Added.
992         (QWheelEvent::QWheelEvent): Added.
993
994         * kwq/KWQKHTMLPart.h: Renamed scrollOverflowWithScrollWheelEvent to wheelEvent.
995         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::wheelEvent): Renamed and added code to construct a QWheelEvent
996         and send it along to KHTMLView::viewportWheelEvent, consistent with how mouse events work.
997
998         * khtml/khtmlview.cpp: (KHTMLView::viewportWheelEvent): Do a hit test to figure out which node to
999         send the event to, and then call dispatchWheelEvent.
1000
1001         * khtml/xml/dom_nodeimpl.h: Added dispatchWheelEvent.
1002         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::dispatchWheelEvent): Added.
1003
1004         - generated files
1005
1006         * khtml/ecma/kjs_dom.lut.h: Regenerated.
1007         * khtml/ecma/kjs_events.lut.h: Regenerated.
1008         * khtml/ecma/kjs_window.lut.h: Regenerated.
1009         * khtml/misc/htmlattrs.c: Regenerated.
1010         * khtml/misc/htmlattrs.h: Regenerated.
1011
1012 2005-04-26  David Harrison  <harrison@apple.com>
1013
1014         Reviewed by Darin, Maciej.
1015
1016         <rdar://problem/4075576> Deleting text in new message borks content
1017         
1018         Fixed by removing the methods that attempted to preserve the position.  The idea
1019         of preserving position is a very recent one, and turned out to not actually address
1020         the problem it was intended to fix (see below).  Further, is unclear how the position
1021         could be preserved in a form that could be properly used later on.   Therefore,
1022         removing the code to work like before is the preferred alternative for this software
1023         update.  I've written <rdar://problem/4099839> to cover the bug that position
1024         preservation was supposed to fix (but did not).  Added layout tests for
1025         both this bug and 4099839.  Also, updated existing tests with correct expected results
1026         (delete-at-paragraph-boundaries-003 and 004).
1027
1028         * khtml/editing/htmlediting.cpp:
1029         (khtml::CompositeEditCommand::removeFullySelectedNode):
1030         (khtml::CompositeEditCommand::removeChildrenInRange):
1031         (khtml::DeleteSelectionCommand::handleGeneralDelete):
1032         * khtml/editing/htmlediting.h:
1033         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-003-expected.txt:
1034         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-004-expected.txt:
1035         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-007-expected.txt: Added.
1036         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-007.html: Added.
1037         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-008-expected.txt: Added.
1038         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-008.html: Added.
1039         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-009-expected.txt: Added.
1040         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-009.html: Added.
1041         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-010-expected.txt: Added.
1042         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-010.html: Added.
1043
1044 2005-04-26  Darin Adler  <darin@apple.com>
1045
1046         - fixed development builds
1047
1048         * khtml/misc/main_thread_malloc.h: Use inlines instead of macros for allocation functions.
1049
1050 2005-04-25  David Hyatt  <hyatt@apple.com>
1051
1052         Fix for 4097842, changing 1st line of a url that wraps doesn't update the second line.  Make sure to
1053         update line break info for the last dirty line so that when a clean line tries to figure out where it
1054         started, it will get an accurate position taking into account the updated string.  By doing this, the code
1055         will be able to properly distinguish between the old and new positions and not accidentally assume they are
1056         the same.
1057         
1058         Reviewed by darin
1059
1060         * khtml/rendering/render_text.cpp:
1061         (RenderText::setTextWithOffset):
1062
1063 2005-04-26  Darin Adler  <darin@apple.com>
1064
1065         Reviewed by Maciej.
1066
1067         - fixed <rdar://problem/4098826> Bezier curves broken in new Safari canvas object (last two parameters parsed incorrectly)
1068
1069         * khtml/ecma/kjs_html.cpp: (KJS::Context2DFunction::tryCall): Fixed incorrect argument indices.
1070         Thanks to Brian Campbell who figured out what was wrong.
1071
1072 2005-04-17  Maciej Stachowiak  <mjs@apple.com>
1073
1074         Reviewed by Darin.
1075
1076         - use single-threaded malloc in places where malloc is hot for an
1077         8% speed improvement on cvs-base
1078
1079         * ForwardingHeaders/misc/fast_malloc.h: Added.
1080         * WebCore.pbproj/project.pbxproj:
1081         * khtml/css/css_base.h:
1082         * khtml/css/css_ruleimpl.h:
1083         * khtml/css/css_valueimpl.h:
1084         * khtml/css/cssstyleselector.h:
1085         * khtml/misc/arena.cpp:
1086         (ArenaAllocate):
1087         (FreeArenaList):
1088         (ArenaFinish):
1089         * khtml/misc/main_thread_malloc.cpp: Added.
1090         * khtml/misc/main_thread_malloc.h: Added.
1091         * khtml/rendering/render_style.h:
1092         * khtml/xml/dom2_eventsimpl.h:
1093         * khtml/xml/dom2_rangeimpl.h:
1094         * khtml/xml/dom2_traversalimpl.h:
1095         * khtml/xml/dom2_viewsimpl.h:
1096         * khtml/xml/dom_docimpl.h:
1097         * khtml/xml/dom_elementimpl.cpp:
1098         (NamedAttrMapImpl::NamedAttrMapImpl):
1099         (NamedAttrMapImpl::clearAttributes):
1100         (NamedAttrMapImpl::operator=):
1101         (NamedAttrMapImpl::addAttribute):
1102         (NamedAttrMapImpl::removeAttribute):
1103         * khtml/xml/dom_elementimpl.h:
1104         * khtml/xml/dom_nodeimpl.h:
1105         * khtml/xml/dom_stringimpl.h:
1106         * kwq/KWQFontFamily.h:
1107         * kwq/KWQListImpl.mm:
1108         * kwq/KWQString.h:
1109         * kwq/KWQString.mm:
1110         (ALLOC_CHAR):
1111         (ALLOC_QCHAR):
1112         (QString::setBufferFromCFString):
1113         (allocatePageNode):
1114
1115 2005-04-25  John Sullivan  <sullivan@apple.com>
1116
1117         Reviewed by Dave Harrison.
1118         
1119         - fixed <rdar://problem/4098731> [DOMHTMLTextAreaElement cols] returns wrong value (usually zero)
1120
1121         * kwq/DOMHTML.mm:
1122         (-[DOMHTMLTextAreaElement cols]):
1123         use ATTR_COLS instead of ATTR_ACCESSKEY (D'oh!)
1124         (-[DOMHTMLTextAreaElement setCols:]):
1125         fixed whitespace
1126
1127 2005-04-25  Darin Adler  <darin@apple.com>
1128
1129         Reviewed by John.
1130
1131         - fixed <rdar://problem/4097849> REGRESSION (162-163): importNode creates non-HTML elements, thus style attributes (and some others) don't work
1132
1133         * khtml/xml/dom_docimpl.h: Add virtual functions HTMLElementNamespace and isHTMLNamespace.
1134         * khtml/xml/dom_docimpl.cpp:
1135         (DocumentImpl::importNode): Rearranged this function and fixed the following problems: 1) made sure to ref node while attributes are
1136         being set on it so it doesn't get destroyed; 2) fixed code to get namespace from the element we are importing to use the IDs from
1137         the source document, not the destination document; 3) removed unneeded getDocument() call which just returns this; 4) fixed error
1138         handling for cases where an exception happens while processing the children.
1139         (DocumentImpl::HTMLElementNamespace): Added. Returns XHTML_NAMESPACE.
1140         (DocumentImpl::isHTMLNamespace): Added. Returns true for any namespace that matches XHTML_NAMESPACE (case insensitive).
1141         (DocumentImpl::createElementNS): Changed to call isHTMLNamespace, which will cause it to accept the null namespace in an HTML document.
1142         This is the change that fixes the bug. Also fixed the code path to do a little less wasteful work in the non-XHTML case.
1143         (DocumentImpl::createHTMLElement): Pass in HTMLElementNamespace() rather than 0 to tagId.
1144         (DocumentImpl::attrId): Use isHTMLNamespace instead of allowing the null namespace explicitly.
1145         (DocumentImpl::tagId): Ditto.
1146
1147         * khtml/html/html_documentimpl.h: Add overrides for HTMLElementNamespace and isHTMLNamespace.
1148         * khtml/html/html_documentimpl.cpp:
1149         (HTMLDocumentImpl::HTMLElementNamespace): Added. Returns 0 so we use the null string for HTML elements inside HTML documents (as before).
1150         (HTMLDocumentImpl::isHTMLNamespace): Added. Allows 0, and then calls base class to check for the actual XHTML namespace. Thus, we allow
1151         both no namespace at all and the XHTML namespace inside HTML documents.
1152
1153         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::namespaceURI): Changed to call HTMLElementNamespace rather than checking
1154         isHTMLDocument. Same result as before, but better division of responsibilities.
1155
1156 2005-04-25  Darin Adler  <darin@apple.com>
1157
1158         Reviewed by John.
1159
1160         - fixed <rdar://problem/4091956> JavaScript drop handlers don't receive more than one dropped item
1161
1162         * kwq/KWQClipboard.mm:
1163         (cocoaTypeFromMIMEType): Remove some use of compare -- less efficient than a simpler "==" check.
1164         Fixed non-GC-safe code to use KWQCFAutorelease instead.
1165         (MIMETypeFromCocoaType): Use fromCFString instead of fromNSString to avoid a cast.
1166         (KWQClipboard::getData): Rearrange so that we'll use filenames if both filenames and a URL are present, since
1167         filenames can accomodate multiple items. Fix bug where we'd return multiple filenames when the type requested
1168         is "URL". Fixed loop that computed the count over and over again for the loop termination condition. Check
1169         that the data for NSFilenamesPboardType is an NSArray instead of assuming it is.
1170         (KWQClipboard::setData): Use isEqualToString: instead of == when comparing types.
1171
1172 2005-04-22  David Hyatt  <hyatt@apple.com>
1173
1174         Fix for 4096878, drop shadow effect not displayed correctly on tbray.org/ongoing/.  Block minmaxwidth was
1175         broken when negative margins were used and did not properly decrease the max width.
1176         
1177         Reviewed by Maciej
1178
1179         * khtml/rendering/render_block.cpp:
1180         (khtml::RenderBlock::calcBlockMinMaxWidth):
1181         * layout-tests/fast/block/float/034-expected.txt: Added.
1182         * layout-tests/fast/block/float/034.html: Added.
1183         * layout-tests/fast/block/float/035-expected.txt: Added.
1184         * layout-tests/fast/block/float/035.html: Added.
1185         
1186 2005-04-22  David Hyatt  <hyatt@apple.com>
1187
1188         Remove some dead code from css_valueimpl.  It wasn't used at all.
1189
1190         * khtml/css/css_valueimpl.cpp:
1191         * khtml/css/css_valueimpl.h:
1192
1193 2005-04-22  Darin Adler  <darin@apple.com>
1194
1195         * khtml/ecma/kjs_html.h: Removed unnecessary bogus class name qualifiers.
1196
1197 2005-04-22  David Hyatt  <hyatt@apple.com>
1198
1199         Fix for 4096681, fix regression in how the list-style property is parsed.  It no longer parses when it hits
1200         a url in the property value list now, because the list pointer did not get advanced.  This fixes alistapart.com.
1201         
1202         Reviewed by john
1203
1204         * khtml/css/cssparser.cpp:
1205         (CSSParser::parseValue):
1206         * layout-tests/fast/lists/009-expected.txt: Added.
1207         * layout-tests/fast/lists/009.html: Added.
1208         * layout-tests/fast/lists/resources/listmark.gif: Added.
1209
1210 2005-04-22  Darin Adler  <darin@apple.com>
1211
1212         Reviewed by John.
1213
1214         - fixed <rdar://problem/4091082> Google Suggest no longer works due to lack of "frameElement"
1215
1216         * khtml/ecma/kjs_window.h: Added FrameElement.
1217         * khtml/ecma/kjs_window.cpp: (Window::get): Added "frameElement".
1218         * khtml/ecma/kjs_window.lut.h: Regenerated.
1219
1220 2005-04-22  Darin Adler  <darin@apple.com>
1221
1222         Reviewed by John.
1223
1224         - a small editing-related code cleanup
1225
1226         * khtml/rendering/render_text.h: Added positionForOffset and made offsetForPosition const.
1227         * khtml/rendering/render_text.cpp:
1228         (InlineTextBox::offsetForPosition): Made const.
1229         (InlineTextBox::positionForOffset): Added. Moved code here from caretRect.
1230         (RenderText::caretRect): Call positionForOffset instead of doing the work here.
1231
1232 2005-04-21  David Hyatt  <hyatt@apple.com>
1233
1234         Fix for 4095839, wrong background image used on flechtwerk.de.  Make sure that the global mapped
1235         attribute cache hashed background attributes into per-document buckets.
1236
1237         * khtml/html/html_baseimpl.cpp:
1238         (HTMLBodyElementImpl::mapToEntry):
1239         * khtml/html/html_elementimpl.h:
1240         (DOM::):
1241         * khtml/html/html_tableimpl.cpp:
1242         (HTMLTableElementImpl::mapToEntry):
1243         (HTMLTablePartElementImpl::mapToEntry):
1244         * khtml/xml/dom_docimpl.cpp:
1245         (DocumentImpl::DocumentImpl):
1246         * khtml/xml/dom_docimpl.h:
1247         (DOM::DocumentImpl::docID):
1248
1249 2005-04-21  Vicki Murley  <vicki@apple.com>
1250
1251         - layout test for 4065447, outerHTML on images
1252
1253         * layout-tests/fast/dynamic/outerHTML-img-expected.txt: Added.
1254         * layout-tests/fast/dynamic/outerHTML-img.html: Added.
1255
1256 2005-04-20  Vicki Murley  <vicki@apple.com>
1257
1258         Reviewed by hyatt.
1259
1260         - fixed <rdar://problem/4065447> support outerHTML on IMG elements
1261
1262         * khtml/html/html_elementimpl.cpp:
1263         (HTMLElementImpl::setOuterHTML):
1264
1265 2005-04-18  David Hyatt  <hyatt@apple.com>
1266
1267         Fix min-height so that when it resolves to auto it does not use the box's intrinsic height.
1268         
1269         * khtml/rendering/render_box.cpp:
1270         (RenderBox::calcHeight):
1271         (RenderBox::calcHeightUsing):
1272
1273 2005-04-18  David Hyatt  <hyatt@apple.com>
1274
1275         Back out fix for 4032346, since it is causing garbled image content on many sites.
1276
1277         The bug tracking the fix is 4069093.
1278         
1279         (khtml::RenderBlock::matchedEndLine):
1280
1281 2005-04-18  David Hyatt  <hyatt@apple.com>
1282
1283         Fix the smile in the Acid2 test.  Floats should not grow to contain other floats unless height is auto.  Otherwise
1284         the float should use the specified height.
1285
1286         Also fix row 14 of the Acid2 test.  Although ambiguous, just modify the table cell baseline alignment code to align
1287         to the bottom of the cell's content height if no suitable baseline could be found.
1288         
1289         * khtml/rendering/render_block.cpp:
1290         (khtml::RenderBlock::layoutBlock):
1291         * khtml/rendering/render_block.h:
1292         (khtml::RenderBlock::firstRootBox):
1293         (khtml::RenderBlock::lastRootBox):
1294         * khtml/rendering/render_table.cpp:
1295         (RenderTableSection::calcRowHeight):
1296         (RenderTableCell::baselinePosition):
1297         
1298 2005-04-15  David Hyatt  <hyatt@apple.com>
1299
1300         Make sure empty tables honor CSS-specified heights when they have no rows or sections.  This is done only
1301         in strict mode, since it is not compatible with WinIE.
1302
1303         * khtml/rendering/render_table.cpp:
1304         (RenderTable::layout):
1305
1306 2005-04-15  David Hyatt  <hyatt@apple.com>
1307
1308         Fix for row 13 of the Acid2 test.  Change HTML comment parsing in strict mode to do proper SGML parsing,
1309         checking for pairs of -- and only being willing to close the comment if every -- is paired up.
1310         
1311         * khtml/html/htmltokenizer.cpp:
1312         (khtml::HTMLTokenizer::parseComment):
1313
1314 2005-04-12  Maciej Stachowiak  <mjs@apple.com>
1315
1316         Reviewed by Richard.
1317
1318         - use custom single-threaded malloc for all non-GC JavaScriptCore
1319         allocations, for a 9.1% speedup on JavaScript iBench
1320          
1321         * khtml/ecma/kjs_binding.cpp:
1322         (UString::UString):
1323         * khtml/ecma/kjs_proxy.cpp:
1324         (KJSProxyImpl::evaluate):
1325
1326 2005-04-15  David Hyatt  <hyatt@apple.com>
1327
1328         Fix the six pixel gap between rows nine and ten of the Acid2 test.  Make sure that percentage heights that
1329         resolve to auto are properly treated as though they have auto height by the self-collapsing block check (as per
1330         section 8.3.1, paragraph 7 of the CSS2.1 spec).
1331         
1332         * khtml/rendering/render_block.cpp:
1333         (khtml::RenderBlock::isSelfCollapsingBlock):
1334
1335 2005-04-15  David Hyatt  <hyatt@apple.com>
1336
1337         The Acid2 test and the reference rendering both make use of overflow:hidden on the <html> element.  Turns out
1338         the CSS2.1 wording for this behavior has been revised (based off WinIE/Mozilla behavior).  Change our behavior
1339         to match and make <html> overflow apply to the viewport.
1340         
1341         * khtml/khtmlview.cpp:
1342         (KHTMLView::applyOverflowToViewport):
1343         (KHTMLView::layout):
1344         * khtml/khtmlview.h:
1345         * khtml/rendering/render_box.cpp:
1346         (RenderBox::setStyle):
1347
1348 2005-04-14  David Hyatt  <hyatt@apple.com>
1349
1350         3258403 and 3258402 can now be fixed.  min/max-width/height support is now complete.  This patch makes them
1351         work for positioned elements and enables us to pass row one of the Acid2 test.
1352         
1353         * khtml/rendering/render_box.cpp:
1354         (RenderBox::calcAbsoluteHorizontal):
1355         (RenderBox::calcAbsoluteHorizontalValues):
1356         (RenderBox::calcAbsoluteVertical):
1357         (RenderBox::calcAbsoluteVerticalValues):
1358         * khtml/rendering/render_box.h:
1359
1360 2005-04-12  David Hyatt  <hyatt@apple.com>
1361
1362         Working on the Acid2 test, Row 1.
1363
1364         Improve checkChild for the DTD so that it knows what mode a document is in.  This allows it to adhere more
1365         strictly to the actual DTD in strict mode and almost strict mode.
1366
1367         Change the <table>-inside-<p> check so that <table> is disallowed inside <p> in 
1368         strict mode and almost strict mode.  This matches Firefox behavior, which allows <table>
1369         inside <p> only in quirks mode.
1370
1371         * khtml/html/dtd.cpp:
1372         (DOM::checkChild):
1373         * khtml/html/dtd.h:
1374         * khtml/html/htmlparser.cpp:
1375         (KHTMLParser::insertNode):
1376         * khtml/html/htmltokenizer.cpp:
1377         (khtml::HTMLTokenizer::parseTag):
1378         * khtml/xml/dom_elementimpl.cpp:
1379         (ElementImpl::childAllowed):
1380
1381 2005-04-12  Vicki Murley  <vicki@apple.com>
1382
1383         Reviewed by Maciej. 
1384
1385         - fixed <rdar://problem/3760895> Request for including an implementation of the elementFromPoint function
1386  
1387         * khtml/dom/dom_doc.cpp:
1388         (DOM::Document::elementFromPoint):
1389         * khtml/dom/dom_doc.h:
1390         * khtml/ecma/kjs_dom.cpp:
1391         (DOMDocumentProtoFunc::tryCall):
1392         * khtml/ecma/kjs_dom.h:
1393         (KJS::DOMDocument::):
1394         * khtml/ecma/kjs_dom.lut.h:
1395         (KJS::):
1396         * khtml/xml/dom_docimpl.cpp:
1397         (DocumentImpl::elementFromPoint):
1398         * khtml/xml/dom_docimpl.h:
1399
1400 2005-04-12  David Hyatt  <hyatt@apple.com>
1401
1402         Beginning of work to support the Acid2 CSS test put forward by the Web Standards Project.  Fix
1403         our handling of the rel attribute on <link> elements to do a proper tokenization so that stylesheets
1404         can be recognized even when other keywords are present in the rel attribute.
1405
1406         * khtml/html/html_headimpl.cpp:
1407         (HTMLLinkElementImpl::HTMLLinkElementImpl):
1408         (HTMLLinkElementImpl::parseHTMLAttribute):
1409         (HTMLLinkElementImpl::tokenizeRelAttribute):
1410         (HTMLLinkElementImpl::process):
1411         * khtml/html/html_headimpl.h:
1412
1413 2005-04-12  John Sullivan  <sullivan@apple.com>
1414
1415         - fixed these two bugs (I also fixed these on the experimental-ui-branch)
1416         <rdar://problem/3154293> Find Next should not scroll page if the next target is already visible
1417         <rdar://problem/3121828> scrollToVisible on find cuts off the left part of the view due to needless horiz. scroll
1418
1419         Reviewed by Chris.
1420
1421         * kwq/KWQKHTMLPart.mm:
1422         (KWQKHTMLPart::jumpToSelection):
1423         Trey had written code to address these issues, but left it commented out due to other
1424         problems. The other problems no longer occur, so I uncommented Trey's code, and then
1425         discovered that I could make it behave more like TextEdit with many fewer lines of
1426         code.
1427
1428 2005-04-08  David Harrison  <harrison@apple.com>
1429
1430         Reviewed by Dave Hyatt.
1431
1432         <rdar://problem/4084106> Remove NSAccessibilityForegroundColorTextAttributeWrapper
1433
1434         * kwq/KWQAccObject.mm:
1435         (AXAttributeStringSetStyle):
1436         Use NSAccessibilityForegroundColorTextAttribute directly.
1437
1438 2005-04-05  David Hyatt  <hyatt@apple.com>
1439
1440         Fix for 4077106, make sure that mouse wheeling in overflow sections uses 40 rather than 10 as the base line
1441         step.
1442         
1443         Reviewed by darin
1444
1445         * khtml/rendering/render_layer.cpp:
1446         (RenderLayer::positionScrollbars):
1447         * kwq/KWQScrollBar.mm:
1448         (QScrollBar::scroll):
1449
1450 2005-04-04  Vicki Murley  <vicki@apple.com>
1451
1452         Reviewed by Maciej.
1453
1454         - fixed <rdar://problem/3871669> no focus or blur methods on HTML button elements
1455
1456         * khtml/dom/html_form.cpp:
1457         (HTMLButtonElement::focus): 
1458         (HTMLButtonElement::blur): 
1459         * khtml/dom/html_form.h: 
1460         * khtml/ecma/kjs_html.cpp:
1461         (KJS::HTMLElementFunction::tryCall):
1462         * khtml/ecma/kjs_html.h:
1463         (KJS::HTMLElement::):
1464         * khtml/ecma/kjs_html.lut.h:
1465         (KJS::):
1466         * khtml/html/html_formimpl.cpp:
1467         (DOM::HTMLButtonElementImpl::blur):
1468         (DOM::HTMLButtonElementImpl::focus):
1469         * khtml/html/html_formimpl.h:
1470
1471 === WebCore-415 ===
1472
1473 2005-03-28  David Harrison  <harrison@apple.com>
1474
1475         Reviewed by Darin.
1476         
1477         <rdar://problem/4069161> REGRESSION (8A416-8A419): Safari crash bringing up context menu for non-HTML content in a frame
1478
1479         * kwq/KWQAccObject.mm:
1480         (-[KWQAccObject rendererForView:]):
1481         Nil-check node variable instead of rechecking document variable.
1482
1483 === WebCore-413 ===
1484
1485 2005-03-27  Darin Adler  <darin@apple.com>
1486
1487         Reviewed by me, fix by Kida-san.
1488
1489         - fixed <rdar://problem/4067474> 8A424: Safari immediately quit by Cmd+Ctrll+'D'
1490
1491         * kwq/WebCoreBridge.mm: (-[WebCoreBridge convertToNSRange:DOM::]):
1492         Added nil check.
1493
1494 === Safari-412 ===
1495
1496 2005-03-24  Richard Williamson   <rjw@apple.com>
1497
1498         Fixed <rdar://problem/4052683> After adding/removing stocks from Stocks Widget, stock areas went blank
1499
1500         The request was being collected before firing it's load handler.
1501         We now gc protect the request while it's loading.
1502
1503         Reviewed by Maciej.
1504
1505         * khtml/ecma/xmlhttprequest.cpp:
1506         (KJS::XMLHttpRequest::send):
1507         (KJS::XMLHttpRequest::abort):
1508         (KJS::XMLHttpRequest::slotFinished):
1509         (KJS::XMLHttpRequestProtoFunc::tryCall):
1510
1511 === Safari-411 ===
1512
1513 2005-03-23  Darin Adler   <darin@apple.com>
1514
1515         Further fix for 4053515.
1516
1517         Covered cases where text position doesn't lie inside a
1518         text node.      
1519
1520         Reviewed by Richard.
1521
1522         * khtml/editing/visible_text.cpp:
1523         (khtml::TextIterator::setRangeFromLocationAndLength):
1524
1525 2005-03-23  Richard Williamson   <rjw@apple.com>
1526
1527         Fixed <rdar://problem/4053515> REGRESSION (Mail): Kotoeri input method reconversion does not work in WebViews
1528
1529         We now use actual document NSRanges to represent both marked text
1530         ranges and selection ranges.
1531
1532         Reviewed by Ken.
1533
1534         * khtml/editing/visible_text.cpp:
1535         (khtml::TextIterator::rangeLength):
1536         (khtml::TextIterator::setRangeFromLocationAndLength):
1537         * khtml/editing/visible_text.h:
1538         * kwq/WebCoreBridge.h:
1539         * kwq/WebCoreBridge.mm:
1540         (-[WebCoreBridge convertToNSRange:DOM::]):
1541         (-[WebCoreBridge DOM::convertToDOMRange:]):
1542         (-[WebCoreBridge selectNSRange:]):
1543         (-[WebCoreBridge markedTextDOMRange]):
1544         (-[WebCoreBridge markedTextNSRange]):
1545
1546 2005-03-22  Kevin Decker  <kdecker@apple.com>
1547
1548         Reviewed by Vicki.
1549
1550         Fixed <rdar://problem/4062336> REGRESSION (406-407): HTML submenus not working at hrweb.apple.com after going back
1551
1552         Rolled out the fix for <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken
1553
1554         We clearly need a better solution to 4041374. We can't indiscriminately remove event listeners in closeURL() after-all. Since event listeners are registered in a <script> tag, which is evaluated and executed at page load time, this becomes a problem since we don't reevaluate a page's <script> that is in the back/forward cache.  Thus once you leave the page, the listeners are gone for good.  This is the problem.
1555
1556         * khtml/khtml_part.cpp:
1557         (KHTMLPart::closeURL):
1558         * khtml/xml/dom_docimpl.cpp:
1559         (DocumentImpl::detach): 
1560
1561 === Safari-410 ===
1562
1563 2005-03-22  Vicki Murley  <vicki@apple.com>
1564
1565         - roll the fix for <rdar://problem/4060266> back in, since its 
1566         now approved by CCC
1567
1568         * khtml/editing/visible_text.cpp:
1569         (khtml::TextIterator::handleTextBox):
1570
1571 2005-03-22  Vicki Murley  <vicki@apple.com>
1572
1573         - roll out the fix for <rdar://problem/4060266> since it was denied by CCC
1574
1575         * khtml/editing/visible_text.cpp:
1576         (khtml::TextIterator::handleTextBox):
1577
1578 2005-03-22  David Harrison  <harrison@apple.com>
1579
1580         Reviewed by Darin.
1581         
1582         <rdar://problem/4060266> Double-clicking in Dictionary.app doesn't work for some words (coming just after style change)
1583
1584         * khtml/editing/visible_text.cpp:
1585         (khtml::TextIterator::handleTextBox):
1586         Complete the check of whether to emit space for collapsed space.
1587
1588 2005-03-22  David Harrison  <harrison@apple.com>
1589
1590         Reviewed by John.
1591         
1592         <rdar://problem/4061443> REGRESSION (8A420-8A421): Pasting in the Stickies widget is broken again
1593
1594         * khtml/editing/htmlediting.cpp:
1595         (khtml::positionBeforeContainingSpecialElement):
1596         (khtml::positionAfterContainingSpecialElement):
1597         Return unchanged Position rather than a null or non-editable one.
1598
1599 === Safari-409 ===
1600
1601 2005-03-20  Ken Kocienda  <kocienda@apple.com>
1602
1603         Reviewed by me
1604
1605         I made an error in this test earlier. It was not testing what I intended. Fixed.
1606
1607         * layout-tests/editing/unsupported-content/list-delete-001-expected.txt
1608         * layout-tests/editing/unsupported-content/list-delete-001.html
1609         
1610         New tests:
1611
1612         * layout-tests/editing/unsupported-content/table-delete-001-expected.txt: Added.
1613         * layout-tests/editing/unsupported-content/table-delete-001.html: Added.
1614         * layout-tests/editing/unsupported-content/table-delete-002-expected.txt: Added.
1615         * layout-tests/editing/unsupported-content/table-delete-002.html: Added.
1616         * layout-tests/editing/unsupported-content/table-delete-003-expected.txt: Added.
1617         * layout-tests/editing/unsupported-content/table-delete-003.html: Added.
1618         * layout-tests/editing/unsupported-content/table-type-after-expected.txt: Added.
1619         * layout-tests/editing/unsupported-content/table-type-after.html: Added.
1620         * layout-tests/editing/unsupported-content/table-type-before-expected.txt: Added.
1621         * layout-tests/editing/unsupported-content/table-type-before.html: Added.
1622
1623 2005-03-20  Darin Adler  <darin@apple.com>
1624
1625         Reviewed by Maciej.
1626
1627         - fixed <rdar://problem/3923903> REGRESSION (164-165): Repro Safari crash in khtml::RenderLayer::scrollToOffset
1628
1629         * khtml/rendering/render_layer.cpp: (RenderLayer::scrollToOffset): Check canvas for nil.
1630
1631 2005-03-20  David Harrison  <harrison@apple.com>
1632
1633         Reviewed by Darin.
1634         
1635         <rdar://problem/4055127> Dictionary pop-up panel misplaced at beginning of text blocks (breaks double-clicking in Dictionary.app)
1636
1637         SimplifiedBackwardsTextIterator::advance() needed to not limit to textnodes
1638         when checking whether moving back across block boundaries
1639
1640         VisibleUnits previousBoundary() needed to INIT_DOWN when creating result VisiblePosition
1641
1642         All editing tests pass.
1643
1644         * khtml/editing/visible_text.cpp:
1645         (khtml::SimplifiedBackwardsTextIterator::advance):
1646         * khtml/editing/visible_units.cpp:
1647         (khtml::previousBoundary):
1648
1649 2005-03-20  Darin Adler  <darin@apple.com>
1650
1651         Reviewed by Harrison.
1652
1653         - fixed <rdar://problem/4059914> when you select all of a frame's content, need to select the frame in the parent document so it can be easily deleted
1654
1655         * khtml/khtml_part.h: Added selectFrameElementInParentIfFullySelected.
1656         * khtml/khtml_part.cpp:
1657         (isFrame): Added.
1658         (KHTMLPart::setFocusNodeIfNeeded): Changed to not set focus to a frame; was not what this function was
1659         intended to do, and caused trouble when trying to select a frame element.
1660         (KHTMLPart::khtmlMouseReleaseEvent): Call selectFrameElementInParentIfFullySelected.
1661         (KHTMLPart::selectAll): Call selectFrameElementInParentIfFullySelected.
1662         (KHTMLPart::selectFrameElementInParentIfFullySelected): Added. Selects the frame element in the parent
1663         if a frame is entirely selected, which makes it easier to delete or replace the frame and is consistent
1664         with the changes Maciej made recently for other elements.
1665
1666         * kwq/WebCoreBridge.mm:
1667         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]): Call selectFrameElementInParentIfFullySelected.
1668         (-[WebCoreBridge alterCurrentSelection:verticalDistance:]): Call selectFrameElementInParentIfFullySelected.
1669
1670 2005-03-20  Darin Adler  <darin@apple.com>
1671
1672         Reviewed by me, code change by Ken.
1673
1674         - fixed <rdar://problem/4059852> Deleting from first element of list makes content jump to wrong place
1675
1676         * khtml/editing/htmlediting.cpp:
1677         (khtml::isListStructureNode): Added.
1678         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Check for list nodes as well as table nodes.
1679
1680 2005-03-20  Ken Kocienda  <kocienda@apple.com>
1681
1682         Reviewed by me
1683         
1684         Added tests to cover new "unsupported content" editing code.
1685
1686         * layout-tests/editing/unsupported-content/list-delete-001-expected.txt: Added.
1687         * layout-tests/editing/unsupported-content/list-delete-001.html: Added.
1688         * layout-tests/editing/unsupported-content/list-delete-002-expected.txt: Added.
1689         * layout-tests/editing/unsupported-content/list-delete-002.html: Added.
1690         * layout-tests/editing/unsupported-content/list-delete-003-expected.txt: Added.
1691         * layout-tests/editing/unsupported-content/list-delete-003.html: Added.
1692         * layout-tests/editing/unsupported-content/list-type-after-expected.txt: Added.
1693         * layout-tests/editing/unsupported-content/list-type-after.html: Added.
1694         * layout-tests/editing/unsupported-content/list-type-before-expected.txt: Added.
1695         * layout-tests/editing/unsupported-content/list-type-before.html: Added.
1696
1697 2005-03-20  Ken Kocienda  <kocienda@apple.com>
1698
1699         Reviewed by Maciej
1700         
1701         Fix for this bug:
1702         
1703         <rdar://problem/4059578> Entire list deleted, and caret disappears, when delete key hit at end of list
1704
1705         The problem is that a new case in the delete code did not consider when the
1706         downstream end node of the selection might be an ancestor of the upstream start
1707         node. That is the case in this bug. The downstream end is the body element, and
1708         this line of code would delete all the children of the downstream end:
1709             removeChildrenInRangePreservingPosition(m_downstreamEnd.node(), 0, 
1710                 m_downstreamEnd.offset(), m_upstreamStart);
1711
1712         The fix is to check for this "is ancestor" case, and do some tree logic to find
1713         the right offset of the downstream end node for the call to
1714         removeChildrenInRangePreservingPosition().
1715
1716         * khtml/editing/htmlediting.cpp:
1717         (khtml::DeleteSelectionCommand::handleGeneralDelete): Fixed as described.
1718
1719 2005-03-19  Ken Kocienda  <kocienda@apple.com>
1720
1721         Reviewed by Maciej
1722
1723         Fix for this bug:
1724        
1725         <rdar://problem/4059384> Cannot place insertion point correctly in editable text that avoids floating elements
1726
1727         Note: I strongly suspect this bug blocks a complete solution to this other Tiger/P2:
1728         <rdar://problem/4055748> AX: Dictionary pop-up panel shows at wrong place on specific parts of particular pages
1729
1730         * khtml/rendering/render_text.cpp:
1731         (RenderText::caretRect): Change the y-coordinate used to calculate the available width for a line. Height is wrong.
1732         Top of the box containing the text where the click is done is correct. Also, add in the x-offset for the start
1733         of the text box when calculating the available width. If this text box is avoiding a float at the y-coordinate
1734         for the relevant box, failure to add in the amount of float-avoidance will make the text at the coordinates
1735         greater than end-of-line minus float-avoidance ineligible for caret placement.
1736
1737 2005-03-19  Darin Adler  <darin@apple.com>
1738
1739         Reviewed by Ken.
1740
1741         - fixed <rdar://problem/4057594> REGRESSION (125-406): Unrepro crash in HTMLTokenizer::allDataProcessed after hitting Back button
1742
1743         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::allDataProcessed):
1744         To get the part safely after calling end, save a guarded pointer to the view.
1745         The old way could end trying to call a virtual function a part that was destroyed.
1746
1747 2005-03-19  Maciej Stachowiak  <mjs@apple.com>
1748
1749         Reviewed by Darin.
1750
1751         <rdar://problem/4053506> Pasting Tables and Cells in Mail does not allow editing before or after
1752         <rdar://problem/4005954> REGRESSION (Mail): After copy/paste of content containing list element cannot go back to entering text at left side of page
1753         
1754         * khtml/editing/htmlediting.cpp:
1755         (khtml::maxDeepOffset):
1756         (khtml::CompositeEditCommand::removeFullySelectedNodePreservingPosition):
1757         (khtml::CompositeEditCommand::removeChildrenInRangePreservingPosition):
1758         (khtml::CompositeEditCommand::removeNodePreservingPosition):
1759         (khtml::CompositeEditCommand::insertBlockPlaceholder):
1760         (khtml::CompositeEditCommand::appendBlockPlaceholder):
1761         (khtml::CompositeEditCommand::forceBlockPlaceholder):
1762         (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded):
1763         (khtml::isSpecialElement):
1764         (khtml::isFirstVisiblePositionInSpecialElementInFragment):
1765         (khtml::positionBeforePossibleContainingSpecialElement):
1766         (khtml::positionAfterPossibleContainingSpecialElement):
1767         (khtml::ApplyStyleCommand::applyInlineStyle):
1768         (khtml::DeleteSelectionCommand::initializePositionData):
1769         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
1770         (khtml::DeleteSelectionCommand::handleGeneralDelete):
1771         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
1772         (khtml::DeleteSelectionCommand::doApply):
1773         (khtml::InsertParagraphSeparatorCommand::doApply):
1774         (khtml::ReplacementFragment::ReplacementFragment):
1775         (khtml::ReplaceSelectionCommand::doApply):
1776         * khtml/editing/htmlediting.h:
1777         * khtml/editing/visible_position.cpp:
1778         (khtml::isRenderedBR):
1779         (khtml::VisiblePosition::initDownstream):
1780         (khtml::isLastVisiblePositionInBlock):
1781         * khtml/rendering/render_line.cpp:
1782         (khtml::RootInlineBox::closestLeafChildForXPos):
1783         * khtml/xml/dom_nodeimpl.cpp:
1784         (NodeImpl::isBlockFlowOrTable):
1785         (NodeImpl::isEditableBlock):
1786         (NodeImpl::enclosingBlockFlowOrTableElement):
1787         * khtml/xml/dom_nodeimpl.h:
1788         * khtml/xml/dom_position.cpp:
1789         (DOM::Position::upstream):
1790         (DOM::Position::downstream):
1791         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-003-expected.txt:
1792         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-004-expected.txt:
1793         * layout-tests/editing/deleting/delete-select-all-001-expected.txt:
1794         * layout-tests/editing/deleting/delete-select-all-003-expected.txt:
1795         * layout-tests/editing/inserting/insert-3786362-fix-expected.txt:
1796
1797 2005-03-19  John Sullivan  <sullivan@apple.com>
1798
1799         Reviewed by Darin.
1800         
1801         - fixed <rdar://problem/4058740> Crash (nil-deref) editing Mail reply 
1802         message in KWQKHTMLPart::fontForSelection (MailViewer-723)
1803
1804         * kwq/KWQKHTMLPart.mm:
1805         (KWQKHTMLPart::fontForSelection):
1806         Add nil check to loop. It shouldn't be necessary, but this crash trace seems to be
1807         running into it. We're not completely certain, but the check is harmless at worst.
1808
1809 === Safari-408 ===
1810
1811 2005-03-18  David Harrison  <harrison@apple.com>
1812
1813         Reviewed by Darin.
1814         
1815         <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch
1816         
1817         Also changed WebKit.
1818
1819         * kwq/KWQAccObject.mm:
1820         (-[KWQAccObject rendererForView:]):
1821         New to cover both the WebCore and WebKit NSViews.
1822         
1823         (-[KWQAccObject _accessibilityParentForSubview:]):
1824         Use rendererForView.
1825         
1826         * kwq/WebCoreFrameView.h:
1827         Add WebCoreBridgeHolder protocol to get access to WebKit NSViews.
1828
1829 2005-03-18  David Harrison  <harrison@apple.com>
1830
1831         Reviewed by Darin, Ken.
1832
1833         <rdar://problem/3735625> AX: add AXPress action if an element has an onclick handler
1834
1835         * khtml/dom/html_form.cpp:
1836         (HTMLInputElement::click):
1837         * khtml/html/html_elementimpl.cpp:
1838         (HTMLElementImpl::click):
1839         (HTMLElementImpl::accessKeyAction):
1840         * khtml/html/html_elementimpl.h:
1841         * khtml/html/html_formimpl.cpp:
1842         (DOM::HTMLFormElementImpl::submitClick):
1843         (DOM::HTMLButtonElementImpl::click):
1844         (DOM::HTMLButtonElementImpl::accessKeyAction):
1845         (DOM::HTMLInputElementImpl::click):
1846         (DOM::HTMLInputElementImpl::accessKeyAction):
1847         (DOM::HTMLInputElementImpl::defaultEventHandler):
1848         (DOM::HTMLLabelElementImpl::accessKeyAction):
1849         (DOM::HTMLSelectElementImpl::accessKeyAction):
1850         (DOM::HTMLTextAreaElementImpl::accessKeyAction):
1851         * khtml/html/html_formimpl.h:
1852         * khtml/html/html_inlineimpl.cpp:
1853         (HTMLAnchorElementImpl::defaultEventHandler):
1854         (HTMLAnchorElementImpl::accessKeyAction):
1855         * khtml/html/html_inlineimpl.h:
1856         * khtml/rendering/render_form.cpp:
1857         (RenderFileButton::click):
1858         * khtml/rendering/render_form.h:
1859         * khtml/xml/dom_docimpl.cpp:
1860         (DocumentImpl::defaultEventHandler):
1861         * khtml/xml/dom_elementimpl.h:
1862         (DOM::ElementImpl::accessKeyAction):
1863         * kwq/DOMHTML.mm:
1864         (-[DOMHTMLInputElement click]):
1865         * kwq/KWQButton.h:
1866         * kwq/KWQButton.mm:
1867         (QButton::click):
1868         * kwq/KWQFileButton.h:
1869         * kwq/KWQFileButton.mm:
1870         (KWQFileButton::click):
1871         
1872         Add accessKeyAction parameter about whether to limit to HTMLElementImpl subclasses that JavaScript wants, or to apply to others as well.
1873         
1874         Add click() parameter about whether to send the mousedown and mouseup events in addition to the click event.
1875         
1876         * kwq/KWQAccObject.mm:
1877         (-[KWQAccObject mouseButtonListener]):
1878         Locate a mousedown, mouseup, or click handler in the current element and its ancestors.
1879         
1880         (-[KWQAccObject actionElement]):
1881         (-[KWQAccObject accessibilityIsIgnored]):
1882         (-[KWQAccObject accessibilityPerformAction:]):
1883         Consider mouseButtonListener.
1884
1885 2005-03-18  John Sullivan  <sullivan@apple.com>
1886
1887         Reviewed by Darin.
1888         
1889         - fixed <rdar://problem/4002164> maps that include start and end 
1890         location don't print right from maps.google.com
1891
1892         I thought I checked this in yesterday but a ChangeLog conflict aborted my checkin
1893         without me noticing.
1894
1895         * khtml/rendering/render_style.cpp:
1896         (RenderStyle::diff):
1897         flag name changed from _should_correct_text_color to _force_backgrounds_to_white
1898         
1899         * khtml/rendering/render_style.h:
1900         (khtml::RenderStyle::InheritedFlags::operator==):
1901         flag name changed from _should_correct_text_color to _force_backgrounds_to_white
1902         (khtml::RenderStyle::setBitDefaults):
1903         ditto
1904         (khtml::RenderStyle::forceBackgroundsToWhite):
1905         ditto, and method name changed too
1906         (khtml::RenderStyle::setForceBackgroundsToWhite):
1907         ditto
1908         
1909         * khtml/rendering/render_text.cpp:
1910         (InlineTextBox::paint):
1911         updated for name change; also, compare text against white instead of current bg color
1912         because we no longer actually modify the bg color (previously we would always set
1913         the bg color to white, so the result is the same)
1914         
1915         * khtml/xml/dom_docimpl.cpp:
1916         (DocumentImpl::recalcStyle):
1917         updated for name change
1918         
1919         * kwq/WebCoreBridge.mm:
1920         (-[WebCoreBridge styleSheetForPrinting]):
1921         removed this method
1922         (-[WebCoreBridge reapplyStylesForDeviceType:]):
1923         removed the code that called styleSheetForPrinting; we no longer use a stylesheet
1924         for this behavior.
1925
1926         * khtml/rendering/render_box.cpp:
1927         (RenderBox::paintBackgroundExtended):
1928         If forceBackgroundsToWhite flag is set, convert background images and
1929         background colors to white background color with no background image.
1930         
1931 2005-03-18  Ken Kocienda  <kocienda@apple.com>
1932
1933         Reviewed by John
1934
1935         Fix for this bug:
1936         
1937         <rdar://problem/4056718> Pasting quotes the entire message
1938
1939         * khtml/editing/htmlediting.cpp:
1940         (khtml::ReplaceSelectionCommand::doApply): After pasting, nodes are moved to the block containing
1941         the end of the pasted content in certain cases. This move logic used to stop once it moved all the
1942         siblings of the node following the last node of the pasted-in content. This means that block elements
1943         could get moved, and if the pasted-in content included a mail blockquote, this could result in
1944         one quote level getting added. The fix is to stop the move of nodes once a <br>, block element, or
1945         <table> is seen. This only affected one of the many test cases we have for such scenarios, and 
1946         the change to that result makes sense given the code change.
1947         * layout-tests/editing/pasteboard/paste-text-003-expected.txt: This test result changed in a way that
1948         adequately tests the behavior change, so I did not add a new test.
1949
1950 2005-03-17  Ken Kocienda  <kocienda@apple.com>
1951
1952         Reviewed by Harrison
1953
1954         Fix for this bug:
1955         
1956         <rdar://problem/4051809> 8A413: Cursor-up in a mail message sometimes gets stuck (with specific reproducible case)
1957
1958         * khtml/rendering/render_text.cpp:
1959         (RenderText::positionForCoordinates): Consider two lines: line-above and line-below. If the caret position in line-below
1960         was at an x coordinate between half way through the x coordinate of the last character on the line-above and the
1961         end of that same character, this bug would happen since the positioning code would assume that it could create a 
1962         VisiblePosition with a DOWNSTREAM affinity. Now, I check to see if the character position on the line-above is the 
1963         last character on that line, and if it is, I use UPSTREAM as the affinity.
1964
1965 === Safari-407 ===
1966
1967 2005-03-17  David Harrison  <harrison@apple.com>
1968
1969         Reviewed by Darin, Ken.
1970
1971         * khtml/editing/htmlediting.cpp:
1972         (khtml::EditCommandPtr::setEndingSelection):
1973         Fixed typo so that it calls setEndingSelection rather than setStartingSelection.
1974         Commented out this unused method, tho, since this is late in Tiger.  Proved unused by successful build after temporarily removing method declaration or implemenation.
1975
1976 2005-03-16  Kevin Decker  <kdecker@apple.com>
1977
1978         Reviewed by mjs.
1979
1980         Fixed <rdar://problem/4046665> REGRESSION (403-405): mypage.apple.com login does not work (hits assertion in Development build)
1981
1982         * kwq/WebCoreBridge.mm:
1983         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Check always came back false when callers would send a nil NSURL to this method. Now we allow the empty url cases, eg., <frame src="">
1984
1985 2005-03-16  Darin Adler  <darin@apple.com>
1986
1987         Reviewed by Maciej.
1988
1989         - fixed <rdar://problem/4045203> REGRESSION (125-188): Redundant JS imports crash Safari
1990
1991         * khtml/html/htmltokenizer.h: Take inWRite bool out of NDEBUG ifdef.
1992         * khtml/html/htmltokenizer.cpp:
1993         (khtml::HTMLTokenizer::HTMLTokenizer): Take inWrite bool management code out of NDEBUG ifdef.
1994         (khtml::HTMLTokenizer::write): Ditto. Don't call end if inWrite is true, since it will be called
1995         when you return to the body of the outer write() call.
1996         (khtml::HTMLTokenizer::allDataProcessed): Don't call end() if inWrite is true for the same reason.
1997         (khtml::HTMLTokenizer::finish): Ditto.
1998
1999         * kwq/KWQWidget.mm: (QWidget::getOuterView): Removed bogus assertion that has been vexing us of late.
2000
2001 2005-03-16  David Harrison  <harrison@apple.com>
2002
2003         Reviewed by me (written by Patti Yeh).
2004
2005         * kwq/KWQAccObject.mm:
2006         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
2007         Use LeftWordIfOnBoundary instead of RightWordIfOnBoundary.
2008
2009         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
2010         Use RightWordIfOnBoundary instead of LeftWordIfOnBoundary.
2011
2012 2005-03-16  David Harrison  <harrison@apple.com>
2013
2014         Reviewed by Maciej.
2015
2016         <rdar://problem/4054590> AX: Dictionary panel does not work when page is scrolled on Safari
2017
2018         * kwq/KWQAccObject.mm:
2019         (-[KWQAccObject doAXTextMarkerForPosition:]):
2020         Add in the view's contentsX and contentsY to the point.
2021
2022 2005-03-16  David Harrison  <harrison@apple.com>
2023
2024         Reviewed by Maciej.
2025
2026         <rdar://problem/4048506> Deleting from beginning of editable div deletes other document elements
2027         
2028         Also changed WebKit.
2029         
2030         * khtml/editing/visible_units.h:
2031         * khtml/editing/visible_units.cpp:
2032         (khtml::startOfEditableContent):
2033         (khtml::endOfEditableContent):
2034         (khtml::inSameEditableContent):
2035         (khtml::isStartOfEditableContent):
2036         (khtml::isEndOfEditableContent):
2037         New.
2038         
2039         * kwq/WebCoreBridge.h:
2040         * kwq/WebCoreBridge.mm:
2041         (-[WebCoreBridge canDeleteRange:]):
2042         New.
2043
2044 2005-03-16  Ken Kocienda  <kocienda@apple.com>
2045
2046         Reviewed by Darin
2047
2048         Fix for this bug:
2049         
2050         <rdar://problem/4042935> undo doesn't work properly during inline input
2051
2052         * kwq/WebCoreBridge.h: Declare new method below.
2053         * kwq/WebCoreBridge.mm:
2054         (-[WebCoreBridge replaceMarkedTextWithText:]): New method. Wraps calls to TypingCommand::deleteKeyPressed and
2055         TypingCommand::insertText to map the way that international text input works onto the typing undo system.
2056
2057 2005-03-16  David Harrison  <harrison@apple.com>
2058
2059         Reviewed by Darin.
2060
2061         <rdar://problem/4044336> REGRESSION (8A398-8A409): Option-Delete also deletes space to left of deleted word
2062
2063         * khtml/editing/htmlediting.cpp:
2064         (khtml::DeleteSelectionCommand::initializePositionData):
2065         - skip smart delete if the selection to delete already starts or ends with whitespace
2066         
2067         * khtml/khtml_part.cpp:
2068         (KHTMLPart::handleMousePressEventDoubleClick):
2069         - preserve selection on double-click when range is already selected
2070         
2071         * khtml/xml/dom_position.cpp:
2072         (DOM::Position::leadingWhitespacePosition):
2073         (DOM::Position::trailingWhitespacePosition):
2074         - fix considerNonCollapsibleWhitespace action (logic was reversed)
2075         - add non-breaking space to the non-collapsable ones
2076         
2077         * kwq/WebCoreBridge.mm:
2078         (-[WebCoreBridge rangeByExpandingSelectionWithGranularity:]):
2079         (-[WebCoreBridge rangeByAlteringCurrentSelection:direction:granularity:]):
2080         - these methods do not set the selection, so remove calls to setSelectionGranularity
2081           
2082         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]):
2083         (-[WebCoreBridge alterCurrentSelection:verticalDistance:]):
2084         - set the granularity back to character
2085         - the one exception is that we need to keep word granularity
2086           to preserve smart delete behavior when extending by word
2087
2088 2005-03-15  Maciej Stachowiak  <mjs@apple.com>
2089
2090         Reviewed by John.
2091
2092         <rdar://problem/4053266> Pressing return a few times right after a link makes the new blank lines part of the link
2093         
2094         * khtml/editing/htmlediting.cpp:
2095         (khtml::InsertLineBreakCommand::doApply): Use
2096         positionOutsideContainingSpecialElement in the right two places.
2097         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
2098
2099         - move all these helper functions higher in the file
2100         
2101         * khtml/editing/htmlediting.cpp:
2102         (khtml::isSpecialElement):
2103         (khtml::isFirstVisiblePositionInSpecialElement):
2104         (khtml::positionBeforeNode):
2105         (khtml::positionBeforeContainingSpecialElement):
2106         (khtml::maxRangeOffset):
2107         (khtml::isLastVisiblePositionInSpecialElement):
2108         (khtml::positionAfterNode):
2109         (khtml::positionAfterContainingSpecialElement):
2110         (khtml::positionOutsideContainingSpecialElement):
2111
2112 2005-03-14  Maciej Stachowiak  <mjs@apple.com>
2113
2114         Reviewed by Ken.
2115
2116         <rdar://problem/4049925> Pasting right after a link makes pasted content part of the link (without visible style change)
2117         
2118         * khtml/editing/htmlediting.cpp:
2119         (khtml::positionOutsideContainingSpecialElement): made a helper
2120         function that computes a position outside the outermost containing
2121         special element if the passed in position is right at the start or
2122         end of it
2123         (khtml::InsertTextCommand::prepareForTextInsertion): use new helper here
2124         (khtml::ReplaceSelectionCommand::doApply): use it here too: this is the fix
2125         (khtml::positionBeforeNode): made static
2126         (khtml::positionBeforeContainingSpecialElement): made static
2127         (khtml::positionAfterNode): made static
2128         (khtml::positionAfterContainingSpecialElement): made static
2129
2130 2005-03-15  Richard Williamson   <rjw@apple.com>
2131
2132         Fixed <rdar://problem/4053658> Crash getting direction at maps.google.com
2133
2134         Add non nil style() check.
2135
2136         Reviewed by Dave Harrison.
2137
2138         * khtml/rendering/render_table.cpp:
2139         (RenderTableCell::collapsedRightBorder):
2140
2141 2005-03-15  Kevin Decker  <kdecker@apple.com>
2142
2143         Reviewed by John
2144         
2145         Fixed: <rdar://problem/4041374> REGRESSION (185-186): unload handlers (at least those added with addEventListener) are broken
2146
2147         The reason why UNLOAD_EVENT wouldn't dispatch was because the code would delete all event listeners at the detach() phase which is prior to closeURL(). 
2148
2149         This fixes a recent regression from:
2150
2151  <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow
2152
2153         * khtml/khtml_part.cpp:
2154         (KHTMLPart::closeURL): After dispatching event handlers, go ahead and remove them from the DOM. 
2155         * khtml/xml/dom_docimpl.cpp:
2156         (DocumentImpl::detach): Took out the call to removeAllEventListenersFromAllNodes(). If we remove all event listeners here then when KHTMLPart::closeURL() checks for even listeners, it will never have any because they'll already be gone. 
2157
2158 2005-03-15  Ken Kocienda  <kocienda@apple.com>
2159
2160         Reviewed by Vicki
2161
2162         Fox for this bug:
2163         
2164         <rdar://problem/4052642> Each delete keystroke is in its own undo group; not included in undo group with other typing
2165
2166         Calling -[WebCore setSelectedDOMRange:range affinity:] had the result of "closing" any active set of typing
2167         keystrokes grouped together in a single undo operation. A change on 27 Jan in WebKit to change the way delete
2168         keystrokes are handled made this feature regress. Previous to that change, the backwards delete
2169         key went through separate code that is no longer in the tree that did not set the selection in the way
2170         it is done now.
2171         
2172         The solution is to add an extra argument to the set-selection call. The WebCoreBridge now offers this method:
2173         -[WebCore setSelectedDOMRange:range affinity:closeTyping:]. Now, callers must indicate whether setting the 
2174         selection will act to close typing or not.
2175
2176         * kwq/WebCoreBridge.h: Changed header accordingly to change method shown below.
2177         * kwq/WebCoreBridge.mm:
2178         (-[WebCoreBridge setSelectedDOMRange:affinity:closeTyping:]): Added closeTyping argument to this method.
2179
2180 2005-03-15  John Sullivan  <sullivan@apple.com>
2181
2182         Reviewed by Vicki.
2183         
2184         - fixed <rdar://problem/4052246> crash in KWQKHTMLPart::createPart() trying to display local file in frame
2185
2186         * kwq/KWQKHTMLPart.mm:
2187         (KWQKHTMLPart::createPart):
2188         Check part for nil before trying to ref. This was probably a longstanding code flaw revealed by
2189         the recent security fix.
2190
2191 2005-03-15  Kevin Decker  <kdecker@apple.com>
2192
2193         Reviewed by Ken and Maciej.
2194
2195         New fix for <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()
2196         
2197         The tokenizer has buffers which mean parsing can continue even after loading is supposed to be stopped. If the loading process was aborted, the tokenizer should abort, too.
2198
2199         * khtml/html/htmltokenizer.cpp:
2200         (khtml::HTMLTokenizer::HTMLTokenizer): Initialize loadStopped to false.
2201         (khtml::HTMLTokenizer::write): Go ahead and bail out if loadStopped is true. 
2202         (khtml::HTMLTokenizer::processToken):
2203         * khtml/html/htmltokenizer.h: Added loadStopped flag. Changed the view pointer from a standard pointer to a QGuardedPtr.  This fixes the crash.  Now the tokenizer's handle to the view will now automatically nil-out and never dangle.
2204         * khtml/khtml_part.cpp:
2205         (KHTMLPart::closeURL): Notify the tokenizer to stop parsing. 
2206         * khtml/xml/xml_tokenizer.cpp:
2207         (khtml::XMLTokenizer::XMLTokenizer): Initialize loadStopped to false.
2208         * khtml/xml/xml_tokenizer.h:
2209         (khtml::Tokenizer::stopParsing): Added. 
2210
2211 2005-03-14  David Harrison  <harrison@apple.com>
2212
2213         Reviewed by Darin, Maciej.
2214
2215         <rdar://problem/4046103> REGRESSION (Mail): clicking after style change sets insertion point incorrectly
2216         
2217         Also fixes crash by adding nil check.
2218
2219         * khtml/editing/htmlediting.cpp:
2220         (khtml::MoveSelectionCommand::doApply):
2221         Check the node for nil.
2222         
2223         * khtml/khtml_part.cpp:
2224         (KHTMLPart::khtmlMouseReleaseEvent):
2225         Use the node from the event rather than from the selection.
2226
2227 2005-03-14  Darin Adler  <darin@apple.com>
2228
2229         Reviewed by Harrison.
2230
2231         - fixed <rdar://problem/4049776> Seed: Mail: Disable spellcheck leaves red artifacts
2232
2233         * khtml/xml/dom_docimpl.cpp:
2234         (DocumentImpl::DocumentImpl): Set markers list to be "auto-delete" so they don't all leak.
2235         (DocumentImpl::removeMarker): Remove markers list for a node when the last marker is removed
2236         for that node. Otherwise, we can have empty marker lists for each node forever until the
2237         document goes away.
2238         (DocumentImpl::removeAllMarkers): Added code to dirty the markers.
2239         (DocumentImpl::shiftMarkers): Remove unneeded empty check.
2240
2241         * kwq/WebCoreBridge.h: Added unmarkAllMisspellings for WebKit.
2242         * kwq/WebCoreBridge.mm: (-[WebCoreBridge unmarkAllMisspellings]): Added. Calls removeAllMarkers.
2243
2244 2005-03-14  Richard Williamson   <rjw@apple.com>
2245
2246         Fixed <rdar://problem/4027928> Tiger_8A394:Acrobat crashes while tried to remove the subscription errors by clicking on "Would you like to remove the subscription" from Tracker details view pane
2247
2248         A document may be deleted as a consequence of handling an event,
2249         as was the case with Acrobat.app.  Ensure that the document is still valid
2250         before passing the event on for further handling.
2251
2252         * khtml/xml/dom_nodeimpl.cpp:
2253         (NodeImpl::dispatchUIEvent):
2254
2255 2005-03-14  Ken Kocienda  <kocienda@apple.com>
2256
2257         Reviewed by me
2258
2259         Added a couple of comments about setChanged() to this code based on my experiences with 4047028.
2260
2261         * khtml/css/css_valueimpl.cpp:
2262         (DOM::CSSMutableStyleDeclarationImpl::addParsedProperties)
2263         (DOM::CSSMutableStyleDeclarationImpl::merge)
2264
2265 2005-03-14  Ken Kocienda  <kocienda@apple.com>
2266
2267         Reviewed by John
2268
2269         Fix for this bug:
2270         
2271         <rdar://problem/4047028> Changing quote levels on stylized text causes it to be sent as colored (Blue). Tiger8A410
2272
2273         * khtml/css/css_valueimpl.cpp:
2274         (DOM::CSSMutableStyleDeclarationImpl::removePropertiesInSet): This function now calls setChanged() at the 
2275         end of its loop if any properties were removed. This makes the style system update correctly in response
2276         to changes made by this function. The code to paste removes style from the pasted content in a 
2277         preliminary step, and the fact that the style system did not update properly left unwanted color
2278         declarations in the document.
2279
2280 2005-03-14  Vicki Murley  <vicki@apple.com>
2281
2282         - roll out this change for now, since it was denied by CCC
2283
2284     2005-03-11  David Harrison  <harrison@apple.com>
2285         
2286         Reviewed by Darin.
2287         
2288         <rdar://problem/4046602> WebCore invokes undefined behavior when the spell checker isn't running
2289
2290         * kwq/KWQKHTMLPart.mm:
2291         (KWQKHTMLPart::advanceToNextMisspelling):
2292         (KWQKHTMLPart::markMisspellings):
2293         Nil check checker.
2294
2295 2005-03-14  Ken Kocienda  <kocienda@apple.com>
2296
2297         Reviewed by John
2298
2299         Fix for this bug:
2300         
2301         <rdar://problem/4050403> Mail crashes after pasting and deleting the content of one Excel cell
2302
2303         * khtml/editing/htmlediting.cpp:
2304         (khtml::DeleteSelectionCommand::handleGeneralDelete): Add some null checks to the code. This fixes the crash, although
2305         following the steps described in the bug by John Sullivan on 3/14/05 at 10:49 AM will leave us with a "blank line" in 
2306         the document that cannot be removed (this is actually an empty table). This is undesirable, however, work Maciej is
2307         doing to fix the general-case problem of trying to edit constructs we do not handle well in editing should fix this
2308         particular case, making the deletion of this "blank line" possible. Maciej is doing this work as part of this bug:
2309         <rdar://problem/4036051> Hard to select (and thus delete) an IFRAME in an editable WebView
2310
2311 2005-03-14  Ken Kocienda  <kocienda@apple.com>
2312
2313         Reviewed by Darin
2314
2315         Fix for this bug:
2316         
2317         <rdar://problem/4029632> Mail crashes in DOM::NodeImpl::isBlockFlow() after pasting text with alignment style and BR element from Safari
2318         
2319         The problem is that removeInlineStyle() can remove nodes, and if either the start or end node of the
2320         selection at the time of the call to removeInlineStyle() was in a node that got removed, bad things
2321         would happen. The fix is described below.
2322
2323         * khtml/editing/htmlediting.cpp:
2324         (khtml::maxRangeOffset): Moved this static function to a different place in the file so the code below can use it.
2325         (khtml::ApplyStyleCommand::applyInlineStyle): Calling removeInlineStyle() now has the side effect of 
2326         setting the command's ending selection. Now resets start and end using the ending selection after the call to
2327         removeInlineStyle() as it is done elsewhere in this function.
2328         (khtml::ApplyStyleCommand::removeInlineStyle): Track the removal of the start or end node based on
2329         the positions passed in. If either the start or the end node is removed as part of style removal, 
2330         set an appropriate replacement start or end that is still in the document.
2331
2332 === Safari-406 ===
2333
2334 2005-03-14  Ken Kocienda  <kocienda@apple.com>
2335
2336         Reviewed by Darin
2337
2338         I need to roll out Kevin's change to fix 3667701. It breaks contextual fragments, and hence breaks
2339         paste in editing (among other things).
2340
2341         * khtml/html/htmltokenizer.cpp: Roll out recent change.
2342         (khtml::HTMLTokenizer::write) 
2343         * khtml/html/htmltokenizer.h: Ditto.
2344
2345 2005-03-13  Darin Adler  <darin@apple.com>
2346
2347         Reviewed by Ken and Maciej.
2348
2349         - fixed <rdar://problem/4049040> REGRESSION (403-405): security check prevents user stylesheet from loading (Dictionary.app doesn't work at all!)
2350
2351         * kwq/WebCoreBridge.mm: (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Changed to give "applewebdata:"
2352         documents the same privileges to open local files that "file:" documents have.
2353
2354 2005-03-13  Kevin Decker  <kdecker@apple.com>
2355
2356         Reviewed by mjs.
2357         
2358         Fixed: <rdar://problem/3667701> crash in KHTMLPart::jScriptEnabled()
2359         
2360         The problem here was that the tokenizer would continue to receive chunks of data from the loader already
2361         after the view and part had been destroyed.  Situations like this could arise when clicking on another link 
2362         while still loading the current view, or during self test where we rapidly open, load, and close browser
2363         windows very fast. 
2364
2365         * khtml/html/htmltokenizer.cpp: 
2366         (khtml::HTMLTokenizer::write): Simple nil check against the view. 
2367         * khtml/html/htmltokenizer.h: Changed the view pointer from a standard pointer to a QGuardedPtr.  The tokenizer's
2368         handle to the view will now automatically nil-out and never dangle.
2369
2370 2005-03-13  Darin Adler  <darin@apple.com>
2371
2372         Reviewed by John and Ken.
2373
2374         - fixed <rdar://problem/4044347> REGRESSION (Mail): Control-K in particular message moves insertion point to previous line
2375
2376         Tweaked the deleting code, and added three new deleting layout tests to confirm the new code works.
2377
2378         * khtml/editing/htmlediting.cpp:
2379         (khtml::DeleteSelectionCommand::handleSpecialCaseBRDelete): Removed special case with comment that said it was
2380         for the case where a "selection contains only a BR right after a block ended". This code was being triggered in
2381         more cases than just that one, and in all the cases I tested, the general delete code works fine.
2382         (khtml::DeleteSelectionCommand::handleGeneralDelete): Changed the code that decides whether to delete an entire
2383         block to understand the case where the end block is outside the start block, but contains the start block.
2384         In that case, we want to delete the entire block. Not deleting the block was causing us to delete just the <br>,
2385         and not the enclosing <div> in the case in the bug.
2386
2387         * layout-tests/editing/deleting/delete-line-015-expected.txt: Added.
2388         * layout-tests/editing/deleting/delete-line-015.html: Added.
2389         * layout-tests/editing/deleting/delete-line-016-expected.txt: Added.
2390         * layout-tests/editing/deleting/delete-line-016.html: Added.
2391         * layout-tests/editing/deleting/delete-line-017-expected.txt: Added.
2392         * layout-tests/editing/deleting/delete-line-017.html: Added.
2393         * layout-tests/editing/style/smoosh-styles-002-expected.txt: Updated to improved results. With the code change, the deletion
2394         now deletes more than it used to. The old results had an empty text node and <h1> element that were both 0-sized, and now
2395         we delete both of those.
2396
2397 2005-03-13  Darin Adler  <darin@apple.com>
2398
2399         - fixed <rdar://problem/4049172> REGRESSION (403-405): Gmail: text box in "Invite a friend" section overlaps other sections
2400
2401         Rolled out fix for <rdar://problem/3952698> Function buttons do not display properly with Telia Webmail
2402
2403         * khtml/rendering/render_replaced.cpp: (RenderReplaced::calcMinMaxWidth): Back to previous version of this file.
2404
2405 2005-03-12  Maciej Stachowiak  <mjs@apple.com>
2406
2407         Reviewed by Adele.
2408
2409         <rdar://problem/4046144> RSS pages leave a hole in local file security policy (need to revert feed: exemption)
2410         
2411         * kwq/WebCoreBridge.mm:
2412         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Revert
2413         emergency workaround for Safari RSS, now that a new Syndication
2414         has been submitted.
2415
2416 2005-03-11  Maciej Stachowiak  <mjs@apple.com>
2417
2418         Reviewed by Kevin.
2419
2420         <rdar://problem/4026787> text typed after a link (pasted or Mail Link to this Page) is part of the link, underlined and colored blue
2421         
2422         The concept of this change is every time you type at the very
2423         start or very end of a link (even if nested in further inner
2424         elements), the typed text goes outside the link instead of inside.
2425         
2426         * khtml/editing/htmlediting.cpp:
2427         (khtml::InsertTextCommand::prepareForTextInsertion): Check whether
2428         we are at the first visible position or last visible position of a
2429         special element. For now this only includes HTML A elements that
2430         are links (i.e. they have an href).
2431         (khtml::isSpecialElement): Helper function that identifies special
2432         elements (for now only links).
2433         (khtml::isFirstVisiblePositionInSpecialElement): Checks if a given DOM
2434         position is equivalent to the first visible position in some containing 
2435         editable special element.
2436         (khtml::positionBeforeNode): Returns the DOM position immediately
2437         before a node.
2438         (khtml::positionBeforeContainingSpecialElement): Gives a DOM
2439         position immediately before the outermost editable containing
2440         special element where the passed-in position is equivalent to the
2441         first visible position.
2442         (khtml::maxRangeOffset): Helper to get the maximum allowed
2443         range/position offset for a node, does the right thing based on
2444         whether the node would use a character offset or child offset.
2445         (khtml::isLastVisiblePositionInSpecialElement): Similar to above,
2446         but for end of node instead of start.
2447         (khtml::positionAfterNode): Ditto.
2448         (khtml::positionAfterContainingSpecialElement): Ditto.
2449
2450         Some layout tests changed - I looked over all the diffs and found
2451         that the only changes were "junk nodes" like empty spans and text
2452         nodes moving from one spot in the tree to another. These changes
2453         are all harmless and do not affect layout or future editing.
2454
2455         * layout-tests/editing/inserting/typing-003-expected.txt:
2456         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt:
2457         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt:
2458         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt:
2459         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt:
2460         * layout-tests/editing/style/remove-underline-expected.txt:
2461         * layout-tests/editing/style/remove-underline-from-stylesheet-expected.txt:
2462         * layout-tests/editing/style/remove-underline-in-bold-expected.txt:
2463         * layout-tests/editing/style/typing-style-003-expected.txt:
2464         * layout-tests/editing/style/unbold-in-bold-expected.txt:
2465         * layout-tests/editing/style/underline-expected.txt:
2466
2467 2005-03-11  Adele Amchan  <adele@apple.com>
2468
2469         backing out fix for <rdar://problem/4021711> REGRESSION (125-188): blank pages when browsing forum at cooperativeresearch.org - cached external script problem
2470
2471         This caused the following regressions (that we know of): 
2472         <rdar://problem/4047445> REGRESSION (Safari-400-403?): Some or all page contents sometimes don't appear (macworld.com)
2473         <rdar://problem/4046153> 8a409: Problem loading Citibank page in Safari 2 (403)
2474         <rdar://problem/4047801> REGRESSION (402-403): .Mac homepage links don't work
2475
2476         * khtml/html/htmltokenizer.cpp:
2477         (khtml::HTMLTokenizer::scriptHandler):
2478
2479 2005-03-11  David Harrison  <harrison@apple.com>
2480
2481         Reviewed by Darin.
2482
2483         <rdar://problem/4046602> WebCore invokes undefined behavior when the spell checker isn't running
2484
2485         * kwq/KWQKHTMLPart.mm:
2486         (KWQKHTMLPart::advanceToNextMisspelling):
2487         (KWQKHTMLPart::markMisspellings):
2488         Nil check checker.
2489
2490 2005-03-11  Ken Kocienda  <kocienda@apple.com>
2491
2492         Reviewed by me
2493
2494         * ForwardingHeaders/editing/visible_units.h: Added.
2495
2496 2005-03-11  Ken Kocienda  <kocienda@apple.com>
2497
2498         Reviewed by John
2499
2500         Fix for this bug:
2501         
2502         <rdar://problem/4045521> Hitting return key with full line selected does not add blank line as it should
2503
2504         * khtml/editing/htmlediting.cpp:
2505         (khtml::InsertParagraphSeparatorCommand::doApply): Removed some "special-case" code from this 
2506         function that would look for a selection that started and ended in a different block, and would
2507         then bail right after the deletion of the selection without inserting a paragraph separator.
2508         This was just wrong. So, the code change is removal only. When the general-case code runs instead
2509         of the erroneous special-case code, the bug goes away.
2510         
2511         New tests:
2512         
2513         * layout-tests/editing/inserting/return-key-with-selection-001-expected.txt: Added.
2514         * layout-tests/editing/inserting/return-key-with-selection-001.html: Added.
2515         * layout-tests/editing/inserting/return-key-with-selection-002-expected.txt: Added.
2516         * layout-tests/editing/inserting/return-key-with-selection-002.html: Added.
2517         * layout-tests/editing/inserting/return-key-with-selection-003-expected.txt: Added.
2518         * layout-tests/editing/inserting/return-key-with-selection-003.html: Added.
2519
2520 2005-03-11  David Harrison  <harrison@apple.com>
2521
2522         Reviewed by Darin.
2523
2524         <rdar://problem/4009446> AX: kAXTextMarkerForPositionParameterizedAttribute not working correctly (required for Dictionary pop-up)
2525
2526         * kwq/KWQAccObject.mm:
2527         (-[KWQAccObject accessibilityAttributeValue:]):
2528         Comment changes.
2529         
2530         (-[KWQAccObject doAXTextMarkerForPosition:]):
2531         Dig into widgets.
2532         
2533         (-[KWQAccObject doAXBoundsForTextMarkerRange:]):
2534         Use the selection's document instead of the top document, to accommodate frames, etc.
2535         
2536         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
2537         Fixed parameter processing to look for NSValue instead of AXValue.
2538
2539 2005-03-11  Ken Kocienda  <kocienda@apple.com>
2540
2541         Reviewed by Harrison
2542
2543         Fix for this bug:
2544         
2545         <rdar://problem/3972665> 8A360: HTML message partially truncated on left hand side, text-indent from Script Editor
2546         
2547         This was fixed, then regressed with Harrison's fix for this bug:
2548         
2549         <rdar://problem/3948453> Can't type accented chars as first character in Stickies widget
2550
2551         * khtml/editing/htmlediting.cpp:
2552         (khtml::ReplaceSelectionCommand::doApply): My now addresses both problems in a way that they no longer
2553         clobber each other.
2554
2555 2005-03-10  Ken Kocienda  <kocienda@apple.com>
2556
2557         Reviewed by John
2558
2559         Fix for these bugs:
2560         
2561         <rdar://problem/4045511> Copying and pasting end-of-paragraph selection puts insertion point in wrong place
2562         <rdar://problem/4045513> Copying and pasting selection starting at end of paragraph can incorrectly remove line break
2563
2564         The copy/paste code before this patch had no notion of a "logical newline" at the start of the selection. We have
2565         had a similar notion for "logical newline" at the end of the selection for quite some time. To fix these bugs, we
2566         need to introduce the same idea for selection starts.
2567
2568         * khtml/editing/htmlediting.cpp:
2569         (khtml::ReplacementFragment::ReplacementFragment): Process the "logical newline" at start as we write it out
2570         in markup. Set the bit we added to this object to signify we have such a newline.
2571         (khtml::ReplaceSelectionCommand::doApply): Many, many changes to introduce the new "logical newline" at start concept.
2572         I also tried to simply the code that sets the start position for inserting content to be pasted. I also improved a
2573         weakness in the smart-paste code. Now, we check before and after the paste for whether we need to add a leading or
2574         trailing space. The code previous to this patch only did a "before" check, with the result that we sometimes added
2575         a second space. In other words, the code did not realize that DOM changes done by pasting could cause formerly
2576         unrendered whitespace to become rendered. Also moved line placeholder clean up code to its own function.
2577         (khtml::ReplaceSelectionCommand::removeLinePlaceholderIfNeeded): New helper that further refines the notion
2578         of when we can remove a line placeholder. The definition is now, "If a line placeholder is at the visible start
2579         and visible end of its line, keep it; otherwise remove it".
2580         * khtml/editing/htmlediting.h: Declare new functions. Rework inlines in ReplacementFragment class to account for
2581         addition of new "logical newline" at start concept.
2582         (khtml::ReplacementFragment::hasInterchangeNewlineAtStart): New accessor.
2583         (khtml::ReplacementFragment::hasInterchangeNewlineAtEnd): Renamed from hasInterchangeNewline(), since before we
2584         only had a bit for the end, hence we did not need to distinguish it from the start.
2585         * khtml/editing/markup.cpp:
2586         (khtml::createMarkup): Added code to detect and write out markup for cases where we have a "logical newline" at start.
2587         * khtml/xml/dom2_rangeimpl.cpp:
2588         (DOM::RangeImpl::startPosition): New helper.
2589         (DOM::RangeImpl::endPosition): Ditto.
2590         * khtml/xml/dom2_rangeimpl.h: Declare new helpers.
2591         
2592         New tests:
2593         * layout-tests/editing/pasteboard/paste-line-endings-001-expected.txt: Added.
2594         * layout-tests/editing/pasteboard/paste-line-endings-001.html: Added.
2595         * layout-tests/editing/pasteboard/paste-line-endings-002-expected.txt: Added.
2596         * layout-tests/editing/pasteboard/paste-line-endings-002.html: Added.
2597         * layout-tests/editing/pasteboard/paste-line-endings-003-expected.txt: Added.
2598         * layout-tests/editing/pasteboard/paste-line-endings-003.html: Added.
2599         * layout-tests/editing/pasteboard/paste-line-endings-004-expected.txt: Added.
2600         * layout-tests/editing/pasteboard/paste-line-endings-004.html: Added.
2601         * layout-tests/editing/pasteboard/paste-line-endings-005-expected.txt: Added.
2602         * layout-tests/editing/pasteboard/paste-line-endings-005.html: Added.
2603         * layout-tests/editing/pasteboard/paste-line-endings-006-expected.txt: Added.
2604         * layout-tests/editing/pasteboard/paste-line-endings-006.html: Added.
2605         * layout-tests/editing/pasteboard/paste-line-endings-007-expected.txt: Added.
2606         * layout-tests/editing/pasteboard/paste-line-endings-007.html: Added.
2607         * layout-tests/editing/pasteboard/paste-line-endings-008-expected.txt: Added.
2608         * layout-tests/editing/pasteboard/paste-line-endings-008.html: Added.
2609         * layout-tests/editing/pasteboard/paste-line-endings-009-expected.txt: Added.
2610         * layout-tests/editing/pasteboard/paste-line-endings-009.html: Added.
2611         * layout-tests/editing/pasteboard/paste-line-endings-010-expected.txt: Added.
2612         * layout-tests/editing/pasteboard/paste-line-endings-010.html: Added.
2613
2614 === Safari-405 ===
2615
2616 2005-03-10  Darin Adler  <darin@apple.com>
2617
2618         Reviewed by Richard.
2619
2620         - fixed <rdar://problem/4037700> Every character typed causes stat call for /usr/share/icu/icudt32b_char.brk
2621
2622         * khtml/rendering/render_text.cpp: (getCharacterBreakIterator): Set boolean "got iterator" to true.
2623
2624 2005-03-10  Darin Adler  <darin@apple.com>
2625
2626         Reviewed by Ken.
2627
2628         - fixed <rdar://problem/4042867> "Bigger" changes the font size of too much text when the selection is on a style-change boundary
2629
2630         * khtml/editing/htmlediting.cpp: (khtml::ApplyStyleCommand::applyRelativeFontStyleChange):
2631         Advance out of the starting text node if we're at the end of it.
2632
2633 2005-03-10  Darin Adler  <darin@apple.com>
2634
2635         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::write): Fixed assertion for nested calls to write.
2636
2637 2005-03-10  David Harrison  <harrison@apple.com>
2638
2639         Reviewed by Darin.
2640
2641         <rdar://problem/4032346> REGRESSION (Mail): changing 1st line of a URL that wraps to two lines doesn't always update 2nd line
2642
2643         * khtml/rendering/bidi.cpp:
2644         (khtml::RenderBlock::matchedEndLine):
2645         Look at first clean line in case line wrap implicitly dirtied it.
2646
2647 2005-03-10  Maciej Stachowiak  <mjs@apple.com>
2648
2649         Reviewed by Vicki.
2650
2651         <rdar://problem/4046018> REGRESSION (TOT): RSS pages don't display anything
2652         
2653         * kwq/WebCoreBridge.mm:
2654         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]): Exempt
2655         feed: and feeds: pages from the local file security check.
2656
2657 2005-03-10  Darin Adler  <darin@apple.com>
2658
2659         Change written by Steve Peters, reviewed by me.
2660
2661         - fixed <rdar://problem/4045924> improve compareBoundaryPoints to make style changes faster
2662
2663         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::compareBoundaryPoints):
2664         Do early outs in a couple of the loops to make things faster.
2665
2666 2005-03-10  Jens Alfke  <jens@apple.com>
2667
2668         Reviewed by rjw.
2669
2670         Fixes <rdar://problem/4040848> "REGR: Sun security-check demo applet does not load". My earlier fix for 3603191 deferred loading the applet until the </applet> tag is reached, so all <param>s will be available. Unfortunately that meant that if the </applet> tag was missing, the applet would never load at all. So instead, the loading needs to happen when the ID_APPLET tag is popped from the parser stack for any reason.
2671
2672         I've restored the old NodeImpl::closeRenderer() method. Except it's now virtual, with a no-op base implementation, and is overridden by HTMLAppletElementImpl, replacing its setAllParamsAvailable method that I added a few weeks ago when fixing 3603191.
2673
2674         This ensures that the applet will get loaded even if there is no explicit </applet> tag.
2675
2676         The changes to htmlparser.cpp back out my earlier change and restore the lines that were deleted on 8/3/04 when the old closeRenderer was removed.
2677
2678         * khtml/html/html_objectimpl.cpp:
2679         (HTMLAppletElementImpl::closeRenderer):
2680         * khtml/html/html_objectimpl.h:
2681         * khtml/html/htmlparser.cpp:
2682         (KHTMLParser::insertNode):
2683         (KHTMLParser::processCloseTag):
2684         (KHTMLParser::popOneBlock):
2685         * khtml/xml/dom_nodeimpl.h:
2686         (DOM::NodeImpl::closeRenderer):
2687
2688 2005-03-10  Ken Kocienda  <kocienda@apple.com>
2689
2690         Reviewed by John
2691
2692         Fix for this bug:
2693         
2694         <rdar://problem/4024929> REGRESSION (Mail): Pasting text with multiple reply levels removes one level instead of all
2695         
2696         The code to figure out which node to use to merge into an existing line did not drill into the first inline element
2697         as needed to make the feature work as user expect. Instead, it looked at the first node, and if it was a block, it
2698         skipped that node. This worked for some cases (including the important "paste-as-quotation" case) but obviously 
2699         doesn't work for content quoted more than once.
2700         
2701         Now, mergeStartNode() will look for the first node in pasted content that is not a block. It will now also look
2702         for nodes specially marked by Mail as a node added to make "Paste As Quotation" work. It won't skip those. 
2703         
2704         NOTE: This change will break Mail's "Paste As Quotation" feature for TOT WebKit users, but this is only a temporary 
2705         problem that will exist until we sync up with Mail's pending change to mark nodes as needed in its pasteAsQuotation:
2706         method.
2707         
2708         * khtml/editing/html_interchange.h: Add ApplePasteAsQuotation constant used to check for "marked" blockquotes.
2709         * khtml/editing/htmlediting.cpp:
2710         (khtml::ReplacementFragment::mergeStartNode): Look for first node that is either not a block or is marked as
2711         an ApplePasteAsQuotation node.
2712         (khtml::isMailPasteAsQuotationNode): New helper that looks for nodes marked with ApplePasteAsQuotation.
2713         * khtml/editing/htmlediting.h: Updated header for new function.
2714         
2715         This test result changed is an acceptable way.
2716         
2717         * layout-tests/editing/pasteboard/paste-text-013-expected.txt
2718         * layout-tests/editing/pasteboard/paste-text-013.html
2719
2720         NOTE: This change causes a regression in this layout test:
2721
2722         * layout-tests/editing/pasteboard/paste-text-013.html
2723
2724         This problem will need to be fixed separately, and this bug has been filed to track this problem:
2725         <rdar://problem/4045513> Copying and pasting selection starting at end of paragraph can incorrectly remove line break
2726
2727 2005-03-09  Maciej Stachowiak  <mjs@apple.com>
2728
2729         Reviewed by Richard.
2730
2731         <rdar://problem/4040776> Dashboard (Weather widget) is a memory hog
2732         
2733         Change things around so the event listeners for XMLHttpRequest
2734         mark their JS listener objects instead of holding a hard
2735         reference, to avoid an unbreakable reference cycle.
2736
2737         * khtml/ecma/kjs_events.cpp:
2738         (JSAbstractEventListener::JSAbstractEventListener):
2739         (JSAbstractEventListener::~JSAbstractEventListener):
2740         (JSAbstractEventListener::handleEvent):
2741         (JSAbstractEventListener::eventListenerType):
2742         (JSUnprotectedEventListener::JSUnprotectedEventListener):
2743         (JSUnprotectedEventListener::~JSUnprotectedEventListener):
2744         (JSUnprotectedEventListener::listenerObj):
2745         (JSUnprotectedEventListener::windowObj):
2746         (JSUnprotectedEventListener::mark):
2747         (JSEventListener::JSEventListener):
2748         (JSEventListener::~JSEventListener):
2749         (JSEventListener::listenerObj):
2750         (JSEventListener::windowObj):
2751         (JSLazyEventListener::JSLazyEventListener):
2752         * khtml/ecma/kjs_events.h:
2753         * khtml/ecma/kjs_html.h:
2754         * khtml/ecma/kjs_window.cpp:
2755         (Window::getJSEventListener):
2756         (Window::getJSUnprotectedEventListener):
2757         * khtml/ecma/kjs_window.h:
2758         * khtml/ecma/xmlhttprequest.cpp:
2759         (KJS::XMLHttpRequest::putValue):
2760         (KJS::XMLHttpRequest::mark):
2761         * khtml/ecma/xmlhttprequest.h:
2762         * khtml/khtml_part.h:
2763
2764 2005-03-06  Maciej Stachowiak  <mjs@apple.com>
2765
2766         Reviewed by Darin.
2767
2768         <rdar://problem/4005575> Arbitrary file disclosure vulnerability due to ability to load local html from remote content
2769         
2770         * khtml/ecma/kjs_html.cpp:
2771         (KJS::HTMLDocument::putValue):
2772         * khtml/ecma/kjs_window.cpp:
2773         (Window::put):
2774         (WindowFunc::tryCall):
2775         (Location::put):
2776         (LocationFunc::tryCall):
2777         * khtml/khtml_part.cpp:
2778         (KHTMLPart::begin):
2779         (KHTMLPart::scheduleLocationChange):
2780         (KHTMLPart::slotRedirect):
2781         (KHTMLPart::processObjectRequest):
2782         * khtml/khtml_part.h:
2783         * khtml/khtmlpart_p.h:
2784         * kwq/KWQKHTMLPart.mm:
2785         (KWQKHTMLPart::openURLRequest):
2786         (KWQKHTMLPart::urlSelected):
2787         (KWQKHTMLPart::createPart):
2788         * kwq/KWQKHTMLPartBrowserExtension.mm:
2789         (KHTMLPartBrowserExtension::createNewWindow):
2790         * kwq/WebCoreBridge.h:
2791         * kwq/WebCoreBridge.mm:
2792         (hasCaseInsensitivePrefix):
2793         (-[WebCoreBridge didNotOpenURL:pageCache:]):
2794         (-[WebCoreBridge canLoadURL:fromReferrer:hideReferrer:]):
2795
2796 2005-03-09  Richard Williamson   <rjw@apple.com>
2797
2798         Fixed <rdar://problem/4032938> Safari: text layout for MS P Gothic font is corrupted
2799
2800         Remove our hacked special case now we have our own cache of
2801         which fonts are fixed  pitch.
2802
2803         Reviewed by Maciej.
2804
2805         * kwq/KWQFont.mm:
2806         (QFont::isFixedPitch):
2807
2808 2005-03-09  David Harrison  <harrison@apple.com>
2809
2810         Reviewed by Maciej.
2811
2812         <rdar://problem/4037141> REGRESSION (Mail): Pasting deletes preceding blank lines with certain steps
2813
2814         * khtml/editing/htmlediting.cpp:
2815         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
2816         Add check for anonymous text after blocks.
2817
2818 2005-03-08  Ken Kocienda  <kocienda@apple.com>
2819
2820         Reviewed by John
2821
2822         Fix for these bugs:
2823         
2824         <rdar://problem/4039661> crash in ApplyStyleCommand::applyBlockStyle pasting contents of webpage into Mail or Blot
2825         <rdar://problem/4039672> hang in moveParagraphContentsToNewBlockIfNecessary after pasting contents of webpage into Blot
2826
2827         * khtml/editing/htmlediting.cpp:
2828         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Fix for 4039672. Iteration needs to do
2829         a traverseNextSibling(), not a traverseNextNode(). The latter might iterate into a child that already got moved, and
2830         the code can infinite loop as a result.
2831         (khtml::ApplyStyleCommand::applyBlockStyle): Fix for 4039661. This function iterates over a set of nodes to apply
2832         block styles. Before, the iteration would go from the start to the end of the selection, and apply block styles
2833         as it went. However, the act of applying style could confuse the iteration. Now I iterate and store the relevant
2834         nodes in QPtrList before doing any style manipulation, and then iterate that set of nodes.
2835
2836 2005-03-08  Darin Adler  <darin@apple.com>
2837
2838         Change written by Hyatt, reviewed by me.
2839
2840         - fixed <rdar://problem/3952698> Function buttons do not display properly with Telia Webmail
2841
2842         * khtml/rendering/render_replaced.cpp: (RenderReplaced::calcMinMaxWidth):
2843         Only use a minWidth of 0 for images with a percentage value. Other replaced elements aren't scalable
2844         so their minWidth should be their calculated width. This has been wrong all along, but it's a relatively
2845         safe change because it only affects replaced elements' min-width.
2846
2847 2005-03-08  David Harrison  <harrison@apple.com>
2848
2849         Reviewed by Ken.
2850
2851         <rdar://problem/4039006> REGRESSION (Mail): Command-left-arrow goes to the start of the wrong line in particular message
2852
2853         * khtml/editing/visible_units.cpp:
2854         (khtml::startOfLine):
2855         Use firstLeafChild() instead of firstChild().
2856
2857 2005-03-08  Richard Williamson   <rjw@apple.com>
2858
2859         Fixed by Tom Madden.
2860
2861         Fixed <rdar://problem/4038586> 8A402: Osaka-Mono text overlaps when typing with input method
2862
2863         We weren't clearing the "all ascii" flag when setting text on
2864         RenderText.
2865
2866         Reviewed by Richard Williamson.
2867
2868         * khtml/rendering/render_text.cpp:
2869         (RenderText::setText):
2870
2871 2005-03-08  Darin Adler  <darin@apple.com>
2872
2873         Reviewed by Ken and Maciej.
2874
2875         - fixed <rdar://problem/3988809> REGRESSION (Mail): wide space characters are turned into plain old spaces when typed or pasted
2876
2877         Changed the few places where it matters to use a "collapsible whitespace" concept instead of
2878         the general whitespace concept. This means treating only ' ' and '\n' specially instead of
2879         including other space characters, which matches what the space-collapsing logic does in RenderText,
2880         although it really needs to behave differently based on whitespace mode.
2881
2882         * khtml/editing/visible_text.h: (khtml::isCollapsibleWhitespace): Added. This returns true only for
2883         ' ' and '\n' since they are the only characters collapsed once text is in the DOM. But really it
2884         can't do the job ignoring white-space mode, so some day it must go.
2885
2886         * khtml/editing/html_interchange.cpp: (convertHTMLTextToInterchangeFormat): Changed to use
2887         isCollapsibleWhitespace and removed unnecessary calls to latin1().
2888
2889         * khtml/editing/htmlediting.cpp:
2890         (khtml::isNBSP): Removed unnecessary creation/destruction of QChar each time this is called.
2891         (khtml::nextCharacterIsCollapsibleWhitespace): Renamed from isWS and changed to use isCollapsibleWhitespace.
2892         (khtml::DeleteSelectionCommand::fixupWhitespace): Use isCollapsibleWhitespace instead of isWS,
2893         since we only want to do our NBSP tricks for collapsible whitespace.
2894         (khtml::InsertTextCommand::input): Changed use of isTab to instead say == "\t" since that does the
2895         same thing and is arguably just as clear. Changed use of isWS to == " " since the input text can't
2896         include any "\n" characters, and really a plain old space is the only collapsible thing that can
2897         be passed in. Use isCollapsibleWhitespace instead of isWS since we want to do NBSP tricks only for
2898         collapsible whitespace, not all whitespace.
2899         (khtml::InsertTextCommand::insertSpace): Use isCollapsibleWhitespace instead of isWS since we want
2900         to do NBSP tricks only for collapsible whitespace, not all whitespace.
2901         (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
2902
2903         * khtml/xml/dom_position.h: Changed treatNBSPAsWhiteSpace parameters to considerNonCollapsibleWhitespace
2904         parameters. The most common callers are only interested in collapsible whitespace, and the smart copy
2905         and paste callers want to include all whitespace, including non-breaking spaces and all the Unicode spaces.
2906         * khtml/xml/dom_position.cpp:
2907         (DOM::Position::leadingWhitespacePosition): Rename the parameter, and use either QChar::isSpace or
2908         isCollapsibleWhitespace depending on the boolean passed in.
2909         (DOM::Position::trailingWhitespacePosition): Ditto.
2910
2911 2005-03-07  John Sullivan  <sullivan@apple.com>
2912
2913         Reviewed by Darin.
2914         
2915         - <rdar://problem/4040868> REGRESSION (Mail, 403-403+): Drag and drop deletes text, 
2916         many other bad editing problems
2917
2918         * khtml/rendering/render_text.cpp:
2919         (RenderText::caretMaxOffset):
2920         A "-" should have been a "+" in this method that was tweaked an hour ago. Editing
2921         was completely horked.
2922
2923 2005-03-07  Richard Williamson   <rjw@apple.com>
2924
2925         Additional nil check from fix for 4040749.
2926
2927         * khtml/rendering/render_box.cpp:
2928         (RenderBox::setStyle):
2929
2930 2005-03-07  Richard Williamson   <rjw@apple.com>
2931
2932         Additional nil check from fix for 4040749.
2933
2934         * khtml/rendering/render_layer.cpp:
2935         (RenderLayer::updateLayerPosition):
2936
2937 2005-03-07  David Harrison  <harrison@apple.com>
2938
2939         Reviewed by Darin.
2940
2941         <rdar://problem/4033202> REGRESSION (Mail): Can't arrow up at a particular spot in a particular Mail message
2942
2943         Doublecheck that new position is really on a different line, because the VisiblePosition constructor does not.
2944         Filed <rdar://problem/4040763> for that problem.
2945
2946         * khtml/editing/visible_units.cpp:
2947         (khtml::previousLinePosition):
2948
2949 2005-03-07  Richard Williamson   <rjw@apple.com>
2950
2951         Fixed <rdar://problem/4040749> REGRESSION (125-178): opacity style not working, breaks fading images on okcupid.com
2952
2953         When layers are dynamically created/removed as a result of changing opacity they weren't being correctly
2954         sized and positioned.  This happens whenever opacity goes from < 1 to 1.
2955
2956         Reviewed by Darin.
2957
2958         * khtml/rendering/render_box.cpp:
2959         (RenderBox::setStyle):
2960         * khtml/rendering/render_layer.cpp:
2961         (RenderLayer::updateLayerPosition):
2962
2963 2005-03-07  Christy Warren  <kali@apple.com>
2964
2965         Reviewed by Darin
2966
2967         * khtml/rendering/render_text.cpp:
2968         (RenderText::caretMinOffset): modified to handle BIDI case by checking all text boxes for min offset
2969         (RenderText::caretMaxOffset): modified to handle BIDI case by checking all text boxes for max offset
2970
2971 2005-03-07  David Harrison  <harrison@apple.com>
2972
2973         Reviewed by Ken.
2974
2975         <rdar://problem/4029225> REGRESSION (Mail): Crash if hit return after dragging in attachment - DeleteSelectionCommand::initializePositionData
2976
2977         Work around the fact that the height() of a BR is 0 if there are no text elements on the line, even if there are replaced elements.
2978         Filed <rdar://problem/4040358> RenderBR height() is not accurate.
2979         
2980         * khtml/editing/htmlediting.cpp:
2981         (khtml::ReplaceSelectionCommand::doApply):
2982         When height is 0, double check that the placeholder is the first position on the line.
2983
2984 === Safari-403 ===
2985
2986 2005-03-07  Ken Kocienda  <kocienda@apple.com>
2987
2988         Reviewed by Vicki
2989     
2990         Fix for this bug:
2991         
2992         <rdar://problem/4040136> Expose SPI for WebCore's functions to create document fragments from plain text and markup strings
2993
2994         * kwq/DOMHTML.mm: Add two new SPI functions.
2995         (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:])
2996         (-[DOMHTMLDocument _createDocumentFragmentWithText:])
2997         * kwq/DOMPrivate.h: Declare the new SPI here, a privately-exported header, so Mail can make use of it.
2998
2999 2005-03-07  Ken Kocienda  <kocienda@apple.com>
3000
3001         Reviewed by John
3002
3003         Fix for this bug:
3004         
3005         <rdar://problem/4039676> REGRESSION (Mail): in reply, <cr> on pasted text (without trailing newline) is eaten when pasted above date
3006
3007         * khtml/editing/htmlediting.cpp:
3008         (khtml::ReplaceSelectionCommand::doApply): Code to "eat" a <br> element, that was creating an otherwise empty line, was running
3009         when it should not. If the content being pasted in does not end in a "logical" newline itself, then the <br> already
3010         in the content needs to be preserved. A simple one-line change now sees to this.
3011         
3012         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: This test now has an extra, but harmless,
3013         <br> at the end of a paragraph. This makes sense given the code change.
3014
3015         New test:
3016         * layout-tests/editing/pasteboard/paste-text-018-expected.txt: Added.
3017         * layout-tests/editing/pasteboard/paste-text-018.html: Added.
3018
3019 2005-03-07  Ken Kocienda  <kocienda@apple.com>
3020
3021         Reviewed by John
3022
3023         Fix for this bug:
3024         
3025         <rdar://problem/4035648> REGRESSION (Mail): line feed in source HTML file causes bad copy/paste behavior
3026
3027         The createMarkup() function in markup.cpp iterates over the nodes in a range,
3028         and does some bookkeeping to figure out when to add close tags to the markup.
3029         Some code added at the start of the loop to prevent markup from being written
3030         for unrendered nodes short-circuited the rest of the loop, and so prevented
3031         the close-tag-writing code from running when it should.
3032
3033         This is why the "plain" text wound up inside of the bold tag in the example
3034         above. The addition of the unrendered return character caused an incorrect
3035         delay in the close tag for the bold element from being written out, with the
3036         result being that it wound up including additional content.
3037
3038         The fix is to add checks for node renderers throughout the loop at the points
3039         where markup is written out for each node. This allows the additional close
3040         tag logic to run as needed.
3041
3042         All layout tests pass with this change.
3043
3044         * khtml/editing/markup.cpp:
3045         (khtml::createMarkup)
3046
3047         New test:
3048         
3049         * layout-tests/editing/pasteboard/paste-4035648-fix-expected.txt: Added.
3050         * layout-tests/editing/pasteboard/paste-4035648-fix.html: Added.
3051
3052 2005-03-06  Christy Warren  <kali@appple.com>
3053
3054         Reviewed by Ken
3055
3056         * khtml/rendering/render_text.cpp:
3057         (lastRendererOnPrevLine): helper for RenderText::caretRect
3058         (RenderText::caretRect): added code to properly handle bidi ordered text boxes
3059
3060 2005-03-06  Christy Warren  <kali@apple.com>
3061
3062         Reviewed by Darin.
3063
3064         * khtml/editing/visible_position.cpp: Eliminated code that cuts off searching through the text boxes based on an assumption that breaks under bidi
3065         (khtml::VisiblePosition::isCandidate):
3066         * kwq/KWQFontMetrics.mm:
3067         (QFontMetrics::checkSelectionPoint): Made the initialization of the WebCoreStyle honor the reversed flag
3068
3069 2005-03-05  John Sullivan  <sullivan@apple.com>
3070
3071         Reviewed by Maciej.
3072         
3073         - fixed <rdar://problem/4038417> Mail crashed in StyleChange::checkForLegacyHTMLStyleChange 
3074         when composing a reply
3075
3076         * khtml/editing/htmlediting.cpp:
3077         (khtml::StyleChange::checkForLegacyHTMLStyleChange):
3078         Added missing nil check.
3079
3080 2005-03-05  Darin Adler  <darin@apple.com>
3081
3082         Reviewed by Don.
3083
3084         - fixed <rdar://problem/4038478> Crash in renderer viewing RSS feed at feed://wvs.topleftpixel.com/index.rdf
3085
3086         * khtml/xml/dom_docimpl.cpp: (widgetForNode): Check for nil before going from node to renderer.
3087
3088 2005-03-05  Darin Adler  <darin@apple.com>
3089
3090         Reviewed by Richard.
3091
3092         - fixed <rdar://problem/4037700> Every character typed causes stat call for /usr/share/icu/icudt32b_char.brk
3093
3094         * khtml/rendering/render_text.cpp:
3095         (getCharacterBreakIterator): Added. Helper that sets up an iterator for the passed-in text.
3096         Shares a single global iterator (fast, albeit not thread-safe).
3097         (RenderText::previousOffset): Changed to call getCharacterBreakIterator.
3098         (RenderText::nextOffset): Ditto.
3099
3100 2005-03-05  Ken Kocienda  <kocienda@apple.com>
3101
3102         Reviewed by Darin
3103
3104         Fix for this bug:
3105         
3106         <rdar://problem/4038267> REGRESSION (Mail): Crash copying and pasting end of paragraph
3107
3108         Code to handle content that has a "logical" newline at the end of the pasted content, and the code
3109         to adjust the selection at the end of the paste operation made an assumption that at least one
3110         node had been inserted by the paste command. This is not necessarily true in the case where the sole content
3111         in the pasted content is one of these "logical" newlines. Adjust some code around so that we don't deref
3112         null, but still adjust the selection correctly for this case. In each of the two functions below, some
3113         null checks have been added, and some code has been rearranged a little bit to continue on through
3114         the end of completeHTMLReplacement, even if no nodes have been inserted. The patch looks bigger and more
3115         complicated than the conceptual change.
3116
3117         * khtml/editing/htmlediting.cpp:
3118         (khtml::ReplaceSelectionCommand::doApply)
3119         (khtml::ReplaceSelectionCommand::completeHTMLReplacement)
3120         
3121         * layout-tests/editing/pasteboard/paste-4038267-fix-expected.txt: Added.
3122         * layout-tests/editing/pasteboard/paste-4038267-fix.html: Added.
3123
3124 2005-03-05  Darin Adler  <darin@apple.com>
3125
3126         Reviewed by John.
3127
3128         - fixed <rdar://problem/4025918> images copied from Safari with relative src URLs aren't pasted into Mail messages (KURL resolves base URLs incorrectly)
3129
3130         * kwq/KWQKURL.mm: (KURL::KURL): Add a slash at the start of the path if a relative part is adding
3131         a path onto a URL that has "pre-path" bits like host name, but no path yet. This doesn't come up
3132         for http because in that case we add a trailing "/" as part of canonicalization.
3133
3134 2005-03-04  John Sullivan  <sullivan@apple.com>
3135
3136         Reviewed by Kevin.
3137         
3138         - fixed <rdar://problem/4033705> REGRESSION (Mail): Copy/Paste from Excel 
3139         crashes Mail in KWQKHTMLPart::fontForSelection(bool*) const + 232
3140
3141         * kwq/KWQKHTMLPart.mm:
3142         (KWQKHTMLPart::fontForSelection):
3143         Check for nil startNode, not just nil renderer.
3144
3145 2005-03-04  David Harrison  <harrison@apple.com>
3146
3147         Reviewed by Ken, Richard.
3148
3149         <rdar://problem/3996383> REGRESSION (Mail): Deleting all of first line also deletes line ending
3150
3151         Problem was the placeholder check was based on 0 height block, but the block in this
3152         case is the BODY, which has other content even though the paragraph is gone.
3153         
3154         * khtml/editing/htmlediting.cpp:
3155         (khtml::CompositeEditCommand::insertBlockPlaceholder):
3156         Now does insert instead of append!
3157     
3158         (khtml::CompositeEditCommand::appendBlockPlaceholder):
3159         New.  Actually does append.
3160         
3161         (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded):
3162         Renamed from insertBlockPlaceholderIfNeeded because it can insert or append.  Also accepts "force insert" flag.
3163         
3164         (khtml::CompositeEditCommand::removeBlockPlaceholder):
3165         Renamed for succinctness from removeBlockPlaceholderIfNeeded.
3166         
3167         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
3168         (khtml::DeleteSelectionCommand::moveNodesAfterNode):
3169         Use renamed methods.
3170         
3171         (khtml::DeleteSelectionCommand::doApply):
3172         Use addBlockPlaceholderIfNeeded "force insert" flag if deleting whole paragraphs did not leave an empty one.
3173         
3174         (khtml::InsertParagraphSeparatorCommand::doApply):
3175         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
3176         (khtml::InsertTextCommand::input):
3177         Use renamed methods.
3178         
3179         * khtml/editing/htmlediting.h:
3180         Renamed and new methods per above.
3181         
3182
3183 2005-03-04  Chris Blumenberg  <cblu@apple.com>
3184
3185         Fixed: <rdar://problem/4032840> REGRESSION (Mail): crash in RemoveNodeCommand after pasting attachment at end of message
3186
3187         Reviewed by darin.
3188
3189         * khtml/editing/visible_units.cpp:
3190         (khtml::endOfParagraph): don't consider text nodes that have no rendered characters
3191
3192 2005-03-04  Richard Williamson   <rjw@apple.com>
3193
3194         Fixed <rdar://problem/4034764> REGRESSION(125-188)Viewing text/plain page and going back/forward corrupts HTML pages (google.com)
3195
3196         The parse mode wasn't be restored to the document when going
3197         back.
3198
3199         Reviewed by Hyatt.
3200
3201         * kwq/KWQKHTMLPart.mm:
3202         (KWQKHTMLPart::openURLFromPageCache):
3203         * kwq/KWQPageState.h:
3204         * kwq/KWQPageState.mm:
3205         (-[KWQPageState initWithDocument:URL:windowProperties:locationProperties:interpreterBuiltins:]):
3206
3207 2005-03-04  Ken Kocienda  <kocienda@apple.com>
3208
3209         Reviewed by me
3210
3211         * layout-tests/editing/style/create-block-for-style-012-expected.txt: Shame on me!
3212         I landed my last fix without running layout tests. This one changes in a subtle, but
3213         acceptable way.
3214
3215 2005-03-04  Ken Kocienda  <kocienda@apple.com>
3216
3217         Reviewed by Harrison
3218
3219         Fix for this bug:
3220         
3221         <rdar://problem/4032543> REGRESSION (Mail): Mail hangs when quoted text is pasted twice
3222         
3223         This code change fixes the bug in a non-obvious way. The root cause of the problem was
3224         that a VisiblePosition created using an affinity originating in Mail code caused 
3225         two VisiblePosition objects that should have been equal to differ only in their 
3226         affinities, which in turn caused us to run a code path that should not have run.
3227
3228         * khtml/editing/visible_position.cpp:
3229         (khtml::VisiblePosition::VisiblePosition): Added copy constructor.
3230         (khtml::VisiblePosition::next): Factored out inline code that used to be here into new
3231         setAffinityUsingLinePosition() function.
3232         (khtml::isEqualIgnoringAffinity): New helper to handle cases when affinity in equality check does
3233         not matter. However, we want to know about such cases where a VisiblePosition differs only by affinity, 
3234         and the code will assert in development when this happens.
3235         (khtml::isNotEqualIgnoringAffinity): Ditto, but not. :)
3236         (khtml::setAffinityUsingLinePosition): New helper function mentioned above. This will "correct"
3237         upstream affinity to downstream if the affinity does not make a difference for the position.
3238         * khtml/editing/visible_position.h:
3239         * khtml/editing/visible_range.h: Wacky bug. The operator== for this class took VisiblePosition classes!
3240         * khtml/editing/visible_units.cpp:
3241         (khtml::isStartOfParagraph): Now performs equality check without regard to affinity.
3242         (khtml::isEndOfParagraph): Ditto.
3243         (khtml::isStartOfBlock): Ditto.
3244         (khtml::isEndOfBlock): Ditto.
3245         * kwq/WebCoreBridge.mm:
3246         (-[WebCoreBridge setSelectedDOMRange:affinity:]): Adjusts the affinity using setAffinityUsingLinePosition()
3247         if necessary.
3248
3249 2005-03-04  Darin Adler  <darin@apple.com>
3250
3251         Reviewed by John.
3252
3253         - fixed <rdar://problem/4036817> REGRESSION: ctrl-y broken when a line + carriage return cut
3254
3255         * khtml/editing/htmlediting.h: Added insertTextRunWithoutNewlines.
3256         * khtml/editing/htmlediting.cpp:
3257         (khtml::InsertTextCommand::input): Added assertion to make sure strings with newlines don't get
3258         down to this level.
3259         (khtml::TypingCommand::insertText): Added. Takes the name of the old function, but is a new
3260         level that breaks runs into lines and inserts each one separately.
3261         (khtml::TypingCommand::insertTextRunWithoutNewlines): Renamed old insertText to this. 
3262
3263         * khtml/dom/dom_string.h: Made substring be a const member function.
3264         * khtml/dom/dom_string.cpp: (DOM::DOMString::substring): Made this const.
3265
3266 2005-03-04  Darin Adler  <darin@apple.com>
3267
3268         Reviewed by John.
3269
3270         - fixed <rdar://problem/4020413> REGRESSION (Mail): can't use fonts with names that start with "#" in Mail (Korean fonts)
3271
3272         * khtml/css/css_valueimpl.cpp:
3273         (DOM::isLegalIdentifier): Added. Commented out and not used.
3274         (DOM::quoteStringIfNeeded): Quotes the string if needed. For now only if it starts with "#".
3275         (DOM::CSSPrimitiveValueImpl::cssText): Call quoteStringIfNeeded when asked for cssText for an arbitrary string, since we
3276         need text you can re-parse.
3277         (DOM::FontFamilyValueImpl::cssText): Ditto.
3278
3279         * khtml/editing/markup.cpp:
3280         (khtml::startMarkup): Added comments about lack of quoting for attributes.
3281         (khtml::createMarkup): Ditto.
3282
3283 2005-03-04 Adele Amchan  <adele@apple.com>
3284  
3285        Reviewed by Maciej
3286
3287         Fix for <rdar://problem/4021711> REGRESSION(125-188) blank pages when browsing forum at cooperativeresearch.org - cached external script problem
3288
3289         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::scriptHandler): set flag needToRefCachedScript so we can make sure 
3290         notifyFinished is called after pendingSrc is set up with the right data from the cached script
3291
3292 2005-03-04  Ken Kocienda  <kocienda@apple.com>
3293
3294         Reviewed by John
3295
3296         Fix for this bug:
3297         
3298         <rdar://problem/4029632> Tiger 8A398:- Mail crashes in DOM::NodeImpl::isBlockFlow() after pasting text with alignment style and BR element from Safari
3299
3300         * khtml/editing/htmlediting.cpp:
3301         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): VisiblePosition constructor
3302         was failing to yield a position for a node just pasted into the document since a layout was needed
3303         for the calculation to come out right. Layout added. Crash gone.
3304
3305 === Safari-402 ===
3306
3307 2005-03-03  Chris Blumenberg  <cblu@apple.com>
3308
3309         Fixed: <rdar://problem/3992803> Cannot navigate through list items with the keyboard, you're stuck in the same <li> block unless you click out
3310
3311         Reviewed by harrison.
3312
3313         * khtml/rendering/render_line.cpp:
3314         (khtml::RootInlineBox::closestLeafChildForXPos): avoid returning list markers when possible. Also improved heuristic for returning the best InlineBox given the passed X position.
3315
3316
3317 2005-03-03  Ken Kocienda  <kocienda@apple.com>
3318
3319         Reviewed by John
3320         
3321         Fix for this bug:
3322         
3323         <rdar://problem/4035198> Pasting text with different styles does not get reproducible results
3324
3325         I had a good idea yesterday to improve the way we "fixup" styles after
3326         pasting, but i chose a poor data structure to do it, a map of
3327         nodes-to-styles. In the fixup step, I iterated over the map elements and
3328         did the fixup. However, since the order in which the items would come
3329         out of the map is indeterminate, we got unpredictable results.
3330
3331         So, the concept was good, but the implementation was flawed. I have
3332         fixed this mapping to be a list instead, so the order that nodes are
3333         evaluated in the fixup step is document order. This works nicely.
3334
3335         * khtml/editing/htmlediting.cpp:
3336         (khtml::ReplacementFragment::~ReplacementFragment): No longer need to explicity deref nodes and
3337         styles saved away for later fixup. This is now handled by the new NodeDesiredStyle class.
3338         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Now calls computeAndStoreNodeDesiredStyle,
3339         function renamed from mapDesiredStyleForNode.
3340         Now accepts a QValueList<NodeDesiredStyle> in place of the old map.
3341         (khtml::NodeDesiredStyle::NodeDesiredStyle): New class that represents a node-to-style mapping.
3342         (khtml::NodeDesiredStyle::~NodeDesiredStyle): Ditto.
3343         (khtml::NodeDesiredStyle::operator=): Ditto.
3344         (khtml::ReplaceSelectionCommand::doApply): Now calls computeAndStoreNodeDesiredStyle,
3345         function renamed from mapDesiredStyleForNode.
3346         (khtml::ReplaceSelectionCommand::fixupNodeStyles): Now operates on a QValueList<NodeDesiredStyle> in 
3347         place of the old map.
3348         (khtml::computeAndStoreNodeDesiredStyle): Renamed from mapDesiredStyleForNode.  Now operates on a 
3349         QValueList<NodeDesiredStyle> in place of the old map.
3350         * khtml/editing/htmlediting.h:
3351         (khtml::NodeDesiredStyle): New class that represents a node-to-style mapping.
3352         (khtml::ReplacementFragment::desiredStyles): Now returns a QValueList<NodeDesiredStyle> in place of the old map.
3353
3354         * layout-tests/editing/style/typing-style-003-expected.txt: Results changed in an acceptable way.
3355
3356 2005-03-02  Darin Adler  <darin@apple.com>
3357
3358         Reviewed by Maciej.
3359
3360         - fixed <rdar://problem/4029741> REGRESSION (188-189): <input type=text> are cleared when you hide/show them
3361
3362         * khtml/html/html_formimpl.h: Added detach functions for both input and text area elements, since
3363         both have m_valueMatchesRenderer flags.
3364         * khtml/html/html_formimpl.cpp:
3365         (DOM::HTMLInputElementImpl::detach): Set m_valueMatchesRenderer to false, since the renderer is going away.
3366         (DOM::HTMLTextAreaElementImpl::detach): Ditto.
3367
3368 2005-03-02  Ken Kocienda  <kocienda@apple.com>
3369
3370         Reviewed by Hyatt
3371
3372         Fix for this bug:
3373         
3374         <rdar://problem/4006151> in reply, caret moves to next line after toggling bold style then typing
3375
3376         * khtml/editing/htmlediting.cpp:
3377         (khtml::ApplyStyleCommand::applyInlineStyle): Defer cleaning up empty style until the end of the
3378         function. In some situations, the render tree can get confused when we do this removal up front.
3379         I wish I understood the reasons more deeply, but this bit of code shuffling seems harmless, and 
3380         fixes the bug.
3381
3382 2005-03-02  Darin Adler  <darin@apple.com>
3383
3384         Reviewed by Maciej.
3385
3386         - fixed <rdar://problem/4024966> crash happened twice in [KWQTextField setHasFocus:] + 0xe8
3387
3388         Added more nil checks to the widget implementations. Anywhere a widget pointer is used, do a nil check,
3389         rather than relying on high level assumptions about which calls can and can't destroy the HTML element
3390         (and hence the widget). The case in the bug seems to be a case where scrolling destroyed the element.
3391         We can't be sure this fixes the bug, but we can be relatively sure we didn't introduce any new problems,
3392         because this just avoids nil-dereferencing.
3393
3394         * kwq/KWQButton.mm: