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