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