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