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