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