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