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