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