Safari-177 stamp
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 === Safari-177 ===
2
3 2004-12-22  Darin Adler  <darin@apple.com>
4
5         - rolled out my custom tag name change -- it broke amazon.com
6
7         * khtml/css/cssstyleselector.cpp:
8         * khtml/editing/htmlediting.cpp:
9         * khtml/editing/selection.cpp:
10         * khtml/editing/visible_position.cpp:
11         * khtml/html/dtd.cpp:
12         * khtml/html/htmlparser.cpp:
13         * khtml/html/htmlparser.h:
14         * khtml/html/htmltokenizer.cpp:
15         * khtml/misc/htmlhashes.cpp:
16         * khtml/misc/htmlhashes.h:
17         * khtml/misc/htmltags.c:
18         * khtml/misc/htmltags.h:
19         * khtml/misc/maketags:
20         * khtml/xml/dom_docimpl.cpp:
21         * khtml/xml/dom_docimpl.h:
22         * khtml/xml/dom_nodeimpl.cpp:
23         * khtml/xml/dom_position.cpp:
24         * kwq/KWQRenderTreeDebug.cpp:
25
26 2004-12-22  David Harrison  <harrison@apple.com>
27
28         Reviewed by Darin Adler.
29
30         * khtml/editing/selection.cpp:
31         (khtml::Selection::validate):
32         The selecting/deselecting bad behavior is because the Selection code that expands by words
33         had an inaccurate test for being at the end of the document (where double-clicking needs
34         to select the last word).  Fixed that check.
35
36 2004-12-22  Adele Amchan  <adele@apple.com>
37
38         Reviewed by Chris.
39
40         Fix for <rdar://problem/3911650> tabs at safeway.com stop working after a while
41
42         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::scrollToAnchor): removed call to cancelRedirection 
43           so that we match Firefox and WinIE behavior.
44
45 2004-12-22  Darin Adler  <darin@apple.com>
46
47         Reviewed by Ken.
48
49         - fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
50
51         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
52         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
53
54         * khtml/editing/htmlediting.cpp:
55         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
56         per-document tags and is just better all around for things like the document.
57         (khtml::debugNode): Ditto.
58         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
59         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
60         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
61         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
62
63         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
64         non-HTML elements to be nested as desired.
65
66         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
67         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
68         much larger number.
69         * khtml/html/htmlparser.cpp:
70         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
71         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
72         to eliminate code that used ID_CLOSE_TAG for an array size.
73         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
74         that manages isindex to use deref instead of delete.
75         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
76         mistake of using ID_CLOSE_TAG for the array size too.
77         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
78         there and it would prevent custom tags from working. Added range check before using the forbidden
79         tag array with the token ID since custom tags will use index values past the end of the array.
80         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
81         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
82         createElement call is still here.
83         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
84         document if getTagID fails; this creates a unique per-document ID.
85
86         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
87         * khtml/misc/htmlhashes.cpp:
88         (khtml::getTagID): Changed return type to unsigned short.
89         (khtml::getAttrID): Ditto.
90
91         * khtml/misc/htmltags.c: Regenerated.
92         * khtml/misc/htmltags.h: Regenerated.
93
94         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
95         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
96         Also rewrote getTagName to work with the new scheme.
97
98         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
99         * khtml/xml/dom_docimpl.cpp:
100         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
101         Also updated for a few tags that the parser handled but this did not.
102
103         * kwq/KWQRenderTreeDebug.cpp:
104         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
105         the tag ID directly, which only works for standard nodes.
106         (operator<<): Update to call getTagName.
107         (nodePositionRelativeToRoot): Ditto.
108         (writeSelection): Ditto.
109
110 2004-12-21  David Harrison  <harrison@apple.com>
111
112         Reviewed by Ken Kocienda.
113
114         <rdar://problem/3924934> REGRESSION: double click at end of line selects start of next line
115
116         Problem was the TextIterator was not handling exitNode() from a P block properly.
117         
118         * khtml/editing/visible_text.cpp:
119         (khtml::TextIterator::TextIterator):
120         Add new param that specifies whether the iterator is for content or for searching.
121         Search iterators do not prevent newlines at the beginning.
122         (khtml::TextIterator::advance):
123         Added some comments.
124         (khtml::TextIterator::handleTextNode):
125         Added some comments.
126         (khtml::TextIterator::exitNode):
127         Emit newline for P (and other) blocks with position following the block, instead of the m_lastTextNode.
128         (khtml::TextIterator::emitCharacter):
129         Added some comments.
130         (khtml::TextIterator::range):
131         Added some comments.
132         (khtml::CharacterIterator::CharacterIterator):
133         Specify search type TextIterator.
134         (khtml::CharacterIterator::advance):
135         * khtml/editing/visible_text.h:
136         (khtml::):
137         Add new TextIterator::TextIterator param that specifies whether the iterator is for content or for searching.
138         * khtml/editing/visible_units.cpp:
139         (khtml::nextWordBoundary):
140         Specify search type TextIterator.
141
142 2004-12-21  David Harrison  <harrison@apple.com>
143
144         Reviewed by Ken Kocienda.
145
146         <rdar://problem/3924695> REGRESSION (Mail): double-clicking past end of line shows no selection, should select to EOL
147         
148         Problem was that RenderText::setSelectionState did not handle the SelectionStart case where start and end are the end of the line.
149         Fixed by pretending the start == end-1 in that situation, as long as end > 0.
150         
151         * khtml/rendering/render_text.cpp:
152         (RenderText::setSelectionState)
153
154 2004-12-21  Maciej Stachowiak  <mjs@apple.com>
155
156         Reviewed by John.
157
158         <rdar://problem/3929187> WebKit needs to restrict access to certain window operations by domain
159         
160         * khtml/ecma/kjs_window.cpp:
161         (Window::get): Change most window functions to be restricted by
162         XSS domain check.
163
164 2004-12-21  Ken Kocienda  <kocienda@apple.com>
165
166         Reviewed by John
167
168         Fix for this bug:
169         
170         <rdar://problem/3928305> selecting an entire line and typing over causes new inserted text at top of document
171
172         * khtml/editing/htmlediting.cpp:
173         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent): New function to detect case
174         formerly undetected and unhandled. This is the crux of the bug fix.
175         (khtml::DeleteSelectionCommand::doApply): Call insertPlaceholderForAncestorBlockContent() during
176         execution of command.
177         * khtml/editing/htmlediting.h: Declare new function.
178         * layout-tests/editing/deleting/delete-3928305-fix-expected.txt: Added.
179         * layout-tests/editing/deleting/delete-3928305-fix.html: Added.
180
181 2004-12-21  Ken Kocienda  <kocienda@apple.com>
182
183         Reviewed by me
184
185         * khtml/editing/htmlediting.cpp:
186         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Note to self: Must compile code before
187         checking in (aka must return false from function returning bool).
188
189 2004-12-21  Ken Kocienda  <kocienda@apple.com>
190
191         Reviewed by John
192         
193         Fix for this bug:
194         
195         <rdar://problem/3927752> Crash in khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded(DOM::NodeImpl*)
196
197         * khtml/editing/htmlediting.cpp:
198         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Added some null checks.
199         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Ditto.
200
201 2004-12-21  Ken Kocienda  <kocienda@apple.com>
202
203         Reviewed by Darin
204
205         * khtml/editing/htmlediting.cpp:
206         (khtml::ReplacementFragment::mergeStartNode): Refine concept of how this node is found based on
207         further experiements.
208         (khtml::ReplaceSelectionCommand::doApply): Add a special case for determining merges that need to
209         be done if the insertion point is in an empty block.
210         * layout-tests/editing/pasteboard/paste-text-012-expected.txt: Added.
211         * layout-tests/editing/pasteboard/paste-text-012.html: Added.
212         * layout-tests/editing/pasteboard/paste-text-013-expected.txt: Added.
213         * layout-tests/editing/pasteboard/paste-text-013.html: Added.
214         * layout-tests/editing/pasteboard/paste-text-014-expected.txt: Added.
215         * layout-tests/editing/pasteboard/paste-text-014.html: Added.
216
217 2004-12-21  Darin Adler  <darin@apple.com>
218
219         Reviewed by Ken.
220
221         - fixed <rdar://problem/3899133> text search in a Safari window takes a very long time on Tiger updates page (and some other pages)
222
223         * khtml/editing/visible_text.h: Add an "offset base node" parameter to emitCharacter, and also
224         add a field to track it. Must make a few things mutable so we can update them in the range accessor.
225         * khtml/editing/visible_text.cpp:
226         (khtml::TextIterator::advance): Pass in base node and offsets rather than computing actual offsets
227         using the node's index. We only compute the node index if actually asked for the range.
228         (khtml::TextIterator::handleTextNode): Pass 0 for base node and set base node to 0 when setting
229         up the offsets.
230         (khtml::TextIterator::handleTextBox): Ditto.
231         (khtml::TextIterator::handleReplacedElement): Pass base node and set base node instead of calling
232         nodeIndex.
233         (khtml::TextIterator::handleNonTextNode): Pass 0 for offset.
234         (khtml::TextIterator::exitNode): More of the same.
235         (khtml::TextIterator::emitCharacter): Ditto.
236         (khtml::TextIterator::range): If an offset base node is stored, then get its node index, and then
237         add that in to the offsets. Doing the work here guarantees it's done only once when doing a text search.
238
239         - another small fix
240
241         * khtml/khtml_part.cpp: Removed SPEED_DEBUG define. Not sure why it was on.
242
243 === Safari-176 ===
244
245 2004-12-20  Ken Kocienda  <kocienda@apple.com>
246
247         Reviewed by Darin
248
249         * khtml/editing/htmlediting.cpp:
250         (khtml::DeleteSelectionCommand::moveNodesAfterNode): My one-liner for this bug introduced layout test
251         regressions: <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
252         Rolling out until I can develop a real fix.
253
254 2004-12-20  David Harrison  <harrison@apple.com>
255
256         Reviewed by Dave Hyatt.
257         
258         Initial checkin of AXTextMarkerRef support.
259
260         * khtml/xml/dom_docimpl.cpp:
261         (DocumentImpl::updateSelection):
262         (DocumentImpl::setFocusNode):
263         * kwq/KWQAccObject.h:
264         * kwq/KWQAccObject.mm:
265         (-[KWQAccObject detach]):
266         (-[KWQAccObject anchorElement]):
267         (-[KWQAccObject addChildrenToArray:]):
268         (-[KWQAccObject accessibilityAttributeNames]):
269         (-[KWQAccObject accessibilityActionDescription:]):
270         (-[KWQAccObject accessibilityPerformAction:]):
271         (-[KWQAccObject textMarkerRangeFromMarkers:andEndMarker:]):
272         (-[KWQAccObject textMarkerForVisiblePosition:]):
273         (-[KWQAccObject visiblePositionForTextMarker:]):
274         (-[KWQAccObject AXTextMarkerRangeCopyStartMarkerWrapper:]):
275         (-[KWQAccObject AXTextMarkerRangeCopyEndMarkerWrapper:]):
276         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
277         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
278         (-[KWQAccObject accessibilityAttributeValue:]):
279         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
280         (-[KWQAccObject textMarkerRangeFromVisiblePositions:andEndPos:]):
281         (-[KWQAccObject getSelectedTextMarkerRange]):
282         (-[KWQAccObject doAXLineForTextMarker:]):
283         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
284         (-[KWQAccObject doAXStringForTextMarkerRange:]):
285         (-[KWQAccObject doAXNextTextMarkerForTextMarker:]):
286         (-[KWQAccObject doAXPreviousTextMarkerForTextMarker:]):
287         (-[KWQAccObject doAXLeftWordTextMarkerRangeForTextMarker:]):
288         (-[KWQAccObject doAXRightWordTextMarkerRangeForTextMarker:]):
289         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
290         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
291         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
292         (-[KWQAccObject accessibilityFocusedUIElement]):
293         (-[KWQAccObject clearChildren]):
294         (-[KWQAccObject accObjectID]):
295         (-[KWQAccObject setAccObjectID:]):
296         (-[KWQAccObject removeAccObjectID]):
297         * kwq/KWQAccObjectCache.h:
298         * kwq/KWQAccObjectCache.mm:
299         (KWQAccObjectCache::KWQAccObjectCache):
300         (KWQAccObjectCache::~KWQAccObjectCache):
301         (KWQAccObjectCache::getAccObjectID):
302         (KWQAccObjectCache::removeAccObjectID):
303         (KWQAccObjectCache::textMarkerForVisiblePosition):
304         (KWQAccObjectCache::visiblePositionForTextMarker):
305
306 2004-12-19  Darin Adler  <darin@apple.com>
307
308         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added nil check.
309
310 2004-12-19  Darin Adler  <darin@apple.com>
311
312         Reviewed by Kevin.
313
314         - a garbage collection fix
315
316         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added a more-extensive comment and fixed the BUILDING_ON_PANTHER
317         #ifndef to use #if (in practice, either is OK).
318         * kwq/KWQKURL.mm: (KURL::getNSURL): Use KWQCFAutorelease instead of autorelease.
319
320 2004-12-17  David Hyatt  <hyatt@apple.com>
321
322         Fix for 3923255, specified percentage heights of divs with overflow auto inside tables not honored.
323         
324         Reviewed by kocienda
325
326         * khtml/rendering/render_box.cpp:
327         (RenderBox::calcPercentageHeight):
328         * khtml/rendering/render_table.cpp:
329         (RenderTableSection::layoutRows):
330
331 2004-12-17  David Harrison  <harrison@apple.com>
332
333         Reviewed by Ken Kocienda.
334
335         <rdar://problem/3924930> REGRESSION: triple click does not select to end of line
336         
337         * khtml/editing/visible_units.cpp:
338         (khtml::endOfParagraph):
339         When includeLineBreak is true, allow traversal to next node after enclosingBlockFlowElement.
340
341 2004-12-17  Ken Kocienda  <kocienda@apple.com>
342
343         Reviewed by Vicki
344
345         * khtml/editing/htmlediting.cpp:
346         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Missed deleting some now-obsolete expcetion
347         codes when I added the createBreakElement() function.
348
349 2004-12-17  Richard Williamson   <rjw@apple.com>
350
351         Set the floor of max cacheable object size to 40K.  This restores
352         the long standing floor.  Lower floor deleteriously impacts the PLT.
353         Reviewed by Hyatt.
354
355         * khtml/khtml_part.cpp:
356         (KHTMLPart::checkCompleted):
357         * khtml/misc/loader.cpp:
358         (Cache::setSize):
359
360 2004-12-17  Ken Kocienda  <kocienda@apple.com>
361
362         Reviewed by Hyatt
363
364         Fix for this bug:
365         
366         <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
367
368         * khtml/editing/htmlediting.cpp:
369         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Stop merging nodes when a <br> is hit.
370         Formerly checked only for block boundary.
371
372 2004-12-17  David Harrison  <harrison@apple.com>
373
374         Reviewed by Darin.
375
376                 Add KWQCFAutorelease for autoreleasing CF objects.
377         * kwq/KWQFoundationExtras.h:
378         (KWQCFAutorelease):
379         New.
380
381 2004-12-17  David Harrison  <harrison@apple.com>
382
383         Reviewed by Darin.
384
385                 Fix GC compatibility in getNSString.
386
387         * kwq/KWQString.mm:
388         (QString::getNSString):
389                 Use NSString allocator instead of CFString, so that autorelease works under GC.
390
391 2004-12-17  Ken Kocienda  <kocienda@apple.com>
392
393         Reviewed by Hyatt
394
395         Fix for this bug:
396         
397         <rdar://problem/3890973> REGRESSION (Mail): Deleting reorders remaining text
398
399         * khtml/editing/htmlediting.cpp:
400         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Added check to ensure that moving content will not
401         move it after the <body> element.
402
403 2004-12-17  Ken Kocienda  <kocienda@apple.com>
404
405         Reviewed by me
406         
407         Added new layout tests covering cases from recent bug fixes.
408
409         * layout-tests/editing/inserting/insert-div-018-expected.txt: Added.
410         * layout-tests/editing/inserting/insert-div-018.html: Added.
411         * layout-tests/editing/inserting/insert-div-019-expected.txt: Added.
412         * layout-tests/editing/inserting/insert-div-019.html: Added.
413         * layout-tests/editing/inserting/insert-div-020-expected.txt: Added.
414         * layout-tests/editing/inserting/insert-div-020.html: Added.
415         * layout-tests/editing/inserting/insert-div-021-expected.txt: Added.
416         * layout-tests/editing/inserting/insert-div-021.html: Added.
417
418 2004-12-17  Ken Kocienda  <kocienda@apple.com>
419
420         Reviewed by me
421
422         Changes in layout resulting from giving <p> elements no margin rather than 0.1em margin.
423
424         * layout-tests/editing/inserting/insert-div-013-expected.txt
425         * layout-tests/editing/inserting/insert-div-014-expected.txt
426
427 2004-12-17  Ken Kocienda  <kocienda@apple.com>
428
429         Reviewed by John
430
431         Fix for this bug:
432         
433         <rdar://problem/3925317> Increase quote in email and with cursor below the quote the new line appears above the quote
434
435         * khtml/editing/htmlediting.cpp:
436         (khtml::InsertParagraphSeparatorCommand::doApply):
437         * khtml/editing/visible_position.cpp: Refine rules for whether to use the starting node or the starting
438         block as the reference node for the insertion of the new block.
439         (khtml::isLastVisiblePositionInBlock): Tweak rules again. Descendants of following blocks should answer true.
440         I worked this all out on the whiteboard this time. This should be the last tweak.
441
442 2004-12-17  Kevin Decker  <kdecker@apple.com>
443
444         Reviewed by Ken.
445
446         Fixed <rdar://problem/3824438> Need a clean way for Dashboard to detect when an XML parsing error occurs
447
448         * khtml/xml/xml_tokenizer.cpp:
449         (khtml::XMLTokenizer::insertErrorMessageBlock): In the xml error report, instead of a generic <div>, use <parsererror> to match Mozilla.
450
451 2004-12-16  Ken Kocienda  <kocienda@apple.com>
452
453         Reviewed by Chris
454
455         Fix for this bug:
456         
457         <rdar://problem/3924888> REGRESSION (Mail): Hitting return key at end of line does not insert visible newline
458
459         * khtml/editing/htmlediting.cpp:
460         (khtml::InsertParagraphSeparatorCommand::doApply): Tweaked code I added just before to fix 3924486, so that
461         it checks the downstream node for the starting position.
462
463 2004-12-16  Ken Kocienda  <kocienda@apple.com>
464
465         Reviewed by Chris
466
467         Added new createBreakElement() function that makes creating a <br> element a one-liner.
468         Converted all the code that used to call the DocumentImpl, and dealt with the exceptionCode,
469         over to this new helper.
470
471         * khtml/editing/htmlediting.cpp:
472         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Now uses new helper function.
473         (khtml::InsertLineBreakCommand::doApply): Ditto.
474         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
475         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
476         (khtml::ReplaceSelectionCommand::doApply): Ditto.
477         (khtml::createBreakElement): New helper.
478         * khtml/editing/htmlediting.h: Ditto.
479
480 2004-12-16  David Hyatt  <hyatt@apple.com>
481
482         Fix a bug where vertical-align values that depended on their parent's value went crazy if the parent was
483         vertical-align top or bottom.  The bug is 3771007, bankofamerica's ebills page.
484         
485         Reviewed by kocienda
486
487         * khtml/rendering/render_object.cpp:
488         (RenderObject::getVerticalPosition):
489
490 2004-12-16  Ken Kocienda  <kocienda@apple.com>
491
492         Reviewed by John
493
494         Fix for these bugs:
495         
496         <rdar://problem/3924486> REGRESSION (Mail): Hitting return key does not insert visible newline
497         <rdar://problem/3924579> REGRESSION (Mail): After deleting, hitting return key does not insert visible newline
498
499         * khtml/editing/htmlediting.cpp:
500         (khtml::InsertParagraphSeparatorCommand::doApply): For the first bug, detect when inserting a <p> will
501         make a visible <br> collapse. For the second bug, move the code that inserts the new <p> after
502         a check which may move the node used as the reference node for the insertion. Also change this code to
503         insert the <p> after the last sibling of the starting position, to move it past the nodes we're going
504         to want to shift into the new <p>.
505
506 2004-12-16  Darin Adler  <darin@apple.com>
507
508         Reviewed by Ken.
509
510         - use <p> elements rather than <br> when pasting plain text; also use margin of 0 rather than 0.1 em
511           after talking this over with Dave and Ken
512
513         * khtml/editing/htmlediting.h: Added createDefaultParagraphElement and createBlockPlaceholderElement.
514         * khtml/editing/htmlediting.cpp:
515         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Use new createBlockPlaceholderElement
516         helper so this can share code with the plain-text conversion code.
517         (khtml::InsertParagraphSeparatorCommand::createParagraphElement): Use new createDefaultParagraphElement
518         helper so this can share code with the plain-text conversion code.
519         (khtml::createDefaultParagraphElement): Added.
520         (khtml::createBlockPlaceholderElement): Added.
521
522         * khtml/editing/markup.cpp: (khtml::createFragmentFromText): Use paragraphs rather than
523         <br> elements for pasting plain text.
524
525         - regenerated these files with the newer gperf
526
527         * khtml/css/cssproperties.c: Regenerated.
528         * khtml/css/cssvalues.c: Regenerated.
529         * khtml/misc/htmlattrs.c: Regenerated.
530         * khtml/misc/htmltags.c: Regenerated.
531
532 2004-12-16  Ken Kocienda  <kocienda@apple.com>
533
534         Reviewed by Hyatt
535
536         Fix for this bug:
537         
538         <rdar://problem/3924291> REGRESSION (Mail): Crash deleting content following a <p> element
539
540         * khtml/xml/dom_nodeimpl.cpp:
541         (NodeImpl::enclosingInlineElement): Fixed problem in this function where recursive search for
542         parent that is not an inline would skip past previous siblings of nodes which were blocks. Now
543         it stops looking in this situation. This problem eventually caused the delete code to try to 
544         merge a node under a descendent.
545
546 2004-12-16  Adele Amchan  <adele@apple.com>
547
548         Change by Richard, reviewed by me.
549
550         Fix for: <rdar://problem/3923983> background image decoding prevents page with 0Kb image from finishing to load
551
552         * khtml/misc/loader.cpp: (CachedImage::data): Added call to notifyFinished so the 0Kb image case finishes loading.
553
554 2004-12-16  Adele Amchan  <adele@apple.com>
555
556         Reviewed by Chris.
557
558         Fix for: <rdar://problem/3534824> VIP: some navigation links on safeway.com don't work due to a JavaScript quirk
559
560         Added a call to ObjectImp::get before Window::get just returns Undefined.  
561         This was preventing us from getting the toString function from a Window object.
562
563         * khtml/ecma/kjs_window.cpp: (Window::get):
564
565 2004-12-16  Ken Kocienda  <kocienda@apple.com>
566
567         Reviewed by John
568         
569         Fix for this bug:
570         
571         <rdar://problem/3918351> REGRESSION (Mail, 173-175+): Return before first char of line leaves insertion point in wrong place
572         
573         * khtml/editing/htmlediting.cpp:
574         (khtml::InsertParagraphSeparatorCommand::doApply): Basically, did a rewrite of this function
575         to do a better job than it was doing before. Added several test cases to prove I am on a 
576         better track.
577         * khtml/editing/visible_position.cpp:
578         (khtml::isFirstVisiblePositionInBlock): Tweaked the rules a bit to fix an issue very similar to the
579         leaving-the-bar-node case problem I just fixed in a recent checkin (relevant markup: <p>foo</p>bar).
580         This function was returning true for the first position in "bar". Wrong. Also tightened up other 
581         rule: Should not report true when relationship between blocks cannot be determined.
582         (khtml::isLastVisiblePositionInBlock): Tightened up rule as above: Should not report true 
583         when relationship between blocks cannot be determined.
584         * layout-tests/editing/inserting/insert-div-010-expected.txt: Added.
585         * layout-tests/editing/inserting/insert-div-010.html: Added.
586         * layout-tests/editing/inserting/insert-div-011-expected.txt: Added.
587         * layout-tests/editing/inserting/insert-div-011.html: Added.
588         * layout-tests/editing/inserting/insert-div-012-expected.txt: Added.
589         * layout-tests/editing/inserting/insert-div-012.html: Added.
590         * layout-tests/editing/inserting/insert-div-013-expected.txt: Added.
591         * layout-tests/editing/inserting/insert-div-013.html: Added.
592         * layout-tests/editing/inserting/insert-div-014-expected.txt: Added.
593         * layout-tests/editing/inserting/insert-div-014.html: Added.
594         * layout-tests/editing/inserting/insert-div-015-expected.txt: Added.
595         * layout-tests/editing/inserting/insert-div-015.html: Added.
596         * layout-tests/editing/inserting/insert-div-016-expected.txt: Added.
597         * layout-tests/editing/inserting/insert-div-016.html: Added.
598         * layout-tests/editing/inserting/insert-div-017-expected.txt: Added.
599         * layout-tests/editing/inserting/insert-div-017.html: Added.
600             
601 2004-12-16  Ken Kocienda  <kocienda@apple.com>
602
603         Reviewed by me
604         
605         Added a layout test based on my last checkin.
606
607         * layout-tests/editing/selection/move-by-word-001-expected.txt: Added.
608         * layout-tests/editing/selection/move-by-word-001.html: Added.
609
610 2004-12-16  Ken Kocienda  <kocienda@apple.com>
611
612         Reviewed by John
613
614         Fix for this bug:
615         
616         <rdar://problem/3917929> REGRESSION (Mail): Command-left-arrow leaves insertion point too high after specific steps
617
618         * khtml/editing/visible_text.cpp:
619         (khtml::SimplifiedBackwardsTextIterator::advance): Add new check for leaving a text node and iterating
620         backwards into a different block that is an descendent of the block containing the text node (as in leaving 
621         the "bar" node in this example: <p>foo</p>bar).
622         (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode): Call new emitNewlineForBROrText helper.
623         (khtml::SimplifiedBackwardsTextIterator::emitNewlineForBROrText): Factor out code from handleNonTextNode, since
624         it is called from there, and now also from advance().
625
626 2004-12-15  Darin Adler  <darin@apple.com>
627
628         Reviewed by Ken.
629         
630         - fixed problem where plain-text would put a blank line between each <p> even when they have no margins
631
632         * khtml/editing/visible_text.cpp: (khtml::TextIterator::exitNode): Add more checks and only set the
633         "add one more newline" flag if the margin is sufficient. A more complete fix would ignore the node
634         type altogether and use the render tree instead.
635
636 2004-12-14  John Sullivan  <sullivan@apple.com>
637
638         Reviewed by Ken.
639         
640         - rest of WebCore fix for <rdar://problem/3790011> undoable operations all say "Undo" 
641         in the menu, no specific action names
642
643         * khtml/editing/edit_actions.h: new header, contains EditAction enum
644         (renamed from HTMLEditAction, formerly in htmlediting.h)
645
646         * ForwardingHeaders/editing/edit_actions.h: new forwarding header
647         
648         * khtml/editing/htmlediting.h:
649         removed HTMLEditAction enum in favor of including edit_actions.h; added khtml::
650         namespace to EditAction usages; added m_editingAction ivar to ApplyStyleCommand
651
652         * khtml/editing/htmlediting.cpp:
653         (khtml::EditCommandPtr::editingAction):
654         update for enum name change
655         (khtml::EditCommand::editingAction):
656         ditto
657         (khtml::ApplyStyleCommand::ApplyStyleCommand):
658         added editingAction parameter to this constructor
659         (khtml::ApplyStyleCommand::editingAction):
660         return new ivar
661         (khtml::DeleteSelectionCommand::editingAction):
662         update for enum name change
663         (khtml::MoveSelectionCommand::editingAction):
664         ditto
665         (khtml::TypingCommand::editingAction):
666         ditto
667         (khtml::ReplaceSelectionCommand::editingAction):
668         ditto
669         
670         * khtml/khtml_part.h:
671         added EditAction parameter to applyStyle and computeAndSetTypingStyle
672         * khtml/khtml_part.cpp:
673         (KHTMLPart::computeAndSetTypingStyle):
674         added EditAction parameter
675         (KHTMLPart::applyStyle):
676         ditto
677
678         * kwq/KWQKHTMLPart.mm:
679         (KWQKHTMLPart::registerCommandForUndoOrRedo):
680         do the cast from EditAction to WebUndoAction a different way to match other code
681         
682         * kwq/WebCoreBridge.h:
683         * kwq/WebCoreBridge.mm:
684         (-[WebCoreBridge setTypingStyle:withUndoAction:]):
685         added WebUndoAction parameter, passed into ApplyStyleCommand constructor
686         (-[WebCoreBridge applyStyle:withUndoAction:]):
687         ditto
688
689         * WebCore.pbproj/project.pbxproj:
690         updated for new files
691
692 2004-12-14  David Hyatt  <hyatt@apple.com>
693
694         Fix for 3562458, rowspan and colspan converted to ints so that large values will work for them.  Remove
695         the ridiculous 1024 limit on the span values.
696
697         * khtml/html/html_tableimpl.cpp:
698         (HTMLTableCellElementImpl::parseHTMLAttribute):
699         * khtml/rendering/render_table.cpp:
700         (RenderTableCell::collapsedBottomBorder):
701         * khtml/rendering/render_table.h:
702         (khtml::RenderTableCell::colSpan):
703         (khtml::RenderTableCell::setColSpan):
704         (khtml::RenderTableCell::rowSpan):
705         (khtml::RenderTableCell::setRowSpan):
706         (khtml::RenderTableCol::span):
707         (khtml::RenderTableCol::setSpan):
708
709 2004-12-14  David Hyatt  <hyatt@apple.com>
710
711         Make sure <col> and <colgroup> can have spans updated dynamically as well.
712         
713         Reviewed by rjw
714
715         * khtml/html/html_tableimpl.cpp:
716         (HTMLTableColElementImpl::parseHTMLAttribute):
717         * khtml/rendering/render_table.cpp:
718         (RenderTableCell::updateFromElement):
719         (RenderTableCol::updateFromElement):
720
721 2004-12-14  David Hyatt  <hyatt@apple.com>
722
723         Fix for 3833123, setting a cell's colspan does not update rendering like it should.
724         
725         Reviewed by rjw
726
727         * khtml/html/html_tableimpl.cpp:
728         (HTMLTableCellElementImpl::parseHTMLAttribute):
729         * khtml/rendering/render_table.cpp:
730         (RenderTableCell::RenderTableCell):
731         (RenderTableCell::updateFromElement):
732
733 2004-12-14  Chris Blumenberg  <cblu@apple.com>
734
735         Fixed: <rdar://problem/3864536> crash copying text from other apps and pasting in a sticky in dashboard
736
737         Reviewed by hyatt.
738
739         * khtml/editing/markup.cpp:
740         (khtml::createFragmentFromText): ref and deref the fragment since calling appendChild can completely deref it
741
742 2004-12-14  David Hyatt  <hyatt@apple.com>
743
744         Fix for 3785211. Make sure to do a layout with the old position before doing a layout after changing to the new position.
745         This is actually a regression from my positioned object DHTML optimization.
746         
747         Reviewed by kocienda
748
749         * khtml/rendering/render_object.cpp:
750         (RenderObject::setStyle):
751
752 2004-12-14  David Hyatt  <hyatt@apple.com>
753
754         Make sure the class attribute works when newlines are present in the attribute.
755
756         Reviewed by kocienda
757
758         * khtml/html/html_elementimpl.cpp:
759         (HTMLNamedAttrMapImpl::parseClassAttribute):
760
761 2004-12-14  David Hyatt  <hyatt@apple.com>
762
763         Fix for 3724938, float element is duplicated and paints twice.  The logic for when to paint floats was
764         actually fairly screwed up.  This patch simplifies the logic and makes addOverhangingFloats easier to
765         read by splitting it into two separate functions.
766         
767         Reviewed by kocienda
768
769         * khtml/rendering/render_block.cpp:
770         (khtml::RenderBlock::layoutBlockChildren):
771         (khtml::RenderBlock::clearFloats):
772         (khtml::RenderBlock::addOverhangingFloats):
773         (khtml::RenderBlock::addIntrudingFloats):
774         * khtml/rendering/render_block.h:
775
776 2004-12-14  John Sullivan  <sullivan@apple.com>
777
778         Reviewed by Ken.
779         
780         - added Undo action names for Cut, Paste, and Drag
781
782         * khtml/editing/htmlediting.h:
783         * khtml/editing/htmlediting.cpp:
784         (khtml::DeleteSelectionCommand::editingAction):
785         overridden to return HTMLEditActionCut
786         (khtml::MoveSelectionCommand::editingAction):
787         overridden to return HTMLEditActionDrag
788         (khtml::ReplaceSelectionCommand::editingAction):
789         overridden to return HTMLEditActionPaste
790
791 2004-12-14  John Sullivan  <sullivan@apple.com>
792
793         Reviewed by Ken.
794         
795         - architecture for WebCore part of fix for <rdar://problem/3790011> undoable operations all say "Undo" in the menu, 
796         no specific action names
797           
798         The remaining step is to make each EditCommand subclass override editingAction() to return an
799         appropriate value. (Unfortunately the mapping between subclass and user-distinguishable action
800         is not completely straightforward, so this next step isn't trivial.)
801
802         * khtml/editing/htmlediting.h:
803         new enum for HTMLEditAction
804
805         * khtml/editing/htmlediting.cpp:
806         (khtml::EditCommandPtr::editingAction):
807         new method, calls through to EditCommand
808         (khtml::EditCommand::editingAction):
809         new method for subclasses to override, returns HTMLEditActionUnspecified at this level
810         (khtml::TypingCommand::editingAction):
811         proof of concept override, returns HTMLEditActionTyping
812                 
813         * kwq/KWQKHTMLPart.h:
814         declare new private bottleneck method registerCommandForUndoOrRedo
815         * kwq/KWQKHTMLPart.mm:
816         (KWQKHTMLPart::registerCommandForUndoOrRedo):
817         new bottleneck method to reduce code duplication; now calls over the bridge
818         to get the localized string to use for the Undo action name
819         (KWQKHTMLPart::registerCommandForUndo):
820         now calls new bottleneck method
821         (KWQKHTMLPart::registerCommandForRedo):
822         now calls new bottleneck method
823         
824         * kwq/WebCoreBridge.h:
825         new enum for WebUndoAction, maps directly to HTMLEditAction.
826         Declaration of nameForUndoAction:
827
828 2004-12-14  Darin Adler  <darin@apple.com>
829
830         Reviewed by John.
831
832         - added a bunch of missing nil checks; our old version of inherits used to work for nil (by accident)
833
834         * khtml/rendering/render_frames.cpp:
835         (RenderPart::~RenderPart): Check widget for nil.
836         (RenderPart::setWidget): Ditto.
837         (RenderFrame::slotViewCleared): Ditto.
838         (RenderPartObject::slotViewCleared): Ditto.
839
840 2004-12-13  Darin Adler  <darin@apple.com>
841
842         Reviewed by Ken.
843
844         - moved markup-related functions into new sources files in the editing directory
845         - removed all of the uses of dynamic_cast, preparing to turn off RTTI to make our code smaller and slightly faster
846
847         * ForwardingHeaders/editing/markup.h: Added.
848         * khtml/editing/markup.h: Added.
849         * khtml/editing/markup.cpp: Added.
850
851         * WebCore.pbproj/project.pbxproj: Added markup.h/cpp.
852
853         * khtml/dom/dom_node.cpp: (Node::toHTML): Call createMarkup since there's no toHTML in NodeImpl any more.
854         * khtml/html/html_elementimpl.cpp:
855         (HTMLElementImpl::innerHTML): Changed to call createMarkup.
856         (HTMLElementImpl::outerHTML): Ditto.
857
858         * khtml/ecma/kjs_window.cpp:
859         (Window::retrieveWindow): Comment out assert that uses dynamic_cast.
860         (Window::retrieveActive): Ditto.
861
862         * khtml/editing/htmlediting.h: Added forward class declaration needed now that I removed one elsewhere.
863         * khtml/xml/dom_docimpl.h: Ditto.
864
865         * khtml/khtml_part.cpp:
866         (KHTMLPart::slotDebugDOMTree): Use createMarkup instead of toHTML.
867         (KHTMLPart::processObjectRequest): Use inherits instead of dynamic_cast.
868
869         * khtml/rendering/render_image.cpp: (RenderImage::paint): Add an explicit QChar conversion so this code
870         still works even with the additional replace overloads added to QString.
871         * kwq/KWQTextCodec.mm: (QTextCodec::fromUnicode): Ditto.
872
873         * khtml/rendering/render_object.h: Removed the version of arenaDelete that does not take an object
874         base pointer, because it used dynamic_cast in its implementation. Made the other version public.
875         * khtml/rendering/render_object.cpp: Ditto.
876         * khtml/rendering/render_replaced.cpp: (RenderWidget::deref): Pass object base pointer to arenaDelete.
877
878         * khtml/xml/dom2_rangeimpl.h: Removed extra parameters from toHTML, and unneeded includes and declarations.
879         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::toHTML): Changed to call createMarkup, and moved all
880         the support code into markup.cpp.
881
882         * khtml/xml/dom_nodeimpl.h: Moved toHTML and related functions into markup.cpp.
883         * khtml/xml/dom_nodeimpl.cpp: Ditto.
884
885         * khtml/xml/dom_position.cpp:
886         (DOM::startPosition): Implemented the version of this that takes a RangeImpl. Also added null checks
887         so these return null positions rather than raising exceptions.
888         (DOM::endPosition): Ditto.
889
890         * khtml/khtmlview.h: Added an APPLE_CHANGES function so inherits can detect this class without dynamic_cast.
891         * kwq/KWQFrame.h: Ditto.
892         * kwq/KWQFrame.mm: (QFrame::isQFrame): Ditto.
893         * kwq/KWQKPartsPart.h: Ditto.
894         * kwq/KWQKPartsPart.mm: (KParts::ReadOnlyPart::isKPartsReadOnlyPart): Ditto.
895         * kwq/KWQScrollView.h: Ditto.
896         * kwq/KWQScrollView.mm: (QScrollView::isQScrollView): Ditto.
897         * kwq/KWQKHTMLPart.h: Ditto.
898         * kwq/KWQKHTMLPart.mm:
899         (KHTMLView::isKHTMLView): Ditto.
900         (KWQKHTMLPart::setTitle): Added an explicit QChar conversion so this code still works even with the additional
901         replace overloads added to QString.
902         (KWQKHTMLPart::setStatusBarText): Ditto.
903         (KWQKHTMLPart::runJavaScriptAlert): Ditto.
904         (KWQKHTMLPart::runJavaScriptConfirm): Ditto.
905         (KWQKHTMLPart::runJavaScriptPrompt): Ditto.
906         (KWQKHTMLPart::attributedString): Ditto.
907         (KWQKHTMLPart::isCharacterSmartReplaceExempt): Ditto.
908         (KWQKHTMLPart::isKHTMLPart): That dynamic_cast thing (see above).
909
910         * kwq/KWQObject.h: Added virtual methods for the few cases where we need dynamic_cast-like behavior.
911         * kwq/KWQObject.mm:
912         (QObject::inherits): Changed to not use dynamic cast.
913         (QObject::isKHTMLPart): Added. Returns false.
914         (QObject::isKHTMLView): Ditto.
915         (QObject::isKPartsReadOnlyPart): Ditto.
916         (QObject::isQFrame): Ditto.
917         (QObject::isQScrollView): Ditto.
918
919         * kwq/KWQRenderTreeDebug.cpp:
920         (write): Changed to use inherits rather than dynamic_cast.
921         (writeSelection): Ditto.
922
923         * kwq/KWQSlot.mm: (KWQSlot::call): Call through to the version with just a job pointer parameter rather
924         than going straight on to the "no parameters at all" version.
925
926         * kwq/KWQString.h:
927         * kwq/KWQString.mm: (QString::replace): Added overloads.
928         * kwq/WebCoreBridge.mm:
929         (-[WebCoreBridge markupStringFromNode:nodes:]): Changed to call functions in markup.h.
930         (-[WebCoreBridge markupStringFromRange:nodes:]): Ditto.
931         (-[WebCoreBridge selectedString]): Added an explicit QChar conversion so this code still works even with
932         the additional replace overloads added to QString.
933         (-[WebCoreBridge stringForRange:]): Ditto.
934         (-[WebCoreBridge copyDOMNode:copier:]): Changed to call functions in markup.h.
935         (-[WebCoreBridge elementAtPoint:]): QChar conversion.
936         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): Changed to call functions in markup.h.
937         (-[WebCoreBridge documentFragmentWithText:]): Changed to call functions in markup.h.
938
939 2004-12-13  Ken Kocienda  <kocienda@apple.com>
940
941         Reviewed by John
942
943         Fix for this bug:
944         
945         <rdar://problem/3917956> REGRESSION (Mail): pasting can leave insertion point inside pasted text
946
947         * khtml/editing/htmlediting.cpp:
948         (khtml::ReplaceSelectionCommand::doApply): Fix coding mistake. Calculations of bool flag based on 
949         leading and trailing whitespace positions was reversed! I must have introduced this error recently
950         when changing around this code.
951
952 2004-12-13  David Hyatt  <hyatt@apple.com>
953
954         Fix for 3915787, macobserver doesn't paint.  floatRect() needed to be const in the base class.  Also hit-testing
955         and painting was using the wrong rect when setting up the x/y of the rect.
956         
957         Reviewed by mjs
958
959         * khtml/rendering/render_block.cpp:
960         (khtml::RenderBlock::paint):
961         (khtml::RenderBlock::nodeAtPoint):
962         * khtml/rendering/render_object.h:
963         (khtml::RenderObject::floatRect):
964
965 2004-12-13  Ken Kocienda  <kocienda@apple.com>
966
967         Reviewed by John
968
969         Fix for this bug:
970         
971         <rdar://problem/3917863> REGRESSION (Mail): pasting two lines of plain text copied from an RTF document results in two styles
972
973         Code to figuire out the end node to merge was missing the font tag in the second paragraph
974         written out by AppKit convert-to-HTML function. I refined the algorithm to be smarter.
975
976         * khtml/editing/htmlediting.cpp:
977         (khtml::ReplacementFragment::mergeEndNode): Refine algorithm used to walk through the fragment being pasted
978         looking for the node that is the last inline in the last block of the fragment. The old algorithm was 
979         insufficiently powerful.
980         (khtml::ReplacementFragment::enclosingBlock): New helper function.
981         * khtml/editing/htmlediting.h: Add declaration for new helper function.
982         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: Added.
983         * layout-tests/editing/pasteboard/paste-text-011.html: Added.
984
985 2004-12-13  Ken Kocienda  <kocienda@apple.com>
986
987         Reviewed by John
988
989         WebCore side of fix for this bug:
990         
991         <rdar://problem/3768372> REGRESSION (Mail): paste of text ending in whitespace loses whitespace
992
993         Note that we are coordinating with Doug Davidson on the AppKit team to make a complete fix for this
994         bug. This change involves our half of the needed changes.
995         
996         Note that a lot of this change has to do with changing code to use a <br> element instead of
997         a comment node as the mechanism to annotate HTML with information used to fix the bug. In some
998         other places, code to handle comments in markup can be removed since we do not use comments for
999         such annotations after this change.
1000
1001         * khtml/editing/htmlediting.cpp: Remove isComment() helper; no longer needed.
1002         (khtml::ReplacementFragment::ReplacementFragment): Change m_hasInterchangeNewlineComment name to m_hasInterchangeNewline.
1003         (khtml::ReplacementFragment::isInterchangeNewlineNode): Name changed from isInterchangeNewlineComment.
1004         (khtml::ReplacementFragment::isInterchangeConvertedSpaceSpan): Local variable name convertedSpaceSpanClass changed to
1005         convertedSpaceSpanClassString to match other uses of the idiom used here.
1006         (khtml::ReplaceSelectionCommand::doApply): Change hasInterchangeNewlineComment() name to hasInterchangeNewline().
1007         * khtml/editing/htmlediting.h: Change names as noted in .cpp file. Remove isComment() helper; no longer needed.
1008         (khtml::ReplacementFragment::hasInterchangeNewline):  Change hasInterchangeNewlineComment() name to hasInterchangeNewline().
1009         * khtml/html/html_elementimpl.cpp:
1010         (HTMLElementImpl::createContextualFragment): No longer has includeCommentsInDOM flag; no longer needed as we do not
1011         annotate fragments with comments any longer.
1012         * khtml/html/html_elementimpl.h: Ditto.
1013         * khtml/xml/dom2_rangeimpl.cpp: Remove addCommentToHTMLMarkup() helper. No longer needed.
1014         (DOM::interchangeNewlineMarkupString): New helper to return <br> element markup we use to annotate content for interchange.
1015         (DOM::RangeImpl::toHTML): No longer uses addCommentToHTMLMarkup; now calls interchangeNewlineMarkupString(). Remove
1016         spurious semi-colon.
1017         * khtml/xml/dom2_rangeimpl.h: Remove obsolete addCommentToHTMLMarkup() function and EAddToMarkup enum.
1018         * kwq/WebCoreBridge.mm:
1019         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): No longer pass bool to ask for including comments
1020         in DOM when calling createContextualFragment().
1021
1022 2004-12-10  John Sullivan  <sullivan@apple.com>
1023
1024         fixed deployment build bustage that John Louch ran into
1025
1026         * kwq/KWQTextEdit.mm:
1027         (QTextEdit::setScrollBarModes):
1028         move bool declaration inside exception-handling block to avoid obscure
1029         compiler error
1030
1031 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1032
1033         Reviewed by Richard.
1034
1035         <rdar://problem/3907484> REGRESSION (125-173): crash when KWQTextField is dealloc'ed while setting focus (profoundlearning.com)
1036         
1037         * kwq/KWQWidget.mm:
1038         (QWidget::setFocus): Handle the case where setting focus removed
1039         us from the superview - this can happen due to style changes on
1040         focus change.
1041
1042 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1043
1044         Reviewed by Hyatt
1045
1046         Fix for this bug:
1047         
1048         <rdar://problem/3915008> REGRESSION (Mail): Too much white space between lines separated by carriage returns
1049
1050         There are a number of interesting things we could do to fix this bug, including SPI and involving
1051         the WebKit delegate, etc., however it seems reasonable to start with a hard-coded default that
1052         will fix the bug in the general case until such time as we can come up with more specific
1053         solutions. 
1054         
1055         So, I added a helper method to create <p> elements with an inline style that sets top and bottom margins
1056         to 0.1em.
1057
1058         * khtml/editing/htmlediting.cpp:
1059         (khtml::InsertParagraphSeparatorCommand::createParagraphElement): New factory method to create
1060         paragraph elements to insert. Also adds style information to keep the <p> from having "too-big" margins.
1061         (khtml::InsertParagraphSeparatorCommand::doApply): Call new factory method.
1062         * khtml/editing/htmlediting.h: Add createParagraphElement() declaration.
1063
1064 2004-12-10  Darin Adler  <darin@apple.com>
1065
1066         Reviewed by Hyatt.
1067
1068         - fixed <rdar://problem/3910419> setting style={overflow:hidden} for <textarea> does not prevent appearance of scrollbars
1069
1070         * khtml/rendering/render_form.h: Remove now-unneeded wrap parameter.
1071         * khtml/rendering/render_form.cpp:
1072         (RenderSubmitButton::rawText): Convert to QChar explicitly.
1073         (RenderLineEdit::updateFromElement): Ditto.
1074         (RenderLineEdit::slotTextChanged): Ditto.
1075         (RenderSelect::updateFromElement): Ditto.
1076         (TextAreaWidget::TextAreaWidget): Moved out most of the initialization since it's not something
1077         that requires a derived class. Now we don't use this class at all for WebCore, but they still
1078         have it for KDE.
1079         (TextAreaWidget::event): Moved out the ifdefs.
1080         (RenderTextArea::RenderTextArea): Moved setting code from TextAreaWidget here. Put a bunch that
1081         we don't need at all inside !APPLE_CHANGES, and removed the setting for scroll bars, since that's
1082         now done in setStyle.
1083         (RenderTextArea::handleFocusOut): Use type QTextEdit instead of TextAreaWidget since that's all
1084         that's needed and WebCore no longer has TextAreaWidget.
1085         (RenderTextArea::calcMinMaxWidth): Ditto.
1086         (RenderTextArea::setStyle): Add code to set scroll bar modes based on wrap setting combined with
1087         overflow style.
1088         (RenderTextArea::updateFromElement): Use type QTextEdit.
1089         (RenderTextArea::text): Ditto.
1090         (RenderTextArea::select): Ditto.
1091
1092         * kwq/KWQTextArea.mm:
1093         (-[KWQTextArea _configureTextViewForWordWrapMode]): Don't set horizontal scroller visibility here,
1094         since it's now handled by QTextEdit.
1095         (-[KWQTextArea initWithFrame:]): Don't set vertical scroller visibility or scroller auto-hiding.
1096
1097         * kwq/KWQTextEdit.h: Add setScrollBarModes function to be used instead of separate setter for
1098         the horizontal and vertical mode; needed because AppKit switches "autohide" for both at once.
1099         * kwq/KWQTextEdit.mm: (QTextEdit::setScrollBarModes): Added.
1100
1101 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1102
1103         Reviewed by Darin
1104
1105         Fix for this bug:
1106         
1107         <rdar://problem/3915047> HItting return in empty document inserts <p> but 
1108         insertion point does not move
1109
1110         * khtml/editing/htmlediting.cpp:
1111         (khtml::InsertParagraphSeparatorCommand::doApply): The issue is that the
1112         code to insert the <p> element for the return is not detecting the fact
1113         that the document is empty. Inserting a <p> into an empty body will not
1114         "add a new line" as the user expects. With this change, we'll add a second 
1115         <p> when the root editable element has no rendered kids.
1116
1117 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1118
1119         Reviewed by John.
1120
1121         <rdar://problem/3912979> REGRESSION (125-173): repro crash in HTMLCollectionImpl code (www.clubtravel.ie)
1122
1123         * khtml/html/html_miscimpl.cpp:
1124         (HTMLCollectionImpl::traverseNextItem): Pass base when traversing
1125         the initial one step, otherwise we might inadvertantly step
1126         outside the collection base, thereby causing assertion failures or
1127         other badness later.
1128
1129 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1130
1131         Reviewed by Chris
1132
1133         * khtml/editing/htmlediting.cpp:
1134         (khtml::InsertParagraphSeparatorCommand::doApply): There is a starting block which is supposed to 
1135         act as the root node for this operation. However, a loop was incorrectly coded, and a parent node
1136         search could escape this node. Also, one other piece to code to move nodes to the new <p> element
1137         should do nothing if the starting point for the selection is itself the starting block.
1138         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Similar changes, in spirit, to the above
1139         function, though the names and concepts are slightly different.
1140
1141 2004-12-10  Maciej Stachowiak  <mjs@apple.com>
1142
1143         Reviewed by Ken.
1144
1145         <rdar://problem/3907705> REGRESSION (172-173): DHTML menus are broken at hrweb.apple.com
1146         
1147         * khtml/dom/html_document.cpp:
1148         (HTMLDocument::nameableItems): New method, wrapper for HTMLCollection creation.
1149         * khtml/dom/html_document.h:
1150         * khtml/ecma/kjs_html.cpp:
1151         (KJS::HTMLDocument::tryGet): use doc.nameableItems(), not doc.all()!
1152         * khtml/html/html_miscimpl.cpp:
1153         (HTMLCollectionImpl::traverseNextItem): Added new DOC_NAMEABLE_ITEMS type, this represents
1154         the items that can be accessed directly as a document propery, in particular forms, images,
1155         objects, applets and embeds.
1156         (HTMLCollectionImpl::updateNameCache): Fix some nameCache/idCache confusion.
1157         (HTMLFormCollectionImpl::updateNameCache): Ditto.
1158         * khtml/html/html_miscimpl.h:
1159         (DOM::HTMLCollectionImpl::): Added new type.
1160
1161 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1162
1163         Reviewed by John
1164
1165         Fix for this bug:
1166         
1167         <rdar://problem/3914779> REGRESSION (Mail): Cannot arrow navigate to position before last character on text-wrapped line
1168
1169         * khtml/rendering/render_text.cpp:
1170         (RenderText::caretRect): Code was not detecting space at the end of a line correctly. Now it does.
1171
1172 2004-12-10  Ken Kocienda  <kocienda@apple.com>
1173
1174         Reviewed by John
1175
1176         Fix for this bug:
1177
1178         <rdar://problem/3914755> REGRESSION (Mail): Insertion point disappears after pasting paragraph
1179
1180         * khtml/editing/htmlediting.cpp:
1181         (khtml::ReplaceSelectionCommand::doApply): Selection could end up in a "placeholder" node
1182         that was removed from the document when pasting. This caused the disappearance. Now this
1183         is detected, and the selection is shifted to a node that is in the document.
1184
1185 2004-12-09  Richard Williamson   <rjw@apple.com>
1186
1187         Check to disable threaded decoding during
1188         layout tests wasn't invoking function, just checking address of 
1189         function, which would always return true.
1190         
1191         * kwq/WebCoreImageRendererFactory.m:
1192         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]):
1193
1194 2004-12-09  David Hyatt  <hyatt@apple.com>
1195
1196         Fix for 3892686, left/top overflow was not being propagated properly up to containing blocks because of a math
1197         error.
1198
1199         Also fix a bug I noticed on the same page where relative position offsets were not being added in properly for
1200         all inlines when repainting.
1201         
1202         Reviewed by rjw
1203
1204         * khtml/rendering/render_block.cpp:
1205         (khtml::RenderBlock::layoutBlockChildren):
1206         * khtml/rendering/render_flow.cpp:
1207         (RenderFlow::getAbsoluteRepaintRect):
1208
1209 2004-12-09  David Hyatt  <hyatt@apple.com>
1210
1211         Fix for 3867545, finance.yahoo.com lays out incorrectly.  Add a quirk that will prevent tables from moving
1212         down below floats when there is insufficient space.  Instead we will match Gecko and just spill out of the
1213         containing block to the right.  This appears to be the more common desired behavior, despite being wrong.
1214         WinIE sometimes wraps and sometimes doesn't, but it's really hard for us to match its inconsistency.
1215         
1216         Reviewed by john
1217
1218         * khtml/rendering/render_block.cpp:
1219         (khtml::RenderBlock::getClearDelta):
1220         * layout-tests/apple-only/base/www.cnn.com/index-expected.txt:
1221         * layout-tests/apple-only/base/www.ebay.com/index-expected.txt:
1222         * layout-tests/apple-only/base/www.excite.com/index-expected.txt:
1223         * layout-tests/fast/block/margin-collapse/102-expected.txt:
1224         * layout-tests/fast/block/margin-collapse/102.html:
1225
1226 2004-12-09  Richard Williamson   <rjw@apple.com>
1227
1228         Fixed <rdar://problem/3914078> worldclock crashing gc related
1229
1230         Use ProtectedValue for Context2D instance members.
1231
1232         Reviewed by Maciej.
1233
1234         * khtml/ecma/kjs_html.h:
1235
1236 2004-12-09  John Sullivan  <sullivan@apple.com>
1237
1238         Reviewed by Dave.
1239         
1240         - fixed <rdar://problem/3731099> Move AXTitle string for image elements to AXDescription
1241
1242         * kwq/KWQAccObject.mm:
1243         (-[KWQAccObject title]): moved image alt tag code out of here
1244         (-[KWQAccObject accessibilityDescription]): moved image alt tag code into this new method
1245         (-[KWQAccObject accessibilityAttributeNames]): include AXDescription in the set of attributes
1246         that ordinary elements return; this means that ordinary elements that aren't images will return
1247         a nil description, which isn't ideal, but is in keeping with the way the rest of these attributes
1248         work here.
1249         (-[KWQAccObject accessibilityAttributeValue:]):
1250         call accessibilityDescription when asked for AXDescription
1251
1252 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1253
1254         Reviewed by Harrison
1255
1256         Fix for this bug:
1257         
1258         <rdar://problem/3910425> REGRESSION (Mail): Crash in ReplaceSelectionCommand; selection is empty, leading to null deref
1259
1260         * khtml/editing/htmlediting.cpp:
1261         (khtml::MoveSelectionCommand::doApply): The node representing the destination for the move may have
1262         been deleted. If this is the case, set the destination to the node the delete command provides in
1263         its ending selection.
1264
1265 === Safari-175 ===
1266
1267 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1268
1269         Reviewed by John
1270         
1271         Fix for this bug:
1272         
1273         <rdar://problem/3912841> REGRESSION (173-TOT): Some images report 0x0 dimensions on layout tests, causes spurious test failures
1274
1275         The new threaded image decoding capability can throw off layout tests. The issue is that the decoding
1276         callback may not be delivered before the program asks for the dimensions of an image in order to
1277         wrote the layout dimensions. More generally, I think we need to ensure that there are no races in
1278         layout tests, so I have added a flag to the render tree debug code that we can set when debugging.
1279
1280         * kwq/KWQRenderTreeDebug.cpp:
1281         (debuggingRenderTree): New function. Returns flag which tells whether the program is debugging the render tree.
1282         (externalRepresentation): Sets debuggingRenderTree flag to true;
1283         * kwq/KWQRenderTreeDebug.h:
1284         * kwq/WebCoreImageRendererFactory.m:
1285         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]): Checks debuggingRenderTree flag and will not
1286         do threaded decoding in any case if the flag is set.
1287
1288 2004-12-09  Chris Blumenberg  <cblu@apple.com>
1289
1290         Fix for busting XMLHTTPRequest.
1291
1292         Reviewed by kocienda.
1293
1294         * khtml/misc/loader.cpp:
1295         (Loader::servePendingRequests): pass true for deliverAllData
1296         * kwq/KWQKJob.h:
1297         (KIO::get): take deliverAllData param
1298         (KIO::http_post): ditto
1299         * kwq/KWQKJobClasses.h:
1300         * kwq/KWQKJobClasses.mm:
1301         (KIO::TransferJob::TransferJob): if deliverAllData, create signal with data param
1302         (KIO::TransferJob::emitResult): if deliverAllData, call signal with data param
1303
1304 2004-12-09  Ken Kocienda  <kocienda@apple.com>
1305
1306         Reviewed by John
1307
1308         <rdar://problem/3911011> REGRESSION (Mail): Spaces at end of line causing word wrap lost when copied/pasted
1309
1310         * khtml/xml/dom_nodeimpl.cpp:
1311         (NodeImpl::renderedText): Fixed the code so that spaces at the end of lines are not skipped.
1312
1313 2004-12-07  Richard Williamson   <rjw@apple.com>
1314
1315         Support threaded image decoding on machines w/ > 2 CPUs.
1316
1317         Reviewed by Maciej and Chris.
1318
1319         * khtml/misc/loader.cpp:
1320         (CachedImageCallback::notifyUpdate):
1321         (CachedImageCallback::notifyFinished):
1322         (CachedImageCallback::notifyDecodingError):
1323         (CachedImageCallback::handleError):
1324         (CachedImageCallback::clear):
1325         (CachedImage::CachedImage):
1326         (CachedImage::clear):
1327         (CachedImage::data):
1328         (CachedImage::checkNotify):
1329         (Loader::servePendingRequests):
1330         (Loader::slotFinished):
1331         (Loader::numRequests):
1332         (Loader::cancelRequests):
1333         (Loader::removeBackgroundDecodingRequest):
1334         * khtml/misc/loader.h:
1335         (khtml::CachedImageCallback::CachedImageCallback):
1336         (khtml::CachedImageCallback::ref):
1337         (khtml::CachedImageCallback::deref):
1338         (khtml::CachedImage::decoderCallback):
1339         * khtml/rendering/render_object.cpp:
1340         (RenderObject::setPixmap):
1341         * kwq/KWQPixmap.h:
1342         * kwq/KWQPixmap.mm:
1343         (-[WebImageCallback initWithCallback:khtml::]):
1344         (-[WebImageCallback _commonTermination]):
1345         (-[WebImageCallback dealloc]):
1346         (-[WebImageCallback finalize]):
1347         (-[WebImageCallback notify]):
1348         (-[WebImageCallback setImageSourceStatus:]):
1349         (-[WebImageCallback status]):
1350         (QPixmap::shouldUseThreadedDecoding):
1351         (QPixmap::receivedData):
1352         * kwq/WebCoreImageRenderer.h:
1353         * kwq/WebCoreImageRendererFactory.h:
1354         * kwq/WebCoreImageRendererFactory.m:
1355         (+[WebCoreImageRendererFactory shouldUseThreadedDecoding]):
1356         (+[WebCoreImageRendererFactory setShouldUseThreadedDecoding:]):
1357
1358 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1359
1360         Reviewed by John
1361
1362         * khtml/editing/htmlediting.cpp:
1363         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Fix a problem with my
1364         change in thei code yesterday. Call to insertBlockPlaceholderIfNeeded() must be done
1365         after new block has been inserted, otherwise a crash can result. Shuffle down call 
1366         to insertBlockPlaceholderIfNeeded() a couple of lines (where the node is inserted), 
1367         and all is good.
1368
1369 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1370
1371         Reviewed by John
1372
1373         Fix for this bug:
1374         
1375         <rdar://problem/3907422> REGRESSION (Mail): Pasting quoted content can place content after body element
1376
1377         * khtml/editing/htmlediting.cpp:
1378         (khtml::ReplaceSelectionCommand::doApply): Detect when the body element is the "reference block" used
1379         for determining the location for inserting content. Do not allow an insert before or after if the
1380         reference block is the body. Perform insertNodeAt(0) and appendNode, respectively, in the block-is-body case.
1381         * layout-tests/editing/inserting/insert-3907422-fix-expected.txt: Added.
1382         * layout-tests/editing/inserting/insert-3907422-fix.html: Added.
1383
1384 2004-12-07  Darin Adler  <darin@apple.com>
1385
1386         Reviewed by Don.
1387
1388         - fixed <rdar://problem/3908701> REGRESSION: Cursor does not change to "hand" over active links
1389
1390         * kwq/KWQEvent.mm: (positionForEvent): Add NSMouseMoved to list of events that have mouse location.
1391
1392 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1393
1394         Reviewed by John
1395
1396         Changed name of constant from KHTMLInterchangeNewline to AppleInterchangeNewline.
1397         I discussed this with Hyatt and he agreed that going with "Apple" names was OK.
1398
1399         * khtml/editing/html_interchange.h: Name change, as described above.
1400         * khtml/editing/htmlediting.cpp:
1401         (khtml::ReplacementFragment::isInterchangeNewlineComment): Ditto.
1402         * khtml/xml/dom2_rangeimpl.cpp:
1403         (DOM::RangeImpl::toHTML): Ditto.
1404
1405 2004-12-07  Ken Kocienda  <kocienda@apple.com>
1406
1407         Reviewed by me
1408         
1409         Added a couple more layout tests.
1410
1411         * layout-tests/editing/deleting/delete-line-013-expected.txt: Added.
1412         * layout-tests/editing/deleting/delete-line-013.html: Added.
1413         * layout-tests/editing/deleting/delete-line-014-expected.txt: Added.
1414         * layout-tests/editing/deleting/delete-line-014.html: Added.
1415
1416 2004-12-06  Maciej Stachowiak  <mjs@apple.com>
1417
1418         Reviewed by Hyatt.
1419
1420         - fixed <rdar://problem/3906974> assertion failure in QWidget::beforeMouseDown clicking on <select multiple>
1421         
1422         * kwq/KWQListBox.mm:
1423         (QListBox::QListBox): Initialize KWQListBoxScrollView with this.
1424         (-[KWQListBoxScrollView initWithListBox:]): Make this class a KWQWidgetHolder.
1425         (-[KWQListBoxScrollView widget]): See above.
1426         (-[KWQTableView mouseDown:]): Pass outerView rather than self to beforeMouseDown and
1427         afterMouseDown, to avoid triggering an assertion failure.
1428
1429 2004-12-06  David Hyatt  <hyatt@apple.com>
1430
1431         Fix for 3615411, the linesAppended optimization was old and broken, and it's easier with the new code fixes
1432         made by me, kocienda and harrison to just remove it.
1433         
1434         Reviewed by mjs
1435
1436         * khtml/rendering/bidi.cpp:
1437         (khtml::RenderBlock::layoutInlineChildren):
1438         * khtml/rendering/render_block.cpp:
1439         (khtml:::RenderFlow):
1440         * khtml/rendering/render_block.h:
1441         * khtml/rendering/render_flow.cpp:
1442         (RenderFlow::dirtyLinesFromChangedChild):
1443
1444 2004-12-06  David Hyatt  <hyatt@apple.com>
1445
1446         Fix for 3787133, some web pages print with many blank pages.  Make sure to use the real page print rect and
1447         not a damage rect that can be changed when intersected with the clip regions of the web page.
1448         
1449         Reviewed by john
1450
1451         * khtml/rendering/render_canvas.h:
1452         (khtml::RenderCanvas::printRect):
1453         (khtml::RenderCanvas::setPrintRect):
1454         * khtml/rendering/render_flow.cpp:
1455         (RenderFlow::paintLines):
1456         * khtml/rendering/render_list.cpp:
1457         (RenderListMarker::paint):
1458         * kwq/KWQKHTMLPart.mm:
1459         (KWQKHTMLPart::adjustPageHeight):
1460
1461 2004-12-06  David Harrison  <harrison@apple.com>
1462
1463         Reviewed by Ken Kocienda and Dave Hyatt (OOPS!).
1464
1465                 <rdar://problem/3849947> Typing after pasting line does not appear until after window resize.
1466                 
1467                 
1468         * khtml/rendering/render_flow.cpp:
1469         (RenderFlow::dirtyLinesFromChangedChild):
1470                 Dirty the line above because new child can inval the cached line break position of previous line.
1471
1472 2004-12-06  David Hyatt  <hyatt@apple.com>
1473
1474         Fix for 3254464, radio buttons do not work for quiz on netscape.com.  Left/top overflow needed to be implemented.
1475         This also fixes 3106907, link hover color only partially set on rollover and the more general architecture bug
1476         3126929, handle top/left overflow.
1477
1478         This patch also fixes 3902891, scroll bar of position:fixed content moves when a page is scrolled.
1479
1480         Finally, the Emerson regression 3869718 (error involving computing the rightmost/lowest position of overflow:auto
1481         regions and web pages) has been fixed.
1482         
1483         Reviewed by mjs
1484
1485         * khtml/rendering/bidi.cpp:
1486         (khtml::RenderBlock::computeHorizontalPositionsForLine):
1487         (khtml::RenderBlock::checkLinesForOverflow):
1488         * khtml/rendering/render_block.cpp:
1489         (khtml:::RenderFlow):
1490         (khtml::RenderBlock::overflowHeight):
1491         (khtml::RenderBlock::overflowWidth):
1492         (khtml::RenderBlock::overflowLeft):
1493         (khtml::RenderBlock::overflowTop):
1494         (khtml::RenderBlock::overflowRect):
1495         (khtml::RenderBlock::layoutBlock):
1496         (khtml::RenderBlock::layoutBlockChildren):
1497         (khtml::RenderBlock::paint):
1498         (khtml::RenderBlock::floatRect):
1499         (khtml::RenderBlock::lowestPosition):
1500         (khtml::RenderBlock::rightmostPosition):
1501         (khtml::RenderBlock::leftmostPosition):
1502         (khtml::RenderBlock::nodeAtPoint):
1503         * khtml/rendering/render_block.h:
1504         * khtml/rendering/render_box.h:
1505         (khtml::RenderBox::borderBox):
1506         (khtml::RenderBox::borderTopExtra):
1507         (khtml::RenderBox::borderBottomExtra):
1508         * khtml/rendering/render_layer.cpp:
1509         (RenderLayer::paintScrollbars):
1510         (mustExamineRenderer):
1511         (RenderLayer::intersectsDamageRect):
1512         (RenderLayer::containsPoint):
1513         * khtml/rendering/render_line.cpp:
1514         (khtml::InlineFlowBox::placeBoxesHorizontally):
1515         (khtml::InlineFlowBox::verticallyAlignBoxes):
1516         * khtml/rendering/render_line.h:
1517         (khtml::InlineBox::leftOverflow):
1518         (khtml::InlineBox::rightOverflow):
1519         (khtml::InlineFlowBox::setVerticalOverflowPositions):
1520         (khtml::RootInlineBox::RootInlineBox):
1521         (khtml::RootInlineBox::leftOverflow):
1522         (khtml::RootInlineBox::rightOverflow):
1523         (khtml::RootInlineBox::setVerticalOverflowPositions):
1524         (khtml::RootInlineBox::setHorizontalOverflowPositions):
1525         * khtml/rendering/render_object.h:
1526         (khtml::RenderObject::borderBox):
1527         (khtml::RenderObject::overflowLeft):
1528         (khtml::RenderObject::overflowTop):
1529         (khtml::RenderObject::overflowRect):
1530         (khtml::RenderObject::floatRect):
1531         * khtml/rendering/render_table.cpp:
1532         (RenderTable::layout):
1533         (RenderTable::paint):
1534         (RenderTable::paintBoxDecorations):
1535         (RenderTable::calcMinMaxWidth):
1536         * khtml/rendering/render_table.h:
1537         (khtml::RenderTableCell::borderTopExtra):
1538         (khtml::RenderTableCell::borderBottomExtra):
1539         * kwq/KWQRect.h:
1540         * kwq/KWQRect.mm:
1541         (QRect::inflate):
1542
1543 2004-12-06  Maciej Stachowiak  <mjs@apple.com>
1544
1545         Reviewed by John.
1546
1547         - fixed <rdar://problem/3903797> scripts can cause other frames/windows to execute arbitrary script using javascript: URLs
1548         
1549         I changed all unprotected places that can navigate a different
1550         window or frame from script to check for a javascript: URL, and if
1551         found, to check for safety using cross-site-script rules. 
1552
1553         I considered a few other possible exploits and made no change:
1554
1555         - document.location is already protected because the document
1556         object itself is protected
1557
1558         - frame.src, frame.location, iframe.src and targetted links are
1559         all safe because setting the URL of a frame to a javascript: URL
1560         executes the script in the context of the parent
1561
1562         * khtml/ecma/kjs_window.cpp:
1563         (WindowFunc::tryCall):
1564         (Location::put):
1565         (LocationFunc::tryCall):
1566
1567 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1568
1569         Reviewed by Maciej
1570
1571         Fix for this bug:
1572         
1573         <rdar://problem/3890955> 8A314: Forward delete sometimes fails to delete the selected quoted text
1574
1575         * khtml/editing/htmlediting.cpp:
1576         (khtml::DeleteSelectionCommand::handleSpecialCaseBRDelete): Fixed bonehead coding mistake in the
1577         check for one of the special cases being checked for in this function. The specific case 
1578         intends to check for a selection that is only a <br> after a block ends (as in </div><br>). If it
1579         sees such markup, it deletes only the <br> and bails. However, this code would run in *any*
1580         case where a selection ended in a <br> after a block and would not delete any part of the
1581         selection preceding the <br>. Bad. I have tightened the check to see that only a <br> is
1582         selected.
1583
1584         Fixing the bug above was accomplished with an additional call to DOM::Position::downstream. This
1585         new use of the function exposed this bug:
1586         
1587         <rdar://problem/3907666> Incorrectly coded loop in Position::downstream can lead to infinite loop
1588
1589         * khtml/xml/dom_position.cpp:
1590         (DOM::Position::downstream): I am ashamed of my first cut at this. Rewrote the loop so it does 
1591         not have this fatal flaw. It is a much better design as well.
1592         
1593         * layout-tests/editing/deleting/delete-3800834-fix-expected.txt: Changes made this test
1594         have what I consider to be a better result. Going with it.
1595
1596 2004-12-06  Chris Blumenberg  <cblu@apple.com>
1597
1598         Fixed: <rdar://problem/3871718> REGRESSION (125-168): text marked bold with font that does not have bold variant copies as non-bold
1599
1600         Reviewed by hyatt.
1601
1602         * kwq/DOM.mm:
1603         (-[DOMElement _font]): new SPI for AppKit
1604         * kwq/DOMPrivate.h:
1605
1606 2004-12-06  Darin Adler  <darin@apple.com>
1607
1608         Reviewed by Maciej.
1609
1610         - fixed <rdar://problem/3906327> Select All of a large document is slow (>15 secs on my machine for attached specimen)
1611
1612         * kwq/KWQScrollView.mm: (QScrollView::updateContents): Intersect with visibleRect before calling through
1613         to NSView to dirty; NSView could also be more efficient in this case (I filed 3906343).
1614
1615 2004-12-06  John Sullivan  <sullivan@apple.com>
1616
1617         Darin found what appears to be the real leak that we were falsely blaming
1618         on the 'leaks' tool (3880245). I made the change, and ran layout tests and PLT to make
1619         sure nothing barfed.
1620
1621         * khtml/css/cssparser.cpp:
1622         (CSSParser::parseValue):
1623         call clearProperties() instead of just setting numParsedProperties to 0
1624         (CSSParser::parseDeclaration):
1625         ditto
1626         (CSSParser::createStyleDeclaration):
1627         ditto
1628
1629 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1630
1631         Reviewed by me
1632         
1633         New layout tests.
1634
1635         * layout-tests/editing/inserting/insert-div-001-expected.txt: Added.
1636         * layout-tests/editing/inserting/insert-div-001.html: Added.
1637         * layout-tests/editing/inserting/insert-div-002-expected.txt: Added.
1638         * layout-tests/editing/inserting/insert-div-002.html: Added.
1639         * layout-tests/editing/inserting/insert-div-003-expected.txt: Added.
1640         * layout-tests/editing/inserting/insert-div-003.html: Added.
1641         * layout-tests/editing/inserting/insert-div-004-expected.txt: Added.
1642         * layout-tests/editing/inserting/insert-div-004.html: Added.
1643         * layout-tests/editing/inserting/insert-div-005-expected.txt: Added.
1644         * layout-tests/editing/inserting/insert-div-005.html: Added.
1645         * layout-tests/editing/inserting/insert-div-006-expected.txt: Added.
1646         * layout-tests/editing/inserting/insert-div-006.html: Added.
1647         * layout-tests/editing/inserting/insert-div-007-expected.txt: Added.
1648         * layout-tests/editing/inserting/insert-div-007.html: Added.
1649         * layout-tests/editing/inserting/insert-div-008-expected.txt: Added.
1650         * layout-tests/editing/inserting/insert-div-008.html: Added.
1651         * layout-tests/editing/inserting/insert-div-009-expected.txt: Added.
1652         * layout-tests/editing/inserting/insert-div-009.html: Added.
1653
1654 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1655
1656         Reviewed by Harrison
1657
1658         Fix for this bug:
1659         
1660         <rdar://problem/3906948> REGRESSION (Mail): Insert paragraph code can make the insertion point "stick" in place.
1661
1662         * khtml/editing/htmlediting.cpp:
1663         (khtml::InsertParagraphSeparatorCommand::doApply): Call insertBlockPlaceholderIfNeeded(), passing block
1664         being added to this function. This ensures that the added block has a height.
1665         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
1666
1667 2004-12-06  Ken Kocienda  <kocienda@apple.com>
1668  
1669         Reviewed by John
1670         
1671         * khtml/dom/dom_string.cpp:
1672         (DOM::DOMString::substring): Expose method already on DOMStrimgImpl.
1673         * khtml/dom/dom_string.h: Ditto.
1674         * khtml/editing/htmlediting.cpp:
1675         (khtml::CompositeEditCommand::rebalanceWhitespace): New helper to create and execute a
1676         RebalanceWhitespaceCommand instance.
1677         (khtml::DeleteSelectionCommand::doApply): Call rebalanceWhitespace() after running command.
1678         (khtml::InsertLineBreakCommand::doApply): Ditto.
1679         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
1680         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
1681         (khtml::InsertTextCommand::input): Ditto.
1682         (khtml::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand): New command.
1683         (khtml::RebalanceWhitespaceCommand::~RebalanceWhitespaceCommand): Ditto.
1684         (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
1685         (khtml::RebalanceWhitespaceCommand::doUnapply): Ditto.
1686         (khtml::RebalanceWhitespaceCommand::preservesTypingStyle): Ditto.
1687         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
1688         * khtml/editing/htmlediting.h: Ditto.
1689         (khtml::RebalanceWhitespaceCommand::): Ditto.
1690
1691 2004-12-05  Darin Adler  <darin@apple.com>
1692
1693         - fixed small problem in my check-in from yesterday
1694
1695         * kwq/KWQEvent.mm:
1696         (positionForEvent): Get location from event without raising exception if it's the wrong type.
1697         (clickCountForEvent): Same, for clickCount.
1698         (QMouseEvent::QMouseEvent): Use the new helper functions so this can be constructed even with
1699         the wrong type of NSEvent. Required for cases where a keyboard event causes a "click" and we need
1700         to synthesize a QMouseEvent for KHTML internal use, using the key down NSEvent.
1701
1702 2004-12-04  Darin Adler  <darin@apple.com>
1703
1704         Reviewed by John.
1705
1706         - fixed <rdar://problem/3878329> REGRESSION (169-170): colors are wrong for my.yahoo.com due to CSS background parsing changes
1707
1708         * khtml/css/cssparser.cpp: (CSSParser::parseBackgroundShorthand): Changed function so it doesn't rely on the position
1709         attribute being at the end of the array and then moved position attribute before color attribute so it takes precedence.
1710         Since "0" can be both the X coordinate of a position and a legal color (meaning black), we need to do position first.
1711
1712         - fixed <rdar://problem/3760869> click events for input type=button or type=checkbox don't have flags like shiftKey set
1713
1714         * khtml/rendering/render_form.h: Remove unused RenderFormElement fields.
1715         * khtml/rendering/render_form.cpp:
1716         (RenderFormElement::RenderFormElement): Take out code to set a bunch of unused fields.
1717         (RenderFormElement::slotClicked): Change to create the QMouseEvent from the actual mouse event rather than
1718         creating it with all the flags set to 0, using the new QMouseEvent constructor that does so.
1719
1720         * kwq/KWQEvent.h: Added constructor that takes no parameters which uses the current event from AppKit.
1721         Made the click count getter const and added an isDoubleClick that matches the logic used elsewhere.
1722         Added a fixState helper method so the constructors can save code.
1723         * kwq/KWQEvent.mm:
1724         (QMouseEvent::QMouseEvent): Factored out the state-fixing code that was in the two existing constructors
1725         and added a third constructor that uses the "current event" from AppKit (used above).
1726         (QMouseEvent::fixState): Compute state and click count based on event type.
1727
1728         - fixed first symptom of <rdar://problem/3830936> REGRESSION (125-165): crash due to null font family, hang at changeforamerica.com
1729
1730         * kwq/KWQFontFamily.mm: (KWQFontFamily::getNSFamily): Handle empty strings specially so we don't run into trouble when
1731         the family name is a null string. This prevents the crash, but there are still other problems that may have the same
1732         underlying cause in CSS.
1733
1734         - fixed <rdar://problem/3829808> Safari crashes when adding a DOM node that was removed from an XMLHTTP request result
1735
1736         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::insertedIntoDocument):
1737         Added nil check before calling scheduleRelayout. This is new code so the nil-dereference is a recent regression.
1738
1739 2004-12-03  Chris Blumenberg  <cblu@apple.com>
1740
1741         New fixes for:
1742         <rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
1743         <rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
1744         <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
1745         <rdar://problem/3902749> REGRESSION (Tiger): missing image symbol does not appear
1746
1747         Reviewed by darin, rjw, kocienda.
1748
1749         * khtml/misc/loader.cpp:
1750         (CachedObject::~CachedObject):
1751         (CachedCSSStyleSheet::checkNotify):
1752         (Loader::servePendingRequests):
1753         (Loader::slotFinished):
1754         (Loader::slotReceivedResponse):
1755         (Cache::requestImage):
1756         (Cache::requestScript):
1757         * khtml/misc/loader.h:
1758         (khtml::CachedObject::CachedObject):
1759         (khtml::CachedObject::response):
1760         (khtml::CachedObject::allData):
1761         * kwq/KWQKJobClasses.h:
1762         * kwq/KWQKJobClasses.mm:
1763         (KIO::TransferJobPrivate::TransferJobPrivate):
1764         (KIO::TransferJobPrivate::~TransferJobPrivate):
1765         (KIO::TransferJob::TransferJob):
1766         (KIO::TransferJob::assembleResponseHeaders):
1767         (KIO::TransferJob::retrieveCharset):
1768         (KIO::TransferJob::emitResult):
1769         (KIO::TransferJob::emitReceivedResponse):
1770         * kwq/KWQLoader.h:
1771         * kwq/KWQLoader.mm:
1772         (KWQHeaderStringFromDictionary):
1773         (KWQCheckCacheObjectStatus):
1774         (KWQIsResponseURLEqualToURL):
1775         (KWQResponseURL):
1776         (KWQResponseMIMEType):
1777         (KWQCacheObjectExpiresTime):
1778         (khtml::CachedObject::setResponse):
1779         (khtml::CachedObject::setAllData):
1780         * kwq/KWQPixmap.h:
1781         * kwq/KWQPixmap.mm:
1782         (QPixmap::QPixmap):
1783         * kwq/KWQResourceLoader.mm:
1784         (-[KWQResourceLoader finishJobAndHandle:]):
1785         (-[KWQResourceLoader cancel]):
1786         (-[KWQResourceLoader reportError]):
1787         (-[KWQResourceLoader finishWithData:]):
1788         * kwq/KWQSignal.h:
1789         * kwq/KWQSignal.mm:
1790         (KWQSignal::call):
1791         * kwq/KWQSlot.h:
1792         * kwq/KWQSlot.mm:
1793         (KWQSlot::KWQSlot):
1794         (KWQSlot::call):
1795         * kwq/WebCoreBridge.h:
1796         * kwq/WebCoreResourceLoader.h:
1797
1798 2004-12-04  Darin Adler  <darin@apple.com>
1799
1800         Reviewed by John.
1801
1802         - fixed <rdar://problem/3876093> REGRESSION (166-167): Setting slider control's value from JavaScript has no effect (breaks RSS)
1803
1804         * khtml/rendering/render_form.cpp:
1805         (RenderSlider::updateFromElement): Call setValue to update the value of the DOM element rather than
1806         modifying the m_value data member directly. We don't use m_value at all for sliders now, and in fact
1807         the code relies on the fact that m_value is null. Setting m_value to a non-null value was causing the bug.
1808         (RenderSlider::slotSliderValueChanged): Ditto.
1809
1810 2004-12-03  John Sullivan  <sullivan@apple.com>
1811
1812         Reviewed by Ken.
1813         
1814         - fixed <rdar://problem/3889411> REGRESSION (125-172): repro crash in 
1815         khtml::BackgroundLayer::cullEmptyLayers
1816
1817         * khtml/rendering/render_style.cpp:
1818         (BackgroundLayer::cullEmptyLayers):
1819         added missing nil check
1820
1821 === Safari-173 ===
1822
1823 2004-12-03  Ken Kocienda  <kocienda@apple.com>
1824
1825         Reviewed by me
1826
1827         Roll out some recent changes by Chris that caused a performance regression.
1828         Fix is in hand, but it is a little risky this close to a submission. So,
1829         we have decided to roll back the change with the regression and roll in
1830         the new code after we submit.
1831
1832         * khtml/css/cssproperties.c:
1833         (hash_prop):
1834         (findProp):
1835         * khtml/css/cssvalues.c:
1836         (hash_val):
1837         (findValue):
1838         * khtml/misc/htmlattrs.c:
1839         (hash_attr):
1840         (findAttr):
1841         * khtml/misc/htmltags.c:
1842         (hash_tag):
1843         (findTag):
1844         * khtml/misc/loader.cpp:
1845         (CachedObject::~CachedObject):
1846         (CachedObject::setResponse):
1847         (CachedCSSStyleSheet::checkNotify):
1848         (Loader::servePendingRequests):
1849         (Loader::slotFinished):
1850         (Loader::slotReceivedResponse):
1851         (Cache::requestImage):
1852         (Cache::requestScript):
1853         * khtml/misc/loader.h:
1854         (khtml::CachedObject::CachedObject):
1855         (khtml::CachedObject::response):
1856         * kwq/KWQKJobClasses.h:
1857         * kwq/KWQKJobClasses.mm:
1858         (KIO::TransferJobPrivate::TransferJobPrivate):
1859         (KIO::TransferJobPrivate::~TransferJobPrivate):
1860         (KIO::TransferJob::TransferJob):
1861         (KIO::TransferJob::assembleResponseHeaders):
1862         (KIO::TransferJob::retrieveCharset):
1863         (KIO::TransferJob::emitResult):
1864         (KIO::TransferJob::emitReceivedResponse):
1865         * kwq/KWQLoader.h:
1866         * kwq/KWQLoader.mm:
1867         (KWQHeaderStringFromDictionary):
1868         (KWQCheckCacheObjectStatus):
1869         (KWQRetainResponse):
1870         (KWQReleaseResponse):
1871         (KWQIsResponseURLEqualToURL):
1872         (KWQResponseURL):
1873         (KWQResponseMIMEType):
1874         (KWQResponseTextEncodingName):
1875         (KWQResponseHeaderString):
1876         (KWQCacheObjectExpiresTime):
1877         (KWQLoader::KWQLoader):
1878         * kwq/KWQPixmap.h:
1879         * kwq/KWQPixmap.mm:
1880         (QPixmap::QPixmap):
1881         * kwq/KWQResourceLoader.mm:
1882         (-[KWQResourceLoader finishJobAndHandle]):
1883         (-[KWQResourceLoader cancel]):
1884         (-[KWQResourceLoader reportError]):
1885         (-[KWQResourceLoader finish]):
1886         * kwq/KWQSignal.h:
1887         * kwq/KWQSignal.mm:
1888         (KWQSignal::call):
1889         * kwq/KWQSlot.h:
1890         * kwq/KWQSlot.mm:
1891         (KWQSlot::KWQSlot):
1892         (KWQSlot::call):
1893         * kwq/WebCoreBridge.h:
1894         * kwq/WebCoreResourceLoader.h:
1895
1896 2004-12-03  John Sullivan  <sullivan@apple.com>
1897
1898         Reviewed by Chris.
1899         
1900         - fixed <rdar://problem/3903990> can't tab to all items on www.google.com any more (other pages too?)
1901
1902         * kwq/KWQKHTMLPart.mm:
1903         (KWQKHTMLPart::nextKeyViewInFrameHierarchy):
1904         when checking whether we moved the focus to another view, make sure we didn't "move" it to
1905         our documentView, because that's no move at all.
1906
1907 2004-12-03  Darin Adler  <darin@apple.com>
1908
1909         Reviewed by Vicki.
1910
1911         - fixed <rdar://problem/3901109> REGRESSION (171-172): repro crash in DOM::NodeImpl::setChanged at chick-fil-a.com
1912
1913         * khtml/css/css_valueimpl.cpp: (DOM::CSSMutableStyleDeclarationImpl::CSSMutableStyleDeclarationImpl):
1914         Added missing initialization for base class and node pointer.
1915
1916         - fixed a few places that could leave dangling node pointers
1917
1918         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::~HTMLBodyElementImpl):
1919         Clear out the node pointer when the node is destroyed.
1920         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::~HTMLElementImpl): Ditto.
1921
1922 2004-12-03  Chris Blumenberg  <cblu@apple.com>
1923
1924         Fix for performance regression. My original patch added a signal for passing the data of a resource to its WebCore cache object. This patch passes the data with the preexisting "finished" symbol so we make less calls. 
1925         Fixed: <rdar://problem/3903173> REGRESSION (172-TOT): assertion failure and crash in slotAllData logging into hotmail account
1926
1927         Reviewed by rjw.
1928
1929         * khtml/misc/loader.cpp:
1930         (Loader::servePendingRequests): pass data param to slotFinished, removed allData signal
1931         (Loader::slotFinished): take data param
1932         * khtml/misc/loader.h:
1933         * kwq/KWQKJobClasses.h:
1934         * kwq/KWQKJobClasses.mm:
1935         (KIO::TransferJob::TransferJob): have m_result take a data param, removed m_allData
1936         (KIO::TransferJob::emitResult): take data param and pass it
1937         * kwq/KWQResourceLoader.mm:
1938         (-[KWQResourceLoader finishJobAndHandle:]): take data param and pass it
1939         (-[KWQResourceLoader cancel]): pass nil for data
1940         (-[KWQResourceLoader reportError]): ditto
1941         (-[KWQResourceLoader finishWithData:]): pass data
1942         * kwq/KWQSlot.mm:
1943         (KWQSlot::KWQSlot): pass data param to slotFinished
1944         (KWQSlot::call): added support for slotFinished_Loader, removed slotAllData
1945
1946 2004-12-03  Ken Kocienda  <kocienda@apple.com>
1947
1948         Reviewed by John
1949
1950         Did some clean up in the Position class as a result of trying to write some new layout
1951         tests and discovering a bug along the way.
1952
1953         I removed these three functions from the Position class:
1954         
1955         1. bool isFirstRenderedPositionOnLine() const;
1956         2. bool isLastRenderedPositionOnLine() const;
1957         3. static bool renderersOnDifferentLine(RenderObject *r1, long o1, RenderObject *r2, long o2);
1958         4. bool inFirstEditableInRootEditableElement() const;
1959
1960         The first two have replacements in the VisiblePosition class, and some code has been
1961         moved to use these new variants. The third function was a helper used only by these
1962         first two function, and can be removed as well. The fourth function was not used by anyone.
1963
1964         * khtml/editing/htmlediting.cpp:
1965         (khtml::InsertTextCommand::input): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
1966         * khtml/editing/visible_position.cpp:
1967         (khtml::visiblePositionsOnDifferentLines): Added an additional check for blocks to this function.
1968         Incorrect results were being returned when asking about positions at the starts of blocks.
1969         * khtml/xml/dom_position.cpp:
1970         (DOM::Position::previousCharacterPosition): Change over to use VisiblePosition isFirstVisiblePositionOnLine().
1971         (DOM::Position::nextCharacterPosition): Change over to use VisiblePosition isLastVisiblePositionOnLine().
1972         (DOM::Position::rendersInDifferentPosition): Removed use of #3 helper in a log message. We can live without it.
1973         * khtml/xml/dom_position.h: Update header for deletions.
1974
1975 2004-12-03  Ken Kocienda  <kocienda@apple.com>
1976
1977         Reviewed by John
1978
1979         Terminology change in execCommand command identifiers. Specifically, the name of 
1980         "InsertNewline" command has been changed to "InsertLineBreak". This matches the 
1981         terminology used by AppKit. It is also more accurate, since the insertion of a
1982         "br" element is what the command does. The inspiration for this change is so the 
1983         -insertNewline AppKit method can be mapped to insert a new "div" element in 
1984         a document and avoid ambiguity with what the javascript editing command does.
1985         
1986         * khtml/editing/jsediting.cpp
1987         * layout-tests/editing/deleting/delete-tab-004.html
1988         * layout-tests/editing/editing.js
1989         * layout-tests/editing/inserting/insert-3654864-fix.html
1990         * layout-tests/editing/inserting/insert-3659587-fix.html
1991         * layout-tests/editing/inserting/insert-3775316-fix.html
1992         * layout-tests/editing/inserting/insert-3800346-fix.html
1993         * layout-tests/editing/inserting/insert-br-001.html
1994         * layout-tests/editing/inserting/insert-br-002.html
1995         * layout-tests/editing/inserting/insert-br-003.html
1996         * layout-tests/editing/inserting/insert-br-004.html
1997         * layout-tests/editing/inserting/insert-br-005.html
1998         * layout-tests/editing/inserting/insert-br-006.html
1999         * layout-tests/editing/inserting/insert-br-007.html
2000         * layout-tests/editing/inserting/insert-br-008.html
2001         * layout-tests/editing/inserting/insert-tab-004.html
2002         * layout-tests/editing/inserting/insert-text-with-newlines.html
2003         * layout-tests/editing/pasteboard/paste-text-010.html
2004
2005 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2006
2007         Reviewed by John
2008
2009         Fix for this bug:
2010         
2011         <rdar://problem/3786362> REGRESSION (Mail): pasted text loses one newline
2012
2013         * khtml/editing/htmlediting.cpp:
2014         (khtml::InsertLineBreakCommand::doApply): Added check for strict mode before adding an extra br element
2015         at the end of a block. This is only necessary in quirks mode. Also, lower-case "br" used to make element.
2016         (khtml::ReplaceSelectionCommand::doApply): If the replacement adds a br element as the last element
2017         in a block and the document is in quirks mode, add an additional br to make the one in the 
2018         replacement content show up. This turns out to be much the same logic as is done in InsertLineBreakCommand.
2019         * layout-tests/editing/inserting/insert-3786362-fix-expected.txt: Added.
2020         * layout-tests/editing/inserting/insert-3786362-fix.html: Added.
2021
2022 2004-12-02  Richard Williamson   <rjw@apple.com>
2023
2024         Fixed <rdar://problem/3841332> REGRESSION (125.9-167u): repro crash in -[KWQPageState invalidate] involving .Mac images
2025
2026         Ensure that the document is cleared when leaving a non-HTML page.  This ensures that
2027         the b/f cache won't incorrectly trash the previous state when restoring.
2028
2029         Reviewed by John.
2030
2031         * kwq/WebCoreBridge.h:
2032         * kwq/WebCoreBridge.mm:
2033         (-[WebCoreBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
2034         (-[WebCoreBridge canCachePage]):
2035         (-[WebCoreBridge clear]):
2036
2037 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2038
2039         Reviewed by Richard
2040
2041         Fix for this bug:
2042         
2043         <rdar://problem/3857775> 8A293: Mail.app crashes converting copy-pasted text into plain text
2044
2045         * khtml/xml/dom2_rangeimpl.cpp:
2046         (DOM::RangeImpl::commonAncestorContainer): Return the document element if no common ancestor container
2047         was found. This can happen in cases where the DOM was built from malformed markup (as in the case
2048         of this bug where there is content after the body tag). Did a little code clean up as well.
2049         (DOM::RangeImpl::compareBoundaryPoints): Made code more robust by adding some null checks.
2050
2051 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2052
2053         Reviewed by Chris
2054
2055         Fix for this bug:
2056         
2057         <rdar://problem/3668157> REGRESSION (Mail): shift-click deselects when selection was created right-to-left
2058
2059         * khtml/khtml_part.cpp:
2060         (KHTMLPart::handleMousePressEventSingleClick): Use RangeImpl::compareBoundaryPoints
2061         to figure out which end of the selection to extend.
2062
2063 2004-12-02  David Harrison  <harrison@apple.com>
2064
2065         Reviewed by Ken Kocienda.
2066
2067                 <rdar://problem/3834917> REGRESSION (Mail): double-clicking blank line selects end of previous line
2068                 Fixed originally reported bug plus the case of double-clicking whitespace at the beginning of a line, which has a similar result.
2069
2070         * khtml/editing/visible_text.cpp:
2071         (khtml::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
2072         (khtml::SimplifiedBackwardsTextIterator::handleTextNode):
2073         (khtml::SimplifiedBackwardsTextIterator::handleReplacedElement):
2074         (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode):
2075         (khtml::SimplifiedBackwardsTextIterator::emitCharacter):
2076         Distinguish BR from whitespace.
2077         * khtml/editing/visible_text.h:
2078         Distinguish BR from whitespace.
2079         * khtml/editing/visible_units.cpp:
2080         (khtml::previousWordBoundary):
2081         Use UPSTREAM visible position now that SimplifiedBackwardsTextIterator distinguishes BR from whitespace.  Otherwise, double-clicking at end of line would result in caret selection at start of next line. 
2082
2083 2004-12-02  Ken Kocienda  <kocienda@apple.com>
2084
2085         Reviewed by John
2086
2087         Fix for this bug:
2088         
2089         <rdar://problem/3900996> Crash dragging past end of contentEditable DIV, at DOM::RangeImpl::pastEndNode() const + 24
2090
2091         * khtml/xml/dom_position.cpp:
2092         (DOM::Position::equivalentRangeCompliantPosition): Fixed this function so that it constrains the offset
2093         of the position to be >= 0 and <= number of kids of its node. Not doing this constraining led to a DOM
2094         exception trying to use a Position returned from this function to set the boundary point of a Range (which
2095         eventually led to the crash). Since this crash happened, it seems like this function was failing in its
2096         contract to return a range-compliant position, hence the need for this fix.
2097
2098 2004-12-01  Ken Kocienda  <kocienda@apple.com>
2099
2100         Reviewed by me
2101
2102         Moving code only.
2103
2104         * khtml/editing/htmlediting.cpp: Move ReplaceSelectionCommand into alphabetical order with
2105         regard to other editing commands. The class had a name change ages ago, and it was never
2106         moved.
2107         * khtml/editing/htmlediting.h: Ditto.
2108
2109 2004-12-01  Ken Kocienda  <kocienda@apple.com>
2110
2111         Reviewed by Hyatt
2112         
2113         Some improvements for paste, including some new code to annotate
2114         whitespace when writing to the pasteboard to ensure that the meaning
2115         of the markup on the pasteboard is unambiguous.
2116         
2117         There is also new code for reading this annotated markup from the pasteboard,
2118         removing the nodes that were added only to prevent ambiguity.
2119
2120         * WebCore.pbproj/project.pbxproj: Added html_interchange.h and html_interchange.cpp files.
2121         The header should have been added earlier, but I did not do so.
2122         * khtml/editing/html_interchange.cpp: Added.
2123         (convertHTMLTextToInterchangeFormat):
2124         * khtml/editing/html_interchange.h: Added some new constants for use with whitespace annotations.
2125         * khtml/editing/htmlediting.cpp:
2126         (khtml::ReplacementFragment::ReplacementFragment): Now looks for and removes annotations added for whitespace.
2127         Also fixed a bug in the code that counts blocks in a fragment.
2128         (khtml::ReplacementFragment::isInterchangeConvertedSpaceSpan): New helper. Recognizes annotation spans.
2129         (khtml::ReplacementFragment::insertNodeBefore): New helper.
2130         (khtml::ReplaceSelectionCommand::doApply): Fixed a bug in the code that sets the start position
2131         for the replacement after deleting. This was causing a bug when pasting at the end of a block.
2132         * khtml/editing/htmlediting.h: Add some new declarations.
2133         * khtml/xml/dom2_rangeimpl.cpp:
2134         (DOM::RangeImpl::toHTML): Calls to startMarkup now pass true for the new annotate flag.
2135         * khtml/xml/dom_nodeimpl.cpp:
2136         (NodeImpl::stringValueForRange): New helper.
2137         (NodeImpl::renderedText): New helper to return only the rendered text in a node.
2138         (NodeImpl::startMarkup): Now takes an additional flag to control whether interchange annotations
2139         should be added. Called by the paste code.
2140         * khtml/xml/dom_nodeimpl.h: Added and modified function declarations.
2141
2142         New test to check the khtml::ReplaceSelectionCommand::doApply fix.
2143         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: Added.
2144         * layout-tests/editing/pasteboard/paste-text-010.html: Added.
2145
2146 2004-11-30  Chris Blumenberg  <cblu@apple.com>
2147
2148         * ChangeLog: removed conflict marker
2149
2150 2004-11-30  Chris Blumenberg  <cblu@apple.com>
2151
2152         Fixed:
2153         <rdar://problem/3685766> WebDataSource is missing subresources when they use cached WebCore data
2154         <rdar://problem/3722434> REGRESSION?: Assertion failure trying to drag image in iframe (itapema.sc.gov.br)
2155
2156         Reviewed by darin.
2157
2158         * khtml/misc/loader.cpp:
2159         (CachedObject::~CachedObject): release m_allData
2160         (CachedObject::setAllData): new
2161         (Loader::servePendingRequests): connect slotAllData
2162         (Loader::slotAllData): new
2163         (Cache::requestImage): tweak
2164         * khtml/misc/loader.h:
2165         (khtml::CachedObject::CachedObject): set allData to 0
2166         (khtml::CachedObject::allData): new
2167         * kwq/KWQKJobClasses.h:
2168         * kwq/KWQKJobClasses.mm:
2169         (KIO::TransferJob::TransferJob): set m_allData
2170         (KIO::TransferJob::emitAllData): new
2171         * kwq/KWQLoader.mm:
2172         (KWQCheckCacheObjectStatus): pass WebKit the data instead of the length of the resource
2173         * kwq/KWQResourceLoader.mm:
2174         (-[KWQResourceLoader finishWithData:]): renamed to pass all data for the resource
2175         * kwq/KWQSlot.mm:
2176         (KWQSlot::KWQSlot): support for slotAllData
2177         (KWQSlot::call):
2178         * kwq/WebCoreBridge.h:
2179         * kwq/WebCoreResourceLoader.h:
2180
2181 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2182
2183         Reviewed by John.
2184
2185 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2186
2187         Reviewed by John.
2188
2189         <rdar://problem/3805311> REGRESSION (159-163): onload in dynamically written document not called (causes blank search page at Japanese EPP site, many others)
2190
2191         * khtml/khtml_part.cpp:
2192         (KHTMLPart::begin): call setParsing on document here after opening
2193         - from now on we'll only set parsing to true for a document open
2194         caused by page loading, not a programmatic one.
2195         * khtml/xml/dom_docimpl.cpp:
2196         (DocumentImpl::open): don't setParsing to true here any more.
2197
2198 2004-11-30  Maciej Stachowiak  <mjs@apple.com>
2199
2200         Reviewed by John.
2201
2202         - fix recent regression from collection perf fixes.
2203         
2204         * khtml/html/html_miscimpl.cpp:
2205         (HTMLFormCollectionImpl::updateNameCache): Look up the name
2206         attribute in the name cache, not the id cache (d'oh!)
2207
2208 2004-11-30  Darin Adler  <darin@apple.com>
2209
2210         Reviewed by Ken.
2211
2212         - rolled in a KDE fix for a problem that may underlie a number of crashes
2213
2214         * khtml/xml/dom2_rangeimpl.cpp: (RangeImpl::compareBoundaryPoints): Rolled in a change from
2215         the KDE guys to fix a subtle problem. Code said "n = n =".
2216
2217         - rolled in a KDE fix for a containingBlock crash
2218
2219         * khtml/rendering/render_object.cpp: Roll in a change from KDE that adds frameset to the list of
2220         elements that can not be a containingBlock. They said this fixes a crash, although I did not look
2221         into that further.
2222
2223         - fixed <rdar://problem/3884660> 8A305: Repro crash in QScrollBar::setValue (affects Safari RSS)
2224
2225         * kwq/KWQButton.mm:
2226         (-[KWQButton initWithQButton:]): Set up target and action here instead of in caller.
2227         (-[KWQButton detachQButton]): Added.
2228         (-[KWQButton sendConsumedMouseUpIfNeeded]): Check button for nil instead of checking target.
2229         (-[KWQButton mouseDown:]): Add calls to QWidget::beforeMouseDown/afterMouseDown.
2230         (-[KWQButton widget]): Added.
2231         (-[KWQButton becomeFirstResponder]): Added check to handle when button is 0.
2232         (-[KWQButton resignFirstResponder]): Ditto.
2233         (-[KWQButton canBecomeKeyView]): Ditto.
2234         (QButton::QButton): Remove target and action setup; handled in KWQButton now.
2235         (QButton::~QButton): Call detachQButton instead of setTarget:nil.
2236
2237         * kwq/KWQComboBox.mm:
2238         (QComboBox::~QComboBox): Call detachQComboBox.
2239         (-[KWQPopUpButtonCell detachQComboBox]): Added.
2240         (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]): Handle case where box is 0.
2241         (-[KWQPopUpButtonCell setHighlighted:]): Ditto.
2242         (-[KWQPopUpButton action:]): Ditto.
2243         (-[KWQPopUpButton widget]): Tweaked.
2244         (-[KWQPopUpButton mouseDown:]): Added. Calls QWidget::beforeMouseDown/afterMouseDown.
2245         (-[KWQPopUpButton becomeFirstResponder]): Handle case where widget is 0.
2246         (-[KWQPopUpButton resignFirstResponder]): Ditto.
2247         (-[KWQPopUpButton canBecomeKeyView]): Ditto.
2248
2249         * kwq/KWQLineEdit.mm: (QLineEdit::~QLineEdit): Updated to use new detachQLineEdit name.
2250
2251         * kwq/KWQListBox.mm:
2252         (-[KWQTableView mouseDown:]): Added. Calls QWidget::beforeMouseDown/afterMouseDown.
2253
2254         * kwq/KWQScrollBar.h: Removed m_scroller field.
2255         * kwq/KWQScrollBar.mm:
2256         (-[KWQScrollBar initWithQScrollBar:]): Rearranged a little bit.
2257         (-[KWQScrollBar detachQScrollBar]): Added.
2258         (-[KWQScrollBar widget]): Added.
2259         (-[KWQScrollBar mouseDown:]): Added.  Calls QWidget::beforeMouseDown and afterMouseDown.
2260         (QScrollBar::QScrollBar): Changed to no longer set m_scroller.
2261         (QScrollBar::~QScrollBar): Changed to call detachQScrollBar. No longer calls removeFromSuperview.
2262         (QScrollBar::setValue): Chagned to use getView instad of m_scrollBar.
2263         (QScrollBar::setKnobProportion): Ditto.
2264         (QScrollBar::scrollbarHit): Ditto.
2265
2266         * kwq/KWQScrollView.mm:
2267         (QScrollView::addChild): Changed to call QWidget to add to superview to accomodate the
2268         hack where we don't remove right away when doing mouse tracking.
2269         (QScrollView::removeChild): Changed to call QWidget to remove from superview to accomodate
2270         the hack where we don't add right away when doing mouse tracking.
2271
2272         * kwq/KWQSlider.h: Added destructor.
2273         * kwq/KWQSlider.mm:
2274         (-[KWQSlider initWithQSlider:]): Tweaked a little.
2275         (-[KWQSlider detachQSlider]): Added.
2276         (-[KWQSlider mouseDown:]): Added call to QWidget::beforeMouseDown/afterMouseDown.
2277         (-[KWQSlider widget]): Added.
2278         (QSlider::~QSlider): Added. Calls detachQSlider.
2279
2280         * kwq/KWQTextArea.h: Added detachQTextEdit method.
2281         * kwq/KWQTextArea.mm:
2282         (-[KWQTextArea detachQTextEdit]): Added.
2283         (-[KWQTextArea textDidChange:]): Added check for widget of 0.
2284         (-[KWQTextArea becomeFirstResponder]): Ditto.
2285         (-[KWQTextArea nextKeyView]): Ditto.
2286         (-[KWQTextArea previousKeyView]): Ditto.
2287         (-[KWQTextArea drawRect:]): Ditto.
2288         (-[KWQTextAreaTextView insertTab:]): Ditto.
2289         (-[KWQTextAreaTextView insertBacktab:]): Ditto.
2290         (-[KWQTextAreaTextView shouldDrawInsertionPoint]): Ditto.
2291         (-[KWQTextAreaTextView selectedTextAttributes]): Ditto.
2292         (-[KWQTextAreaTextView mouseDown:]): Ditto.
2293         (-[KWQTextAreaTextView keyDown:]): Ditto.
2294         (-[KWQTextAreaTextView keyUp:]): Ditto.
2295
2296         * kwq/KWQTextEdit.h: Added ~QTextEdit.
2297         * kwq/KWQTextEdit.mm: (QTextEdit::~QTextEdit): Added. Calls detachQTextEdit.
2298
2299         * kwq/KWQTextField.h: Changed invalidate to detachQLineEdit.
2300         * kwq/KWQTextField.mm: (-[KWQTextFieldController detachQLineEdit]): Changed.
2301
2302         * kwq/KWQWidget.h: Added addToSuperview/removeFromSuperview for use from QScrollView.
2303         Added beforeMouseDown and afterMouseDown for use in widget implementations.
2304         Removed unused hasMouseTracking function.
2305         * kwq/KWQWidget.mm:
2306         (QWidget::QWidget): Initialize two new fields.
2307         (QWidget::~QWidget): Added code to remove view when widget is destroyed.
2308         (QWidget::getOuterView): Remove unneeded exception blocking since we're just caling superview.
2309         (QWidget::addToSuperview): Added.
2310         (QWidget::removeFromSuperview): Added.
2311         (QWidget::beforeMouseDown): Added.
2312         (QWidget::afterMouseDown): Added.
2313
2314         * khtml/rendering/render_layer.cpp:
2315         (RenderLayer::setHasHorizontalScrollbar): Remove parent parameter; let addChild call addSubview:.
2316         (RenderLayer::setHasVerticalScrollbar): Ditto.
2317
2318 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2319
2320         Reviewed by John
2321
2322         Fix for this bug:
2323         
2324         <rdar://problem/3863031> REGRESSION (Mail): caret continues flashing while mouse is down
2325
2326         * khtml/khtml_part.cpp:
2327         (KHTMLPart::timerEvent): Add a check for whether the mouse is down. Keep the caret drawn
2328         with no blink if it is.
2329
2330 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2331
2332         Reviewed by John
2333
2334         Fix for this bug:
2335         
2336         <rdar://problem/3861602> cursor gets lost trying to backspace to delete a form control
2337
2338         * khtml/khtml_part.cpp:
2339         (KHTMLPart::setFocusNodeIfNeeded): This function would clear the selection if a <button>
2340         or <input type=image> was checked for focus since these elements are keyboard-focusable,
2341         but not mouse focusable. Also, this function did not work hard enough to set the focused
2342         node, and was content to clear it if the first element checked failed the test, rather
2343         than looking more at parents. This would have the effect of clearing, then resetting the
2344         focus on a DIV containing a button or image with content on either side of it in the
2345         process of arrowing over such content.
2346
2347 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2348
2349         Reviewed by John
2350
2351         * khtml/editing/htmlediting.cpp:
2352         (khtml::ReplaceSelectionCommand::doApply): Fix smart replace, which I (knowingly) broke with yesterday's checkin.
2353         Also, call updateLayout() in one more place to prevent stale information being returned from caretMaxOffset().
2354         * khtml/khtml_part.cpp:
2355         (KHTMLPart::isCharacterSmartReplaceExempt): Make this virtual and always return true. This gets rid of an
2356         ugly APPLE_CHANGES block and use of KWQ(part) in ReplaceSelectionCommand.
2357         * khtml/khtml_part.h: To help out with the isCharacterSmartReplaceExempt cleanup, add declaration.
2358         * kwq/KWQKHTMLPart.h: To help out with the isCharacterSmartReplaceExempt cleanup, make 
2359         isCharacterSmartReplaceExempt virtual.
2360
2361 2004-11-30  Ken Kocienda  <kocienda@apple.com>
2362
2363         Reviewed by me
2364
2365         * khtml/editing/htmlediting.cpp:
2366         (khtml::ReplacementFragment::mergeEndNode): Fixed one-line coding mistake that created an endless loop.
2367         Seemed simple enough to land without review.
2368
2369 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2370
2371         Reviewed by Chris
2372     
2373         Rewrite of paste code (specifically the ReplaceSelectionCommand class). Many more cases
2374         are handled correctly now, including selections that span multiple blocks, and cases
2375         where content on the pasteboard ends in newlines (or what appear to be newlines to a
2376         user, really block ends or BRs). I also made one small, but important change in the 
2377         copy code to annotate the markup written to the pasteboard to support these selections 
2378         ending in newlines.
2379
2380         New header that defines a couple of constants used in copying and pasting.
2381
2382         * ForwardingHeaders/editing/html_interchange.h: Added.
2383         * khtml/editing/html_interchange.h: Added.
2384         
2385         Rewrite of the ReplaceSelectionCommand. There are several new helper functions, as well
2386         as a new helper class, ReplacementFragment, which encapsulates information and functions
2387         pertaining to a document fragment that is being inserted into a document.
2388         
2389         * khtml/editing/htmlediting.cpp:
2390         (khtml::ReplacementFragment::ReplacementFragment):
2391         (khtml::ReplacementFragment::~ReplacementFragment):
2392         (khtml::ReplacementFragment::firstChild): Simple accessor.
2393         (khtml::ReplacementFragment::lastChild): Ditto.
2394         (khtml::ReplacementFragment::mergeStartNode): Looks at the nodes in a fragment and determines
2395         the starting node to use for merging into the block containing the start of the selection.
2396         (khtml::ReplacementFragment::mergeEndNode): Same as above, but for the end of the selection.
2397         (khtml::ReplacementFragment::pruneEmptyNodes): Simple helper.
2398         (khtml::ReplacementFragment::isInterchangeNewlineComment): Determines if a node is the
2399         special annotation comment added in by the copy code.
2400         (khtml::ReplacementFragment::removeNode): Simple helper.
2401         (khtml::isComment): Simple helper.
2402         (khtml::isProbablyBlock): Determines if a node is of a type that is usually rendered as a block.
2403         I would like to do better than this some day, but this check will hold us until I can do better.
2404         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand):
2405         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand):
2406         (khtml::ReplaceSelectionCommand::doApply):
2407         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Figures out the right ending selection.
2408         * khtml/editing/htmlediting.h: Declarations for the new ReplacementFragment class.
2409         (khtml::ReplacementFragment::root):
2410         (khtml::ReplacementFragment::type):
2411         (khtml::ReplacementFragment::isEmpty):
2412         (khtml::ReplacementFragment::isSingleTextNode):
2413         (khtml::ReplacementFragment::isTreeFragment):
2414         (khtml::ReplacementFragment::hasMoreThanOneBlock):
2415         (khtml::ReplacementFragment::hasLogicalNewlineAtEnd):
2416         
2417         This smaller set of changes markup generation to add the newline annotation described in the
2418         comment at the start of this entry.
2419         
2420         * khtml/xml/dom2_rangeimpl.cpp:
2421         (DOM::RangeImpl::addCommentToHTMLMarkup): Simple helper.
2422         (DOM::RangeImpl::toHTML): Added new EAnnotateForInterchange default argument to control whether
2423         comment annotations are added to the markup generated.
2424         * khtml/xml/dom2_rangeimpl.h: Add some new declarations.
2425         * kwq/WebCoreBridge.mm:
2426         (-[WebCoreBridge markupStringFromRange:nodes:]): Request that markup resulting from call to 
2427         DOM::RangeImpl::toHTML uses annotations when generating.
2428         
2429         New tests.        
2430
2431         * layout-tests/editing/pasteboard/paste-text-001-expected.txt: Added.
2432         * layout-tests/editing/pasteboard/paste-text-001.html: Added.
2433         * layout-tests/editing/pasteboard/paste-text-002-expected.txt: Added.
2434         * layout-tests/editing/pasteboard/paste-text-002.html: Added.
2435         * layout-tests/editing/pasteboard/paste-text-003-expected.txt: Added.
2436         * layout-tests/editing/pasteboard/paste-text-003.html: Added.
2437         * layout-tests/editing/pasteboard/paste-text-004-expected.txt: Added.
2438         * layout-tests/editing/pasteboard/paste-text-004.html: Added.
2439         * layout-tests/editing/pasteboard/paste-text-005-expected.txt: Added.
2440         * layout-tests/editing/pasteboard/paste-text-005.html: Added.
2441         * layout-tests/editing/pasteboard/paste-text-006-expected.txt: Added.
2442         * layout-tests/editing/pasteboard/paste-text-006.html: Added.
2443         * layout-tests/editing/pasteboard/paste-text-007-expected.txt: Added.
2444         * layout-tests/editing/pasteboard/paste-text-007.html: Added.
2445         * layout-tests/editing/pasteboard/paste-text-008-expected.txt: Added.
2446         * layout-tests/editing/pasteboard/paste-text-008.html: Added.
2447         * layout-tests/editing/pasteboard/paste-text-009-expected.txt: Added.
2448         * layout-tests/editing/pasteboard/paste-text-009.html: Added.
2449
2450 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2451
2452         Reviewed by Harrison
2453
2454         Made two small changes that make it possible for comments to have DOM nodes made for them
2455         when pasting. This relies on some earlier work I did some days ago.
2456
2457         * khtml/xml/dom_nodeimpl.cpp:
2458         (NodeImpl::startMarkup): Get the string from the comment.
2459         * kwq/WebCoreBridge.mm:
2460         (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]): Did some very minor
2461         rearranging. Now passes a flag when creating a contextual fragment, requesting that comments
2462         be included in the DOM.
2463
2464 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2465
2466         Reviewed by Harrison
2467
2468         Added some new helpers to the VisiblePosition class. I will begin to use these when I check in
2469         my improved paste code.
2470
2471         * khtml/editing/visible_position.cpp:
2472         (khtml::blockRelationship)
2473         (khtml::visiblePositionsInDifferentBlocks)
2474         (khtml::isFirstVisiblePositionInBlock)
2475         (khtml::isFirstVisiblePositionInNode)
2476         (khtml::isLastVisiblePositionInBlock)
2477         * khtml/editing/visible_position.h
2478
2479 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2480
2481         Reviewed by Harrison
2482
2483         * khtml/xml/dom_position.cpp:
2484         (DOM::Position::downstream): Fix a bug in downstream that prevented a call with DoNotStayInBlock
2485         specified from obeying that directive. The old code would stop at an outer block boundary in
2486         the case where that block had a block as its first child. The correct behavior is to drill into
2487         that inner block (and continue on drilling down, if possible), to find the correct position.
2488
2489 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2490
2491         Reviewed by Harrison
2492
2493         Small improvements to the node-display debugging helpers.
2494
2495         * khtml/xml/dom_nodeimpl.cpp:
2496         (NodeImpl::displayTree): Make the rootNode be this if there is no rootEditableElement.
2497         * khtml/xml/dom_nodeimpl.h: Make displayNode take a default argument of "" for its string.
2498
2499 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2500
2501         Reviewed by Harrison
2502
2503         * khtml/editing/htmlediting.cpp:
2504         (khtml::DeleteSelectionCommand::handleGeneralDelete): The downstream position in this function 
2505         may need to be adjusted when deleting text off the front part of a text node. This fixes a problem 
2506         I discovered while improving the paste command, where the insertion poitn wound up in the wrong
2507         place after the delete. 
2508
2509 2004-11-29  Ken Kocienda  <kocienda@apple.com>
2510
2511         Reviewed by Harrison
2512
2513         Add a new helper function to insert a paragraph separator. Will be used in my
2514         upcoming paste improvments.
2515
2516         * khtml/editing/htmlediting.cpp: Added function
2517         (khtml::CompositeEditCommand::insertParagraphSeparator)
2518         * khtml/editing/htmlediting.h: Ditto.
2519
2520 2004-11-23  David Harrison  <harrison@apple.com>
2521
2522         Added various comments.
2523
2524         * khtml/editing/htmlediting.cpp:
2525         (khtml::StyleChange::init):
2526         (khtml::ApplyStyleCommand::doApply):
2527         (khtml::ApplyStyleCommand::applyBlockStyle):
2528         (khtml::ApplyStyleCommand::applyInlineStyle):
2529
2530 2004-11-23  David Hyatt  <hyatt@apple.com>
2531
2532         Hit testing in table cells with top/bottom space from vertical alignment didn't work.  I forgot about the
2533         super-secret yPos() lie that table cells do.  Use m_y instead of yPos().
2534
2535         * khtml/rendering/render_block.cpp:
2536         (khtml::RenderBlock::nodeAtPoint):
2537
2538 2004-11-22  David Hyatt  <hyatt@apple.com>
2539
2540         Make sure you can use document.createElement to make a <canvas> element.
2541
2542         * khtml/xml/dom_docimpl.cpp:
2543         (DocumentImpl::createHTMLElement):
2544
2545 2004-11-22  Maciej Stachowiak  <mjs@apple.com>
2546
2547         Reviewed by Dave.
2548
2549         <rdar://problem/3492044> performing JavaScript operations on form elements is slower than WinIE (HTMLFormCollection)
2550         <rdar://problem/3489679> selecting an item on the Apache bugzilla query page is very slow (HTMLFormCollection)
2551         <rdar://problem/3477810> checking 80 check boxes with JavaScript is 10x slower than in IE (HTMLFormCollection)
2552         <rdar://problem/3760962> JavaScript that toggles checkboxes is slow (HTMLCollection,HTMLFormCollection)
2553         
2554         * khtml/ecma/kjs_html.cpp:
2555         (KJS::HTMLDocument::tryGet):
2556         * khtml/html/html_formimpl.cpp:
2557         (DOM::HTMLFormElementImpl::HTMLFormElementImpl):
2558         (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
2559         * khtml/html/html_formimpl.h:
2560         * khtml/html/html_miscimpl.cpp:
2561         (HTMLCollectionImpl::HTMLCollectionImpl):
2562         (HTMLCollectionImpl::~HTMLCollectionImpl):
2563         (HTMLCollectionImpl::CollectionInfo::CollectionInfo):
2564         (HTMLCollectionImpl::CollectionInfo::reset):
2565         (HTMLCollectionImpl::resetCollectionInfo):
2566         (HTMLCollectionImpl::checkForNameMatch):
2567         (appendToVector):
2568         (HTMLCollectionImpl::updateNameCache):
2569         (HTMLCollectionImpl::namedItems):
2570         (HTMLFormCollectionImpl::HTMLFormCollectionImpl):
2571         (HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
2572         (HTMLFormCollectionImpl::item):
2573         (HTMLFormCollectionImpl::updateNameCache):
2574         * khtml/html/html_miscimpl.h:
2575
2576 2004-11-22  David Hyatt  <hyatt@apple.com>
2577
2578         Improve the WebCore cache so that the maximum cacheable object size is scaled based off the total cache
2579         size.
2580         
2581         Reviewed by mjs
2582
2583         * khtml/misc/loader.cpp:
2584         (CachedObject::finish):
2585         (Cache::flush):
2586         (Cache::setSize):
2587         * khtml/misc/loader.h:
2588         (khtml::Cache::maxCacheableObjectSize):
2589
2590 2004-11-22  David Hyatt  <hyatt@apple.com>
2591
2592         Fix for 3673381, huge directory listing so slow it seems like a hang.  Rework painting and hit testing so that
2593         it crawls the line box tree instead of the render tree.  This allows more precise intersection/containment testing
2594         that lets us short circuit earlier when painting and hit testing.
2595         
2596         Reviewed by mjs
2597
2598         * khtml/khtml_part.cpp:
2599         (KHTMLPart::isPointInsideSelection):
2600         * khtml/rendering/render_block.cpp:
2601         (khtml::RenderBlock::paint):
2602         (khtml::RenderBlock::paintChildren):
2603         (khtml::RenderBlock::paintObject):
2604         (khtml::RenderBlock::paintFloats):
2605         (khtml::RenderBlock::nodeAtPoint):
2606         * khtml/rendering/render_block.h:
2607         * khtml/rendering/render_box.cpp:
2608         (RenderBox::nodeAtPoint):
2609         * khtml/rendering/render_box.h:
2610         * khtml/rendering/render_br.h:
2611         * khtml/rendering/render_canvas.cpp:
2612         (RenderCanvas::paint):
2613         * khtml/rendering/render_flow.cpp:
2614         (RenderFlow::paintLines):
2615         (RenderFlow::hitTestLines):
2616         (RenderFlow::caretRect):
2617         (RenderFlow::addFocusRingRects):
2618         (RenderFlow::paintFocusRing):
2619         (RenderFlow::paintOutlines):
2620         (RenderFlow::paintOutlineForLine):
2621         * khtml/rendering/render_flow.h:
2622         * khtml/rendering/render_frames.cpp:
2623         (RenderFrameSet::nodeAtPoint):
2624         * khtml/rendering/render_frames.h:
2625         * khtml/rendering/render_image.cpp:
2626         (RenderImage::nodeAtPoint):
2627         * khtml/rendering/render_image.h:
2628         * khtml/rendering/render_inline.cpp:
2629         (RenderInline::paint):
2630         (RenderInline::nodeAtPoint):
2631         * khtml/rendering/render_inline.h:
2632         * khtml/rendering/render_layer.cpp:
2633         (RenderLayer::paintLayer):
2634         (RenderLayer::hitTest):
2635         (RenderLayer::hitTestLayer):
2636         * khtml/rendering/render_layer.h:
2637         * khtml/rendering/render_line.cpp:
2638         (khtml::InlineBox::paint):
2639         (khtml::InlineBox::nodeAtPoint):
2640         (khtml::InlineFlowBox::flowObject):
2641         (khtml::InlineFlowBox::nodeAtPoint):
2642         (khtml::InlineFlowBox::paint):
2643         (khtml::InlineFlowBox::paintBackgrounds):
2644         (khtml::InlineFlowBox::paintBackground):
2645         (khtml::InlineFlowBox::paintBackgroundAndBorder):
2646         (khtml::InlineFlowBox::paintDecorations):
2647         (khtml::EllipsisBox::paint):
2648         (khtml::EllipsisBox::nodeAtPoint):
2649         (khtml::RootInlineBox::paintEllipsisBox):
2650         (khtml::RootInlineBox::paint):
2651         (khtml::RootInlineBox::nodeAtPoint):
2652         * khtml/rendering/render_line.h:
2653         (khtml::InlineRunBox::paintBackgroundAndBorder):
2654         * khtml/rendering/render_object.cpp:
2655         (RenderObject::hitTest):
2656         (RenderObject::setInnerNode):
2657         (RenderObject::nodeAtPoint):
2658         * khtml/rendering/render_object.h:
2659         (khtml::RenderObject::PaintInfo::PaintInfo):
2660         (khtml::RenderObject::PaintInfo::~PaintInfo):
2661         (khtml::RenderObject::paintingRootForChildren):
2662         (khtml::RenderObject::shouldPaintWithinRoot):
2663         * khtml/rendering/render_table.cpp:
2664         (RenderTable::layout):
2665         (RenderTable::paint):
2666         * khtml/rendering/render_text.cpp:
2667         (simpleDifferenceBetweenColors):
2668         (correctedTextColor):
2669         (InlineTextBox::nodeAtPoint):
2670         (InlineTextBox::paint):
2671         (InlineTextBox::selectionStartEnd):
2672         (InlineTextBox::paintSelection):
2673         (InlineTextBox::paintMarkedTextBackground):
2674         (InlineTextBox::paintDecoration):
2675         (RenderText::posOfChar):
2676         * khtml/rendering/render_text.h:
2677         (khtml::RenderText::paint):
2678         (khtml::RenderText::layout):
2679         (khtml::RenderText::nodeAtPoint):
2680         * khtml/xml/dom2_eventsimpl.cpp:
2681         (MouseEventImpl::computeLayerPos):
2682         * khtml/xml/dom_docimpl.cpp:
2683         (DocumentImpl::prepareMouseEvent):
2684         * kwq/KWQAccObject.mm:
2685         (-[KWQAccObject accessibilityHitTest:]):
2686         * kwq/KWQKHTMLPart.mm:
2687         (KWQKHTMLPart::scrollOverflowWithScrollWheelEvent):
2688         (KWQKHTMLPart::eventMayStartDrag):
2689         (KWQKHTMLPart::khtmlMouseMoveEvent):
2690         * kwq/WebCoreBridge.mm:
2691         (-[WebCoreBridge elementAtPoint:]):
2692         (-[WebCoreBridge _positionForPoint:]):
2693
2694 2004-11-22  Maciej Stachowiak  <mjs@apple.com>
2695
2696         Reviewed by Dave.
2697
2698         <rdar://problem/3890961> selecting an item on the Apache bugzilla query page can be sped up 10% (HTMLFormCollection)
2699         <rdar://problem/3890958> JavaScript that toggles checkboxes can be improved 73% (HTMLCollection,HTMLFormCollection)
2700
2701         This avoids the O(N^2) penalty for named item traversal for form collections.
2702
2703         It also combines the item traversal logic for all non-form
2704         collection operations into a single traverseNextItem
2705         function. This avoids having 5 copies of the big switch statement
2706         for this.
2707
2708         Also fixed a bug that prevented the last form element from being removed properly.
2709         
2710         * khtml/html/html_formimpl.cpp:
2711         (DOM::removeFromVector):
2712         * khtml/dom/html_misc.cpp:
2713         (HTMLCollection::namedItems):
2714         * khtml/dom/html_misc.h:
2715         * khtml/ecma/kjs_html.cpp:
2716         (KJS::HTMLCollection::getNamedItems):
2717         * khtml/html/html_miscimpl.cpp:
2718         (HTMLCollectionImpl::traverseNextItem):
2719         (HTMLCollectionImpl::calcLength):
2720         (HTMLCollectionImpl::length):
2721         (HTMLCollectionImpl::item):
2722         (HTMLCollectionImpl::nextItem):
2723         (HTMLCollectionImpl::checkForNameMatch):
2724         (HTMLCollectionImpl::namedItem):
2725         (HTMLCollectionImpl::namedItems):
2726         (HTMLCollectionImpl::nextNamedItem):
2727         (HTMLFormCollectionImpl::calcLength):
2728         (HTMLFormCollectionImpl::namedItem):
2729         (HTMLFormCollectionImpl::nextNamedItem):
2730         (HTMLFormCollectionImpl::namedItems):
2731         * khtml/html/html_miscimpl.h:
2732
2733 2004-11-22  Ken Kocienda  <kocienda@apple.com>
2734
2735         Reviewed by Harrison
2736
2737         Change around the way we block the Javascript "Paste" command identifier from
2738         being available. Formerly, this was done with an ifdef we never compiled in.
2739         Now, this is done with a couple of cheap runtime checks. The advantage is that
2740         we can now compile this command into development builds, and still yet switch
2741         on the command in deployment builds through the use of WebCore SPI so we can
2742         write and run layout tests with all of our builds.
2743
2744         * khtml/editing/jsediting.cpp:
2745         (DOM::JSEditor::queryCommandSupported): Checks state of paste command in case
2746         command being queried is the paste command. 
2747         (DOM::JSEditor::setSupportsPasteCommand): New SPI to turn on paste command.
2748         * khtml/editing/jsediting.h: Ditto.
2749         * khtml/khtml_part.cpp:
2750         (KHTMLPart::pasteFromPasteboard): Added.
2751         (KHTMLPart::canPaste): Added.
2752         * kwq/KWQKHTMLPart.mm:
2753         (KHTMLPart::canPaste): Added.
2754         * kwq/KWQRenderTreeDebug.cpp:
2755         (externalRepresentation): Turn on paste command.
2756         * kwq/WebCoreBridge.h: Add canPaste call so WebKit can fill in the answer.
2757
2758 2004-11-21  Maciej Stachowiak  <mjs@apple.com>
2759
2760         Reviewed by Richard.
2761
2762         <rdar://problem/3889655> HTMLCollectionImpl should use traverseNextNode to improve speed and save recursion
2763         
2764         * khtml/html/html_miscimpl.cpp:
2765         (HTMLCollectionImpl::calcLength):
2766         (HTMLCollectionImpl::getItem):
2767         (HTMLCollectionImpl::item):
2768         (HTMLCollectionImpl::nextItem):
2769         (HTMLCollectionImpl::getNamedItem):
2770         (HTMLCollectionImpl::namedItem):
2771         (HTMLCollectionImpl::nextNamedItemInternal):
2772         (HTMLFormCollectionImpl::nextNamedItemInternal):
2773
2774 2004-11-19  Maciej Stachowiak  <mjs@apple.com>
2775
2776         Reviewed by Darin.
2777
2778         <rdar://problem/3482935> JavaScript so slow it seems like a hang (hrweb.apple.com) (HTMLCollection?)
2779         <rdar://problem/3759149> PeopleSoft page in Safari twice as slow as Mozilla engine (HTMLFormCollection)
2780         <rdar://problem/3888368> selecting an item on the Apache bugzilla query page can be improved 95% (HTMLFormCollection)
2781
2782         Many optimizations to HTMLFormCollection. Iterating it should not
2783         be N^2 any more, though finding items by name could still be.
2784         
2785         * khtml/html/html_formimpl.cpp:
2786         (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
2787         (DOM::HTMLFormElementImpl::length):
2788         (DOM::HTMLFormElementImpl::submitClick):
2789         (DOM::HTMLFormElementImpl::formData):
2790         (DOM::HTMLFormElementImpl::submit):
2791         (DOM::HTMLFormElementImpl::reset):
2792         (DOM::HTMLFormElementImpl::radioClicked):
2793         (DOM::appendToVector):
2794         (DOM::removeFromVector):
2795         (DOM::HTMLFormElementImpl::registerFormElement):
2796         (DOM::HTMLFormElementImpl::removeFormElement):
2797         (DOM::HTMLFormElementImpl::makeFormElementDormant):
2798         (DOM::HTMLFormElementImpl::registerImgElement):
2799         (DOM::HTMLFormElementImpl::removeImgElement):
2800         * khtml/html/html_formimpl.h:
2801         * khtml/html/html_miscimpl.cpp:
2802         (HTMLFormCollectionImpl::FormCollectionInfo::FormCollectionInfo):
2803         (void::HTMLFormCollectionImpl::FormCollectionInfo::reset):
2804         (HTMLFormCollectionImpl::resetCollectionInfo):
2805         (HTMLFormCollectionImpl::calcLength):
2806         (HTMLFormCollectionImpl::item):
2807         (HTMLFormCollectionImpl::getNamedItem):
2808         (HTMLFormCollectionImpl::getNamedFormItem):
2809         (HTMLFormCollectionImpl::firstItem):
2810         (HTMLFormCollectionImpl::nextItem):
2811         * khtml/html/html_miscimpl.h:
2812         (DOM::HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
2813         * khtml/xml/dom_elementimpl.cpp:
2814         (ElementImpl::setAttribute):
2815         (ElementImpl::setAttributeMap):
2816         * kwq/KWQPtrVector.h:
2817         (QPtrVector::findRef):
2818         * kwq/KWQVectorImpl.h:
2819         * kwq/KWQVectorImpl.mm:
2820         (KWQVectorImpl::findRef):
2821         * kwq/WebCoreBridge.mm:
2822         (-[WebCoreBridge elementWithName:inForm:]):
2823         (-[WebCoreBridge controlsInForm:]):
2824
2825 2004-11-19  David Harrison  <harrison@apple.com>
2826
2827         Reviewed by Ken and Darin.
2828
2829         <rdar://problem/3856215> Cannot remove bold from the beginning of a message
2830
2831         Problem is that KHTMLPart::computeAndSetTypingStyle always looked upstream
2832         for the existing style, but in this case (hitting cmd-B with caret at top of
2833         file) there is nothing upstream.  Changed this to use the VisiblePosition
2834         deepEquivalent instead.
2835         
2836         * khtml/khtml_part.cpp:
2837         (KHTMLPart::computeAndSetTypingStyle):
2838
2839 === Safari-172 ===
2840
2841 2004-11-19  Maciej Stachowiak  <mjs@apple.com>
2842
2843         Reviewed by Darin.
2844
2845         <rdar://problem/3864151> REGRESSION (125-167): Chrysler.com never stops loading
2846         
2847         * khtml/xml/dom_docimpl.cpp:
2848         (DocumentImpl::close): Don't fire the onload handler if there is a
2849         redirect pending. This is a very long-standing bug that was masked
2850         by our previously incorrect redirect logic. It used to be that an
2851         older redirect would always win. Recently we changed things so
2852         that a newer redirect would win, but a script that causes a
2853         redirect would stop parsing once complete (so if there are two
2854         redirects in the same script, the latter wins). However, we should
2855         have also prevented onload in this case. Testing with other
2856         browsers shows that onload handlers do not run at all when there
2857         is a pending redirect.
2858
2859 2004-11-19  Ken Kocienda  <kocienda@apple.com>
2860
2861         Reviewed by Harrison
2862
2863         Fix some object lifetime issues in these two commands. This fixes some crashes
2864         I am seeing in some new code I am working on, but have not yet reproduced otherwise.
2865
2866         * khtml/editing/htmlediting.cpp:
2867         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): No longer deref nodes
2868         in the ancestor list. They are not ref'ed when put on list. D'uh.
2869         (khtml::InsertParagraphSeparatorCommand::doApply): Ref all cloned nodes that are created by the command
2870         before putting them on the cloned nodes list. This are still deref'ed in the destructor.
2871         (khtml::InsertParagraphSeparatorInQuotedContentCommand::~InsertParagraphSeparatorInQuotedContentCommand): Ditto
2872         destructor comment.
2873         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto doApply comment.
2874
2875 2004-11-19  Ken Kocienda  <kocienda@apple.com>
2876
2877         Reviewed by Harrison
2878
2879         Fix for this bug:
2880         
2881         <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it
2882
2883         * khtml/khtml_part.cpp:
2884         (KHTMLPart::computeAndSetTypingStyle): New helper that does the work of reducing a passed-in style
2885         declaration given the current selection, and then sets the minimum necessary style as the typing
2886         style on the part.
2887         (KHTMLPart::applyStyle): Call new computeAndSetTypingStyle. The guts of computeAndSetTypingStyle used
2888         to be here in the selection-as-caret case. But now [WebCoreBridge setTypingStyle:] needs this code
2889         as well.
2890         * khtml/khtml_part.h: Declare new computeAndSetTypingStyle() function.
2891         * kwq/WebCoreBridge.h: Declare new typingStyle and setTypingStyle: methods.
2892         * kwq/WebCoreBridge.mm: 
2893         (-[WebCoreBridge typingStyle]): Calls through to the part to retrieve the typing style.
2894         (-[WebCoreBridge setTypingStyle:]): Calls through to the part to set the typing style.
2895
2896 2004-11-18  David Harrison  <harrison@apple.com>
2897
2898         Reviewed by Darin.
2899         
2900         Back out part of Darin's fix for <rdar://problem/3885729>, because the new exception gets triggered
2901         by Mail.app. Filed <rdar://problem/3886832> against Mail.app.
2902
2903         * kwq/DOM-CSS.mm:
2904         (-[DOMCSSStyleDeclaration setProperty:::]):
2905
2906 2004-11-18  Chris Blumenberg  <cblu@apple.com>
2907
2908         Fixed: <rdar://problem/3587481> Bug Reporter Login Page: Password AutoFill does not work reliably
2909
2910         Reviewed by john.
2911
2912         * kwq/KWQKHTMLPart.mm:
2913         (KWQKHTMLPart::currentForm): just return the current form, don't scan the entire document looking for a form if there is no current form
2914
2915 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
2916
2917         Reviewed by Chris.
2918
2919         - fix recursive item traversal, use traverseNextNode() instead of
2920         the buggy hand-rolled traversal.
2921
2922         * khtml/xml/dom_nodeimpl.cpp:
2923         (NodeListImpl::recursiveItem):
2924
2925 2004-11-17  Darin Adler  <darin@apple.com>
2926
2927         Reviewed by Ken.
2928
2929         - fixed <rdar://problem/3885744> crash with XMLHttpRequest test page (reported by KDE folks)
2930
2931         * khtml/ecma/xmlhttprequest.cpp: (KJS::XMLHttpRequest::slotFinished):
2932         Rolled in fix from KDE; make sure to set job to 0 before calling changeState.
2933
2934         - fixed <rdar://problem/3885729> attempting to modify a computed style does nothing, but should raise a DOM exception
2935         - fixed <rdar://problem/3885731> style declarations use too many malloc blocks; switch to QValueList
2936         - fixed <rdar://problem/3885739> DOM::NodeImpl accessor in DOM::Node class is hot; should be inlined
2937         - changed NodeImpl calls like replaceChild to always ref/deref the parameter; this is a better way to fix
2938           an entire category of leaks we have been fixing one by one recently
2939         - changed computed styles so they hold a reference to the DOM node; the old code could end up with a
2940           stale RenderObject pointer, although I never saw it do that in practice
2941         - implemented the length and item methods for computed styles
2942         - implemented querying additional properties in computed styles (29 more)
2943
2944         * khtml/khtml_part.h: Update forward declaration of CSSMutableStyleDeclarationImpl since it's
2945         now a separate class rather than a typedef. Changed the parameter type of setTypingStyle to
2946         take a mutable style.
2947         * khtml/khtml_part.cpp:
2948         (KHTMLPart::setTypingStyle): Change parameter to take a mutable style.
2949         (KHTMLPart::applyStyle): Add code to make a mutable style in case we are passed
2950         a computed style; also change some types to mutable style.
2951         (updateState): Update iteration of CSSProperty objects in a style declaration to use
2952         the new valuesIterator interface.
2953         (KHTMLPart::selectionHasStyle): Add a call to makeMutable.
2954         (KHTMLPart::selectionStartHasStyle): Add call to makeMutable and update iteration.
2955         (editingStyle): Change type to mutable style, and simplify the style-creation calls,
2956         including accomodating the exception code that setCssText has now.
2957         (KHTMLPart::applyEditingStyleToElement): Change types to mutable style.
2958         (KHTMLPart::removeEditingStyleFromElement): Change code to call setChanged only if removing
2959         the style attributes really was a change, although it's not an important optimization it's
2960         good to do it right.
2961
2962         * khtml/css/css_base.h: Remove unneeded setParsedValue method.
2963         * khtml/css/css_base.cpp: Remove unneeded setParsedValue method. All the places that were
2964         calling it were already removing the old property explicitly, so the code in here to remove
2965         the property again was redundant.
2966
2967         * khtml/css/css_computedstyle.h: Updated virtual functions for changes to parameters in base class.
2968         Moved all the "set"-type functions so they are private. Store a node pointer instead of a renderer.
2969         * khtml/css/css_computedstyle.cpp:
2970         (DOM::CSSComputedStyleDeclarationImpl::CSSComputedStyleDeclarationImpl): Hold a reference to
2971         the node we compute style for, so we don't end up with a pointer to a deallocated RenderObject.
2972         Before we had no guarantee the object would outlast us.
2973         (DOM::CSSComputedStyleDeclarationImpl::setCssText): Add exception parameter, and set the
2974         exception to NO_MODIFICATION_ALLOWED_ERR.
2975         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue): Update to use node pointer rather
2976         than renderer pointer. Added implementation for box-align, box-direction, box-flex, box-flex-group,
2977         box-lines, box-ordinal-group, box-orient, box-pack, caption-side, clear, cursor, direction,
2978         list-style-image, list-style-position, list-style-type, marquee-direction, marquee-repetition,
2979         marquee-style, user-modify, opacity, orphans, outline-style, page-break-after, page-break-before,
2980         page-break-inside, position, unicode-bidi, widows, z-index.
2981         (DOM::CSSComputedStyleDeclarationImpl::removeProperty): Add exception parameter, and set the
2982         exception to NO_MODIFICATION_ALLOWED_ERR.
2983         (DOM::CSSComputedStyleDeclarationImpl::setProperty): Ditto.
2984         (DOM::CSSComputedStyleDeclarationImpl::length): Implemented.
2985         (DOM::CSSComputedStyleDeclarationImpl::item): Implemented, calls getPropertyValue.
2986         (DOM::CSSComputedStyleDeclarationImpl::copyInheritableProperties): Changed return type to
2987         CSSMutableStyleDeclarationImpl.
2988         (DOM::CSSComputedStyleDeclarationImpl::copy): Added.
2989         (DOM::CSSComputedStyleDeclarationImpl::makeMutable): Added.
2990
2991         * khtml/css/css_ruleimpl.h: Update forward declaration of CSSMutableStyleDeclarationImpl since it's
2992         now a separate class rather than a typedef.
2993         * khtml/css/cssparser.h: Ditto.
2994
2995         * khtml/css/css_valueimpl.h: Refactor CSSStyleDeclarationImpl into two classes. New derived class
2996         CSSMutableStyleDeclarationImpl has the guts, and the base class has only some virtual functions.
2997         Removed a bunch of redundant stuff from other classes in this file too.
2998         (DOM::DashboardRegionImpl::setNext): Ref new before deref'ing old to handle the set-to-same case.
2999         (DOM::CSSProperty::CSSProperty): Added new overload so you can create a CSSProperty with initial values.
3000         (DOM::CSSProperty::operator=): Added.
3001         (DOM::CSSProperty::setValue): Use ref-before-deref pattern to simplify slightly.
3002
3003         * khtml/css/css_valueimpl.cpp:
3004         (DOM::CSSStyleDeclarationImpl::CSSStyleDeclarationImpl): Remove uneeded things.
3005         (DOM::CSSStyleDeclarationImpl::isStyleDeclaration): Put here now that it's no longer inline.
3006         (DOM::CSSMutableStyleDeclarationImpl::CSSMutableStyleDeclarationImpl): Added.
3007         (DOM::CSSMutableStyleDeclarationImpl::operator=): Added.
3008         (DOM::CSSMutableStyleDeclarationImpl::~CSSMutableStyleDeclarationImpl): Updated.
3009         (DOM::CSSMutableStyleDeclarationImpl::getPropertyValue): Removed now-uneeded check.
3010         (DOM::CSSMutableStyleDeclarationImpl::get4Values): Moved here from base class.
3011         (DOM::CSSMutableStyleDeclarationImpl::getShortHandValue): Ditto.
3012         (DOM::CSSMutableStyleDeclarationImpl::getPropertyCSSValue): Update to use QValueList instead of QPtrList.
3013         (DOM::CSSMutableStyleDeclarationImpl::removeProperty): Added exception parameter, updated for QValueList.
3014         (DOM::CSSMutableStyleDeclarationImpl::setChanged): Moved here from base class.
3015         (DOM::CSSMutableStyleDeclarationImpl::getPropertyPriority): Update to use QValueList.
3016         (DOM::CSSMutableStyleDeclarationImpl::setProperty): Added more overloads to match new parameters.
3017         (DOM::CSSMutableStyleDeclarationImpl::setStringProperty): Update to use QValueList.
3018         (DOM::CSSMutableStyleDeclarationImpl::setImageProperty): Ditto.
3019         (DOM::CSSMutableStyleDeclarationImpl::parseProperty): Remove unneeded initialization code due to QValueList.
3020         (DOM::CSSMutableStyleDeclarationImpl::addParsedProperties): Added.
3021         (DOM::CSSMutableStyleDeclarationImpl::setLengthProperty): Moved here from base class.
3022         (DOM::CSSMutableStyleDeclarationImpl::length): Update to use QValueList.
3023         (DOM::CSSMutableStyleDeclarationImpl::item): Moved here from base class.
3024         (DOM::CSSMutableStyleDeclarationImpl::cssText): Return empty string rather than null string when there are
3025         no styles in the list. Update to use QValueList.
3026         (DOM::CSSMutableStyleDeclarationImpl::setCssText): Update to use QValueList and to take an exceptionCode
3027         parameter and set it.
3028         (DOM::CSSMutableStyleDeclarationImpl::merge): Update to use QValueList.
3029         (DOM::CSSStyleDeclarationImpl::diff): Update to use QValueList.
3030         (DOM::CSSMutableStyleDeclarationImpl::copyBlockProperties): Moved here from base class. Change return type.
3031         (DOM::CSSStyleDeclarationImpl::copyPropertiesInSet): Update to use QValueList and use stack, not new/delete.
3032         (DOM::CSSMutableStyleDeclarationImpl::makeMutable): Added.
3033         (DOM::CSSMutableStyleDeclarationImpl::copy): Added.
3034
3035         * khtml/css/cssparser.cpp:
3036         (CSSParser::parseValue): Changed to use addParsedProperties.
3037         (CSSParser::parseDeclaration): Ditto.
3038         (CSSParser::createStyleDeclaration): Use new constructor to create declaration in a more efficient manner.
3039
3040         * khtml/css/cssproperties.in: Removed unused font-size-adjust and -khtml-flow-mode.
3041         * khtml/css/cssproperties.c: Regenerated.
3042         * khtml/css/cssproperties.h: Regenerated.
3043
3044         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::applyDeclarations):
3045         Updated to use QValueList interface to CSSMutableStyleDeclarationImpl.
3046
3047         * khtml/dom/css_value.cpp:
3048         (DOM::CSSStyleDeclaration::cssText): Removed unneeded cast.
3049         (DOM::CSSStyleDeclaration::setCssText): Added exception code handling.
3050         (DOM::CSSStyleDeclaration::getPropertyValue): Changed to call getPropertyValue directly instead of
3051         first doing getPropertyCSSValue and then doing cssText.
3052         (DOM::CSSStyleDeclaration::getPropertyCSSValue): Removed unneeded cast.
3053         (DOM::CSSStyleDeclaration::removeProperty): Added exception code handling. 
3054         (DOM::CSSStyleDeclaration::setProperty): Added exception code handling.
3055         (DOM::CSSStyleDeclaration::length): Removed unneeded cast.
3056         (DOM::CSSStyleDeclaration::item): Removed unneeded cast.
3057         (DOM::CSSStyleDeclaration::parentRule): Removed unneeded cast.
3058         (DOM::CSSValue::setCssText): Removed strange non-implementation (still not implemented).
3059
3060         * khtml/dom/dom_node.h: Made isNull and handle functions inline.
3061         * khtml/dom/dom_node.cpp: Ditto.
3062
3063         * khtml/editing/htmlediting.h: Change some types to mutable style.
3064         * khtml/editing/htmlediting.cpp:
3065         (khtml::EditCommandPtr::typingStyle): Change return type to mutable style.
3066         (khtml::EditCommandPtr::setTypingStyle): Change parameter to mutable style.
3067         (khtml::StyleChange::init): Convert parameter to mutable style. Update to use QValueList.
3068         (khtml::EditCommand::assignTypingStyle): Change parameter to mutable type.
3069         (khtml::EditCommand::setTypingStyle): Ditto.
3070         (khtml::ApplyStyleCommand::ApplyStyleCommand): Convert parameter to mutable style.
3071         (khtml::ApplyStyleCommand::doApply): Change local variables to mutable style.
3072         (khtml::ApplyStyleCommand::applyBlockStyle): Change parameter to mutable style.
3073         (khtml::ApplyStyleCommand::applyInlineStyle): Ditto.
3074         (khtml::ApplyStyleCommand::isHTMLStyleNode): Ditto.
3075         (khtml::ApplyStyleCommand::removeCSSStyle): Ditto. Also update to use QValueList.
3076         (khtml::ApplyStyleCommand::removeBlockStyle): Change parameter to mutable style.
3077         (khtml::ApplyStyleCommand::removeInlineStyle): Ditto.
3078         (khtml::ApplyStyleCommand::addBlockStyleIfNeeded): Ditto.
3079         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): Ditto.
3080         (khtml::InsertLineBreakCommand::doApply): Convert locals to mutable style.
3081         (khtml::InsertTextCommand::prepareForTextInsertion): Ditto.
3082         (khtml::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand): Convert parameter to mutable style.
3083
3084         * khtml/editing/jsediting.cpp: Convert types to mutable styles where we create styles.
3085         * khtml/html/html_baseimpl.h: Change type to mutable style.
3086         * khtml/html/html_baseimpl.cpp: (HTMLBodyElementImpl::createLinkDecl): Ditto.
3087
3088         * khtml/html/html_elementimpl.h: Make CSSMappedAttributeDeclarationImpl use the mutable style
3089         class as a base class, and change types to mutable style as needed.
3090         * khtml/html/html_elementimpl.cpp:
3091         (HTMLElementImpl::createInlineStyleDecl): Change type to mutable style.
3092         (HTMLElementImpl::parseHTMLAttribute): Call parseProperty method.
3093         (HTMLElementImpl::getInlineStyleDecl): Change type to mutable style.
3094         (HTMLElementImpl::additionalAttributeStyleDecl): Ditto.
3095         (HTMLElementImpl::createContextualFragment): Add ref/deref to fix potential node leak.
3096         (HTMLElementImpl::setInnerHTML): Remove ref/deref pair because this leak is now fixed by changes
3097         to appendChild.
3098         (HTMLElementImpl::setOuterHTML): Remove ref/deref pair because this leak is now fixed by changes
3099         to replaceChild.
3100
3101         * khtml/html/html_tableimpl.h: Change types to mutable style.
3102         * khtml/html/html_tableimpl.cpp:
3103         (HTMLTableElementImpl::additionalAttributeStyleDecl): Change type to mutable style.
3104         (HTMLTableElementImpl::getSharedCellDecl): Change type to mutable style.
3105         (HTMLTableCellElementImpl::additionalAttributeStyleDecl): Change type to mutable style.
3106
3107         * khtml/html/htmlparser.cpp:
3108         (KHTMLParser::parseToken): Use a local variable to protect the node by ref'ing it. This is better
3109         than using an explicit delete to make the node go away, and is required for compatibility with the
3110         changes to the NodeImpl functions.
3111         (KHTMLParser::insertNode): Ditto.
3112         (KHTMLParser::createHead): Get rid of explicit delete, no longer needed because of changes to
3113         the NodeImpl functions.
3114
3115         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::createCSSStyleDeclaration): Call simpler constructor
3116         now that there's no need to make the property list explictly.
3117
3118         * kwq/DOM-CSS.mm:
3119         (-[DOMCSSStyleDeclaration setCssText:]): Raise exception when appropriate.
3120         (-[DOMCSSStyleDeclaration removeProperty:]): Ditto.
3121         (-[DOMCSSStyleDeclaration setProperty:::]): Dito.
3122
3123         * khtml/xml/dom_nodeimpl.cpp:
3124         (NodeImpl::insertBefore): Always do a ref/deref, so callers don't have to worry about whether the
3125         function succeeded or not for ownership purposes.
3126         (NodeImpl::replaceChild): Ditto.
3127         (NodeImpl::appendChild): Ditto.
3128         (NodeBaseImpl::insertBefore): Ditto.
3129         (NodeBaseImpl::replaceChild): Ditto.
3130         (NodeBaseImpl::appendChild): Ditto.
3131         (NodeBaseImpl::addChild): Ditto.
3132
3133         * WebCore-tests.exp: Removed CSSStyleDeclaration::length; not sure why it was in here.
3134         * WebCore-combined.exp: Regenerated.
3135
3136 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3137
3138         still even more build fixing
3139
3140         * khtml/html/html_miscimpl.cpp:
3141         (HTMLCollectionImpl::resetCollectionInfo):
3142
3143 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3144
3145         more build fixing
3146
3147         * khtml/html/html_miscimpl.cpp:
3148         (HTMLCollectionImpl::resetCollectionInfo):
3149
3150 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3151
3152         Fixed build problem.
3153
3154         * khtml/html/html_miscimpl.h:
3155         (DOM::HTMLCollectionImpl::CollectionInfo::CollectionInfo): it's haslength, not hasLenght.
3156
3157 2004-11-18  Maciej Stachowiak  <mjs@apple.com>
3158
3159         Reviewed by Ken.
3160
3161         - merged and cleaned up HTMLCollection and HTMLFormCollection speedups from konqueror
3162
3163         <rdar://problem/3822992> VIP: Program listings pages at directv.com take a really long time to load [HTMLCollection]
3164         <rdar://problem/3701991> Safari unresponsive loading (www.maxim-ic.com) (HTMLCollection)
3165
3166         This is also a start on fixing 5 other bugs, but those need additional work to make
3167         HTMLFormCollection fast.
3168
3169         * khtml/html/html_documentimpl.h:
3170         (DOM::HTMLDocumentImpl::collectionInfo):
3171         * khtml/html/html_formimpl.cpp:
3172         (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
3173         (DOM::HTMLFormElementImpl::isURLAttribute):
3174         (DOM::HTMLFormElementImpl::registerImgElement):
3175         (DOM::HTMLFormElementImpl::removeImgElement):
3176         * khtml/html/html_formimpl.h:
3177         * khtml/html/html_imageimpl.cpp:
3178         (HTMLImageElementImpl::HTMLImageElementImpl):
3179         (HTMLImageElementImpl::~HTMLImageElementImpl):
3180         * khtml/html/html_imageimpl.h:
3181         * khtml/html/html_miscimpl.cpp:
3182         (HTMLCollectionImpl::HTMLCollectionImpl):
3183         (HTMLCollectionImpl::~HTMLCollectionImpl):
3184         (HTMLCollectionImpl::updateCollectionInfo):
3185         (HTMLCollectionImpl::length):
3186         (HTMLCollectionImpl::item):
3187         (HTMLCollectionImpl::firstItem):
3188         (HTMLCollectionImpl::nextItem):
3189         (HTMLCollectionImpl::namedItem):
3190         (HTMLCollectionImpl::nextNamedItemInternal):
3191         (HTMLFormCollectionImpl::getNamedFormItem):
3192         * khtml/html/html_miscimpl.h:
3193         (DOM::HTMLCollectionImpl::):
3194         (DOM::HTMLCollectionImpl::CollectionInfo::CollectionInfo):
3195         * khtml/html/htmlparser.cpp:
3196         (KHTMLParser::getElement):
3197         * khtml/xml/dom_docimpl.cpp:
3198         (DocumentImpl::DocumentImpl):
3199         * khtml/xml/dom_docimpl.h:
3200         (DOM::DocumentImpl::incDOMTreeVersion):
3201         (DOM::DocumentImpl::domTreeVersion):
3202         * khtml/xml/dom_nodeimpl.cpp:
3203         (NodeImpl::attach):
3204         (NodeImpl::detach):
3205
3206 2004-11-18  Kevin Decker  <kdecker@apple.com>
3207
3208         Reviewed by Chris.
3209
3210         fixed: <rdar://problem/3841842> getPropertyID expensive
3211
3212         * kwq/DOM-CSS.mm:
3213         (getPropertyID): avoid unnecessary memory allocations by using a fixed-sized stack based buffer.
3214
3215 2004-11-17  David Hyatt  <hyatt@apple.com>
3216
3217         Improve responsiveness by being willing to break out of the tokenizer.  (This patch was landed already
3218         and subsequently backed out).
3219         
3220         Reviewed by kocienda
3221
3222         * khtml/html/html_baseimpl.cpp:
3223         (HTMLBodyElementImpl::insertedIntoDocument):
3224         * khtml/html/htmltokenizer.cpp:
3225         (khtml::HTMLTokenizer::reset):
3226         (khtml::HTMLTokenizer::scriptHandler):
3227         (khtml::HTMLTokenizer::scriptExecution):
3228         (khtml::HTMLTokenizer::write):
3229         (khtml::HTMLTokenizer::continueProcessing):
3230         (khtml::HTMLTokenizer::timerEvent):
3231         (khtml::HTMLTokenizer::notifyFinished):
3232         * khtml/html/htmltokenizer.h:
3233         * khtml/khtmlview.cpp:
3234         (KHTMLViewPrivate::KHTMLViewPrivate):
3235         (KHTMLViewPrivate::reset):
3236         (KHTMLView::clear):
3237         (KHTMLView::layout):
3238         (KHTMLView::timerEvent):
3239         (KHTMLView::scheduleRelayout):
3240         (KHTMLView::layoutPending):
3241         (KHTMLView::haveDelayedLayoutScheduled):
3242         (KHTMLView::unscheduleRelayout):
3243         * khtml/khtmlview.h:
3244         * khtml/xml/dom_docimpl.cpp:
3245         (DocumentImpl::DocumentImpl):
3246         (DocumentImpl::close):
3247         (DocumentImpl::setParsing):
3248         (DocumentImpl::shouldScheduleLayout):
3249         (DocumentImpl::minimumLayoutDelay):
3250         (DocumentImpl::write):
3251         (DocumentImpl::finishParsing):
3252         (DocumentImpl::stylesheetLoaded):
3253         (DocumentImpl::updateStyleSelector):
3254         * khtml/xml/dom_docimpl.h:
3255         (DOM::DocumentImpl::parsing):
3256         * kwq/KWQDateTime.mm:
3257         (KWQUIEventTime::uiEventPending):
3258
3259 2004-11-17  David Harrison  <harrison@apple.com>
3260
3261         Reviewed by Ken Kocienda.
3262         
3263         Make sure previousLineStart is non-null before calling compareBoundaryPoints.
3264         Treat null case as meaning no post-move merge is needed.
3265
3266         * khtml/editing/htmlediting.cpp:
3267         (khtml::DeleteSelectionCommand::initializePositionData):
3268
3269 2004-11-17  David Harrison  <harrison@apple.com>
3270         
3271         Added displayNode and displayTree methods for debugging.  Fixed comment typo in dispatchChildRemovalEvents.
3272         * khtml/xml/dom_nodeimpl.cpp:
3273         (NodeImpl::displayNode):
3274         (NodeImpl::displayTree):
3275         (NodeBaseImpl::dispatchChildRemovalEvents):
3276         * khtml/xml/dom_nodeimpl.h:
3277
3278 2004-11-16  John Sullivan  <sullivan@apple.com>
3279
3280         Reviewed by Richard.
3281         
3282         - fixed <rdar://problem/3881929> 32 byte leak in editingStyle() in KHTMLPart (one-time only)
3283
3284         * khtml/khtml_part.cpp:
3285         (editingStyle):
3286         delete the list we created when we're done with it
3287
3288 2004-11-16  Ken Kocienda  <kocienda@apple.com>
3289
3290         Reviewed by John
3291         
3292         It is unwise to use the QPtrList autodelete feature on shared objects like DOM nodes.
3293         Instead, I replaced this with a helper function that derefs DOM nodes stored in a 
3294         QPtrList when the list goes out of scope.
3295
3296         * khtml/editing/htmlediting.cpp:
3297         (khtml::derefNodesInList): New helper to deref DOM nodes stored in a QPtrList.
3298         (khtml::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): No longer set lists to autodelete.
3299         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): Call new derefNodesInList helper.
3300         (khtml::InsertParagraphSeparatorInQuotedContentCommand::InsertParagraphSeparatorInQuotedContentCommand):  
3301         No longer set lists to autodelete.
3302         (khtml::InsertParagraphSeparatorInQuotedContentCommand::~InsertParagraphSeparatorInQuotedContentCommand):
3303          Call new derefNodesInList helper.
3304         * khtml/editing/htmlediting.h: Add virtual destructor for InsertParagraphSeparatorCommand. It had no need
3305         of one before, but now it does.
3306
3307 2004-11-15  David Harrison  <harrison@apple.com>
3308
3309         Reviewed by Chris and Darin.
3310         
3311         <rdar://problem/3880304> Non-linear performance hit for style changes
3312
3313         * khtml/xml/dom_nodeimpl.cpp:
3314         (NodeImpl::traverseNextNode):
3315         (NodeImpl::traverseNextSibling):
3316         (NodeImpl::traversePreviousNodePostOrder):
3317         Return 0 rather than traversing beyond stayWithin when this == stayWithin.
3318         Add asserts that stayWithin is an ancestor of the returned node.
3319
3320 2004-11-15  Darin Adler  <darin@apple.com>