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