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