WebKit:
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 2005-03-09  Richard Williamson   <rjw@apple.com>
2
3         Fixed <rdar://problem/4032938> Safari: text layout for MS P Gothic font is corrupted
4
5         Remove our hacked special case now we have our own cache of
6         which fonts are fixed  pitch.
7
8         Reviewed by Maciej.
9
10         * kwq/KWQFont.mm:
11         (QFont::isFixedPitch):
12
13 2005-03-09  David Harrison  <harrison@apple.com>
14
15         Reviewed by Maciej.
16
17         <rdar://problem/4037141> REGRESSION (Mail): Pasting deletes preceding blank lines with certain steps
18
19         * khtml/editing/htmlediting.cpp:
20         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
21         Add check for anonymous text after blocks.
22
23 2005-03-08  Ken Kocienda  <kocienda@apple.com>
24
25         Reviewed by John
26
27         Fix for these bugs:
28         
29         <rdar://problem/4039661> crash in ApplyStyleCommand::applyBlockStyle pasting contents of webpage into Mail or Blot
30         <rdar://problem/4039672> hang in moveParagraphContentsToNewBlockIfNecessary after pasting contents of webpage into Blot
31
32         * khtml/editing/htmlediting.cpp:
33         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Fix for 4039672. Iteration needs to do
34         a traverseNextSibling(), not a traverseNextNode(). The latter might iterate into a child that already got moved, and
35         the code can infinite loop as a result.
36         (khtml::ApplyStyleCommand::applyBlockStyle): Fix for 4039661. This function iterates over a set of nodes to apply
37         block styles. Before, the iteration would go from the start to the end of the selection, and apply block styles
38         as it went. However, the act of applying style could confuse the iteration. Now I iterate and store the relevant
39         nodes in QPtrList before doing any style manipulation, and then iterate that set of nodes.
40
41 2005-03-08  Darin Adler  <darin@apple.com>
42
43         Change written by Hyatt, reviewed by me.
44
45         - fixed <rdar://problem/3952698> Function buttons do not display properly with Telia Webmail
46
47         * khtml/rendering/render_replaced.cpp: (RenderReplaced::calcMinMaxWidth):
48         Only use a minWidth of 0 for images with a percentage value. Other replaced elements aren't scalable
49         so their minWidth should be their calculated width. This has been wrong all along, but it's a relatively
50         safe change because it only affects replaced elements' min-width.
51
52 2005-03-08  David Harrison  <harrison@apple.com>
53
54         Reviewed by Ken.
55
56         <rdar://problem/4039006> REGRESSION (Mail): Command-left-arrow goes to the start of the wrong line in particular message
57
58         * khtml/editing/visible_units.cpp:
59         (khtml::startOfLine):
60         Use firstLeafChild() instead of firstChild().
61
62 2005-03-08  Richard Williamson   <rjw@apple.com>
63
64         Fixed by Tom Madden.
65
66         Fixed <rdar://problem/4038586> 8A402: Osaka-Mono text overlaps when typing with input method
67
68         We weren't clearing the "all ascii" flag when setting text on
69         RenderText.
70
71         Reviewed by Richard Williamson.
72
73         * khtml/rendering/render_text.cpp:
74         (RenderText::setText):
75
76 2005-03-08  Darin Adler  <darin@apple.com>
77
78         Reviewed by Ken and Maciej.
79
80         - fixed <rdar://problem/3988809> REGRESSION (Mail): wide space characters are turned into plain old spaces when typed or pasted
81
82         Changed the few places where it matters to use a "collapsible whitespace" concept instead of
83         the general whitespace concept. This means treating only ' ' and '\n' specially instead of
84         including other space characters, which matches what the space-collapsing logic does in RenderText,
85         although it really needs to behave differently based on whitespace mode.
86
87         * khtml/editing/visible_text.h: (khtml::isCollapsibleWhitespace): Added. This returns true only for
88         ' ' and '\n' since they are the only characters collapsed once text is in the DOM. But really it
89         can't do the job ignoring white-space mode, so some day it must go.
90
91         * khtml/editing/html_interchange.cpp: (convertHTMLTextToInterchangeFormat): Changed to use
92         isCollapsibleWhitespace and removed unnecessary calls to latin1().
93
94         * khtml/editing/htmlediting.cpp:
95         (khtml::isNBSP): Removed unnecessary creation/destruction of QChar each time this is called.
96         (khtml::nextCharacterIsCollapsibleWhitespace): Renamed from isWS and changed to use isCollapsibleWhitespace.
97         (khtml::DeleteSelectionCommand::fixupWhitespace): Use isCollapsibleWhitespace instead of isWS,
98         since we only want to do our NBSP tricks for collapsible whitespace.
99         (khtml::InsertTextCommand::input): Changed use of isTab to instead say == "\t" since that does the
100         same thing and is arguably just as clear. Changed use of isWS to == " " since the input text can't
101         include any "\n" characters, and really a plain old space is the only collapsible thing that can
102         be passed in. Use isCollapsibleWhitespace instead of isWS since we want to do NBSP tricks only for
103         collapsible whitespace, not all whitespace.
104         (khtml::InsertTextCommand::insertSpace): Use isCollapsibleWhitespace instead of isWS since we want
105         to do NBSP tricks only for collapsible whitespace, not all whitespace.
106         (khtml::RebalanceWhitespaceCommand::doApply): Ditto.
107
108         * khtml/xml/dom_position.h: Changed treatNBSPAsWhiteSpace parameters to considerNonCollapsibleWhitespace
109         parameters. The most common callers are only interested in collapsible whitespace, and the smart copy
110         and paste callers want to include all whitespace, including non-breaking spaces and all the Unicode spaces.
111         * khtml/xml/dom_position.cpp:
112         (DOM::Position::leadingWhitespacePosition): Rename the parameter, and use either QChar::isSpace or
113         isCollapsibleWhitespace depending on the boolean passed in.
114         (DOM::Position::trailingWhitespacePosition): Ditto.
115
116 2005-03-07  John Sullivan  <sullivan@apple.com>
117
118         Reviewed by Darin.
119         
120         - <rdar://problem/4040868> REGRESSION (Mail, 403-403+): Drag and drop deletes text, 
121         many other bad editing problems
122
123         * khtml/rendering/render_text.cpp:
124         (RenderText::caretMaxOffset):
125         A "-" should have been a "+" in this method that was tweaked an hour ago. Editing
126         was completely horked.
127
128 2005-03-07  Richard Williamson   <rjw@apple.com>
129
130         Additional nil check from fix for 4040749.
131
132         * khtml/rendering/render_box.cpp:
133         (RenderBox::setStyle):
134
135 2005-03-07  Richard Williamson   <rjw@apple.com>
136
137         Additional nil check from fix for 4040749.
138
139         * khtml/rendering/render_layer.cpp:
140         (RenderLayer::updateLayerPosition):
141
142 2005-03-07  David Harrison  <harrison@apple.com>
143
144         Reviewed by Darin.
145
146         <rdar://problem/4033202> REGRESSION (Mail): Can't arrow up at a particular spot in a particular Mail message
147
148         Doublecheck that new position is really on a different line, because the VisiblePosition constructor does not.
149         Filed <rdar://problem/4040763> for that problem.
150
151         * khtml/editing/visible_units.cpp:
152         (khtml::previousLinePosition):
153
154 2005-03-07  Richard Williamson   <rjw@apple.com>
155
156         Fixed <rdar://problem/4040749> REGRESSION (125-178): opacity style not working, breaks fading images on okcupid.com
157
158         When layers are dynamically created/removed as a result of changing opacity they weren't being correctly
159         sized and positioned.  This happens whenever opacity goes from < 1 to 1.
160
161         Reviewed by Darin.
162
163         * khtml/rendering/render_box.cpp:
164         (RenderBox::setStyle):
165         * khtml/rendering/render_layer.cpp:
166         (RenderLayer::updateLayerPosition):
167
168 2005-03-07  Christy Warren  <kali@apple.com>
169
170         Reviewed by Darin
171
172         * khtml/rendering/render_text.cpp:
173         (RenderText::caretMinOffset): modified to handle BIDI case by checking all text boxes for min offset
174         (RenderText::caretMaxOffset): modified to handle BIDI case by checking all text boxes for max offset
175
176 2005-03-07  David Harrison  <harrison@apple.com>
177
178         Reviewed by Ken.
179
180         <rdar://problem/4029225> REGRESSION (Mail): Crash if hit return after dragging in attachment - DeleteSelectionCommand::initializePositionData
181
182         Work around the fact that the height() of a BR is 0 if there are no text elements on the line, even if there are replaced elements.
183         Filed <rdar://problem/4040358> RenderBR height() is not accurate.
184         
185         * khtml/editing/htmlediting.cpp:
186         (khtml::ReplaceSelectionCommand::doApply):
187         When height is 0, double check that the placeholder is the first position on the line.
188
189 === Safari-403 ===
190
191 2005-03-07  Ken Kocienda  <kocienda@apple.com>
192
193         Reviewed by Vicki
194     
195         Fix for this bug:
196         
197         <rdar://problem/4040136> Expose SPI for WebCore's functions to create document fragments from plain text and markup strings
198
199         * kwq/DOMHTML.mm: Add two new SPI functions.
200         (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:])
201         (-[DOMHTMLDocument _createDocumentFragmentWithText:])
202         * kwq/DOMPrivate.h: Declare the new SPI here, a privately-exported header, so Mail can make use of it.
203
204 2005-03-07  Ken Kocienda  <kocienda@apple.com>
205
206         Reviewed by John
207
208         Fix for this bug:
209         
210         <rdar://problem/4039676> REGRESSION (Mail): in reply, <cr> on pasted text (without trailing newline) is eaten when pasted above date
211
212         * khtml/editing/htmlediting.cpp:
213         (khtml::ReplaceSelectionCommand::doApply): Code to "eat" a <br> element, that was creating an otherwise empty line, was running
214         when it should not. If the content being pasted in does not end in a "logical" newline itself, then the <br> already
215         in the content needs to be preserved. A simple one-line change now sees to this.
216         
217         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: This test now has an extra, but harmless,
218         <br> at the end of a paragraph. This makes sense given the code change.
219
220         New test:
221         * layout-tests/editing/pasteboard/paste-text-018-expected.txt: Added.
222         * layout-tests/editing/pasteboard/paste-text-018.html: Added.
223
224 2005-03-07  Ken Kocienda  <kocienda@apple.com>
225
226         Reviewed by John
227
228         Fix for this bug:
229         
230         <rdar://problem/4035648> REGRESSION (Mail): line feed in source HTML file causes bad copy/paste behavior
231
232         The createMarkup() function in markup.cpp iterates over the nodes in a range,
233         and does some bookkeeping to figure out when to add close tags to the markup.
234         Some code added at the start of the loop to prevent markup from being written
235         for unrendered nodes short-circuited the rest of the loop, and so prevented
236         the close-tag-writing code from running when it should.
237
238         This is why the "plain" text wound up inside of the bold tag in the example
239         above. The addition of the unrendered return character caused an incorrect
240         delay in the close tag for the bold element from being written out, with the
241         result being that it wound up including additional content.
242
243         The fix is to add checks for node renderers throughout the loop at the points
244         where markup is written out for each node. This allows the additional close
245         tag logic to run as needed.
246
247         All layout tests pass with this change.
248
249         * khtml/editing/markup.cpp:
250         (khtml::createMarkup)
251
252         New test:
253         
254         * layout-tests/editing/pasteboard/paste-4035648-fix-expected.txt: Added.
255         * layout-tests/editing/pasteboard/paste-4035648-fix.html: Added.
256
257 2005-03-06  Christy Warren  <kali@appple.com>
258
259         Reviewed by Ken
260
261         * khtml/rendering/render_text.cpp:
262         (lastRendererOnPrevLine): helper for RenderText::caretRect
263         (RenderText::caretRect): added code to properly handle bidi ordered text boxes
264
265 2005-03-06  Christy Warren  <kali@apple.com>
266
267         Reviewed by Darin.
268
269         * khtml/editing/visible_position.cpp: Eliminated code that cuts off searching through the text boxes based on an assumption that breaks under bidi
270         (khtml::VisiblePosition::isCandidate):
271         * kwq/KWQFontMetrics.mm:
272         (QFontMetrics::checkSelectionPoint): Made the initialization of the WebCoreStyle honor the reversed flag
273
274 2005-03-05  John Sullivan  <sullivan@apple.com>
275
276         Reviewed by Maciej.
277         
278         - fixed <rdar://problem/4038417> Mail crashed in StyleChange::checkForLegacyHTMLStyleChange 
279         when composing a reply
280
281         * khtml/editing/htmlediting.cpp:
282         (khtml::StyleChange::checkForLegacyHTMLStyleChange):
283         Added missing nil check.
284
285 2005-03-05  Darin Adler  <darin@apple.com>
286
287         Reviewed by Don.
288
289         - fixed <rdar://problem/4038478> Crash in renderer viewing RSS feed at feed://wvs.topleftpixel.com/index.rdf
290
291         * khtml/xml/dom_docimpl.cpp: (widgetForNode): Check for nil before going from node to renderer.
292
293 2005-03-05  Darin Adler  <darin@apple.com>
294
295         Reviewed by Richard.
296
297         - fixed <rdar://problem/4037700> Every character typed causes stat call for /usr/share/icu/icudt32b_char.brk
298
299         * khtml/rendering/render_text.cpp:
300         (getCharacterBreakIterator): Added. Helper that sets up an iterator for the passed-in text.
301         Shares a single global iterator (fast, albeit not thread-safe).
302         (RenderText::previousOffset): Changed to call getCharacterBreakIterator.
303         (RenderText::nextOffset): Ditto.
304
305 2005-03-05  Ken Kocienda  <kocienda@apple.com>
306
307         Reviewed by Darin
308
309         Fix for this bug:
310         
311         <rdar://problem/4038267> REGRESSION (Mail): Crash copying and pasting end of paragraph
312
313         Code to handle content that has a "logical" newline at the end of the pasted content, and the code
314         to adjust the selection at the end of the paste operation made an assumption that at least one
315         node had been inserted by the paste command. This is not necessarily true in the case where the sole content
316         in the pasted content is one of these "logical" newlines. Adjust some code around so that we don't deref
317         null, but still adjust the selection correctly for this case. In each of the two functions below, some
318         null checks have been added, and some code has been rearranged a little bit to continue on through
319         the end of completeHTMLReplacement, even if no nodes have been inserted. The patch looks bigger and more
320         complicated than the conceptual change.
321
322         * khtml/editing/htmlediting.cpp:
323         (khtml::ReplaceSelectionCommand::doApply)
324         (khtml::ReplaceSelectionCommand::completeHTMLReplacement)
325         
326         * layout-tests/editing/pasteboard/paste-4038267-fix-expected.txt: Added.
327         * layout-tests/editing/pasteboard/paste-4038267-fix.html: Added.
328
329 2005-03-05  Darin Adler  <darin@apple.com>
330
331         Reviewed by John.
332
333         - fixed <rdar://problem/4025918> images copied from Safari with relative src URLs aren't pasted into Mail messages (KURL resolves base URLs incorrectly)
334
335         * kwq/KWQKURL.mm: (KURL::KURL): Add a slash at the start of the path if a relative part is adding
336         a path onto a URL that has "pre-path" bits like host name, but no path yet. This doesn't come up
337         for http because in that case we add a trailing "/" as part of canonicalization.
338
339 2005-03-04  John Sullivan  <sullivan@apple.com>
340
341         Reviewed by Kevin.
342         
343         - fixed <rdar://problem/4033705> REGRESSION (Mail): Copy/Paste from Excel 
344         crashes Mail in KWQKHTMLPart::fontForSelection(bool*) const + 232
345
346         * kwq/KWQKHTMLPart.mm:
347         (KWQKHTMLPart::fontForSelection):
348         Check for nil startNode, not just nil renderer.
349
350 2005-03-04  David Harrison  <harrison@apple.com>
351
352         Reviewed by Ken, Richard.
353
354         <rdar://problem/3996383> REGRESSION (Mail): Deleting all of first line also deletes line ending
355
356         Problem was the placeholder check was based on 0 height block, but the block in this
357         case is the BODY, which has other content even though the paragraph is gone.
358         
359         * khtml/editing/htmlediting.cpp:
360         (khtml::CompositeEditCommand::insertBlockPlaceholder):
361         Now does insert instead of append!
362     
363         (khtml::CompositeEditCommand::appendBlockPlaceholder):
364         New.  Actually does append.
365         
366         (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded):
367         Renamed from insertBlockPlaceholderIfNeeded because it can insert or append.  Also accepts "force insert" flag.
368         
369         (khtml::CompositeEditCommand::removeBlockPlaceholder):
370         Renamed for succinctness from removeBlockPlaceholderIfNeeded.
371         
372         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
373         (khtml::DeleteSelectionCommand::moveNodesAfterNode):
374         Use renamed methods.
375         
376         (khtml::DeleteSelectionCommand::doApply):
377         Use addBlockPlaceholderIfNeeded "force insert" flag if deleting whole paragraphs did not leave an empty one.
378         
379         (khtml::InsertParagraphSeparatorCommand::doApply):
380         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
381         (khtml::InsertTextCommand::input):
382         Use renamed methods.
383         
384         * khtml/editing/htmlediting.h:
385         Renamed and new methods per above.
386         
387
388 2005-03-04  Chris Blumenberg  <cblu@apple.com>
389
390         Fixed: <rdar://problem/4032840> REGRESSION (Mail): crash in RemoveNodeCommand after pasting attachment at end of message
391
392         Reviewed by darin.
393
394         * khtml/editing/visible_units.cpp:
395         (khtml::endOfParagraph): don't consider text nodes that have no rendered characters
396
397 2005-03-04  Richard Williamson   <rjw@apple.com>
398
399         Fixed <rdar://problem/4034764> REGRESSION(125-188)Viewing text/plain page and going back/forward corrupts HTML pages (google.com)
400
401         The parse mode wasn't be restored to the document when going
402         back.
403
404         Reviewed by Hyatt.
405
406         * kwq/KWQKHTMLPart.mm:
407         (KWQKHTMLPart::openURLFromPageCache):
408         * kwq/KWQPageState.h:
409         * kwq/KWQPageState.mm:
410         (-[KWQPageState initWithDocument:URL:windowProperties:locationProperties:interpreterBuiltins:]):
411
412 2005-03-04  Ken Kocienda  <kocienda@apple.com>
413
414         Reviewed by me
415
416         * layout-tests/editing/style/create-block-for-style-012-expected.txt: Shame on me!
417         I landed my last fix without running layout tests. This one changes in a subtle, but
418         acceptable way.
419
420 2005-03-04  Ken Kocienda  <kocienda@apple.com>
421
422         Reviewed by Harrison
423
424         Fix for this bug:
425         
426         <rdar://problem/4032543> REGRESSION (Mail): Mail hangs when quoted text is pasted twice
427         
428         This code change fixes the bug in a non-obvious way. The root cause of the problem was
429         that a VisiblePosition created using an affinity originating in Mail code caused 
430         two VisiblePosition objects that should have been equal to differ only in their 
431         affinities, which in turn caused us to run a code path that should not have run.
432
433         * khtml/editing/visible_position.cpp:
434         (khtml::VisiblePosition::VisiblePosition): Added copy constructor.
435         (khtml::VisiblePosition::next): Factored out inline code that used to be here into new
436         setAffinityUsingLinePosition() function.
437         (khtml::isEqualIgnoringAffinity): New helper to handle cases when affinity in equality check does
438         not matter. However, we want to know about such cases where a VisiblePosition differs only by affinity, 
439         and the code will assert in development when this happens.
440         (khtml::isNotEqualIgnoringAffinity): Ditto, but not. :)
441         (khtml::setAffinityUsingLinePosition): New helper function mentioned above. This will "correct"
442         upstream affinity to downstream if the affinity does not make a difference for the position.
443         * khtml/editing/visible_position.h:
444         * khtml/editing/visible_range.h: Wacky bug. The operator== for this class took VisiblePosition classes!
445         * khtml/editing/visible_units.cpp:
446         (khtml::isStartOfParagraph): Now performs equality check without regard to affinity.
447         (khtml::isEndOfParagraph): Ditto.
448         (khtml::isStartOfBlock): Ditto.
449         (khtml::isEndOfBlock): Ditto.
450         * kwq/WebCoreBridge.mm:
451         (-[WebCoreBridge setSelectedDOMRange:affinity:]): Adjusts the affinity using setAffinityUsingLinePosition()
452         if necessary.
453
454 2005-03-04  Darin Adler  <darin@apple.com>
455
456         Reviewed by John.
457
458         - fixed <rdar://problem/4036817> REGRESSION: ctrl-y broken when a line + carriage return cut
459
460         * khtml/editing/htmlediting.h: Added insertTextRunWithoutNewlines.
461         * khtml/editing/htmlediting.cpp:
462         (khtml::InsertTextCommand::input): Added assertion to make sure strings with newlines don't get
463         down to this level.
464         (khtml::TypingCommand::insertText): Added. Takes the name of the old function, but is a new
465         level that breaks runs into lines and inserts each one separately.
466         (khtml::TypingCommand::insertTextRunWithoutNewlines): Renamed old insertText to this. 
467
468         * khtml/dom/dom_string.h: Made substring be a const member function.
469         * khtml/dom/dom_string.cpp: (DOM::DOMString::substring): Made this const.
470
471 2005-03-04  Darin Adler  <darin@apple.com>
472
473         Reviewed by John.
474
475         - fixed <rdar://problem/4020413> REGRESSION (Mail): can't use fonts with names that start with "#" in Mail (Korean fonts)
476
477         * khtml/css/css_valueimpl.cpp:
478         (DOM::isLegalIdentifier): Added. Commented out and not used.
479         (DOM::quoteStringIfNeeded): Quotes the string if needed. For now only if it starts with "#".
480         (DOM::CSSPrimitiveValueImpl::cssText): Call quoteStringIfNeeded when asked for cssText for an arbitrary string, since we
481         need text you can re-parse.
482         (DOM::FontFamilyValueImpl::cssText): Ditto.
483
484         * khtml/editing/markup.cpp:
485         (khtml::startMarkup): Added comments about lack of quoting for attributes.
486         (khtml::createMarkup): Ditto.
487
488 2005-03-04 Adele Amchan  <adele@apple.com>
489  
490        Reviewed by Maciej
491
492         Fix for <rdar://problem/4021711> REGRESSION(125-188) blank pages when browsing forum at cooperativeresearch.org - cached external script problem
493
494         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::scriptHandler): set flag needToRefCachedScript so we can make sure 
495         notifyFinished is called after pendingSrc is set up with the right data from the cached script
496
497 2005-03-04  Ken Kocienda  <kocienda@apple.com>
498
499         Reviewed by John
500
501         Fix for this bug:
502         
503         <rdar://problem/4029632> Tiger 8A398:- Mail crashes in DOM::NodeImpl::isBlockFlow() after pasting text with alignment style and BR element from Safari
504
505         * khtml/editing/htmlediting.cpp:
506         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): VisiblePosition constructor
507         was failing to yield a position for a node just pasted into the document since a layout was needed
508         for the calculation to come out right. Layout added. Crash gone.
509
510 === Safari-402 ===
511
512 2005-03-03  Chris Blumenberg  <cblu@apple.com>
513
514         Fixed: <rdar://problem/3992803> Cannot navigate through list items with the keyboard, you're stuck in the same <li> block unless you click out
515
516         Reviewed by harrison.
517
518         * khtml/rendering/render_line.cpp:
519         (khtml::RootInlineBox::closestLeafChildForXPos): avoid returning list markers when possible. Also improved heuristic for returning the best InlineBox given the passed X position.
520
521
522 2005-03-03  Ken Kocienda  <kocienda@apple.com>
523
524         Reviewed by John
525         
526         Fix for this bug:
527         
528         <rdar://problem/4035198> Pasting text with different styles does not get reproducible results
529
530         I had a good idea yesterday to improve the way we "fixup" styles after
531         pasting, but i chose a poor data structure to do it, a map of
532         nodes-to-styles. In the fixup step, I iterated over the map elements and
533         did the fixup. However, since the order in which the items would come
534         out of the map is indeterminate, we got unpredictable results.
535
536         So, the concept was good, but the implementation was flawed. I have
537         fixed this mapping to be a list instead, so the order that nodes are
538         evaluated in the fixup step is document order. This works nicely.
539
540         * khtml/editing/htmlediting.cpp:
541         (khtml::ReplacementFragment::~ReplacementFragment): No longer need to explicity deref nodes and
542         styles saved away for later fixup. This is now handled by the new NodeDesiredStyle class.
543         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Now calls computeAndStoreNodeDesiredStyle,
544         function renamed from mapDesiredStyleForNode.
545         Now accepts a QValueList<NodeDesiredStyle> in place of the old map.
546         (khtml::NodeDesiredStyle::NodeDesiredStyle): New class that represents a node-to-style mapping.
547         (khtml::NodeDesiredStyle::~NodeDesiredStyle): Ditto.
548         (khtml::NodeDesiredStyle::operator=): Ditto.
549         (khtml::ReplaceSelectionCommand::doApply): Now calls computeAndStoreNodeDesiredStyle,
550         function renamed from mapDesiredStyleForNode.
551         (khtml::ReplaceSelectionCommand::fixupNodeStyles): Now operates on a QValueList<NodeDesiredStyle> in 
552         place of the old map.
553         (khtml::computeAndStoreNodeDesiredStyle): Renamed from mapDesiredStyleForNode.  Now operates on a 
554         QValueList<NodeDesiredStyle> in place of the old map.
555         * khtml/editing/htmlediting.h:
556         (khtml::NodeDesiredStyle): New class that represents a node-to-style mapping.
557         (khtml::ReplacementFragment::desiredStyles): Now returns a QValueList<NodeDesiredStyle> in place of the old map.
558
559         * layout-tests/editing/style/typing-style-003-expected.txt: Results changed in an acceptable way.
560
561 2005-03-02  Darin Adler  <darin@apple.com>
562
563         Reviewed by Maciej.
564
565         - fixed <rdar://problem/4029741> REGRESSION (188-189): <input type=text> are cleared when you hide/show them
566
567         * khtml/html/html_formimpl.h: Added detach functions for both input and text area elements, since
568         both have m_valueMatchesRenderer flags.
569         * khtml/html/html_formimpl.cpp:
570         (DOM::HTMLInputElementImpl::detach): Set m_valueMatchesRenderer to false, since the renderer is going away.
571         (DOM::HTMLTextAreaElementImpl::detach): Ditto.
572
573 2005-03-02  Ken Kocienda  <kocienda@apple.com>
574
575         Reviewed by Hyatt
576
577         Fix for this bug:
578         
579         <rdar://problem/4006151> in reply, caret moves to next line after toggling bold style then typing
580
581         * khtml/editing/htmlediting.cpp:
582         (khtml::ApplyStyleCommand::applyInlineStyle): Defer cleaning up empty style until the end of the
583         function. In some situations, the render tree can get confused when we do this removal up front.
584         I wish I understood the reasons more deeply, but this bit of code shuffling seems harmless, and 
585         fixes the bug.
586
587 2005-03-02  Darin Adler  <darin@apple.com>
588
589         Reviewed by Maciej.
590
591         - fixed <rdar://problem/4024966> crash happened twice in [KWQTextField setHasFocus:] + 0xe8
592
593         Added more nil checks to the widget implementations. Anywhere a widget pointer is used, do a nil check,
594         rather than relying on high level assumptions about which calls can and can't destroy the HTML element
595         (and hence the widget). The case in the bug seems to be a case where scrolling destroyed the element.
596         We can't be sure this fixes the bug, but we can be relatively sure we didn't introduce any new problems,
597         because this just avoids nil-dereferencing.
598
599         * kwq/KWQButton.mm:
600         (-[KWQButton becomeFirstResponder]):
601         (-[KWQButton nextKeyView]):
602         (-[KWQButton previousKeyView]):
603         * kwq/KWQListBox.mm:
604         (-[KWQTableView mouseDown:]):
605         (-[KWQTableView becomeFirstResponder]):
606         (-[KWQTableView numberOfRowsInTableView:]):
607         (-[KWQTableView tableViewSelectionDidChange:]):
608         (-[KWQTableView tableView:shouldSelectRow:]):
609         (-[KWQTableView selectionShouldChangeInTableView:]):
610         * kwq/KWQScrollBar.mm:
611         (-[KWQScrollBar scroll:]):
612         * kwq/KWQSlider.mm:
613         (-[KWQSlider mouseDown:]):
614         (-[KWQSlider slide:]):
615         (-[KWQSlider becomeFirstResponder]):
616         (-[KWQSlider nextKeyView]):
617         (-[KWQSlider previousKeyView]):
618         * kwq/KWQTextArea.mm:
619         (-[KWQTextAreaTextView becomeFirstResponder]):
620         (-[KWQTextAreaTextView resignFirstResponder]):
621         (-[KWQTextAreaTextView mouseDown:]):
622         * kwq/KWQTextField.mm:
623         (-[KWQTextFieldController action:]):
624         (-[KWQTextFieldController controlTextDidEndEditing:]):
625         (-[KWQTextFieldController controlTextDidChange:]):
626         (-[KWQTextFieldController textView:didHandleEvent:]):
627         (-[KWQTextFieldController setHasFocus:]):
628
629 2005-03-02  Richard Williamson   <rjw@apple.com>
630
631         Fixed <rdar://problem/4031483> Leak (RenderObject::createInlineBox) reproducible with Stock widget
632
633         We were leaking inline block line boxes.  Argh!
634
635         Reviewed by Hyatt.
636
637         * khtml/rendering/render_flow.cpp:
638         (RenderFlow::dirtyLineBoxes):
639         * khtml/rendering/render_line.cpp:
640         (khtml::InlineBox::deleteLine):
641
642 2005-03-02  Chris Blumenberg  <cblu@apple.com>
643
644         Fixed: <rdar://problem/3976872> REGRESSION (Mail): Pasted plain text doesn't get the proper style if pasted into newlines
645
646         Reviewed by kocienda.
647
648         * khtml/editing/htmlediting.cpp:
649         (khtml::EditCommand::styleAtPosition): new, factored out from calculateStyleBeforeInsertion
650         (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): call styleAtPosition
651         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): clear new m_insertionStyle ivar
652         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand): deref new m_insertionStyle  ivar
653         (khtml::ReplaceSelectionCommand::doApply): store the style so it later be applied when matching style
654         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): apply style from m_insertionStyle when matching style
655         * khtml/editing/htmlediting.h:
656
657 2005-03-02  Maciej Stachowiak  <mjs@apple.com>
658
659         Reviewed by Darin.
660
661         <rdar://problem/4031718> REGRESSION (401-401+): Safari reproducible crash setting up scope in JSLazyEventListener::parseCode authenticating to bugweb
662         
663         * khtml/ecma/kjs_events.cpp:
664         (JSLazyEventListener::parseCode): If originalNode is NULL, don't
665         mess with the scope chain.
666         
667         * khtml/html/html_baseimpl.cpp:
668         (HTMLBodyElementImpl::parseHTMLAttribute): For handlers that are
669         delcared on body but set on the document, pass NULL to avoid
670         swizzling the scope chain. It turns out that this is what browsers
671         do, and it finesses the crash.
672
673 2005-03-02  David Harrison  <harrison@apple.com>
674
675         Reviewed by Ken.
676
677         <rdar://problem/3948453> Can't type accented chars as first character in Stickies widget
678
679         * khtml/editing/htmlediting.cpp:
680         (khtml::ReplaceSelectionCommand::doApply):
681
682 2005-03-02  Ken Kocienda  <kocienda@apple.com>
683         Reviewed by John
684
685         Fix for this bug:
686         
687         <rdar://problem/4020574> REGRESSION (Mail): copy/paste first part of reply-quoted text alters downstream style
688         
689         The problem was that the operation to move nodes following the newly-pasted nodes did not preserve the
690         style of these moved nodes. I have generalized some of the functions that compute and preserve styles
691         for nodes and then apply these styles after a DOM operation.
692
693         * khtml/editing/htmlediting.cpp:
694         (khtml::ReplacementFragment::~ReplacementFragment): Call new derefNodesAndStylesInMap() helper function
695         in place of old code that had this deref'ing inline.
696         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Now calls new mapDesiredStyleForNode() helper
697         function place of old code that had this style computation inline.
698         (khtml::ReplacementFragment::removeStyleNodes): Updated comment for new helper name.
699         (khtml::ReplaceSelectionCommand::doApply): Now calls new helpers in place of helpers whose names were changed,
700         or in place of pre-refactored inline code.
701         (khtml::ReplaceSelectionCommand::fixupNodeStyles): Renamed from applyStyleToInsertedNodes(). Now generalized
702         to take the map of nodes to use for the fixup. This makes it possible to call this code with different maps,
703         and that is needed to fix the bug.
704         (khtml::mapDesiredStyleForNode): New helper function to compute the inheritable styles for a given node
705         and map this style to the given node in the given map. This function now also includes the code that was
706         in the removeBlockquoteColorsIfNeeded(). This latter helper has now been removed.
707         (khtml::derefNodesAndStylesInMap): Simple helper to deref map members.
708         * khtml/editing/htmlediting.h:
709         (khtml::ReplacementFragment::desiredStyles): New helper to return map of nodes-to-desiredStyles.
710
711 2005-03-01  Ken Kocienda  <kocienda@apple.com>
712
713         Reviewed by Hyatt
714
715         Fix for this bug:
716
717         <rdar://problem/4011358> REGRESSION(Mail): after dragging text to mail message and deleting, typing or dragging new text doesn't work
718
719         * khtml/editing/visible_position.cpp:
720         (khtml::VisiblePosition::isCandidate): Insertion point disappearing was due to a failed
721         check here after deleting all the content in the body element. The special "empty block"
722         needs to add check for DOM children. A block may have straggling anonymous render children in
723         some cases, and so the check needs to be (!DOM-kids || !render-kids).
724
725         Also, I botched the last checkin trying to split these two patches in my tree. Wrong layout tests 
726         got checked in, I checked in a conflict marker in the Changelog, etc. I fixed everything with this checkin.
727
728 2005-03-01  Ken Kocienda  <kocienda@apple.com>
729  
730         Reviewed by Maciej
731
732         Improved fix for this bug:
733         
734         <rdar://problem/3996605> Insert paragraph command puts new block in wrong place, creating difficult-to-handle HTML
735
736         Maciej and I discussed this situation at length, and we came up with a better fix than I did earlier.
737
738         * khtml/editing/htmlediting.cpp:
739         (khtml::InsertParagraphSeparatorCommand::doApply): Simplify one special case so that it only handles the 
740         "last in block" situation. Remove special case for "downstream node is in different block" and handle
741         this case with a little bit of special code in the general insertion case.
742
743         Results studied to make sure there were no problems.
744
745         * layout-tests/editing/deleting/delete-3959464-fix-expected.txt
746         * layout-tests/editing/inserting/insert-div-001-expected.txt
747         * layout-tests/editing/inserting/insert-div-002-expected.txt
748         * layout-tests/editing/inserting/insert-div-004-expected.txt
749         * layout-tests/editing/inserting/insert-div-005-expected.txt
750         * layout-tests/editing/inserting/insert-div-009-expected.txt
751         * layout-tests/editing/inserting/insert-div-014-expected.txt
752         * layout-tests/editing/inserting/insert-div-018-expected.txt
753         * layout-tests/editing/inserting/insert-div-024-expected.txt
754         * layout-tests/editing/pasteboard/paste-text-011-expected.txt
755         * layout-tests/editing/pasteboard/paste-text-013-expected.txt
756         * layout-tests/editing/pasteboard/paste-text-015-expected.txt
757         * layout-tests/editing/style/block-style-004-expected.txt
758         * layout-tests/editing/style/block-style-005-expected.txt
759         * layout-tests/editing/style/block-style-006-expected.txt
760
761         New test:
762         
763         * layout-tests/editing/inserting/insert-div-027.html
764         * layout-tests/editing/inserting/insert-div-027-expected.txt
765
766 2005-03-01  David Hyatt  <hyatt@apple.com>
767
768         Fix for 4030890, regression with <sup> on Google.  Fix some bogus != comparison checks in verticalPositionHint.
769         
770         Reviewed by John
771
772         (RenderObject::getVerticalPosition):
773         
774 2005-03-01  Chris Blumenberg  <cblu@apple.com>
775
776         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
777
778         Reviewed by rjw.
779
780         * khtml/editing/htmlediting.cpp:
781         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
782         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
783         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
784         * layout-tests/editing/deleting/smart-delete-001.html: Added.
785         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
786         * layout-tests/editing/deleting/smart-delete-002.html: Added.
787
788 2005-03-01  Richard Williamson   <rjw@apple.com>
789
790         Fixed <rdar://problem/4029772> Weather widgets use a lot of memory (more that other widgets)
791
792         The string objects created by KWQHeaderStringFromDictionary() leaked.
793
794         Reviewed by John Louch.
795
796         * kwq/KWQLoader.mm:
797         (KWQHeaderStringFromDictionary):
798
799 2005-03-01  Jens Alfke  <jens@apple.com>
800
801         Reviewed by Darin.
802
803         <rdar://problem/4004531> Simple Sun Signed Applet throws exceptions; doesn't run
804         Two fixes for the way we extract the parameter-y goodness from <object> tags.
805
806         * khtml/rendering/render_frames.cpp:
807         (RenderPartObject::updateWidget):
808
809 2005-03-01  Richard Williamson   <rjw@apple.com>
810
811         Fixed <rdar://problem/3990258> REGRESSION (125.12-181): top of picture that spans two pages is cut off on print from Safari
812
813         The problem was due to incorrect "object truncation" in  RenderFlow::paintLines.  
814         We attempt to push objects down if they don't fit on a page at
815         paint time.  If the attempt to push object down failed we just
816         didn't paint at all.
817
818         Reviewed by Hyatt.
819
820         * khtml/rendering/render_flow.cpp:
821         (RenderFlow::paintLines):
822
823 <<<<<<< ChangeLog
824 2005-03-01  Chris Blumenberg  <cblu@apple.com>
825
826         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
827
828         Reviewed by rjw.
829
830         * khtml/editing/htmlediting.cpp:
831         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
832         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
833         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
834         * layout-tests/editing/deleting/smart-delete-001.html: Added.
835         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
836         * layout-tests/editing/deleting/smart-delete-002.html: Added.
837
838 2005-03-01  Ken Kocienda  <kocienda@apple.com>
839
840         Reviewed by Vicki
841
842         Fix for this bug:
843         
844         <rdar://problem/4030068> Trailing <return> gets eaten when pasted at the end of a document
845
846         * khtml/editing/htmlediting.cpp:
847         (khtml::ReplaceSelectionCommand::doApply): Add code to handle formerly-unhandled end-of-document case.
848
849 2005-03-01  Maciej Stachowiak  <mjs@apple.com>
850
851         Reviewed by Vicki.
852
853         <rdar://problem/4003774> REGRESSION(125-181): JavaScript problems @ Yankee/Dixie quiz
854         
855         Reworked how scopes are set up for event handlers to match other
856         browser. This includes the following changes:
857
858         - Special scope entries are set up at the time the event handler
859         is created, not at the time it fires.
860
861         - Special scope is only set up for event handlers set in the html
862         source through an html attribute, not for handlers set using
863         addEventHandler or setting JS properties like onclick through
864         JavaScript.
865
866         - Special scope is based on the DOM node on which the handler is
867         an attribute, not the event target.
868
869         This fixes the regression while allowing the fix to
870         <rdar://problem/3798453> (DIG: getting variable with same name as
871         DOM element attribute gets attribute value instead) to keep
872         working correctly.
873         
874         * khtml/ecma/kjs_events.cpp:
875         (JSEventListener::handleEvent):
876         (JSLazyEventListener::JSLazyEventListener):
877         (JSLazyEventListener::parseCode):
878         * khtml/ecma/kjs_events.h:
879         * khtml/ecma/kjs_proxy.cpp:
880         (KJSProxyImpl::createHTMLEventHandler):
881         * khtml/ecma/kjs_proxy.h:
882         * khtml/ecma/kjs_window.cpp:
883         (Window::getJSLazyEventListener):
884         * khtml/ecma/kjs_window.h:
885         * khtml/html/html_baseimpl.cpp:
886         (HTMLBodyElementImpl::parseHTMLAttribute):
887         (HTMLFrameElementImpl::parseHTMLAttribute):
888         (HTMLFrameSetElementImpl::parseHTMLAttribute):
889         * khtml/html/html_elementimpl.cpp:
890         (HTMLElementImpl::parseHTMLAttribute):
891         * khtml/html/html_formimpl.cpp:
892         (DOM::HTMLFormElementImpl::parseHTMLAttribute):
893         (DOM::HTMLButtonElementImpl::parseHTMLAttribute):
894         (DOM::HTMLInputElementImpl::parseHTMLAttribute):
895         (DOM::HTMLLabelElementImpl::parseHTMLAttribute):
896         (DOM::HTMLSelectElementImpl::parseHTMLAttribute):
897         (DOM::HTMLTextAreaElementImpl::parseHTMLAttribute):
898         * khtml/html/html_imageimpl.cpp:
899         (HTMLImageElementImpl::parseHTMLAttribute):
900         * khtml/html/html_objectimpl.cpp:
901         (HTMLObjectElementImpl::parseHTMLAttribute):
902         * khtml/khtml_part.cpp:
903         (KHTMLPart::createHTMLEventListener):
904         * khtml/khtml_part.h:
905         * khtml/xml/dom_docimpl.cpp:
906         (DocumentImpl::createHTMLEventListener):
907         * khtml/xml/dom_docimpl.h:
908
909 === Safari-401 ===
910
911 2005-03-01  Chris Blumenberg  <cblu@apple.com>
912
913         Backed out my patch since the tree was closed.
914
915         * khtml/editing/htmlediting.cpp:
916         (khtml::DeleteSelectionCommand::initializePositionData):
917         * khtml/editing/jsediting.cpp:
918
919 2005-03-01  Chris Blumenberg  <cblu@apple.com>
920
921         Fixed: <rdar://problem/4030669> smart delete does not delete spaces from pasted content
922
923         Reviewed by rjw.
924
925         * khtml/editing/htmlediting.cpp:
926         (khtml::DeleteSelectionCommand::initializePositionData): pass true for treatNBSPAsWhiteSpace to leadingWhitespacePosition and trailingWhitespacePosition when testing whether or not we have to delete those characters as well.
927         * khtml/editing/jsediting.cpp: pass true for smartDelete when the selection granularity is WORD. This allows us to write smart delete layout tests.
928         * layout-tests/editing/deleting/smart-delete-001-expected.txt: Added.
929         * layout-tests/editing/deleting/smart-delete-001.html: Added.
930         * layout-tests/editing/deleting/smart-delete-002-expected.txt: Added.
931         * layout-tests/editing/deleting/smart-delete-002.html: Added.
932
933 2005-03-01  Ken Kocienda  <kocienda@apple.com>
934
935         Reviewed by Vicki
936
937         Fix for this bug:
938         
939         <rdar://problem/4030068> Trailing <return> gets eaten when pasted at the end of a document
940
941         * khtml/editing/htmlediting.cpp:
942         (khtml::ReplaceSelectionCommand::doApply): Add code to handle formerly-unhandled end-of-document case.
943
944 2005-03-01  David Harrison  <harrison@apple.com>
945
946         Reviewed by Chris.
947
948         <rdar://problem/3915560> Mail would like an SPI to enable "smart" text paste/drop
949
950         * kwq/WebCoreBridge.h:
951         * kwq/WebCoreBridge.mm:
952         (-[WebCoreBridge smartDeleteRangeForProposedRange:]):
953         (-[WebCoreBridge smartInsertForString:replacingRange:beforeString:afterString:]):
954         New.
955
956 2005-03-01  Chris Blumenberg  <cblu@apple.com>
957
958         Fixed: <rdar://problem/4030404> selection granularity should be set when extending selection via JS
959
960         Reviewed by kocienda.
961
962         * khtml/ecma/kjs_window.cpp:
963         (SelectionFunc::tryCall): set the granularity on the part. This will allow us to write smart paste layout tests.
964         * layout-tests/editing/pasteboard/smart-paste-001-expected.txt: Added.
965         * layout-tests/editing/pasteboard/smart-paste-001.html: Added.
966         * layout-tests/editing/pasteboard/smart-paste-002-expected.txt: Added.
967         * layout-tests/editing/pasteboard/smart-paste-002.html: Added.
968         * layout-tests/editing/pasteboard/smart-paste-003-expected.txt: Added.
969         * layout-tests/editing/pasteboard/smart-paste-003.html: Added.
970         * layout-tests/editing/pasteboard/smart-paste-004-expected.txt: Added.
971         * layout-tests/editing/pasteboard/smart-paste-004.html: Added.
972         * layout-tests/editing/pasteboard/smart-paste-005-expected.txt: Added.
973         * layout-tests/editing/pasteboard/smart-paste-005.html: Added.
974         * layout-tests/editing/pasteboard/smart-paste-006-expected.txt: Added.
975         * layout-tests/editing/pasteboard/smart-paste-006.html: Added.
976         * layout-tests/editing/pasteboard/smart-paste-007-expected.txt: Added.
977         * layout-tests/editing/pasteboard/smart-paste-007.html: Added.
978
979 2005-03-01  Chris Blumenberg  <cblu@apple.com>
980
981         Fixed: <rdar://problem/4029934> smart paste with plain text can add too many spaces
982
983         Reviewed by kocienda.
984
985         * khtml/editing/htmlediting.cpp:
986         (khtml::ReplaceSelectionCommand::doApply): pass true for treatNBSPAsWhitespace to leadingWhitespacePosition and trailingWhitespacePosition
987         * khtml/xml/dom_position.cpp:
988         (DOM::isWS): take treatNBSPAsWhitespace param
989         (DOM::Position::leadingWhitespacePosition): ditto
990         (DOM::Position::trailingWhitespacePosition): ditto
991         * khtml/xml/dom_position.h:
992
993 2005-03-01  Ken Kocienda  <kocienda@apple.com>
994
995         Reviewed by John
996
997         Fix for this bug:
998         
999         <rdar://problem/3996605> Insert paragraph command puts new block in wrong place, creating difficult-to-handle HTML
1000
1001         * khtml/editing/htmlediting.cpp:
1002         (khtml::InsertParagraphSeparatorCommand::doApply): Look for the upstream-most block to insert after
1003         when at the visible end of a block. This helps to avoid some undesirable sequences of markup which
1004         Dave says will be vary hard to render. Changing the command in this way avoids the "limitations"
1005         of the render tree by not asking it to render markup we do not want to make anyway.
1006         
1007         All these tests change, but either in insignificant ways, or for the better.
1008         
1009         * layout-tests/editing/deleting/delete-3959464-fix-expected.txt:
1010         * layout-tests/editing/inserting/insert-div-001-expected.txt:
1011         * layout-tests/editing/inserting/insert-div-002-expected.txt:
1012         * layout-tests/editing/inserting/insert-div-004-expected.txt:
1013         * layout-tests/editing/inserting/insert-div-005-expected.txt:
1014         * layout-tests/editing/inserting/insert-div-009-expected.txt:
1015         * layout-tests/editing/inserting/insert-div-024-expected.txt:
1016         * layout-tests/editing/pasteboard/paste-text-011-expected.txt:
1017         * layout-tests/editing/pasteboard/paste-text-013-expected.txt:
1018         * layout-tests/editing/pasteboard/paste-text-015-expected.txt:
1019         * layout-tests/editing/style/block-style-004-expected.txt:
1020         * layout-tests/editing/style/block-style-005-expected.txt:
1021         * layout-tests/editing/style/block-style-006-expected.txt:
1022         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt:
1023         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt:
1024         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt:
1025         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt:
1026
1027         New test to check specific problem mentioned in the bug.
1028
1029         * layout-tests/editing/inserting/insert-div-026-expected.txt: Added.
1030         * layout-tests/editing/inserting/insert-div-026.html: Added.
1031
1032 2005-02-28  Maciej Stachowiak  <mjs@apple.com>
1033
1034         Reviewed by Darin.
1035
1036         <rdar://problem/4002864> REGRESSION(125-146) getElementById in onload fails in a test case involving external resources
1037         
1038         Moved management of elementById hashtable from attach/detach to
1039         insertedIntoDocument/removedFromDocument, to avoid being thrown
1040         off by temporary detaches due to style recalcs.
1041         
1042         * khtml/xml/dom_elementimpl.cpp:
1043         (ElementImpl::insertedIntoDocument):
1044         (ElementImpl::removedFromDocument):
1045         (ElementImpl::attach):
1046         (ElementImpl::updateId):
1047         * khtml/xml/dom_elementimpl.h:
1048
1049         Make sure that insertedIntoDocument is called before firing any
1050         DOM events.
1051         
1052         * khtml/xml/dom_nodeimpl.cpp:
1053         (NodeBaseImpl::dispatchChildInsertedEvents): 
1054
1055 2005-02-28  David Hyatt  <hyatt@apple.com>
1056
1057         Fix for 4028999, safari crashes when resetting if mallocsribble is on.  Clip rects were being cleared using dead
1058         render objects.  Change the ordering.
1059         
1060         Reviewed by rjw
1061
1062         * khtml/rendering/render_box.cpp:
1063         (RenderBox::detach):
1064         * khtml/rendering/render_layer.cpp:
1065         (RenderLayer::~RenderLayer):
1066
1067 2005-02-28  Chris Blumenberg  <cblu@apple.com>
1068
1069         Fixed: <rdar://problem/4024786> REGRESSION (Mail): "Smart paste" plain-text word into Blot leaves insertion point misplaced
1070
1071         Reviewed by kocienda.
1072
1073         * khtml/editing/htmlediting.cpp:
1074         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Call updateLayout so caretMinOffset and caretMaxOffset return correct values.
1075
1076 2005-02-28  John Sullivan  <sullivan@apple.com>
1077
1078         Reviewed by Ken.
1079         
1080         - WebCore part of fix for <rdar://problem/4023490> REGRESSION (125-185): Tabbing through links 
1081         on frameset page gets stuck at end (tivofaq.com)
1082
1083         * kwq/WebCoreBridge.h:
1084         add nextValidKeyViewOutsideWebFrameViews (code is in WebKit)
1085
1086 2005-02-28  Ken Kocienda  <kocienda@apple.com>
1087
1088         Reviewed by John
1089
1090         Fix for this bug:
1091         
1092         <rdar://problem/3972665> 8A360: HTML message partially truncated on left hand side, text-indent from Script Editor
1093
1094         * khtml/css/css_computedstyle.cpp: inheritableProperties array now defined in css_valueimpl.cpp.
1095         * khtml/css/css_valueimpl.cpp: Define inheritableProperties array here.
1096         (DOM::CSSMutableStyleDeclarationImpl::copyBlockProperties): Use new name for blockProperties, and use the new
1097         constant for the number of items in the array.
1098         (DOM::CSSMutableStyleDeclarationImpl::removeBlockProperties): Ditto.
1099         (DOM::CSSMutableStyleDeclarationImpl::removeInheritableProperties): New function.
1100         * khtml/css/css_valueimpl.h: Declare inheritableProperties array and numInheritableProperties extern so they
1101         can be defined in css_valueimpl.cpp and used in css_computedstyle.cpp.
1102         * khtml/editing/htmlediting.cpp:
1103         (khtml::ReplacementFragment::removeStyleNodes): This code was misguided, and removed too much style from HTML
1104         elements. Now, it removes from HTML elements only the styles that we replace later with a call to applyStyle().
1105         Also, add ID_B to list of inline "style" nodes we are willing to remove. Leaving it off was an oversight.
1106
1107         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: ID_B fix made this result change, without any
1108         visible change in the test.
1109         
1110         New test:
1111         
1112         * layout-tests/editing/style/smoosh-styles-003.html
1113         * layout-tests/editing/style/smoosh-styles-003-expected.txt
1114
1115 2005-02-28  Richard Williamson   <rjw@apple.com>
1116
1117         Fixed <rdar://problem/4026985> CrashTracer: ...14 crashes at com.apple.WebCore: -[KWQPageState invalidate] + 32
1118
1119         Added more nil checking and ASSERTS.
1120         Without a reproducible case this is hard to definitively resolve.
1121
1122         Reviewed by John Sullivan.
1123
1124         * kwq/KWQPageState.mm:
1125         (-[KWQPageState invalidate]):
1126
1127 2005-02-28  Richard Williamson   <rjw@apple.com>
1128
1129         Fixed <rdar://problem/4027702> 3.5% performance regression btwn Safari-188 and Safari-400
1130
1131         I inadvertently checked in some debugging code that disabled
1132         style sharing.  Backed out that change.
1133
1134         * khtml/css/cssstyleselector.cpp:
1135         (khtml::CSSStyleSelector::styleForElement):
1136
1137 2005-02-28  Chris Blumenberg  <cblu@apple.com>
1138
1139         Fixed: <rdar://problem/4026639> www.bmw.ca configurator does not work with Safari
1140
1141         Reviewed by john.
1142
1143         * khtml/ecma/kjs_html.cpp:
1144         (KJS::HTMLElement::tryGet): when frameset.<name of frame child> is called, return the window object of the frame child
1145
1146 2005-02-28  Ken Kocienda  <kocienda@apple.com>
1147
1148         Reviewed by Chris
1149
1150         Fix for this bug:
1151         
1152         <rdar://problem/4026906> Paste of HTML table content can break table structure
1153
1154         * khtml/editing/htmlediting.cpp:
1155         (khtml::ReplacementFragment::pruneEmptyNodes): Call new isProbablyTableStructureNode() function to prevent
1156         removal of empty table structure nodes.
1157         (khtml::ReplacementFragment::removeUnrenderedNodesUsingTestRendering): Ditto.
1158         (khtml::isProbablyTableStructureNode): New helper function.
1159         * khtml/editing/htmlediting.h: Declare new helper.
1160
1161 2005-02-28  Chris Blumenberg  <cblu@apple.com>
1162
1163         Fixed: <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
1164
1165         Reviewed by kocienda.
1166
1167         * khtml/editing/htmlediting.cpp:
1168         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): ref and deref the element while it is "floating"
1169         (khtml::ReplacementFragment::insertFragmentForTestRendering): ditto
1170         (khtml::floatRefdElement): new, keeps an element alive while its ref count is 0
1171         (khtml::createDefaultParagraphElement): removed commented out code
1172         (khtml::createBlockPlaceholderElement): ref the element and return it as "floating"
1173         (khtml::createFontElement): ditto
1174         (khtml::createStyleSpanElement): ditto
1175         * khtml/editing/htmlediting.h:
1176
1177 2005-02-27  Maciej Stachowiak  <mjs@apple.com>
1178
1179         Reviewed by Vicki.
1180
1181         <rdar://problem/3993557> REGRESSION (125-180-ish): getElementsByTagName no longer works with namespace designations
1182         
1183         * khtml/xml/dom_nodeimpl.cpp:
1184         (NodeBaseImpl::getElementsByTagNameNS): When no namespace is specified, find elements
1185         of the specified name in any namespace to match Mozilla and earlier Safari behavior.
1186
1187 2005-02-25  Darin Adler  <darin@apple.com>
1188
1189         Reviewed by Adele.
1190
1191         - fixed <rdar://problem/4025618> Crash while searching at hollywoodvideo.com
1192
1193         * khtml/html/html_formimpl.h: Added valueWithDefault.
1194         * khtml/html/html_formimpl.cpp:
1195         (DOM::HTMLInputElementImpl::appendFormData): Call valueWithDefault instead of going at the render object
1196         to try to get the default value; there may be no render object if this is display:none.
1197         (DOM::HTMLInputElementImpl::valueWithDefault): Added. Knows about the defaults for "submit" and "reset"
1198         buttons; otherwise just returns the value as-is.
1199
1200         * khtml/rendering/render_form.h: Removed the defaultLabel member functions.
1201         * khtml/rendering/render_form.cpp:
1202         (RenderSubmitButton::rawText): Call valueWithDefault instead of using defaultLabel function here on
1203         the render side. The DOM needs to know how to deal with the default anyway for form submission.
1204         (RenderSubmitButton::defaultLabel): Removed.
1205         (RenderResetButton::defaultLabel): Removed.
1206         (RenderPushButton::defaultLabel): Removed.
1207
1208 2005-02-25  Darin Adler  <darin@apple.com>
1209
1210         Reviewed by John.
1211
1212         - fixed <rdar://problem/4025088> window onblur and onfocus don't fire when text field has focus
1213
1214         * kwq/KWQKHTMLPart.h: Added setWindowHasFocus function and m_windowHasFocus data member.
1215         * kwq/KWQKHTMLPart.mm:
1216         (KWQKHTMLPart::setDisplaysWithFocusAttributes): Took out the code that sends the focus and blur events.
1217         (KWQKHTMLPart::setWindowHasFocus): Put that code here instead.
1218
1219         * kwq/WebCoreBridge.h: Added setWindowHasFocus: method to the bridge.
1220         * kwq/WebCoreBridge.mm: (-[WebCoreBridge setWindowHasFocus:]): Added. Calls method on the part.
1221
1222 2005-02-25  Darin Adler  <darin@apple.com>
1223
1224         Reviewed by John.
1225
1226         - re-fixed <rdar://problem/3665430> horizontal scroll bar of text area does not show, even when text is wide in "no wrap" mode
1227
1228         * kwq/KWQTextArea.mm: (-[KWQTextArea _updateTextViewWidth]): Don't change the text view width
1229         to match the text area's width in the "wrap" case.
1230
1231 2005-02-25  Ken Kocienda  <kocienda@apple.com>
1232
1233         Reviewed by Hyatt
1234
1235         Fix for this bug:
1236         
1237         <rdar://problem/4021518> 8A394 Mail crashes during paste: khtml::RootInlineBox::closestLeafChildForXPos
1238
1239         * khtml/editing/visible_units.cpp:
1240         (khtml::previousLinePosition): Adding an updateLayout call at the start of the function fixes the crash, since
1241         we caught line boxes in a not-completely-updated state.
1242         (khtml::nextLinePosition): Ditto.
1243
1244 2005-02-25  David Hyatt  <hyatt@apple.com>
1245
1246         Fix for 4010774, make sure to avoid an O(N^2) algorithm in nextRenderer() that is triggered when large
1247         DOM subtrees are inserted into documents via one insert/append call.
1248         
1249         Reviewed by kocienda
1250
1251         * khtml/xml/dom_nodeimpl.cpp:
1252         (NodeImpl::nextRenderer):
1253
1254 2005-02-25  Richard Williamson   <rjw@apple.com>
1255
1256         Fixed <rdar://problem/3382926> Bidi neutrals at RTL/LTR boundaries not handled correctly.
1257
1258         Second pass at fixing 3382926 w/o causing layout regressions.  Same concept:
1259         if directionality of text's element is RTL and first character has neutral directionality
1260         then set the initial directionality to RTL.
1261
1262         Reviewed by Hyatt.
1263
1264         * khtml/rendering/bidi.cpp:
1265         (khtml::RenderBlock::bidiReorderLine):
1266         (khtml::RenderBlock::determineStartPosition):
1267
1268 === Safari-400 ===
1269
1270 2005-02-25  Ken Kocienda  <kocienda@apple.com>
1271
1272         Reviewed by me
1273
1274         Roll out Chris' change to fix this bug:
1275         
1276         <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
1277         
1278         That code change is responsible for all these new crashers:
1279         
1280         <rdar://problem/4025177> crash copying safari.apple.com into Blot document
1281         <rdar://problem/4025184> crash in DOM::NodeImpl::parentNode copying "New!" from google.com to Blot
1282         <rdar://problem/4025214> crash in DOM::NodeImpl::getRect loading paste-match-style-001.html
1283
1284         Since we wish to close the tree for a build right now, I am rolling out rather than investigating.
1285
1286         * khtml/editing/htmlediting.cpp:
1287         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded)
1288         (khtml::ReplacementFragment::insertFragmentForTestRendering)
1289         (khtml::createDefaultParagraphElement)
1290         (khtml::createBlockPlaceholderElement)
1291         (khtml::createFontElement)
1292         (khtml::createStyleSpanElement)
1293         * khtml/editing/htmlediting.h
1294
1295 2005-02-25  Ken Kocienda  <kocienda@apple.com>
1296
1297         Reviewed by John
1298
1299         Fix for this bug:
1300         
1301         <rdar://problem/4020108> Pasting text into message makes Mail crash reproducibly
1302
1303         Note that, even with this fix, development build will crash until this bug is fixed:
1304         <rdar://problem/4024996> Applying block styles can cause assertion failure in inline style removal
1305         
1306         This will not crash deployment builds, so I am going to land.
1307
1308         * khtml/editing/htmlediting.cpp:
1309         (khtml::ApplyStyleCommand::applyBlockStyle): Applying block styles can make the loop to reach beyondEnd
1310         fail since the structure of the document can change. Cache the next node first before operating on it,
1311         as we do elsewhere.
1312
1313 2005-02-25  Vicki Murley <vicki@apple.com>
1314
1315         - recommit this change, since rolling it out did NOT fix the performance regression!
1316
1317     2005-02-23  Darin Adler  <darin@apple.com>
1318
1319         Reviewed by John.
1320
1321         - fixed <rdar://problem/4011405> REGRESSION (180-181): Unconfirmed text disappears when text focus moves
1322
1323         The key was to change things around so that we don't push text from the DOM to the widget
1324         unless the DOM has actually been changed. This prevents the code path that wipes out inline input
1325         during the blur process.
1326
1327         * khtml/html/html_formimpl.cpp:
1328         (DOM::HTMLInputElementImpl::HTMLInputElementImpl): Start m_valueMatchesRenderer as false.
1329         (DOM::HTMLInputElementImpl::parseHTMLAttribute): Set m_valueMatchesRenderer to false when a
1330         new value is set here.
1331         (DOM::HTMLInputElementImpl::setValue): Set m_valueMatchesRenderer to false when a new value
1332         is set here.
1333         (DOM::HTMLInputElementImpl::setValueFromRenderer): Added. Sets m_value, sets m_valueMatchesRenderer
1334         to true, and also sends out the input event. It's better to have this here than in the renderer code.
1335         (DOM::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl): Start m_valueIsValid as false (replaces
1336         m_dirtyvalue) and m_valueMatchesRenderer as false.
1337         (DOM::HTMLTextAreaElementImpl::updateValue): Added. Factored this out from the value function. Uses
1338         the new booleans and keeps them up to date, specifically setting m_valueMatchesRenderer based on
1339         where the value came from.
1340         (DOM::HTMLTextAreaElementImpl::value): Updated to call updateValue to do most of the work.
1341         (DOM::HTMLTextAreaElementImpl::setValue): Set both m_valueIsValid and m_valueMatchesRenderer.
1342         (DOM::HTMLTextAreaElementImpl::setDefaultValue): Take parameter by reference.
1343
1344         * khtml/html/html_formimpl.h: Added setValueFromRenderer, valueMatchesRenderer, setValueMatchesRenderer,
1345         and m_valueMatchesRenderer to input element. For textarea element, made some parameters pass DOMString
1346         by reference, and added invalidateValue, updateValue, valueMatchesRenderer, and setValueMatchesRenderer.
1347
1348         * khtml/rendering/render_form.cpp:
1349         (RenderLineEdit::updateFromElement): Don't re-get the value from the DOM if valueMatchesRenderer
1350         is true.
1351         (RenderLineEdit::slotTextChanged): Call setValueFromRenderer instead of manipulating the DOM
1352         directly.
1353         (RenderTextArea::detach): Call updateValue instead of calling value for its side effect.
1354         (RenderTextArea::handleFocusOut): Ditto.
1355         (RenderTextArea::updateFromElement): Call updateValue and then not re-get the value from the
1356         DOM if valueMatchesRenderer is true.
1357         (RenderTextArea::slotTextChanged): Call invalidateValue instead of directly setting m_dirtyvalue to true.
1358
1359 2005-02-25  Chris Blumenberg  <cblu@apple.com>
1360
1361         Fixed: <rdar://problem/4023566> Stickies: Crash in ReplacementFragment::insertFragmentForTestRendering on paste
1362
1363         Reviewed by darin.
1364
1365         * khtml/editing/htmlediting.cpp:
1366         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded):
1367         (khtml::ReplacementFragment::insertFragmentForTestRendering):
1368         (khtml::floatRefdElement):
1369         (khtml::createDefaultParagraphElement):
1370         (khtml::createBlockPlaceholderElement):
1371         (khtml::createFontElement):
1372         (khtml::createStyleSpanElement):
1373         * khtml/editing/htmlediting.h:
1374
1375 2005-02-25  Darin Adler  <darin@apple.com>
1376
1377         * kwq/character-sets.txt: Checked in updated file. This new file has no effect, because none of the
1378         changes affect character sets that we support, but it's good to have the latest file in here, and
1379         completely safe because I checked that the generated files have not changed.
1380
1381 2005-02-25  Vicki Murley <vicki@apple.com>
1382
1383         Reviewed by Darin.
1384  
1385         - back out this change, since it causes a 3.5% performance regression
1386
1387     2005-02-23  Darin Adler  <darin@apple.com>
1388
1389         Reviewed by John.
1390
1391         - fixed <rdar://problem/4011405> REGRESSION (180-181): Unconfirmed text disappears when text focus moves
1392
1393         The key was to change things around so that we don't push text from the DOM to the widget
1394         unless the DOM has actually been changed. This prevents the code path that wipes out inline input
1395         during the blur process.
1396
1397         * khtml/html/html_formimpl.cpp:
1398         (DOM::HTMLInputElementImpl::HTMLInputElementImpl): Start m_valueMatchesRenderer as false.
1399         (DOM::HTMLInputElementImpl::parseHTMLAttribute): Set m_valueMatchesRenderer to false when a
1400         new value is set here.
1401         (DOM::HTMLInputElementImpl::setValue): Set m_valueMatchesRenderer to false when a new value
1402         is set here.
1403         (DOM::HTMLInputElementImpl::setValueFromRenderer): Added. Sets m_value, sets m_valueMatchesRenderer
1404         to true, and also sends out the input event. It's better to have this here than in the renderer code.
1405         (DOM::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl): Start m_valueIsValid as false (replaces
1406         m_dirtyvalue) and m_valueMatchesRenderer as false.
1407         (DOM::HTMLTextAreaElementImpl::updateValue): Added. Factored this out from the value function. Uses
1408         the new booleans and keeps them up to date, specifically setting m_valueMatchesRenderer based on
1409         where the value came from.
1410         (DOM::HTMLTextAreaElementImpl::value): Updated to call updateValue to do most of the work.
1411         (DOM::HTMLTextAreaElementImpl::setValue): Set both m_valueIsValid and m_valueMatchesRenderer.
1412         (DOM::HTMLTextAreaElementImpl::setDefaultValue): Take parameter by reference.
1413
1414         * khtml/html/html_formimpl.h: Added setValueFromRenderer, valueMatchesRenderer, setValueMatchesRenderer,
1415         and m_valueMatchesRenderer to input element. For textarea element, made some parameters pass DOMString
1416         by reference, and added invalidateValue, updateValue, valueMatchesRenderer, and setValueMatchesRenderer.
1417
1418         * khtml/rendering/render_form.cpp:
1419         (RenderLineEdit::updateFromElement): Don't re-get the value from the DOM if valueMatchesRenderer
1420         is true.
1421         (RenderLineEdit::slotTextChanged): Call setValueFromRenderer instead of manipulating the DOM
1422         directly.
1423         (RenderTextArea::detach): Call updateValue instead of calling value for its side effect.
1424         (RenderTextArea::handleFocusOut): Ditto.
1425         (RenderTextArea::updateFromElement): Call updateValue and then not re-get the value from the
1426         DOM if valueMatchesRenderer is true.
1427         (RenderTextArea::slotTextChanged): Call invalidateValue instead of directly setting m_dirtyvalue to true.
1428
1429 2005-02-25  Darin Adler  <darin@apple.com>
1430
1431         Reviewed by Chris.
1432
1433         - fixed <rdar://problem/4024786> REGRESSION (Mail): "Smart paste" plain-text word into Blot leaves insertion point misplaced
1434
1435         * khtml/editing/htmlediting.cpp: (khtml::ReplaceSelectionCommand::doApply):
1436         Use the insertNodeAfterAndUpdateNodesInserted and insertNodeBeforeAndUpdateNodesInserted
1437         functions to add the leading and trailing spaces for smart paste.
1438
1439 2005-02-25  David Hyatt  <hyatt@apple.com>
1440
1441         Back out fix for 3382926, since it breaks LTR text inside RTL contexts.
1442         
1443         Reviewed by john
1444
1445         * khtml/rendering/bidi.cpp:
1446         (khtml::BidiIterator::direction):
1447
1448 2005-02-25  David Hyatt  <hyatt@apple.com>
1449
1450         Fix for 3975039, scrolling is slow in huge RSS views.  Optimize the calculation of clip rects for overflow:hidden
1451         layers.  Also optimize layer movement when scrolling overflow sections.
1452         
1453         Reviewed by darin
1454
1455         * khtml/rendering/render_layer.cpp:
1456         (throw):
1457         (ClipRects::operator delete):
1458         (ClipRects::detach):
1459         (RenderLayer::RenderLayer):
1460         (RenderLayer::~RenderLayer):
1461         (RenderLayer::updateLayerPosition):
1462         (RenderLayer::removeOnlyThisLayer):
1463         (RenderLayer::insertOnlyThisLayer):
1464         (RenderLayer::scrollToOffset):
1465         (RenderLayer::hitTest):
1466         (RenderLayer::calculateClipRects):
1467         (RenderLayer::calculateRects):
1468         (RenderLayer::containsPoint):
1469         (RenderLayer::clearClipRects):
1470         (RenderLayer::clearClipRect):
1471         * khtml/rendering/render_layer.h:
1472         (khtml::ClipRects::m_refCnt):
1473         (khtml::ClipRects::overflowClipRect):
1474         (khtml::ClipRects::fixedClipRect):
1475         (khtml::ClipRects::posClipRect):
1476         (khtml::ClipRects::ref):
1477         (khtml::ClipRects::deref):
1478         (khtml::RenderLayer::clipRects):
1479         * khtml/rendering/render_object.cpp:
1480         (RenderObject::setStyle):
1481
1482 2005-02-24  Maciej Stachowiak  <mjs@apple.com>
1483
1484         Reviewed by Darin and Dave a while ago.
1485
1486         <rdar://problem/3996685> REGRESSION: Crash in KWQVectorImpl::at loading http://maps.google.com/mapfiles/homepanel.xsl
1487         
1488         * kwq/WebCoreBridge.mm:
1489         (formElementFromDOMElement): Check for isHTMLElement() as well as
1490         id() == ID_FORM. This seems like an impossible situation, but
1491         papering over it seems more expedient for the time being.
1492
1493 2005-02-24  Richard Williamson   <rjw@apple.com>
1494
1495         Fixed <rdar://problem/3382926> Bidi neutrals at RTL/LTR boundaries not handled correctly.
1496
1497         Use mirror characters correctly when rendering with RTL directionality.
1498
1499         Reviewed by Hyatt.
1500
1501         * khtml/rendering/bidi.cpp:
1502         (khtml::BidiIterator::direction):
1503
1504 2005-02-24  Richard Williamson   <rjw@apple.com>
1505
1506         Fixed <rdar://problem/3985889> REGRESSION (125-180): setting <img> src to GIF that already animated does not animate; just shows final frame
1507         
1508         Reviewed by Hyatt.
1509
1510         * WebCore.pbproj/project.pbxproj:
1511         * khtml/html/html_imageimpl.cpp:
1512         (HTMLImageLoader::updateFromElement):
1513         * khtml/rendering/render_image.cpp:
1514         (RenderImage::resetAnimation):
1515         * khtml/rendering/render_image.h:
1516         * khtml/rendering/render_list.cpp:
1517         (RenderListMarker::setStyle):
1518         (RenderListMarker::paint):
1519         * khtml/rendering/render_list.h:
1520         * kwq/KWQPixmap.h:
1521         * kwq/KWQPixmap.mm:
1522         (QPixmap::QPixmap):
1523         (QPixmap::resetAnimation):
1524         * kwq/WebCoreImageRenderer.h:
1525
1526 2005-02-24  Chris Blumenberg  <cblu@apple.com>
1527
1528         Fixed: <rdar://problem/4020110> Safari crashes in setAllData while taking a www.zoomerang.com survey
1529
1530         Reviewed by rjw.
1531
1532         * kwq/KWQResourceLoader.mm:
1533         (-[KWQResourceLoader finishJobAndHandle:]): clear the job after we've deleted to avoid reentrancy
1534
1535 2005-02-24  Darin Adler  <darin@apple.com>
1536
1537         Reviewed by Vicki.
1538
1539         - fixed <rdar://problem/4023360> REGRESSION (186-187): image file upload is broken at pep.apple.com
1540
1541         * khtml/html/html_formimpl.cpp: (DOM::HTMLInputElementImpl::appendFormData): Return true after
1542         setting up the form data for an uploaded file. The old code would fall through to the ISINDEX
1543         case and send double form data (the filename instead of the file contents the second time).
1544
1545 2005-02-24  David Harrison  <harrison@apple.com>
1546
1547         Reviewed by Ken.
1548         
1549         <rdar://problem/3990849> AX: textMarkerRange for an AXUIElement within an AXWebArea
1550
1551         * kwq/KWQAccObject.mm:
1552         (-[KWQAccObject textMarkerRange]):
1553         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
1554         (-[KWQAccObject doAXTextMarkerRangeForUIElement:]):
1555         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
1556         Added AXTextMarkerRangeForUIElement, or you can send textMarkerRange to the UIElement itself.
1557
1558 2005-02-24  David Harrison  <harrison@apple.com>
1559
1560         Reviewed by Vicki.
1561
1562         <rdar://problem/4004279> 3 AXSelectedTextChanged notifications are firing each time I type a character
1563
1564         * khtml/xml/dom_docimpl.cpp:
1565         (DocumentImpl::updateSelection):
1566         Send notification only if the selection is not null.  This safely ignores transitory selections set during editing.
1567
1568 2005-02-24  Darin Adler  <darin@apple.com>
1569
1570         Reviewed by John.
1571
1572         - fixed <rdar://problem/3987619> in some cases, text doesn't resize with Format->Style->Bigger/Smaller
1573
1574         * khtml/editing/htmlediting.cpp:
1575         (khtml::ApplyStyleCommand::applyRelativeFontStyleChange): Only call nodeFullySelected for non-text nodes.
1576         Text nodes are already split so they're either in the range and full selected or out of the range.
1577         And nodeFullySelected doesn't work for text nodes.
1578         (khtml::ApplyStyleCommand::nodeFullySelected): Add an assertion, since this function only works for elements,
1579         not text nodes.
1580         (khtml::ApplyStyleCommand::nodeFullyUnselected): Ditto.
1581
1582         - make big improvement in <rdar://problem/3953636> Mail hung for ~10sec changing font of 84328 characters: khtml::ApplyStyleCommand::nodeFullySelected
1583
1584         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::compareBoundaryPoints): Improve algorithm based on suggestion
1585         from Nate Begeman.
1586
1587         - fixed <rdar://problem/4020305> REGRESSION (185-186): loading image in new window using document.write fails
1588
1589         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::open): If there is no parent document, don't blow away the base URL.
1590
1591         - fixed <rdar://problem/4021701> REGRESSION (188-188+): form not submitted after pressing <return> at http://hrweb.apple.com
1592         
1593         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::dispatchMouseEvent): Send activate event in the case where the event
1594         sent is a KHTML_CLICK_EVENT, not CLICK_EVENT.
1595
1596 2005-02-23  Kevin Decker  <kdecker@apple.com>
1597
1598         Reviewed by mjs  
1599         
1600         Fixed <rdar://problem/4020747> REGRESSION: stray </applet> tags crash Safari
1601
1602         * khtml/html/htmlparser.cpp:
1603         (KHTMLParser::processCloseTag):  Made a typesafe check that prevents crashes
1604         whenever there is a closing applet tag without an actual <applet> in the first place. 
1605         Now verifies the current token is ID_APPLET before casting it to an HTMLAppletElementImpl.
1606          
1607
1608 2005-02-23  Ken Kocienda  <kocienda@apple.com>
1609
1610         Reviewed by John
1611
1612         Fix for this bug:
1613         
1614         <rdar://problem/3977962> font loses bold style after pasting next to existing text and pressing return
1615
1616         * khtml/editing/htmlediting.cpp:
1617         (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Problem here was
1618         that we were doing work in cases where we should not, and content whose style would have
1619         been correct if we had done nothing was getting clobbered. It turns out that extra work
1620         to apply style to the new paragraph added in this command only needs to be done if we're 
1621         at the boundaries of a paragraph. Otherwise, content that is moved as part of the work 
1622         of the command will lend their styles to the new paragraph without any extra work needed.
1623         So, make this position check and return unless at a paragraph boundary.
1624
1625         New test:
1626
1627         * layout-tests/editing/style/block-styles-007-expected.txt
1628         * layout-tests/editing/style/block-styles-007.html
1629
1630 2005-02-23  Ken Kocienda  <kocienda@apple.com>
1631
1632         Reviewed by Hyatt
1633
1634         Fix for this bug:
1635         
1636         <rdar://problem/4017641> REGRESSION (Mail): you can only bold/unbold a selection starting from end of line once
1637
1638         Problem is with the way we figure out whether to add or remove a style based on
1639         the current selection. In this case, the code is looking at the end of the
1640         previous line, which is not bold, and deduces incorrectly that the operation is
1641         a "make bold". Then the style code runs to make bold, but there is nothing on
1642         the end of the previous line to embolden, so we get into a cycle where the same
1643         thing happens each time cmd-b is hit.
1644
1645         * khtml/khtml_part.cpp:
1646         (KHTMLPart::selectionComputedStyle):  Call editingStartPosition() to get the right position for the font determination.
1647         * khtml/xml/dom2_rangeimpl.cpp:
1648         (DOM::RangeImpl::editingStartPosition): New helper function that "does the right thing" based on whether the
1649         selection is a caret or a range, moving upstream for the former, and downstream for the latter.
1650         * khtml/xml/dom2_rangeimpl.h:
1651         * kwq/KWQKHTMLPart.mm:
1652         (KWQKHTMLPart::fontForSelection): Call editingStartPosition() to get the right position for the font determination.
1653
1654         New tests:
1655
1656         * layout-tests/editing/style/style-boundary-001-expected.txt
1657         * layout-tests/editing/style/style-boundary-001.html
1658         * layout-tests/editing/style/style-boundary-002-expected.txt
1659         * layout-tests/editing/style/style-boundary-002.html
1660         * layout-tests/editing/style/style-boundary-003-expected.txt
1661         * layout-tests/editing/style/style-boundary-003.html
1662         * layout-tests/editing/style/style-boundary-004-expected.txt
1663         * layout-tests/editing/style/style-boundary-004.html
1664
1665 2005-02-23  Richard Williamson   <rjw@apple.com>
1666
1667         Fixed <rdar://problem/3985579> 8A367: Dashboard: Stock widget not visible when click remove to remove single char ticker symbol
1668
1669         Explicitly remove scroll bar views when removing them from 
1670         the overflow.
1671
1672         Don't paint synchronously when the scroll position changes,
1673         this caused funky clip problems.
1674
1675         Reviewed by Hyatt.
1676
1677         * khtml/rendering/render_layer.cpp:
1678         (RenderLayer::scrollToOffset):
1679         (RenderLayer::setHasHorizontalScrollbar):
1680         (RenderLayer::setHasVerticalScrollbar):
1681         (RenderLayer::updateScrollInfoAfterLayout):
1682
1683 2005-02-23  Ken Kocienda  <kocienda@apple.com>
1684
1685         Reviewed by Hyatt
1686
1687         Fix for this bug:
1688         
1689         <rdar://problem/3959996> REGRESSION (Mail): cursor moves to beginning of document when click is past end
1690
1691         * khtml/rendering/render_block.cpp:
1692         (khtml::RenderBlock::positionForCoordinates): Skip blocks that are invisible or have no height when 
1693         looking for a child to pass off to. And save away the last visible block with a height to pass off
1694         to if there is no child at the right y-coordinate.
1695
1696 2005-02-23  David Harrison  <harrison@apple.com>
1697
1698         Reviewed by Darin.
1699
1700         <rdar://problem/4010059> BoundsForTextMarkerRange does not update with scrolled web area
1701
1702         * kwq/KWQAccObject.mm:
1703         (-[KWQAccObject doAXBoundsForTextMarkerRange:]):
1704         Adjust for scrolling.
1705
1706 2005-02-22  Maciej Stachowiak  <mjs@apple.com>
1707
1708         Reviewed by Ken.
1709
1710         <rdar://problem/3949790> hitting return after pasted styled line results in extra content getting the style
1711         
1712         * khtml/editing/htmlediting.cpp:
1713         (khtml::InsertParagraphSeparatorCommand::doApply): In the case
1714         where the start block is the root, insert the newly created DIV at
1715         the end of the root block instead of after the last sibling in the
1716         start node, since the start node could be inside other
1717         style-affecting nodes and we don't want to reparent its cousins
1718         into that.
1719
1720 2005-02-23  David Harrison  <harrison@apple.com>
1721
1722         Reviewed by Vicki.
1723
1724         <rdar://problem/4014691> switch to correctly spelled NSAccessibilityForegroundColorTextAttribute constant
1725         
1726         Also removed two older, now unneeded, wrappers.
1727
1728         * kwq/KWQAccObject.mm:
1729         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
1730         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
1731         Removed these older, now unneeded, wrappers.
1732         
1733         (NSAccessibilityForegroundColorTextAttributeWrapper):
1734         New wrapper for NSAccessibilityForegroundColorTextAttribute.
1735         
1736         (AXAttributeStringSetStyle):
1737         Use NSAccessibilityForegroundColorTextAttributeWrapper.
1738         
1739         (-[KWQAccObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
1740         Remove uses of visiblePositionForStartOfTextMarkerRange and visiblePositionForEndOfTextMarkerRange.
1741
1742 2005-02-23  David Harrison  <harrison@apple.com>
1743
1744         Reviewed by Vicki.
1745
1746         <rdar://problem/3524784> AX hit test doesn't return info when done in empty space of content area
1747
1748         * kwq/KWQAccObject.mm:
1749         (-[KWQAccObject accessibilityHitTest:]):
1750         Return unignored object.
1751
1752 2005-02-23  Darin Adler  <darin@apple.com>
1753
1754         Reviewed by Ken.
1755
1756         - fixed <rdar://problem/4006509> REGRESSION (171-172): Setting CSS -khtml-user-modify property triggers crash
1757
1758         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::applyProperty):
1759         Removed the code that changes the style of the element. This was never needed, and caused the
1760         style to be modified while we were iterating it.
1761
1762 2005-02-23  Ken Kocienda  <kocienda@apple.com>
1763
1764         Reviewed by John
1765
1766         Fix for this bug:
1767         
1768         <rdar://problem/3980209> Mail crashed when I pressed Cmd-Shift-[ (nil-deref in ApplyStyleCommand::addBlockStyleIfNeeded)
1769
1770         * khtml/editing/htmlediting.cpp:
1771         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Reordered the new block
1772         insertion so that it come before the move. The logic stays exactly the same, however, with the old
1773         ordering, the new block could want to become a child of itself come insertion time. I considered
1774         making a more complicated code change to fix this problem, but the simple reordering works just
1775         as well, and seems less risky.
1776         
1777         These all changed in an insignificant way. It seems that with the new code, some empty text nodes
1778         got reordered in the document. This has no effect on anything visible to the user.
1779         
1780         * layout-tests/editing/style/create-block-for-style-003-expected.txt
1781         * layout-tests/editing/style/create-block-for-style-004-expected.txt
1782         * layout-tests/editing/style/create-block-for-style-009-expected.txt
1783         * layout-tests/editing/style/create-block-for-style-011-expected.txt
1784         * layout-tests/editing/style/create-block-for-style-013-expected.txt
1785
1786 2005-02-23  Darin Adler  <darin@apple.com>
1787
1788         Reviewed by John.
1789
1790         - fixed <rdar://problem/4013986> REGRESSION (173-174): onclick event not sent when mouse click on checkbox is double-click
1791
1792         We need to send an onclick event *and* an ondblclick event when we process a double click.
1793
1794         * khtml/khtmlview.cpp: (KHTMLView::dispatchMouseEvent): In the case where we're sending a CLICK_EVENT,
1795         follow it by a KHTML_CLICK_EVENT, a KHTML_DBLCLICK_EVENT when handling a double click, and a DOMACTIVATE_EVENT.
1796         We no longer do the DOMACTIVATE_EVENT in dispatchGenericEvent.
1797         * khtml/rendering/render_form.cpp: (RenderFormElement::slotClicked): send only CLICK_EVENT here, and
1798         lets dispatchMouseEvent deal with the other subsequent events.
1799         * khtml/xml/dom_nodeimpl.cpp:
1800         (NodeImpl::dispatchGenericEvent): Remove the code that sends a DOMACTIVATE_EVENT, since there's no longer
1801         a good way to figure out if this is the last event that should be sent before it is.
1802         (NodeImpl::dispatchMouseEvent): Set the meta key modifier here (as it already is set elsewhere), and
1803         follow up a CLICK_EVENT with KHTML_CLICK_EVENT, a KHTML_DBLCLICK_EVENT, and DOMACTIVATE_EVENT as above.
1804
1805 2005-02-23  Darin Adler  <darin@apple.com>
1806
1807         Reviewed by John.
1808
1809         - fixed <rdar://problem/4011405> REGRESSION (180-181): Unconfirmed text disappears when text focus moves
1810
1811         The key was to change things around so that we don't push text from the DOM to the widget
1812         unless the DOM has actually been changed. This prevents the code path that wipes out inline input
1813         during the blur process.
1814
1815         * khtml/html/html_formimpl.cpp:
1816         (DOM::HTMLInputElementImpl::HTMLInputElementImpl): Start m_valueMatchesRenderer as false.
1817         (DOM::HTMLInputElementImpl::parseHTMLAttribute): Set m_valueMatchesRenderer to false when a
1818         new value is set here.
1819         (DOM::HTMLInputElementImpl::setValue): Set m_valueMatchesRenderer to false when a new value
1820         is set here.
1821         (DOM::HTMLInputElementImpl::setValueFromRenderer): Added. Sets m_value, sets m_valueMatchesRenderer
1822         to true, and also sends out the input event. It's better to have this here than in the renderer code.
1823         (DOM::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl): Start m_valueIsValid as false (replaces
1824         m_dirtyvalue) and m_valueMatchesRenderer as false.
1825         (DOM::HTMLTextAreaElementImpl::updateValue): Added. Factored this out from the value function. Uses
1826         the new booleans and keeps them up to date, specifically setting m_valueMatchesRenderer based on
1827         where the value came from.
1828         (DOM::HTMLTextAreaElementImpl::value): Updated to call updateValue to do most of the work.
1829         (DOM::HTMLTextAreaElementImpl::setValue): Set both m_valueIsValid and m_valueMatchesRenderer.
1830         (DOM::HTMLTextAreaElementImpl::setDefaultValue): Take parameter by reference.
1831
1832         * khtml/html/html_formimpl.h: Added setValueFromRenderer, valueMatchesRenderer, setValueMatchesRenderer,
1833         and m_valueMatchesRenderer to input element. For textarea element, made some parameters pass DOMString
1834         by reference, and added invalidateValue, updateValue, valueMatchesRenderer, and setValueMatchesRenderer.
1835
1836         * khtml/rendering/render_form.cpp:
1837         (RenderLineEdit::updateFromElement): Don't re-get the value from the DOM if valueMatchesRenderer
1838         is true.
1839         (RenderLineEdit::slotTextChanged): Call setValueFromRenderer instead of manipulating the DOM
1840         directly.
1841         (RenderTextArea::detach): Call updateValue instead of calling value for its side effect.
1842         (RenderTextArea::handleFocusOut): Ditto.
1843         (RenderTextArea::updateFromElement): Call updateValue and then not re-get the value from the
1844         DOM if valueMatchesRenderer is true.
1845         (RenderTextArea::slotTextChanged): Call invalidateValue instead of directly setting m_dirtyvalue to true.
1846
1847 2005-02-22  Richard Williamson   <rjw@apple.com>
1848
1849         Fixed <rdar://problem/3937203> when a div adds a scrollbar (overflow:auto) we do not get regions
1850
1851         Just set dashboard dirty bit when overflow scrolling changes.
1852
1853         Don't do comparison of regions in before scroll regions are
1854         added, instead do it in WebKit after automatic scroll regions
1855         are added.
1856
1857         Reviewed by Maciej.
1858
1859         * khtml/css/cssparser.cpp:
1860         (CSSParser::parseDashboardRegions):  Cleaned up comments
1861         * khtml/css/cssstyleselector.cpp:
1862         (khtml::CSSStyleSelector::styleForElement): Cleaned up comments
1863
1864         * khtml/khtmlview.cpp:
1865         (KHTMLView::updateDashboardRegions):
1866         * khtml/rendering/render_layer.cpp:
1867         (RenderLayer::updateScrollInfoAfterLayout):
1868         * kwq/WebDashboardRegion.m:
1869         (-[WebDashboardRegion isEqual:]):
1870
1871 2005-02-22  Chris Blumenberg  <cblu@apple.com>
1872
1873         Fixed: <rdar://problem/3976872> Pasted plain text doesn't get the proper style if pasted into newlines
1874
1875         Reviewed by mjs.
1876
1877         * khtml/editing/htmlediting.cpp:
1878         (khtml::ReplaceSelectionCommand::doApply): don't clear the typing style when matching style
1879         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): apply the typing style when matching style
1880         * khtml/editing/jsediting.cpp:
1881         * khtml/khtml_part.cpp:
1882         (KHTMLPart::pasteAndMatchStyle): new
1883         * khtml/khtml_part.h:
1884         * kwq/KWQKHTMLPart.h:
1885         * kwq/KWQKHTMLPart.mm:
1886         (KWQKHTMLPart::issuePasteAndMatchStyleCommand): new
1887         * kwq/WebCoreBridge.h:
1888         * layout-tests/editing/editing.js:
1889
1890 2005-02-22  Darin Adler  <darin@apple.com>
1891
1892         Reviewed by Adele.
1893
1894         - fixed <rdar://problem/4006596> REGRESSION (183-184): crash in DOM::DocumentImpl::setFocusNode(DOM::NodeImpl*)
1895
1896         * khtml/xml/dom_docimpl.cpp:
1897         (widgetForNode): Added helper.
1898         (DocumentImpl::setFocusNode): Re-get the widget for the node after calling updateLayout.
1899         The updateLayout can destroy the old widget, so we can't keep a stale widget pointer around.
1900
1901 2005-02-22  Ken Kocienda  <kocienda@apple.com>
1902
1903         Reviewed by Hyatt
1904
1905         Fix for this bug:
1906         
1907         <rdar://problem/4003463> Mail.app HTML uses inline styling markup not understood by Entourage and Eudora
1908
1909         * khtml/editing/htmlediting.cpp:
1910         (khtml::isEmptyFontTag): Helper for removing <font> tags.
1911         (khtml::StyleChange::styleModeForParseMode): Helper to map a document parse mode to a use/don't use
1912         legacy-html-styles value.
1913         (khtml::StyleChange::checkForLegacyHTMLStyleChange): Add support for colors, font faces, and font sizes.
1914         (khtml::ApplyStyleCommand::isHTMLStyleNode):
1915         (khtml::ApplyStyleCommand::removeHTMLFontStyle):
1916         (khtml::ApplyStyleCommand::applyTextDecorationStyle): Now call styleModeForParseMode to determine
1917         whether to use legacy html styles or not.
1918         (khtml::ApplyStyleCommand::removeInlineStyle): Now properly removes <font> styles.
1919         (khtml::ApplyStyleCommand::addBlockStyleIfNeeded): Ditto.
1920         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): Ditto.
1921         (khtml::createFontElement): Helper for applying <font> elements.
1922         * khtml/editing/htmlediting.h: All the following support the new bits of data we need to store.
1923         (khtml::StyleChange::applyFontColor)
1924         (khtml::StyleChange::applyFontFace)
1925         (khtml::StyleChange::applyFontSize)
1926         (khtml::StyleChange::fontColor)
1927         (khtml::StyleChange::fontFace)
1928         (khtml::StyleChange::fontSize)
1929
1930         Test results updated now that we will write out <font> tags for quirks mode documents.        
1931         
1932         * layout-tests/editing/execCommand/modifyForeColorByCharacter-expected.txt
1933         * layout-tests/editing/style/block-style-004-expected.txt
1934         * layout-tests/editing/editing/pasteboard/paste-text-011-expected.txt
1935         * layout-tests/editing/style/block-style-005-expected.txt
1936         * layout-tests/editing/style/block-style-006-expected.txt
1937         * layout-tests/editing/style/smoosh-styles-001-expected.txt
1938         * layout-tests/editing/style/smoosh-styles-002-expected.txt
1939
1940 2005-02-22  Maciej Stachowiak  <mjs@apple.com>
1941
1942         Reviewed by Kevin.
1943
1944         <rdar://problem/4017066> crash in KJS::ValueImp::dispatchType() every time I load www.nytimes.com/pages/automobiles
1945
1946         When creating option elements, use lowercase "option" instead of
1947         uppercase "OPTION" to create option elements, because only
1948         lowercase works for XHTML.
1949         
1950         * khtml/ecma/kjs_html.cpp:
1951         (KJS::HTMLSelectCollection::tryPut):
1952         (OptionConstructorImp::construct):
1953
1954 2005-02-22  Chris Blumenberg  <cblu@apple.com>
1955
1956         WebCore fix for: <rdar://problem/3918056> Mail not line breaking my <pre> formatted emails on replies
1957         
1958         Mail must 4018993 to fully address the problem.
1959
1960         Reviewed by kocienda.
1961
1962         * khtml/editing/markup.cpp:
1963         (khtml::startMarkup): don't compute style for text in PRE tags
1964         (khtml::createMarkup): include PRE if it is an ancestor of the nodes in the range
1965
1966 2005-02-21  Richard Williamson   <rjw@apple.com>
1967
1968         Fixed <rdar://problem/4008338> REGRESSION (125-178): opacity style not working, breaks fading images on okcupid.com
1969
1970         There was a long standing bug in cssText().  Double value were always cast int!  So,
1971         opacity values values were incorrectly converted to text, i.e. 0.75 became 0.
1972         
1973         The problem was newly triggered because we parse the css for opacity *TWICE*.  This is a result of 
1974         incorrectly "invalidating" the style attribute (from fix for 3790449).  The second parse was from
1975         the cssText() of the style.
1976
1977         Reviewed by Hyatt.
1978
1979         * khtml/css/css_valueimpl.cpp:
1980         (DOM::CSSPrimitiveValueImpl::cssText):
1981
1982 2005-02-21  David Hyatt  <hyatt@apple.com>
1983
1984         Fix for 4017204, apply the same fix to the base class nodeAtPoint that was already applied to RenderBlock.
1985         Skip elements with layers and inline flows.  Demoted <form>s can end up causing trouble otherwise.
1986         
1987         Reviewed by Richard Williamson
1988
1989         * khtml/rendering/render_box.cpp:
1990         (RenderBox::nodeAtPoint):
1991
1992 2005-02-21  David Hyatt  <hyatt@apple.com>
1993
1994         Fix for 4017033, CSS is being parsed twice.  Make sure to always validate the style attribute when it is
1995         initially parsed.  Add code to clean up decls when the style attribute is completely removed.  Add a new
1996         synchronizing boolean that avoids reparsing the style declaration when the attribute is simply
1997         being synced up to the declaration.
1998
1999         Reviewed by John
2000
2001         * khtml/css/css_valueimpl.cpp:
2002         (DOM::CSSMutableStyleDeclarationImpl::setChanged):
2003         * khtml/html/html_elementimpl.cpp:
2004         (HTMLElementImpl::invalidateStyleAttribute):
2005         (HTMLElementImpl::updateStyleAttributeIfNeeded):
2006         (HTMLElementImpl::HTMLElementImpl):
2007         (HTMLElementImpl::~HTMLElementImpl):
2008         (HTMLElementImpl::destroyInlineStyleDecl):
2009         (HTMLElementImpl::mapToEntry):
2010         (HTMLElementImpl::parseHTMLAttribute):
2011         * khtml/html/html_elementimpl.h:
2012         * khtml/xml/dom_elementimpl.cpp:
2013         (ElementImpl::ElementImpl):
2014         (ElementImpl::setAttribute):
2015         * khtml/xml/dom_elementimpl.h:
2016         (DOM::ElementImpl::updateStyleAttributeIfNeeded):
2017
2018 === Safari-188 ===
2019
2020 2005-02-21  Darin Adler  <darin@apple.com>
2021
2022         - fixed Panther deployment build
2023
2024         * kwq/KWQTextEdit.mm: (QTextEdit::setScrollBarModes): Put more stuff inside #if.
2025
2026 2005-02-21  David Harrison  <harrison@apple.com>
2027
2028         Reviewed by Darin.
2029
2030         <rdar://problem/3943090> REGRESSION (Mail): Spelling underline incompletely erased following certain steps
2031
2032         * khtml/rendering/render_text.cpp:
2033         (InlineTextBox::paintMarker):
2034         Make sure underline is placed within the text bounds.
2035         
2036         * kwq/KWQPainter.h:
2037         * kwq/KWQPainter.mm:
2038         (QPainter::misspellingLineThickness):
2039         * kwq/WebCoreTextRenderer.h:
2040         Add misspellingLineThickness for use by InlineTextBox::paintMarker.
2041
2042 2005-02-21  Darin Adler  <darin@apple.com>
2043
2044         Reviewed by John.
2045
2046         - fixed <rdar://problem/4012978> -[DOMRange markupString] crashes when range contains only a text node with a single space
2047
2048         * khtml/editing/markup.cpp: (khtml::createMarkup): Added updateLayout calls, and added a missing
2049         nil check.
2050
2051 2005-02-21  Darin Adler  <darin@apple.com>
2052
2053         Reviewed by John.
2054
2055         - fixed <rdar://problem/4005435> Safari hung while pasting text into a <textarea> (Panther-only)
2056
2057         * kwq/KWQTextEdit.mm: (QTextEdit::setScrollBarModes): Don't setAutohidesScrollers:YES on Panther.
2058
2059 2005-02-21  Ken Kocienda  <kocienda@apple.com>
2060
2061         Reviewed by John
2062
2063         Fix for this bug:
2064         
2065         <rdar://problem/4015499> REGRESSION (186-187): pasted quoted text starting with a blank line increases quote level of pasted text when pasted
2066
2067         * khtml/editing/markup.cpp:
2068         (khtml::markup): Changed over to ASSERT instead of assert.
2069         (khtml::createMarkup): The issue was that the code to add parents all the way back to the common ancestor
2070         block did not check for blocks whose markup had already been added, and could result in adding markup for
2071         nodes twice (hence the additional and erroneous quote level). Now there is a new check that will
2072         only add markup for those nodes before the start of the selection range. This fixes the bug.
2073         (khtml::createFragmentFromMarkup): Changed over to ASSERT instead of assert.
2074         (khtml::createFragmentFromText): Ditto.
2075
2076 2005-02-21  Ken Kocienda  <kocienda@apple.com>
2077
2078         Reviewed by John
2079
2080         Fix for this bug:
2081         
2082         <rdar://problem/4015494> REGRESSION (186-187) <cr> removed if quoted word is copy/pasted on line immediately above quoted text
2083
2084         * khtml/editing/htmlediting.cpp:
2085         (khtml::ReplaceSelectionCommand::doApply): Relatively new check designed to remove a <br> element when
2086         that element was on a line by itself did not do an adequate check for this condition, causing the
2087         failure described in the bug. Fixed.
2088
2089 2005-02-19  Ken Kocienda  <kocienda@apple.com>
2090
2091         Reviewed by Maciej
2092
2093         * khtml/editing/htmlediting.cpp:
2094         (khtml::matchNearestBlockquoteColorString): New function which abstracts away the CSS property we use
2095         for this pseudo-color.
2096         (khtml::ReplacementFragment::removeBlockquoteColorsIfNeeded): Set the new nearestBlockquoteColorString
2097         psuedo-color here, rather than removing colors as was done before.
2098         (khtml::ReplaceSelectionCommand::applyStyleToInsertedNodes): Check for the pseudo-color in the desired
2099         style, and determine the real color based on the nearest blockquote (or none) to the node.
2100         (khtml::nearestMailBlockquote): Name change from closestMailBlockquote to match new property better.
2101
2102         All the rest of this change is the mechanical coding you need to do to add a new CSS property, in this
2103         case, -khtml-match-nearest-mail-blockquote-color.
2104
2105         * khtml/css/css_computedstyle.cpp:
2106         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue)
2107         * khtml/css/cssparser.cpp:
2108         (CSSParser::parseValue):
2109         * khtml/css/cssproperties.c:
2110         (hash_prop):
2111         (findProp):
2112         * khtml/css/cssproperties.h:
2113         * khtml/css/cssproperties.in:
2114         * khtml/css/cssstyleselector.cpp:
2115         (khtml::CSSStyleSelector::applyProperty)
2116         * khtml/css/cssvalues.c:
2117         (findValue)
2118         * khtml/css/cssvalues.h:
2119         * khtml/css/cssvalues.in:
2120         * khtml/rendering/render_style.h:
2121         (khtml::RenderStyle::matchNearestMailBlockquoteColor)
2122         (khtml::RenderStyle::setMatchNearestMailBlockquoteColor)
2123         (khtml::RenderStyle::initialMatchNearestMailBlockquoteColor)
2124
2125 2005-02-19  Ken Kocienda  <kocienda@apple.com>
2126
2127         Reviewed by Chris
2128
2129         Fix for these bugs:
2130         
2131         <rdar://problem/4014228> REGRESSION (186-187) extra, uneditable lines inserted above and below a line of pasted quoted text
2132         <rdar://problem/4014393> REGRESSION (186-187) pasted quoted text gets extra <cr>s when pasted at top of document
2133
2134         * khtml/editing/htmlediting.cpp:
2135         (khtml::ReplacementFragment::ReplacementFragment): Part of a general refactoring of how
2136         the fragment is inserted into the document, rendered, and then tested for certain
2137         important pieces of information that are required for pasting.
2138         (khtml::ReplacementFragment::insertFragmentForTestRendering): New helper. Handles inserting
2139         the fragment nodes into the document.
2140         (khtml::ReplacementFragment::restoreTestRenderingNodesToFragment): Removes nodes from the
2141         document, and restores them to the fragment.
2142         (khtml::ReplacementFragment::computeStylesUsingTestRendering): Factored out code that
2143         did this before into its own function.
2144         (khtml::ReplacementFragment::removeUnrenderedNodesUsingTestRendering): Ditto.
2145         (khtml::ReplacementFragment::countRenderedBlocks): This is a real improvement, as it
2146         eliminates a major use of the isProbablyBlock() function. Now, the blocks that are
2147         counted are real, rendered blocks.
2148         (khtml::ReplacementFragment::removeStyleNodes): Made this function retain margin-zeroing
2149         CSS properties on paragraphs. This does two things: 1) It helps us to maintain good behavior
2150         in the short term while there are still versions of Mail out there that use <p> elements
2151         instead of <div> elements for new paragraphs; and 2) It will help to maintain the compatibility
2152         with other mail clients that use <p> elements for their paragraphs but render them themselves
2153         with no margins as the result of quirks.
2154         (khtml::ReplaceSelectionCommand::doApply): Do some work to fix up and improve the handling
2155         of blank lines, be they <p> elements or <br> elements, that can be removed after pasting. This, 
2156         coupled with the refactoring, fixes 4014393.
2157         * khtml/editing/htmlediting.h: Updated for new functions.
2158         * layout-tests/editing/pasteboard/paste-text-010-expected.txt: Updated results, actually improved with this change.
2159         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: Ditto.
2160
2161 2005-02-19  Kevin Decker  <kdecker@apple.com>
2162
2163         Reviewed by Chris.
2164
2165         Fixed <rdar://problem/4010765> Flash player can be used to arbitrarily open popup windows without user permission
2166         
2167         Our window.open() policy is to refuse the <script>window.open(...)</script> case and allow the inline the <a href="javascript:window.open('foo')> case.  Clever advertisers at some point realized that by executing their Javascript through the Flash plugin, Safari would always treat their code as the inline case, and thus, they were able to work around our popup blocker.
2168
2169         * kwq/WebCoreBridge.h:
2170         * kwq/WebCoreBridge.mm:
2171         (-[WebCoreBridge stringByEvaluatingJavaScriptFromString:]): Changed this to invoke the new stringByEvaluatingJavaScriptFromString:forceUserGesture method below.
2172         (-[WebCoreBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]): Let the WebKit make the determination if this was a user originated gesture or not; we must no longer assume this is always the case.
2173
2174 2005-02-18  Chris Blumenberg  <cblu@apple.com>
2175         
2176         Fixed: <rdar://problem/3951196> REGRESSION (Mail): too many levels of reply quotes after certain steps
2177
2178         Reviewed by kocienda.
2179
2180         * khtml/editing/htmlediting.cpp:
2181         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
2182         - If we find a new start node, update topBlockquote so we don't use too many block quotes for the contents following the new line.
2183         - Build up the list of ancestors after we've determined the actual topBlockquote.
2184         - Don't insert an extra new line if there is a new start node.
2185
2186 2005-02-19  Chris Blumenberg  <cblu@apple.com>
2187
2188         Fixed: <rdar://problem/3978461> smart paste is broken
2189
2190         Reviewed by kevin.
2191
2192         * khtml/editing/htmlediting.cpp:
2193         (khtml::ReplaceSelectionCommand::doApply): properly check for leading and trailing whitespace. These checks were incorrectly reversed. Also check if we're pasting at the beginning or end of a line. We should not insert spaces in either case.
2194
2195 2005-02-18  Adele Amchan  <adele@apple.com>
2196
2197         Reviewed by Darin.
2198
2199         Fix for <rdar://problem/3975568> REGRESSION(125-180)Australian Open pages have drawing problem
2200
2201         This patch fixes two problems caused by our added support for custom tags.  First, the layout problem at the sites mentioned in the bug
2202         was caused by custom tags within tables.  In checkChild, we needed to treat these tags as spans so they get placed correctly in the DOM tree.
2203         Also, we were indexing the tagPriority and endTag arrays with id values from the custom tags that were greater than the size of the array.  So now 
2204         we have functions to check for the custom tags, and again, treat them as spans.  To avoid confusion, we changed the names of the arrays to
2205         endTagArray and tagPriorityArray.
2206
2207         * khtml/html/dtd.h: changed all uses of the endTag array to endTagArray for our new wrapper functions
2208         (DOM::tagPriority): added function to check array bounds and to treat custom tags as spans
2209         (DOM::endTagRequirement): added function to check array bounds and to treat custom tags as spans
2210         * khtml/html/dtd.cpp: changed name of endTag and tagPriority arrays to endTagArray and tagPriorityArray
2211         (DOM::checkChild): treat custom tags as spans during this check
2212         * khtml/html/html_elementimpl.cpp: changed all uses of the endTag array to the endTagRequirement function
2213         (HTMLElementImpl::createContextualFragment):
2214         (HTMLElementImpl::setInnerText):
2215         (HTMLElementImpl::setOuterText):
2216         (HTMLElementImpl::toString):
2217         * khtml/html/htmlparser.cpp: changed all uses of the endTag array to the endTagRequirement function and all uses of the tagPriority array to the tagPriority function.
2218         (KHTMLParser::parseToken):
2219         (KHTMLParser::insertNode):
2220         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): changed all uses of the endTag array to the endTagRequirement function
2221        * khtml/editing/markup.cpp: changed all uses of the endTag array to the endTagRequirement function
2222         (khtml::endMarkup): 
2223         (khtml::markup):
2224
2225 2005-02-18  Jens Alfke  <jens@apple.com>
2226
2227         Reviewed by Hyatt.
2228
2229         Fixed build: Whoops, setNeedsLayout's parameter is NOT optional.
2230
2231         * khtml/html/html_objectimpl.cpp:
2232         (HTMLAppletElementImpl::setAllParamsAvailable):
2233
2234 2005-02-18  Jens Alfke  <jens@apple.com>
2235
2236         Reviewed by cblu, hyatt.
2237
2238         Fixes <rdar://problem/3603191> "REGRESSION: Applets not receiving all of the Applet Parameters in Java 1.4.1/1.4.2"
2239         Defer instantiation of Java applet plugin until after all of the <applet> tag's nested <param> tags have been parsed, otherwise the list of parameters passed to the applet is incomplete. The regression was introduced (says Dave) when the parser's close-tag notifications were removed in the name of performance.
2240
2241         * khtml/html/html_objectimpl.cpp:
2242         (HTMLAppletElementImpl::HTMLAppletElementImpl):
2243         (HTMLAppletElementImpl::getAppletInstance):
2244         (HTMLAppletElementImpl::setAllParamsAvailable):
2245         (HTMLAppletElementImpl::allParamsAvailable):
2246         * khtml/html/html_objectimpl.h:
2247         * khtml/html/htmlparser.cpp:
2248         (KHTMLParser::processCloseTag):
2249         * khtml/rendering/render_applet.cpp:
2250         (RenderApplet::createWidgetIfNecessary):
2251
2252 2005-02-18  Richard Williamson   <rjw@apple.com>
2253
2254         Fixed <rdar://problem/4006161> Tiger8A380: Widgets leak dashboard regions
2255         
2256         We were leaking the DashboardRegionImpls.
2257
2258         Reviewed by Kevin.
2259
2260         * khtml/css/css_valueimpl.cpp:
2261         (DOM::CSSPrimitiveValueImpl::cleanup):
2262
2263 2005-02-18  Chris Blumenberg  <cblu@apple.com>
2264
2265         Fixed: <rdar://problem/3945271> REGRESSION (Mail): pasted plain text should pick up typing style instead of being unstyled
2266
2267         Reviewed by kocienda.
2268
2269         * khtml/editing/htmlediting.cpp:
2270         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): don't set class on element returned by createStyleSpanElement since that's already done
2271         (khtml::ReplacementFragment::ReplacementFragment): take matchStyle param, don't call computeStylesAndRemoveUnrendered() if !matchStyle
2272         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): take matchStyle param
2273         (khtml::ReplaceSelectionCommand::doApply): if m_matchStyle, use selection.start() as the insertion position and don't call applyStyleToInsertedNodes()
2274         * khtml/editing/htmlediting.h:
2275         * kwq/WebCoreBridge.h:
2276         * kwq/WebCoreBridge.mm:
2277         (-[WebCoreBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]): take matchStyle param and pass it
2278         (-[WebCoreBridge replaceSelectionWithNode:selectReplacement:smartReplace:]): pass NO for matchStyle
2279         (-[WebCoreBridge replaceSelectionWithMarkupString:baseURLString:selectReplacement:smartReplace:]): pass NO for matchStyle
2280         (-[WebCoreBridge replaceSelectionWithText:selectReplacement:smartReplace:]): pass YES for matchStyle
2281
2282 2005-02-18  Ken Kocienda  <kocienda@apple.com>
2283
2284         Reviewed by Chris
2285
2286         Fix for these bugs:
2287         
2288         <rdar://problem/4013025> Copy/Paste of quoted word results in removal of any following <cr>
2289         <rdar://problem/4013100> Copy/Paste quoted text and then decrease quote level does not change text color
2290
2291         For the most part, these bugs were caused by errors and lack of foresight on my part when
2292         I added the better paste code. Chalk these fixes up to the result of bake time.
2293
2294         * khtml/editing/htmlediting.cpp:
2295         (khtml::ReplacementFragment::ReplacementFragment): Need to move count of number of blocks in
2296         fragment after the call to remove unrendered nodes. Meant to do this before, but forgot to.
2297         (khtml::ReplacementFragment::removeStyleNodes): Need to remove inline styles from elements!
2298         Terrible omission now fixed.
2299         (khtml::ReplacementFragment::removeBlockquoteColorsIfNeeded): Remove blockquote colors for now.
2300         Code has a more extensive comment in it now to explain the difficulty, and the need for more
2301         study and changes.
2302         (khtml::ReplaceSelectionCommand::doApply): Need to call applyStyleToInsertedNodes() in the 
2303         m_fragment.hasInterchangeNewline() case. This was just missed before.
2304         * layout-tests/editing/pasteboard/paste-text-011-expected.txt: Updated results, subtly different, but OK.
2305         * layout-tests/editing/pasteboard/paste-text-017-expected.txt: Updated for <p> to <div> change in test content.
2306         * layout-tests/editing/pasteboard/paste-text-017.html: Needed to change <p> to <div> to 
2307         make this test go with the new design of using <div> tags for default paragraphs.
2308
2309 2005-02-18  David Hyatt  <hyatt@apple.com>
2310
2311         Fix for 3974263 (and possibly others).  Don't let fixed tables use maxint as their maxwidth when some
2312         cells have percentage values.
2313         
2314         Reviewed by kocienda
2315
2316         * khtml/misc/arena.cpp:
2317         (ArenaAllocate):
2318         * khtml/rendering/table_layout.cpp:
2319         (FixedTableLayout::calcWidthArray):
2320         (FixedTableLayout::calcMinMaxWidth):
2321         (AutoTableLayout::layout):
2322
2323 2005-02-17  Darin Adler  <darin@apple.com>
2324
2325         Reviewed by Kevin.
2326
2327         - fixed <rdar://problem/3998627> WebKit crashes when deleting text in a modified div
2328
2329         * khtml/khtml_part.cpp: (KHTMLPart::selectionComputedStyle): Add a ref and deref to keep
2330         the element alive until it's added to the DOM tree.
2331         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::styleForSelectionStart): Ditto.
2332
2333 2005-02-17  Richard Williamson   <rjw@apple.com>
2334
2335         Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
2336
2337         Fixed w/o introducing a performance regression.  Add early
2338         check for Osaka-Mono to avoid expensive call into WebKit.
2339
2340         Reviewed by Vicki.
2341
2342         * kwq/KWQFont.mm:
2343         (QFont::isFixedPitch):
2344
2345 2005-02-17  Darin Adler  <darin@apple.com>
2346
2347         Reviewed by Kevin.
2348
2349         - fixed <rdar://problem/4011210> REGRESSION (180-181): Maxlength property for INPUT object not working
2350
2351         * kwq/KWQTextField.mm:
2352         (-[KWQTextField textView:shouldChangeTextInRange:replacementString:]): If controller returns
2353         YES, go on to call super, since super does the text formatter handling, which we need.
2354         (-[KWQSecureTextField textView:shouldChangeTextInRange:replacementString:]): Ditto.
2355         (-[KWQSearchField textView:shouldChangeTextInRange:replacementString:]): Ditto.
2356
2357 === Safari-187 ===
2358
2359 2005-02-17  Ken Kocienda  <kocienda@apple.com>
2360
2361         Reviewed by Hyatt
2362
2363         Fix for this bug:
2364         
2365         <rdar://problem/4012058> Copy from quoted text and paste results in blue text
2366
2367         The relatively-new paste code tries hard to retain style of the content from the
2368         source location. However, in the case of quoted material in mail messages, we do 
2369         not want to carry the quoting color along. This fixes the problem by factoring
2370         out such colors.
2371
2372         * khtml/editing/htmlediting.cpp:
2373         (khtml::ReplacementFragment::computeStylesAndRemoveUnrendered): Now calls removeBlockquoteColorsIfNeeded()
2374         to fix bug.
2375         (khtml::ReplacementFragment::removeBlockquoteColorsIfNeeded): New function. Factors out colors that are
2376         the result of text being quoted. 
2377         (khtml::isNodeRendered): Function moved in file. No other change.
2378         (khtml::isProbablyBlock): Function moved in file. No other change.
2379         (khtml::closestMailBlockquote): New function. Helps fix bug.
2380         (khtml::isMailBlockquote): Function moved to be free-floating instead of being a 
2381         member of CompositeEditCommand. No other change.
2382         * khtml/editing/htmlediting.h: Moved around some functions. Added removeBlockquoteColorsIfNeeded().
2383         * khtml/editing/markup.cpp: Remove redundant static implementation of isMailBlockquote.
2384
2385 2005-02-17  Richard Williamson   <rjw@apple.com>
2386
2387         Fixed <rdar://problem/4008163> dynamic support for -apple-dashboard-region is flakey
2388
2389         Style operator== wasn't including regions.
2390
2391         Reviewed by Darin.
2392
2393         * khtml/rendering/render_style.cpp:
2394         (StyleCSS3NonInheritedData::operator==):
2395
2396 2005-02-17  Adele Amchan  <adele@apple.com>
2397
2398         Reviewed by Chris.
2399
2400         fix for <rdar://problem/4010028> 8A383: Safari v185 crash loading united.com multi city fare finder page.
2401
2402         * khtml/dom/dom_string.cpp: (DOM::DOMString::operator += ): prevent nil dereference when DOMString being added is nil
2403
2404 2005-02-17  Jens Alfke  <jens@apple.com>
2405
2406         Reviewed by Hyatt.
2407
2408         Fix for rdar://3963151 "Mail only pasted ~950 of 1407 text lines into my message!"
2409         Force tokenizer to run synchronously while parsing document fragments, so it doesn't stop halfway through and cause truncated content.
2410
2411         * khtml/html/html_elementimpl.cpp:
2412         (HTMLElementImpl::createContextualFragment):
2413         * khtml/html/htmltokenizer.cpp:
2414         (khtml::HTMLTokenizer::reset):
2415         (khtml::HTMLTokenizer::begin):
2416         (khtml::HTMLTokenizer::setForceSynchronous):
2417         (khtml::HTMLTokenizer::continueProcessing):
2418         * khtml/html/htmltokenizer.h:
2419
2420 2005-02-17  Ken Kocienda  <kocienda@apple.com>
2421
2422         Reviewed by Hyatt
2423
2424         Fix for this bug:
2425         
2426         <rdar://problem/3982183> Mail's HTML paragraphs appear with unintended margins in Entourage and Eudora
2427
2428         * khtml/editing/htmlediting.cpp:
2429         (khtml::createDefaultParagraphElement): Change element we make from <p> to <div>.
2430         This fixes the problem, as these other mailers show <div> elements without margins.
2431         
2432         Some test files needed to change to preserve the ability to "eyeball" the results.
2433         Many others changed just because their <p> elements changed to <div> elements.
2434         
2435         * layout-tests/editing/deleting/delete-3928305-fix-expected.txt
2436         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-002-expected.txt
2437         * layout-tests/editing/inserting/insert-div-013-expected.txt
2438         * layout-tests/editing/inserting/insert-div-013.html
2439         * layout-tests/editing/inserting/insert-div-014-expected.txt
2440         * layout-tests/editing/inserting/insert-div-014.html
2441         * layout-tests/editing/inserting/insert-div-018-expected.txt
2442         * layout-tests/editing/inserting/insert-div-018.html
2443         * layout-tests/editing/inserting/insert-div-019-expected.txt
2444         * layout-tests/editing/inserting/insert-div-019.html
2445         * layout-tests/editing/inserting/insert-div-020-expected.txt
2446         * layout-tests/editing/inserting/insert-div-020.html
2447         * layout-tests/editing/inserting/insert-div-021-expected.txt
2448         * layout-tests/editing/inserting/insert-div-021.html
2449         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt
2450         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt
2451         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt
2452         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt
2453
2454 2005-02-17  Ken Kocienda  <kocienda@apple.com>
2455
2456         Reviewed by Hyatt
2457
2458         Fix for this bug:
2459         
2460         <rdar://problem/3996737> REGRESSION (Mail): Copy/paste in Mail inserts returns
2461
2462         The root cause of the problem is that a couple of pieces of code in AppKit and Mail 
2463         insert newlines into markup as it is generated, and the paste code in WebCore was 
2464         not smart about nodes that do not render (as is the case with these added newlines). 
2465         So, the solution is to remove these unrendered nodes in the paste code in a pre-pass. 
2466         Fortunately, my recent addition of such a pass to the paste code to handle styles 
2467         gave me a convenient place to put this new logic.
2468
2469         * khtml/editing/htmlediting.cpp:
2470         (khtml::ReplacementFragment::ReplacementFragment): Use new name for function below.
2471         (khtml::ReplacementFragment::computeStylesAndRemoveUnrendered): Name change from computeStylesForNodes().
2472         Now does the additional work of removing unrendered nodes, as mentioned above.
2473         (khtml::isNodeRendered): New helper function.
2474         * khtml/editing/htmlediting.h: Updated as necessary.
2475
2476 2005-02-17  Ken Kocienda  <kocienda@apple.com>
2477
2478         Reviewed by Hyatt
2479
2480         Fix for this bug:
2481         
2482         <rdar://problem/3998892> REGRESSION (Mail): bolding a selection from end of line changes unselected text on starting line.
2483         
2484         The styling code did not move to the next node when the starting position was 
2485         at the last offset of a node. Instead, it styled it. Clearly wrong. Solution 
2486         is to borrow a check from the delete algorithm. Though I call caretMaxOffset(),
2487         which I consider deprecated, it is still the simplest and most strightforward
2488         way to ask the right question for this kind of problem.
2489
2490         * khtml/editing/htmlediting.cpp:
2491         (khtml::ApplyStyleCommand::applyInlineStyle): Fixed, as described above.
2492         * layout-tests/editing/style/style-3998892-fix-expected.txt: Added.
2493         * layout-tests/editing/style/style-3998892-fix.html: Added.
2494
2495 2005-02-16  Chris Blumenberg  <cblu@apple.com>
2496         
2497         Fixed: <rdar://problem/3954842> Forward/reply to an HTML email can result in nothing (in cases with <link> tags for CSS)
2498
2499         Reviewed by john.
2500
2501         * khtml/xml/dom_nodeimpl.cpp:
2502         (NodeBaseImpl::addChild): don't call insertedIntoDocument on the added child if "this" itself is not in the document.
2503
2504 2005-02-16  John Sullivan  <sullivan@apple.com>
2505
2506         Written by Darin, reviewed by Maciej and me
2507         
2508         - change required to make previous checkin work with English language RSS pages
2509
2510         * kwq/KWQKURL.h:
2511         new private method isHierarchical
2512         * kwq/KWQKURL.mm:
2513         (KURL::KURL):
2514         add hierarchical base URL check when determining whether the URL is absolute
2515         (KURL::isHierarchical):
2516         new method, returns true if this is a valid URL with a slash just past the scheme's trailing colon
2517
2518 2005-02-16  John Sullivan  <sullivan@apple.com>
2519
2520         Written by Darin, reviewed by me.
2521         
2522         - WebCore part of fix for <rdar://problem/4007384> 
2523         FILTER: Bookmark of RSS with Japanese search word & multiple RSS pages loses filter
2524
2525         * kwq/DOM.mm:
2526         (-[DOMElement _getURLAttribute:]):
2527         new SPI method, uses parseURL and completeURL to get valid URL from attribute value
2528
2529         * kwq/DOMPrivate.h:
2530         declare new SPI method
2531
2532 2005-02-15  Maciej Stachowiak  <mjs@apple.com>
2533
2534         Reviewed by Darin.
2535
2536         <rdar://problem/3942428> reproducible crash loading cbs.sportsline.com
2537         
2538         This change reverts the fix for <rdar://problem/3805311>, and
2539         re-fixes it in a different (better) way. Instead of preventing
2540         programmatic open from setting the parsing flag, instead make sure
2541         that programmatic close resets it.
2542
2543         * khtml/khtml_part.cpp:
2544         (KHTMLPart::openURL):
2545         (KHTMLPart::didExplicitOpen):
2546         (KHTMLPart::closeURL):
2547         (KHTMLPart::begin):
2548         (KHTMLPart::end):
2549         (KHTMLPart::endIfNotLoading):
2550         (KHTMLPart::slotFinishedParsing):
2551         (KHTMLPart::checkEmitLoadEvent):
2552         * khtml/khtml_part.h:
2553         * khtml/khtmlpart_p.h:
2554         (KHTMLPartPrivate::KHTMLPartPrivate):
2555         * khtml/xml/dom_docimpl.cpp:
2556         (DocumentImpl::open):
2557         (DocumentImpl::implicitOpen):
2558         (DocumentImpl::close):
2559         (DocumentImpl::implicitClose):
2560         * khtml/xml/dom_docimpl.h:
2561
2562 2005-02-15  David Harrison  <harrison@apple.com>
2563
2564         Reviewed by Maciej.
2565
2566         <rdar://problem/3933665> smart delete seems to delete too much after expanding selection with arrow keys
2567
2568         Fixed by updating the selection granularity.  Only byWord granularity enables smart delete, but in this
2569         case the granularity changed from byWord to byCharacter.
2570
2571         * khtml/khtml_part.cpp:
2572         (KHTMLPart::setSelectionGranularity):
2573         * khtml/khtml_part.h:
2574         * kwq/WebCoreBridge.mm:
2575         (-[WebCoreBridge rangeByExpandingSelectionWithGranularity:]):
2576         (-[WebCoreBridge rangeByAlteringCurrentSelection:direction:granularity:]):
2577         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]):
2578
2579 2005-02-15  David Harrison  <harrison@apple.com>
2580
2581         Reviewed by Darin.
2582
2583         (continued) <rdar://problem/4004305> REGRESSION (Mail): Command-right-arrow on wrapped text goes to end of previous line
2584
2585         This was supposed have been committed yesterday with the other part of the fix, but was not.
2586         
2587         * khtml/editing/visible_units.cpp:
2588         (khtml::endOfWord):
2589
2590 2005-02-15  Ken Kocienda  <kocienda@apple.com>
2591
2592         Reviewed by John
2593         
2594         Fix for this bug:
2595         
2596         <rdar://problem/3951178> REGRESSION (Mail): blank line lost after pasting as quotation
2597         
2598         Problem was that the blank line after the selection was getting deleted incorrectly since the
2599         paste code thought this was an unneeded placeholder rather than a placeholder outside of the
2600         selection.
2601
2602         * khtml/editing/htmlediting.cpp:
2603         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Now calls findBlockPlaceholder.
2604         (khtml::CompositeEditCommand::findBlockPlaceholder): Moved finding code formerly in 
2605         removeBlockPlaceholderIfNeeded to this new helper.
2606         (khtml::ReplaceSelectionCommand::doApply): Do not delete placeholder up front. Call 
2607         findBlockPlaceholder, and delete it later if needed in the already-existing cleanup step.
2608         * khtml/editing/htmlediting.h: Add new function.
2609
2610         New layout test.
2611
2612         * layout-tests/editing/pasteboard/paste-text-017-expected.txt: Added.
2613         * layout-tests/editing/pasteboard/paste-text-017.html: Added.
2614
2615         Result changed for the better.
2616
2617         * layout-tests/editing/pasteboard/paste-text-011-expected.txt
2618
2619 2005-02-14  David Harrison  <harrison@apple.com>
2620
2621         Reviewed by Darin.
2622
2623         <rdar://problem/4004305> REGRESSION (Mail): Command-right-arrow on wrapped text goes to end of previous line
2624
2625         Reviewed by Darin.
2626
2627         <rdar://problem/4004305> REGRESSION (Mail): Command-right-arrow on wrapped text goes to end of previous line
2628
2629         * khtml/editing/visible_text.cpp:
2630         (khtml::SimplifiedBackwardsTextIterator::advance):
2631         Add BR in for <rdar://problem/3917929> fix only if leaving a visible text node.
2632         
2633         * khtml/editing/visible_units.cpp:
2634         (khtml::endOfWord):
2635         Do not move left over a paragraph boundary.
2636
2637 2005-02-14  Darin Adler  <darin@apple.com>
2638
2639         Reviewed by John.
2640
2641         - fixed <rdar://problem/3686434> Safari uses too much RAM on file upload, leading to malloc errors and crashes (HP printers)
2642
2643         * khtml/html/html_formimpl.cpp:
2644         (DOM::FormDataList::begin): Updated to use a list of FormDataListItem instead of QCString.
2645         (DOM::FormDataList::end): Ditto.
2646         (DOM::HTMLFormElementImpl::formData): Same here, and also use appendFile rather than appendData
2647         when we encounter a path name rather than data.
2648         (DOM::HTMLInputElementImpl::appendFormData): Use appendFile here rather than reading the file
2649         in; the reading now happens inside WebKit.
2650         (DOM::FormDataList::appendString): Updated for FormDataListItem.
2651         (DOM::FormDataList::appendFile): Added.
2652
2653         * ForwardingHeaders/kfileitem.h: Emptied out the file; no longer includes KWQKFileItem.h.
2654         * ForwardingHeaders/netaccess.h: Emptied out the file; no longer includes KWQKIONetAccess.h.
2655         * kwq/KWQKFileItem.h: Removed.
2656         * kwq/KWQKFileItem.mm: Removed.
2657         * kwq/KWQKIONetAccess.h: Removed.
2658         * kwq/KWQKIONetAccess.mm: Removed.
2659         * WebCore.pbproj/project.pbxproj: Removed the 4 files above.
2660
2661         - small unrelated fix (not reviewed by John)
2662
2663         * khtml/ecma/kjs_window.cpp: (Window::isSafeScript): Put some logging code outside if statements so it works all the time.
2664
2665 2005-02-14  David Harrison  <harrison@apple.com>
2666
2667         Reviewed by Darin.
2668
2669         <rdar://problem/4004305> REGRESSION (Mail): Command-right-arrow on wrapped text goes to end of previous line
2670
2671         Fixed nextLinePosition to calculate affinity rather than take it as a parameter.  Propagated the parameter change out to related methods.
2672
2673         * khtml/editing/htmlediting.cpp:
2674         (khtml::DeleteSelectionCommand::initializePositionData):
2675         (khtml::InsertLineBreakCommand::doApply):
2676         (khtml::InsertParagraphSeparatorCommand::doApply):
2677         (khtml::InsertTextCommand::input):
2678         (khtml::ReplaceSelectionCommand::doApply):
2679         (khtml::ReplaceSelectionCommand::applyStyleToInsertedNodes):
2680         * khtml/editing/selection.cpp:
2681         (khtml::Selection::modifyExtendingRightForward):
2682         (khtml::Selection::modifyMovingRightForward):
2683         (khtml::Selection::modifyExtendingLeftBackward):
2684         (khtml::Selection::modifyMovingLeftBackward):
2685         (khtml::Selection::modify):
2686         (khtml::Selection::validate):
2687         * khtml/editing/visible_position.cpp:
2688         (khtml::visiblePositionsOnDifferentLines):
2689         * khtml/editing/visible_units.cpp:
2690         (khtml::rootBoxForLine):
2691         (khtml::startOfLine):
2692         (khtml::endOfLine):
2693         (khtml::inSameLine):
2694         (khtml::isStartOfLine):
2695         (khtml::isEndOfLine):
2696         (khtml::previousLinePosition):
2697         (khtml::nextLinePosition):
2698         (khtml::previousSentencePosition):
2699         (khtml::nextSentencePosition):
2700         (khtml::previousParagraphPosition):
2701         (khtml::nextParagraphPosition):
2702         * khtml/editing/visible_units.h:
2703         * khtml/khtml_events.cpp:
2704         (khtml::MouseEvent::offset):
2705         * khtml/khtml_part.cpp:
2706         (KHTMLPart::isPointInsideSelection):
2707         (KHTMLPart::selectClosestWordFromMouseEvent):
2708         (KHTMLPart::handleMousePressEventTripleClick):
2709         (KHTMLPart::handleMousePressEventSingleClick):
2710         (KHTMLPart::handleMouseMoveEventSelection):
2711         (KHTMLPart::khtmlMouseReleaseEvent):
2712         * khtml/rendering/render_block.cpp:
2713         (khtml::RenderBlock::positionForCoordinates):
2714         * khtml/rendering/render_block.h:
2715         * khtml/rendering/render_br.cpp:
2716         (RenderBR::positionForCoordinates):
2717         * khtml/rendering/render_br.h:
2718         * khtml/rendering/render_container.cpp:
2719         (RenderContainer::positionForCoordinates):
2720         * khtml/rendering/render_container.h:
2721         * khtml/rendering/render_inline.cpp:
2722         (RenderInline::positionForCoordinates):
2723         * khtml/rendering/render_inline.h:
2724         * khtml/rendering/render_object.cpp:
2725         (RenderObject::caretRect):
2726         (RenderObject::positionForCoordinates):
2727         * khtml/rendering/render_object.h:
2728         * khtml/rendering/render_replaced.cpp:
2729         (RenderReplaced::positionForCoordinates):
2730         * khtml/rendering/render_replaced.h:
2731         * khtml/rendering/render_text.cpp:
2732         (RenderText::positionForCoordinates):
2733         * khtml/rendering/render_text.h:
2734         * khtml/xml/dom_position.cpp:
2735         (DOM::Position::previousCharacterPosition):
2736         (DOM::Position::nextCharacterPosition):
2737         (DOM::Position::leadingWhitespacePosition):
2738         (DOM::Position::trailingWhitespacePosition):
2739         * khtml/xml/dom_position.h:
2740         * kwq/KWQAccObject.mm:
2741         (-[KWQAccObject value]):
2742         (-[KWQAccObject accessibilityAttributeValue:]):
2743         (-[KWQAccObject doAXLineForTextMarker:]):
2744         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
2745         (-[KWQAccObject doAXTextMarkerForPosition:]):
2746         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
2747         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
2748         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
2749         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
2750         * kwq/KWQKHTMLPart.mm:
2751         * kwq/WebCoreBridge.mm:
2752         (-[WebCoreBridge _visiblePositionForPoint:]):
2753
2754 05-02-07  Maciej Stachowiak  <mjs@apple.com>
2755
2756         Reviewed by Ken and John.
2757
2758         Re-fixed a specific case of the following:
2759
2760         <rdar://problem/3790449> REGRESSION (Mail): underline behavior is flaky because of how CSS handles text-decoration
2761
2762         Oddly, Cmd-B, Cmd-U, type some text, return, Cmd-U, Cmd-B, type
2763         some text, worked fine. But hitting the second Cmd-B before the
2764         second Cmd-U still failed to remove underlining. The reason for
2765         this is that our code to compute the style of the current position
2766         did not work when you had a typing style and were positioned right
2767         at a <br> element. For various reasons, this did not show up for
2768         bold and italic, since those are handled through the font manager.
2769
2770         The following change fixes this - for elements that can't have
2771         children, we add the dummy span after the element of interest,
2772         rather than as a child of it.
2773         
2774         * khtml/khtml_part.cpp:
2775         (KHTMLPart::selectionComputedStyle): 
2776
2777 2005-02-11  David Harrison  <harrison@apple.com>
2778
2779         Reviewed by Darin.
2780
2781         <rdar://problem/3978980> Double Clicking on a line in Mail selected the entire body
2782
2783         * khtml/editing/visible_units.cpp:
2784         (khtml::startOfWord):
2785         (khtml::endOfWord):
2786         Pay attention to being at the end of a paragraph.
2787         
2788         (khtml::previousLinePosition):
2789         (khtml::nextLinePosition):
2790         (khtml::endOfParagraph):
2791         Use DOWNSTREAM per recent affinity changes.
2792
2793 2005-02-11  Richard Williamson   <rjw@apple.com>
2794
2795         Fixed <rdar://problem/3985118> DOM objects not being marshaled on JS->native calls
2796
2797         Re-factored how 'native' wrappers for JS objects are created.  The interpreter now
2798         creates these wrappers.  The WebCore subclass of the interpreter now overrides
2799         createLanguageInstanceForValue() and creates a DOM ObjC wrapper for DOM objects.
2800
2801         * WebCore.pbproj/project.pbxproj:
2802         * khtml/ecma/kjs_binding.cpp:
2803         (ScriptInterpreter::createLanguageInstanceForValue):
2804         * khtml/ecma/kjs_binding.h:
2805         * kwq/DOMUtility.mm: Added.
2806         (KJS::ScriptInterpreter::createObjcInstanceForValue):
2807         * kwq/KWQKHTMLPart.mm:
2808         (KWQKHTMLPart::getAppletInstanceForView):
2809         (getInstanceForView):
2810         (KWQKHTMLPart::getEmbedInstanceForView):
2811         (KWQKHTMLPart::getObjectInstanceForView):
2812
2813 2005-02-11  Chris Blumenberg  <cblu@apple.com>
2814
2815         Fixed: <rdar://problem/3937352> Quote level not maintained when copied and pasted within a Mail message
2816
2817         Reviewed by harrison.
2818
2819         * khtml/editing/markup.cpp:
2820         (khtml::isMailBlockquote): new 
2821         (khtml::createMarkup): retain the Mail quote level by including all ancestor mail block quotes
2822         * khtml/rendering/render_block.cpp:
2823         (khtml::RenderBlock::positionForCoordinates): default to downstream for the affinity since the affinity is only upstream when the cursor is clicked to the right of a wrapped line
2824         * khtml/rendering/render_text.cpp:
2825         (RenderText::positionForCoordinates): ditto
2826
2827 2005-02-11  Adele Amchan  <adele@apple.com>
2828
2829         Reviewed by Darin.
2830
2831         fix for <rdar://problem/4004004> no need to add body element for xml documents
2832
2833         In the fix for <rdar://problem/3758785> we decided to add a body element when closing a document 
2834         to ensure that the onload handler would fire.  This is unnecessary for xml documents, 
2835         so now we also check to see if we're dealing with an html document before adding the body element.
2836
2837         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::close): 
2838
2839 2005-02-11  Adele Amchan  <adele@apple.com>
2840
2841         Reviewed by Darin.
2842
2843         * layout-tests/apple-only/base/www.excite.com/index-expected.txt: updates tests because of custom tag change.
2844         * layout-tests/apple-only/base/www.msnbc.com/index-expected.txt:
2845         * layout-tests/apple-only/base/www.time.com/index-expected.txt:
2846         * layout-tests/apple-only/base/www.travelocity.com/index-expected.txt:
2847         * layout-tests/apple-only/base/www.zdnet.com/index-expected.txt:
2848         * layout-tests/fast/overflow/003-expected.txt:
2849
2850         * layout-tests/fast/js/window-object-cross-frame-calls-expected.txt: updated test because of added Body (see rdar://problem/3758785)
2851
2852 === Safari-186 ===
2853
2854 2005-02-11  Darin Adler  <darin@apple.com>
2855
2856         Reviewed by John.
2857
2858         - fixed <rdar://problem/3915449> paths are relative to the old src URL after document.open, which is supposed to clear the document, including the URL
2859
2860         * khtml/xml/dom_docimpl.h: Added a new openInternal function for use by KHTMLPart.
2861         * khtml/xml/dom_docimpl.cpp:
2862         (DocumentImpl::open): Changed to do everything we did before, but also clear the URL and set the
2863         base URL based on the enclosing document. This is the basic JavaScript/DOM operation of opening a
2864         document, which is supposed to clear the document, including the URL. In the long run we might want
2865         to do even more document "resetting and clearing" in here, but this URL clearing is what's needed
2866         now to fix the most important problem.
2867         (DocumentImpl::openInternal): Moved the old open code in here, except for the "parsing" check, which
2868         is unnecessary and inappropriate in the one place we call this.
2869
2870         * khtml/khtml_part.cpp: (KHTMLPart::begin): Call openInternal instead of open.
2871
2872 2005-02-10  Ken Kocienda  <kocienda@apple.com>
2873
2874         Reviewed by Hyatt
2875
2876         Fix for this bug:
2877         
2878         <rdar://problem/3992092> 8A374: Mail crash while pasting - RemoveNodeCommand
2879
2880         * khtml/editing/htmlediting.cpp:
2881         (khtml::ReplaceSelectionCommand::doApply): Code tried to remove a node that was no longer in 
2882         the document. We try to do a good job of detecting all these cases, and generally do. This
2883         one was missed. Fixed.
2884
2885 2005-02-10  Darin Adler  <darin@apple.com>
2886
2887         Reviewed by Harrison.
2888
2889         - added support needed to fix <rdar://problem/3991225> Format->Style->Underline menu item does not get checked when selected text is underlined
2890
2891         * kwq/WebCoreBridge.h: Added selectionHasStyle: method.
2892         * kwq/WebCoreBridge.mm: (-[WebCoreBridge selectionHasStyle:]): Added. Calls selectionHasStyle on the part.
2893
2894 2005-02-10  Darin Adler  <darin@apple.com>
2895
2896         Reviewed by Harrison.
2897
2898         - fixed <rdar://problem/3990484> cursor changes to I-beam when moving over text in widgets, even when selection off via CSS
2899
2900         * khtml/khtmlview.cpp: (KHTMLView::viewportMouseMoveEvent): Changed code to check canSelect when deciding
2901         whether to show an I-beam cursor.
2902
2903         * khtml/rendering/render_object.h: Added canSelect.
2904         * khtml/rendering/render_object.cpp:
2905         (selectStartNode): Added. Helper function with the guts of shouldSelect.
2906         (RenderObject::canSelect): Added. Like shouldSelect, but does not call the "start selecting" event handler.
2907         (RenderObject::shouldSelect): Refactored to use selectStartNode.
2908
2909         * khtml/css/cssvalues.c: Regnerated with newer gperf.
2910
2911 2005-02-10  David Hyatt  <hyatt@apple.com>
2912
2913         Fix for 3867759, .mac regression where scrollers don't show up.  Make sure you can set the .width and
2914         .height properties on the Image object.
2915         
2916         Reviewed by John Sullivan
2917
2918         * khtml/ecma/kjs_html.cpp:
2919         (ImageConstructorImp::construct):
2920         (Image::getValueProperty):
2921         (Image::putValue):
2922         (Image::Image):
2923         * khtml/ecma/kjs_html.h:
2924
2925 2005-02-10  Ken Kocienda  <kocienda@apple.com>
2926
2927         Reviewed by Chris
2928
2929         Fix for this bug:
2930         
2931         <rdar://problem/3965158> Drag-n-drop within a rich text message sometimes changes the color of the dragged text
2932         
2933         This change fixes the bug....and much more. Now, for the first time, the paste code can do "smart merging"
2934         or "smooshing" of styles during its operation. Since this new code is actively, rather than passively
2935         working with styles, it fixes the bug, and lays the groundwork for similar work we need to do to
2936         preserve quote levels in Mail.
2937
2938         * khtml/css/css_valueimpl.cpp:
2939         (DOM::CSSMutableStyleDeclarationImpl::clear): New method.
2940         (DOM::CSSMutableStyleDeclarationImpl::removeBlockProperties): Ditto.
2941         (DOM::CSSMutableStyleDeclarationImpl::removePropertiesInSet): Ditto.
2942         (DOM::operator==): Add operator for CSSProperty.
2943         * khtml/css/css_valueimpl.h: Declare new functions.
2944         * khtml/editing/htmlediting.cpp:
2945         (khtml::isEmptyStyleSpan): Improved the test in this function, rolling together the old implementation
2946         with some code that did this work inline elsewhere. Sum of the parts is better than either test was by itself.
2947         (khtml::isStyleSpan): Check for ID_SPAN.
2948         (khtml::ApplyStyleCommand::removeCSSStyle): Call isEmptyStyleSpan. This was the place with an inline implementation before.
2949         (khtml::ReplacementFragment::ReplacementFragment): Now takes a DocumentImpl argument. No longer does a "default style"
2950         check, but rather calls functions which do a similar check to that, and much more.
2951         (khtml::ReplacementFragment::~ReplacementFragment): Deref document, and computed styles.
2952         (khtml::ReplacementFragment::styleForNode): New helper. Looks up and returns computed style for a node.
2953         (khtml::ReplacementFragment::removeNodePreservingChildren): New helper.
2954         (khtml::ReplacementFragment::computeStylesForNodes): New function which computes the "desired" style for
2955         every node in the fragment. This information is used later after paste is done as a reference for testing
2956         what styles need to be added, and which can be removed as redundant, from all the nodes inserted by the
2957         replacement code.
2958         (khtml::ReplacementFragment::removeStyleNodes): Clears out all style nodes from the fragment. They are
2959         no longer needed after the call to computeStylesForNodes(),
2960         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): Add a document to the call to initialize the
2961         command's ReplacementFragment.
2962         (khtml::ReplaceSelectionCommand::doApply): Call applyStyleToInsertedNodes() after inserting nodes to make
2963         styles come out right.
2964         (khtml::ReplaceSelectionCommand::applyStyleToInsertedNodes): This is the "style smooshing" function. It 
2965         computes the styles that need to be added to each node inserted, comparing the style it gets from just
2966         being inserted into its correct destination with the computed "desired style" done in the 
2967         ReplacementFragment constructor. It then adds in all the necessary styles, and will also remove redundant styles.
2968         * khtml/editing/htmlediting.h: Update declarations and member variables as needed.
2969         * khtml/editing/markup.cpp:
2970         (khtml::startMarkup): Add additional style annotations to the markup we generate, so that paste code can preserve it.
2971         (khtml::markup): Ditto.
2972         (khtml::createMarkup): Ditto.
2973         
2974         These test results are subtly better with this change. They no longer have an unneeded empty span.
2975         Visually the same as before.
2976         
2977         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt
2978         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt
2979         * layout-tests/editing/style/remove-underline-expected.txt
2980         * layout-tests/editing/style/remove-underline-from-stylesheet-expected.txt
2981
2982         New tests:
2983
2984         * layout-tests/editing/style/smoosh-styles-001-expected.txt
2985         * layout-tests/editing/style/smoosh-styles-002-expected.txt
2986         * layout-tests/editing/style/smoosh-styles-001.html
2987         * layout-tests/editing/style/smoosh-styles-002.html
2988
2989 2005-02-10  Darin Adler  <darin@apple.com>
2990
2991         Reviewed by Adele.
2992
2993         - fixed <rdar://problem/3974988> WebHTMLView drops scroll wheel events when deltas are 0
2994
2995         * kwq/WebCoreScrollView.m: (-[WebCoreScrollView autoforwardsScrollWheelEvents]): Added, for Tiger only.
2996         For Tiger, removed the override of scrollWheel:, which doesn't work quite right because of how the
2997         delta attributes return all 0 for newfangled scrolling events from the new trackpads.
2998
2999 2005-02-10  David Harrison  <harrison@apple.com>
3000
3001         Reviewed by Darin.
3002
3003         <rdar://problem/3991532> REGRESSION (Mail): Triple-click on trailing blank line should select previous line but doesn't
3004
3005         * khtml/css/cssvalues.c:
3006         (hash_val):
3007         (findValue):
3008         * khtml/editing/selection.cpp:
3009         (khtml::Selection::validate):
3010         Do moral equiavalent of LeftWordIfOnBoundary for PARAGRAPH.
3011
3012 2005-02-10  David Harrison  <harrison@apple.com>
3013
3014         Reviewed by Darin.
3015
3016         <rdar://problem/3991848> Double-click on first character selects wrong item
3017
3018         * khtml/editing/selection.cpp:
3019         (khtml::Selection::validate):
3020         Honor the fact that clicking on a character positions the cursor on the left side of the character.
3021
3022 2005-02-10  David Hyatt  <hyatt@apple.com>
3023
3024         Fix for 3980778, repro crash in RootInlineBox::paint.  Make sure that when merging blocks we dirty them for layout
3025         up front. That way as we do the merge, we dont attempt to examine the lines in dirtyLinesForChangedChild.
3026         
3027         Reviewed by mjs
3028
3029         * khtml/rendering/render_block.cpp:
3030         (khtml::RenderBlock::removeChild):
3031
3032 2005-02-10  David Hyatt  <hyatt@apple.com>
3033
3034         Fix for 3987010, fix a bug that caused the self-collapsing-block-cleared-float bit to never get set correctly.
3035         
3036         Reviewed by mjs
3037
3038         * khtml/rendering/render_block.h:
3039         (khtml::RenderBlock::MarginInfo::setSelfCollapsingBlockClearedFloat):
3040
3041 2005-02-10  David Hyatt  <hyatt@apple.com>
3042
3043         Fix  for 3992440, text not wrapping correctly on half moon bay web site.  Refine an incorrect optimization I
3044         added to be less restrictive.
3045         
3046         Reviewed by mjs
3047
3048         * khtml/rendering/render_block.cpp:
3049         (khtml::RenderBlock::layoutBlockChildren):
3050
3051 2005-02-08  Maciej Stachowiak  <mjs@apple.com>
3052
3053         Reviewed by Darin.
3054
3055         <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow
3056
3057         I fixed this by removing all event listeners for a document, it's
3058         children, and any disconnected nodes that used to be in the
3059         document at document detach time. Mozilla temporarily disables
3060         event listeners on such nodes, but re-enables them if you
3061         re-parant a node into a new document. However, in WebCore, you
3062         can't re-parent a node into another document, so there is no
3063         observable change in behavior.
3064
3065         We have to do this to break the possible reference cycles between
3066         event listeners and the dom nodes they are attached to (e.g. via
3067         scope chain, as in this case).
3068
3069         * khtml/xml/dom_docimpl.cpp:
3070         (DocumentImpl::detach):
3071         (DocumentImpl::removeAllEventListenersFromAllNodesx):
3072         (DocumentImpl::registerDisconnectedNodeWithEventListeners):
3073         (DocumentImpl::unregisterDisconnectedNodeWithEventListeners):
3074         (DocumentImpl::removeAllDisconnectedNodeEventListeners):
3075         * khtml/xml/dom_docimpl.h:
3076         * khtml/xml/dom_nodeimpl.cpp:
3077         (NodeImpl::~NodeImpl):
3078         (NodeImpl::addEventListener):
3079         (NodeImpl::removeEventListener):
3080         (NodeImpl::removeAllEventListeners):
3081         (NodeImpl::removeHTMLEventListener):
3082         (NodeImpl::insertedIntoDocument):
3083         (NodeImpl::removedFromDocument):
3084         * khtml/xml/dom_nodeimpl.h:
3085
3086 2005-02-09  Chris Blumenberg  <cblu@apple.com>
3087
3088         Fixed: <rdar://problem/3999213> Sometimes 2 Windows Media Player plugin instances are loaded
3089
3090         Reviewed by hyatt.
3091
3092         * khtml/html/html_objectimpl.cpp:
3093         (HTMLObjectElementImpl::attach): Set needWidgetUpdate to false before calling updateWidget because updateWidget may cause this method or another method (which also calls updateWidget) to be called.
3094         (HTMLObjectElementImpl::recalcStyle): ditto
3095
3096 2005-02-09  David Harrison  <harrison@apple.com>
3097
3098         Reviewed by Darin.
3099         
3100         <rdar://problem/3937447> Mail-689: Arrow key navigation in new message body stops working when a line ends with a bold word
3101         
3102         Added affinity to VisiblePosition.  Changed Selection code to use affinity more.
3103         
3104         (Partial) <rdar://problem/3982096> editing/pasteboard/paste-text-007 is failing
3105         
3106         Changed ReplaceSelectionCommand to also pay attention to the top children of the incoming fragment, not just the very last node inserted, when deciding whether to insert a paragraph for the Apple interchange newline.
3107
3108         * khtml/ecma/kjs_window.cpp:
3109         (SelectionFunc::tryCall):
3110         * khtml/editing/htmlediting.cpp:
3111         (khtml::EditCommandPtr::setStartingSelection):
3112         (khtml::EditCommandPtr::setEndingSelection):
3113         (khtml::EditCommand::setStartingSelection):
3114         (khtml::EditCommand::setEndingSelection):
3115         (khtml::CompositeEditCommand::deleteInsignificantTextDownstream):
3116         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
3117         (khtml::ApplyStyleCommand::splitTextAtStartIfNeeded):
3118         (khtml::ApplyStyleCommand::splitTextAtEndIfNeeded):
3119         (khtml::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
3120         (khtml::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
3121         (khtml::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
3122         (khtml::ApplyStyleCommand::mergeEndWithNextIfIdentical):
3123         (khtml::ApplyStyleCommand::joinChildTextNodes):
3124         (khtml::DeleteSelectionCommand::initializePositionData):
3125         (khtml::DeleteSelectionCommand::handleGeneralDelete):
3126         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
3127         (khtml::DeleteSelectionCommand::doApply):
3128         (khtml::InsertLineBreakCommand::doApply):
3129         (khtml::InsertParagraphSeparatorCommand::doApply):
3130         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
3131         (khtml::InsertTextCommand::input):
3132         (khtml::MoveSelectionCommand::doApply):
3133         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand):
3134         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand):
3135         (khtml::ReplaceSelectionCommand::doApply):
3136         (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
3137         (khtml::ReplaceSelectionCommand::updateNodesInserted):
3138         (khtml::TypingCommand::deleteKeyPressed):
3139         (khtml::TypingCommand::forwardDeleteKeyPressed):
3140         (khtml::TypingCommand::markMisspellingsAfterTyping):
3141         * khtml/editing/htmlediting.h:
3142         * khtml/editing/selection.cpp:
3143         (khtml::Selection::Selection):
3144         (khtml::Selection::init):
3145         (khtml::Selection::moveTo):
3146         (khtml::Selection::modifyExtendingRightForward):
3147         (khtml::Selection::modifyMovingRightForward):
3148         (khtml::Selection::modifyExtendingLeftBackward):
3149         (khtml::Selection::modifyMovingLeftBackward):
3150         (khtml::Selection::modify):
3151         (khtml::Selection::xPosForVerticalArrowNavigation):
3152         (khtml::Selection::clear):
3153         (khtml::Selection::setBase):
3154         (khtml::Selection::setExtent):
3155         (khtml::Selection::setBaseAndExtent):
3156         (khtml::Selection::layout):
3157         (khtml::Selection::validate):
3158         * khtml/editing/selection.h:
3159         (khtml::Selection::startAffinity):
3160         (khtml::Selection::endAffinity):
3161         (khtml::Selection::baseAffinity):
3162         (khtml::Selection::extentAffinity):
3163         (khtml::operator==):
3164         * khtml/editing/text_affinity.h:
3165         (khtml::):
3166         * khtml/editing/visible_position.cpp:
3167         (khtml::VisiblePosition::VisiblePosition):
3168         (khtml::VisiblePosition::init):
3169         (khtml::VisiblePosition::initUpstream):
3170         (khtml::VisiblePosition::initDownstream):
3171         (khtml::VisiblePosition::next):
3172         (khtml::VisiblePosition::previous):
3173         (khtml::startVisiblePosition):
3174         (khtml::endVisiblePosition):
3175         * khtml/editing/visible_position.h:
3176         (khtml::VisiblePosition::):
3177         (khtml::VisiblePosition::VisiblePosition):
3178         (khtml::VisiblePosition::affinity):
3179         (khtml::VisiblePosition::setAffinity):
3180         (khtml::operator==):
3181         * khtml/editing/visible_units.cpp:
3182         (khtml::previousBoundary):
3183         (khtml::nextBoundary):
3184         (khtml::startOfLine):
3185         (khtml::endOfLine):
3186         (khtml::previousLinePosition):
3187         (khtml::nextLinePosition):
3188         (khtml::startOfParagraph):
3189         (khtml::endOfParagraph):
3190         (khtml::previousParagraphPosition):
3191         (khtml::nextParagraphPosition):
3192         (khtml::startOfBlock):
3193         (khtml::endOfBlock):
3194         (khtml::startOfDocument):
3195         (khtml::endOfDocument):
3196         * khtml/editing/visible_units.h:
3197         * khtml/khtml_part.cpp:
3198         (KHTMLPart::findTextNext):
3199         (KHTMLPart::selectClosestWordFromMouseEvent):
3200         (KHTMLPart::handleMousePressEventTripleClick):
3201         (KHTMLPart::handleMousePressEventSingleClick):
3202         (KHTMLPart::handleMouseMoveEventSelection):
3203         (KHTMLPart::khtmlMouseReleaseEvent):
3204         (KHTMLPart::selectAll):
3205         (KHTMLPart::computeAndSetTypingStyle):
3206         (KHTMLPart::selectionComputedStyle):
3207         * khtml/rendering/render_br.cpp:
3208         (RenderBR::positionForCoordinates):
3209         * khtml/xml/dom_docimpl.cpp:
3210         (DocumentImpl::updateSelection):
3211         * khtml/xml/dom_nodeimpl.cpp:
3212         (NodeBaseImpl::setFocus):
3213         * khtml/xml/dom_position.cpp:
3214         (DOM::Position::previousCharacterPosition):
3215         (DOM::Position::nextCharacterPosition):
3216         * khtml/xml/dom_position.h:
3217         * kwq/KWQAccObject.mm:
3218         (-[KWQAccObject value]):
3219         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
3220         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
3221         (-[KWQAccObject accessibilityAttributeValue:]):
3222         (-[KWQAccObject doAXLineForTextMarker:]):
3223         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
3224         (-[KWQAccObject doAXTextMarkerForPosition:]):
3225         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
3226         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
3227         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
3228         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
3229         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
3230         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
3231         (-[KWQAccObject doSetAXSelectedTextMarkerRange:]):
3232         * kwq/KWQAccObjectCache.mm:
3233         (KWQAccObjectCache::textMarkerForVisiblePosition):
3234         (KWQAccObjectCache::visiblePositionForTextMarker):
3235         * kwq/KWQKHTMLPart.mm:
3236         (KWQKHTMLPart::findString):
3237         (KWQKHTMLPart::advanceToNextMisspelling):
3238         (KWQKHTMLPart::styleForSelectionStart):
3239         (KWQKHTMLPart::baseWritingDirectionForSelectionStart):
3240         (KWQKHTMLPart::setSelectionFromNone):
3241         (KWQKHTMLPart::respondToChangedSelection):
3242         * kwq/WebCoreBridge.mm:
3243         (-[WebCoreBridge setSelectedDOMRange:affinity:]):
3244         (-[WebCoreBridge selectionAffinity]):
3245         (-[WebCoreBridge setMarkDOMRange:]):
3246         (-[WebCoreBridge _visiblePositionForPoint:]):
3247         (-[WebCoreBridge moveDragCaretToPoint:]):
3248         (-[WebCoreBridge editableDOMRangeForPoint:]):
3249         (-[WebCoreBridge ensureSelectionVisible]):
3250         (-[WebCoreBridge rangeOfCharactersAroundCaret]):
3251
3252 2005-02-09  Chris Blumenberg  <cblu@apple.com>
3253
3254         Fixed: <rdar://problem/3985211> Seed: Mail: Drag-and-drop destination indicator / insertion point disappears
3255
3256         Reviewed by kocienda.
3257
3258         * khtml/rendering/render_block.cpp:
3259         (khtml::RenderBlock::paintCaret): new
3260         (khtml::RenderBlock::paintObject): call paintCaret for the cursor caret and the drag caret
3261         * khtml/rendering/render_block.h:
3262
3263 === Safari-185 ===
3264
3265 2005-02-08  Ken Kocienda  <kocienda@apple.com>
3266
3267         Reviewed by John
3268
3269         Fix for this bug:
3270         
3271         <rdar://problem/3996344> Entire document content is deleted when only the first paragraph was supposed to be
3272
3273         Problem stems from my attempt to fix this bug: <rdar://problem/3986155> Insertion point goes 
3274         to beginning of doc after deleting.
3275         
3276         I added an "optimization" that proved to do more harm than good. So, basically, the fix is to remove code.
3277
3278         * khtml/editing/htmlediting.cpp:
3279         (khtml::DeleteSelectionCommand::handleGeneralDelete)
3280
3281 2005-02-07  Darin Adler  <darin@apple.com>
3282
3283         Reviewed by Kevin.
3284
3285         - fixed <rdar://problem/3890352> REGRESSION (125-170, Panther-only): pasted textarea contents disappear (exception in NSText)
3286
3287         * kwq/KWQTextArea.mm: (-[KWQTextArea tile]): Don't resize the text view immediately here.
3288         Use performWithDelay to defer it to avoid the re-entrancy that bothers the Panther version
3289         of NSTextView. On Tiger, leave the code alone.
3290
3291 2005-02-07  Adele Amchan  <adele@apple.com>
3292
3293         Reviewed by Darin.
3294
3295         Fix for <rdar://problem/3993628> REGRESSION (180-181): Logitelnet bank's website doesn't work
3296
3297         This fixes an oversight in the fix for <rdar://problem/3964286>.  
3298         We're now making sure there is a document before calling checkCompleted in slotLoaderRequestDone.
3299         That function is called even when other parts finish loads of their subresources, so we could end
3300         up calling checkCompleted before we had a document. We also looked over all the other calls to
3301         checkCompleted to convince ourselves no other call sites had a similar issue.
3302
3303         * khtml/khtml_part.cpp: (KHTMLPart::slotLoaderRequestDone): Check if doc is nil before calling
3304         checkCompleted.
3305
3306 2005-02-07  Ken Kocienda  <kocienda@apple.com>
3307
3308         Reviewed by Darin
3309
3310         Fix for this bug:
3311         
3312         <rdar://problem/3953302> Replacing quoted text ends up with blue-colored text that is not quoted
3313
3314         * khtml/editing/htmlediting.cpp:
3315         (khtml::DeleteSelectionCommand::doApply): Removed special case delete code for select all. It was
3316         causing as many bugs as it fixed. What's more, the design concept is a bit shaky. By removing
3317         this special case, the bug goes away.
3318         * khtml/editing/htmlediting.h: Remove declaration.
3319         
3320         Test results using selectAll() updated to reflect changed behavior.
3321         
3322         * layout-tests/editing/deleting/delete-3775172-fix-expected.txt:
3323