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