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