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