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