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