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