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