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