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