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