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