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