Reviewed by Darin.
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 2005-02-11  David Harrison  <harrison@apple.com>
2
3         Reviewed by Darin.
4
5         <rdar://problem/3978980> Double Clicking on a line in Mail selected the entire body
6
7         * khtml/editing/visible_units.cpp:
8         (khtml::startOfWord):
9         (khtml::endOfWord):
10         Pay attention to being at the end of a paragraph.
11         
12         (khtml::previousLinePosition):
13         (khtml::nextLinePosition):
14         (khtml::endOfParagraph):
15         Use DOWNSTREAM per recent affinity changes.
16
17 2005-02-11  Richard Williamson   <rjw@apple.com>
18
19         Fixed <rdar://problem/3985118> DOM objects not being marshaled on JS->native calls
20
21         Re-factored how 'native' wrappers for JS objects are created.  The interpreter now
22         creates these wrappers.  The WebCore subclass of the interpreter now overrides
23         createLanguageInstanceForValue() and creates a DOM ObjC wrapper for DOM objects.
24
25         * WebCore.pbproj/project.pbxproj:
26         * khtml/ecma/kjs_binding.cpp:
27         (ScriptInterpreter::createLanguageInstanceForValue):
28         * khtml/ecma/kjs_binding.h:
29         * kwq/DOMUtility.mm: Added.
30         (KJS::ScriptInterpreter::createObjcInstanceForValue):
31         * kwq/KWQKHTMLPart.mm:
32         (KWQKHTMLPart::getAppletInstanceForView):
33         (getInstanceForView):
34         (KWQKHTMLPart::getEmbedInstanceForView):
35         (KWQKHTMLPart::getObjectInstanceForView):
36
37 2005-02-11  Chris Blumenberg  <cblu@apple.com>
38
39         Fixed: <rdar://problem/3937352> Quote level not maintained when copied and pasted within a Mail message
40
41         Reviewed by harrison.
42
43         * khtml/editing/markup.cpp:
44         (khtml::isMailBlockquote): new 
45         (khtml::createMarkup): retain the Mail quote level by including all ancestor mail block quotes
46         * khtml/rendering/render_block.cpp:
47         (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
48         * khtml/rendering/render_text.cpp:
49         (RenderText::positionForCoordinates): ditto
50
51 2005-02-11  Adele Amchan  <adele@apple.com>
52
53         Reviewed by Darin.
54
55         fix for <rdar://problem/4004004> no need to add body element for xml documents
56
57         In the fix for <rdar://problem/3758785> we decided to add a body element when closing a document 
58         to ensure that the onload handler would fire.  This is unnecessary for xml documents, 
59         so now we also check to see if we're dealing with an html document before adding the body element.
60
61         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::close): 
62
63 2005-02-11  Adele Amchan  <adele@apple.com>
64
65         Reviewed by Darin.
66
67         * layout-tests/apple-only/base/www.excite.com/index-expected.txt: updates tests because of custom tag change.
68         * layout-tests/apple-only/base/www.msnbc.com/index-expected.txt:
69         * layout-tests/apple-only/base/www.time.com/index-expected.txt:
70         * layout-tests/apple-only/base/www.travelocity.com/index-expected.txt:
71         * layout-tests/apple-only/base/www.zdnet.com/index-expected.txt:
72         * layout-tests/fast/overflow/003-expected.txt:
73
74         * layout-tests/fast/js/window-object-cross-frame-calls-expected.txt: updated test because of added Body (see rdar://problem/3758785)
75
76 === Safari-186 ===
77
78 2005-02-11  Darin Adler  <darin@apple.com>
79
80         Reviewed by John.
81
82         - 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
83
84         * khtml/xml/dom_docimpl.h: Added a new openInternal function for use by KHTMLPart.
85         * khtml/xml/dom_docimpl.cpp:
86         (DocumentImpl::open): Changed to do everything we did before, but also clear the URL and set the
87         base URL based on the enclosing document. This is the basic JavaScript/DOM operation of opening a
88         document, which is supposed to clear the document, including the URL. In the long run we might want
89         to do even more document "resetting and clearing" in here, but this URL clearing is what's needed
90         now to fix the most important problem.
91         (DocumentImpl::openInternal): Moved the old open code in here, except for the "parsing" check, which
92         is unnecessary and inappropriate in the one place we call this.
93
94         * khtml/khtml_part.cpp: (KHTMLPart::begin): Call openInternal instead of open.
95
96 2005-02-10  Ken Kocienda  <kocienda@apple.com>
97
98         Reviewed by Hyatt
99
100         Fix for this bug:
101         
102         <rdar://problem/3992092> 8A374: Mail crash while pasting - RemoveNodeCommand
103
104         * khtml/editing/htmlediting.cpp:
105         (khtml::ReplaceSelectionCommand::doApply): Code tried to remove a node that was no longer in 
106         the document. We try to do a good job of detecting all these cases, and generally do. This
107         one was missed. Fixed.
108
109 2005-02-10  Darin Adler  <darin@apple.com>
110
111         Reviewed by Harrison.
112
113         - added support needed to fix <rdar://problem/3991225> Format->Style->Underline menu item does not get checked when selected text is underlined
114
115         * kwq/WebCoreBridge.h: Added selectionHasStyle: method.
116         * kwq/WebCoreBridge.mm: (-[WebCoreBridge selectionHasStyle:]): Added. Calls selectionHasStyle on the part.
117
118 2005-02-10  Darin Adler  <darin@apple.com>
119
120         Reviewed by Harrison.
121
122         - fixed <rdar://problem/3990484> cursor changes to I-beam when moving over text in widgets, even when selection off via CSS
123
124         * khtml/khtmlview.cpp: (KHTMLView::viewportMouseMoveEvent): Changed code to check canSelect when deciding
125         whether to show an I-beam cursor.
126
127         * khtml/rendering/render_object.h: Added canSelect.
128         * khtml/rendering/render_object.cpp:
129         (selectStartNode): Added. Helper function with the guts of shouldSelect.
130         (RenderObject::canSelect): Added. Like shouldSelect, but does not call the "start selecting" event handler.
131         (RenderObject::shouldSelect): Refactored to use selectStartNode.
132
133         * khtml/css/cssvalues.c: Regnerated with newer gperf.
134
135 2005-02-10  David Hyatt  <hyatt@apple.com>
136
137         Fix for 3867759, .mac regression where scrollers don't show up.  Make sure you can set the .width and
138         .height properties on the Image object.
139         
140         Reviewed by John Sullivan
141
142         * khtml/ecma/kjs_html.cpp:
143         (ImageConstructorImp::construct):
144         (Image::getValueProperty):
145         (Image::putValue):
146         (Image::Image):
147         * khtml/ecma/kjs_html.h:
148
149 2005-02-10  Ken Kocienda  <kocienda@apple.com>
150
151         Reviewed by Chris
152
153         Fix for this bug:
154         
155         <rdar://problem/3965158> Drag-n-drop within a rich text message sometimes changes the color of the dragged text
156         
157         This change fixes the bug....and much more. Now, for the first time, the paste code can do "smart merging"
158         or "smooshing" of styles during its operation. Since this new code is actively, rather than passively
159         working with styles, it fixes the bug, and lays the groundwork for similar work we need to do to
160         preserve quote levels in Mail.
161
162         * khtml/css/css_valueimpl.cpp:
163         (DOM::CSSMutableStyleDeclarationImpl::clear): New method.
164         (DOM::CSSMutableStyleDeclarationImpl::removeBlockProperties): Ditto.
165         (DOM::CSSMutableStyleDeclarationImpl::removePropertiesInSet): Ditto.
166         (DOM::operator==): Add operator for CSSProperty.
167         * khtml/css/css_valueimpl.h: Declare new functions.
168         * khtml/editing/htmlediting.cpp:
169         (khtml::isEmptyStyleSpan): Improved the test in this function, rolling together the old implementation
170         with some code that did this work inline elsewhere. Sum of the parts is better than either test was by itself.
171         (khtml::isStyleSpan): Check for ID_SPAN.
172         (khtml::ApplyStyleCommand::removeCSSStyle): Call isEmptyStyleSpan. This was the place with an inline implementation before.
173         (khtml::ReplacementFragment::ReplacementFragment): Now takes a DocumentImpl argument. No longer does a "default style"
174         check, but rather calls functions which do a similar check to that, and much more.
175         (khtml::ReplacementFragment::~ReplacementFragment): Deref document, and computed styles.
176         (khtml::ReplacementFragment::styleForNode): New helper. Looks up and returns computed style for a node.
177         (khtml::ReplacementFragment::removeNodePreservingChildren): New helper.
178         (khtml::ReplacementFragment::computeStylesForNodes): New function which computes the "desired" style for
179         every node in the fragment. This information is used later after paste is done as a reference for testing
180         what styles need to be added, and which can be removed as redundant, from all the nodes inserted by the
181         replacement code.
182         (khtml::ReplacementFragment::removeStyleNodes): Clears out all style nodes from the fragment. They are
183         no longer needed after the call to computeStylesForNodes(),
184         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): Add a document to the call to initialize the
185         command's ReplacementFragment.
186         (khtml::ReplaceSelectionCommand::doApply): Call applyStyleToInsertedNodes() after inserting nodes to make
187         styles come out right.
188         (khtml::ReplaceSelectionCommand::applyStyleToInsertedNodes): This is the "style smooshing" function. It 
189         computes the styles that need to be added to each node inserted, comparing the style it gets from just
190         being inserted into its correct destination with the computed "desired style" done in the 
191         ReplacementFragment constructor. It then adds in all the necessary styles, and will also remove redundant styles.
192         * khtml/editing/htmlediting.h: Update declarations and member variables as needed.
193         * khtml/editing/markup.cpp:
194         (khtml::startMarkup): Add additional style annotations to the markup we generate, so that paste code can preserve it.
195         (khtml::markup): Ditto.
196         (khtml::createMarkup): Ditto.
197         
198         These test results are subtly better with this change. They no longer have an unneeded empty span.
199         Visually the same as before.
200         
201         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt
202         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt
203         * layout-tests/editing/style/remove-underline-expected.txt
204         * layout-tests/editing/style/remove-underline-from-stylesheet-expected.txt
205
206         New tests:
207
208         * layout-tests/editing/style/smoosh-styles-001-expected.txt
209         * layout-tests/editing/style/smoosh-styles-002-expected.txt
210         * layout-tests/editing/style/smoosh-styles-001.html
211         * layout-tests/editing/style/smoosh-styles-002.html
212
213 2005-02-10  Darin Adler  <darin@apple.com>
214
215         Reviewed by Adele.
216
217         - fixed <rdar://problem/3974988> WebHTMLView drops scroll wheel events when deltas are 0
218
219         * kwq/WebCoreScrollView.m: (-[WebCoreScrollView autoforwardsScrollWheelEvents]): Added, for Tiger only.
220         For Tiger, removed the override of scrollWheel:, which doesn't work quite right because of how the
221         delta attributes return all 0 for newfangled scrolling events from the new trackpads.
222
223 2005-02-10  David Harrison  <harrison@apple.com>
224
225         Reviewed by Darin.
226
227         <rdar://problem/3991532> REGRESSION (Mail): Triple-click on trailing blank line should select previous line but doesn't
228
229         * khtml/css/cssvalues.c:
230         (hash_val):
231         (findValue):
232         * khtml/editing/selection.cpp:
233         (khtml::Selection::validate):
234         Do moral equiavalent of LeftWordIfOnBoundary for PARAGRAPH.
235
236 2005-02-10  David Harrison  <harrison@apple.com>
237
238         Reviewed by Darin.
239
240         <rdar://problem/3991848> Double-click on first character selects wrong item
241
242         * khtml/editing/selection.cpp:
243         (khtml::Selection::validate):
244         Honor the fact that clicking on a character positions the cursor on the left side of the character.
245
246 2005-02-10  David Hyatt  <hyatt@apple.com>
247
248         Fix for 3980778, repro crash in RootInlineBox::paint.  Make sure that when merging blocks we dirty them for layout
249         up front. That way as we do the merge, we dont attempt to examine the lines in dirtyLinesForChangedChild.
250         
251         Reviewed by mjs
252
253         * khtml/rendering/render_block.cpp:
254         (khtml::RenderBlock::removeChild):
255
256 2005-02-10  David Hyatt  <hyatt@apple.com>
257
258         Fix for 3987010, fix a bug that caused the self-collapsing-block-cleared-float bit to never get set correctly.
259         
260         Reviewed by mjs
261
262         * khtml/rendering/render_block.h:
263         (khtml::RenderBlock::MarginInfo::setSelfCollapsingBlockClearedFloat):
264
265 2005-02-10  David Hyatt  <hyatt@apple.com>
266
267         Fix  for 3992440, text not wrapping correctly on half moon bay web site.  Refine an incorrect optimization I
268         added to be less restrictive.
269         
270         Reviewed by mjs
271
272         * khtml/rendering/render_block.cpp:
273         (khtml::RenderBlock::layoutBlockChildren):
274
275 2005-02-08  Maciej Stachowiak  <mjs@apple.com>
276
277         Reviewed by Darin.
278
279         <rdar://problem/3977973> pages on ebay leak referenced JavaScript objects -- over time browsing becomes super-slow
280
281         I fixed this by removing all event listeners for a document, it's
282         children, and any disconnected nodes that used to be in the
283         document at document detach time. Mozilla temporarily disables
284         event listeners on such nodes, but re-enables them if you
285         re-parant a node into a new document. However, in WebCore, you
286         can't re-parent a node into another document, so there is no
287         observable change in behavior.
288
289         We have to do this to break the possible reference cycles between
290         event listeners and the dom nodes they are attached to (e.g. via
291         scope chain, as in this case).
292
293         * khtml/xml/dom_docimpl.cpp:
294         (DocumentImpl::detach):
295         (DocumentImpl::removeAllEventListenersFromAllNodesx):
296         (DocumentImpl::registerDisconnectedNodeWithEventListeners):
297         (DocumentImpl::unregisterDisconnectedNodeWithEventListeners):
298         (DocumentImpl::removeAllDisconnectedNodeEventListeners):
299         * khtml/xml/dom_docimpl.h:
300         * khtml/xml/dom_nodeimpl.cpp:
301         (NodeImpl::~NodeImpl):
302         (NodeImpl::addEventListener):
303         (NodeImpl::removeEventListener):
304         (NodeImpl::removeAllEventListeners):
305         (NodeImpl::removeHTMLEventListener):
306         (NodeImpl::insertedIntoDocument):
307         (NodeImpl::removedFromDocument):
308         * khtml/xml/dom_nodeimpl.h:
309
310 2005-02-09  Chris Blumenberg  <cblu@apple.com>
311
312         Fixed: <rdar://problem/3999213> Sometimes 2 Windows Media Player plugin instances are loaded
313
314         Reviewed by hyatt.
315
316         * khtml/html/html_objectimpl.cpp:
317         (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.
318         (HTMLObjectElementImpl::recalcStyle): ditto
319
320 2005-02-09  David Harrison  <harrison@apple.com>
321
322         Reviewed by Darin.
323         
324         <rdar://problem/3937447> Mail-689: Arrow key navigation in new message body stops working when a line ends with a bold word
325         
326         Added affinity to VisiblePosition.  Changed Selection code to use affinity more.
327         
328         (Partial) <rdar://problem/3982096> editing/pasteboard/paste-text-007 is failing
329         
330         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.
331
332         * khtml/ecma/kjs_window.cpp:
333         (SelectionFunc::tryCall):
334         * khtml/editing/htmlediting.cpp:
335         (khtml::EditCommandPtr::setStartingSelection):
336         (khtml::EditCommandPtr::setEndingSelection):
337         (khtml::EditCommand::setStartingSelection):
338         (khtml::EditCommand::setEndingSelection):
339         (khtml::CompositeEditCommand::deleteInsignificantTextDownstream):
340         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
341         (khtml::ApplyStyleCommand::splitTextAtStartIfNeeded):
342         (khtml::ApplyStyleCommand::splitTextAtEndIfNeeded):
343         (khtml::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
344         (khtml::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
345         (khtml::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
346         (khtml::ApplyStyleCommand::mergeEndWithNextIfIdentical):
347         (khtml::ApplyStyleCommand::joinChildTextNodes):
348         (khtml::DeleteSelectionCommand::initializePositionData):
349         (khtml::DeleteSelectionCommand::handleGeneralDelete):
350         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
351         (khtml::DeleteSelectionCommand::doApply):
352         (khtml::InsertLineBreakCommand::doApply):
353         (khtml::InsertParagraphSeparatorCommand::doApply):
354         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
355         (khtml::InsertTextCommand::input):
356         (khtml::MoveSelectionCommand::doApply):
357         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand):
358         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand):
359         (khtml::ReplaceSelectionCommand::doApply):
360         (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
361         (khtml::ReplaceSelectionCommand::updateNodesInserted):
362         (khtml::TypingCommand::deleteKeyPressed):
363         (khtml::TypingCommand::forwardDeleteKeyPressed):
364         (khtml::TypingCommand::markMisspellingsAfterTyping):
365         * khtml/editing/htmlediting.h:
366         * khtml/editing/selection.cpp:
367         (khtml::Selection::Selection):
368         (khtml::Selection::init):
369         (khtml::Selection::moveTo):
370         (khtml::Selection::modifyExtendingRightForward):
371         (khtml::Selection::modifyMovingRightForward):
372         (khtml::Selection::modifyExtendingLeftBackward):
373         (khtml::Selection::modifyMovingLeftBackward):
374         (khtml::Selection::modify):
375         (khtml::Selection::xPosForVerticalArrowNavigation):
376         (khtml::Selection::clear):
377         (khtml::Selection::setBase):
378         (khtml::Selection::setExtent):
379         (khtml::Selection::setBaseAndExtent):
380         (khtml::Selection::layout):
381         (khtml::Selection::validate):
382         * khtml/editing/selection.h:
383         (khtml::Selection::startAffinity):
384         (khtml::Selection::endAffinity):
385         (khtml::Selection::baseAffinity):
386         (khtml::Selection::extentAffinity):
387         (khtml::operator==):
388         * khtml/editing/text_affinity.h:
389         (khtml::):
390         * khtml/editing/visible_position.cpp:
391         (khtml::VisiblePosition::VisiblePosition):
392         (khtml::VisiblePosition::init):
393         (khtml::VisiblePosition::initUpstream):
394         (khtml::VisiblePosition::initDownstream):
395         (khtml::VisiblePosition::next):
396         (khtml::VisiblePosition::previous):
397         (khtml::startVisiblePosition):
398         (khtml::endVisiblePosition):
399         * khtml/editing/visible_position.h:
400         (khtml::VisiblePosition::):
401         (khtml::VisiblePosition::VisiblePosition):
402         (khtml::VisiblePosition::affinity):
403         (khtml::VisiblePosition::setAffinity):
404         (khtml::operator==):
405         * khtml/editing/visible_units.cpp:
406         (khtml::previousBoundary):
407         (khtml::nextBoundary):
408         (khtml::startOfLine):
409         (khtml::endOfLine):
410         (khtml::previousLinePosition):
411         (khtml::nextLinePosition):
412         (khtml::startOfParagraph):
413         (khtml::endOfParagraph):
414         (khtml::previousParagraphPosition):
415         (khtml::nextParagraphPosition):
416         (khtml::startOfBlock):
417         (khtml::endOfBlock):
418         (khtml::startOfDocument):
419         (khtml::endOfDocument):
420         * khtml/editing/visible_units.h:
421         * khtml/khtml_part.cpp:
422         (KHTMLPart::findTextNext):
423         (KHTMLPart::selectClosestWordFromMouseEvent):
424         (KHTMLPart::handleMousePressEventTripleClick):
425         (KHTMLPart::handleMousePressEventSingleClick):
426         (KHTMLPart::handleMouseMoveEventSelection):
427         (KHTMLPart::khtmlMouseReleaseEvent):
428         (KHTMLPart::selectAll):
429         (KHTMLPart::computeAndSetTypingStyle):
430         (KHTMLPart::selectionComputedStyle):
431         * khtml/rendering/render_br.cpp:
432         (RenderBR::positionForCoordinates):
433         * khtml/xml/dom_docimpl.cpp:
434         (DocumentImpl::updateSelection):
435         * khtml/xml/dom_nodeimpl.cpp:
436         (NodeBaseImpl::setFocus):
437         * khtml/xml/dom_position.cpp:
438         (DOM::Position::previousCharacterPosition):
439         (DOM::Position::nextCharacterPosition):
440         * khtml/xml/dom_position.h:
441         * kwq/KWQAccObject.mm:
442         (-[KWQAccObject value]):
443         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
444         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
445         (-[KWQAccObject accessibilityAttributeValue:]):
446         (-[KWQAccObject doAXLineForTextMarker:]):
447         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
448         (-[KWQAccObject doAXTextMarkerForPosition:]):
449         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
450         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
451         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
452         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
453         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
454         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
455         (-[KWQAccObject doSetAXSelectedTextMarkerRange:]):
456         * kwq/KWQAccObjectCache.mm:
457         (KWQAccObjectCache::textMarkerForVisiblePosition):
458         (KWQAccObjectCache::visiblePositionForTextMarker):
459         * kwq/KWQKHTMLPart.mm:
460         (KWQKHTMLPart::findString):
461         (KWQKHTMLPart::advanceToNextMisspelling):
462         (KWQKHTMLPart::styleForSelectionStart):
463         (KWQKHTMLPart::baseWritingDirectionForSelectionStart):
464         (KWQKHTMLPart::setSelectionFromNone):
465         (KWQKHTMLPart::respondToChangedSelection):
466         * kwq/WebCoreBridge.mm:
467         (-[WebCoreBridge setSelectedDOMRange:affinity:]):
468         (-[WebCoreBridge selectionAffinity]):
469         (-[WebCoreBridge setMarkDOMRange:]):
470         (-[WebCoreBridge _visiblePositionForPoint:]):
471         (-[WebCoreBridge moveDragCaretToPoint:]):
472         (-[WebCoreBridge editableDOMRangeForPoint:]):
473         (-[WebCoreBridge ensureSelectionVisible]):
474         (-[WebCoreBridge rangeOfCharactersAroundCaret]):
475
476 2005-02-09  Chris Blumenberg  <cblu@apple.com>
477
478         Fixed: <rdar://problem/3985211> Seed: Mail: Drag-and-drop destination indicator / insertion point disappears
479
480         Reviewed by kocienda.
481
482         * khtml/rendering/render_block.cpp:
483         (khtml::RenderBlock::paintCaret): new
484         (khtml::RenderBlock::paintObject): call paintCaret for the cursor caret and the drag caret
485         * khtml/rendering/render_block.h:
486
487 === Safari-185 ===
488
489 2005-02-08  Ken Kocienda  <kocienda@apple.com>
490
491         Reviewed by John
492
493         Fix for this bug:
494         
495         <rdar://problem/3996344> Entire document content is deleted when only the first paragraph was supposed to be
496
497         Problem stems from my attempt to fix this bug: <rdar://problem/3986155> Insertion point goes 
498         to beginning of doc after deleting.
499         
500         I added an "optimization" that proved to do more harm than good. So, basically, the fix is to remove code.
501
502         * khtml/editing/htmlediting.cpp:
503         (khtml::DeleteSelectionCommand::handleGeneralDelete)
504
505 2005-02-07  Darin Adler  <darin@apple.com>
506
507         Reviewed by Kevin.
508
509         - fixed <rdar://problem/3890352> REGRESSION (125-170, Panther-only): pasted textarea contents disappear (exception in NSText)
510
511         * kwq/KWQTextArea.mm: (-[KWQTextArea tile]): Don't resize the text view immediately here.
512         Use performWithDelay to defer it to avoid the re-entrancy that bothers the Panther version
513         of NSTextView. On Tiger, leave the code alone.
514
515 2005-02-07  Adele Amchan  <adele@apple.com>
516
517         Reviewed by Darin.
518
519         Fix for <rdar://problem/3993628> REGRESSION (180-181): Logitelnet bank's website doesn't work
520
521         This fixes an oversight in the fix for <rdar://problem/3964286>.  
522         We're now making sure there is a document before calling checkCompleted in slotLoaderRequestDone.
523         That function is called even when other parts finish loads of their subresources, so we could end
524         up calling checkCompleted before we had a document. We also looked over all the other calls to
525         checkCompleted to convince ourselves no other call sites had a similar issue.
526
527         * khtml/khtml_part.cpp: (KHTMLPart::slotLoaderRequestDone): Check if doc is nil before calling
528         checkCompleted.
529
530 2005-02-07  Ken Kocienda  <kocienda@apple.com>
531
532         Reviewed by Darin
533
534         Fix for this bug:
535         
536         <rdar://problem/3953302> Replacing quoted text ends up with blue-colored text that is not quoted
537
538         * khtml/editing/htmlediting.cpp:
539         (khtml::DeleteSelectionCommand::doApply): Removed special case delete code for select all. It was
540         causing as many bugs as it fixed. What's more, the design concept is a bit shaky. By removing
541         this special case, the bug goes away.
542         * khtml/editing/htmlediting.h: Remove declaration.
543         
544         Test results using selectAll() updated to reflect changed behavior.
545         
546         * layout-tests/editing/deleting/delete-3775172-fix-expected.txt:
547         * layout-tests/editing/deleting/delete-select-all-001-expected.txt:
548         * layout-tests/editing/deleting/delete-select-all-003-expected.txt:
549         * layout-tests/editing/inserting/insert-3654864-fix-expected.txt:
550         * layout-tests/editing/inserting/insert-3775316-fix-expected.txt:
551         * layout-tests/editing/inserting/insert-3851164-fix-expected.txt:
552         * layout-tests/editing/inserting/insert-3907422-fix-expected.txt:
553         * layout-tests/editing/pasteboard/paste-text-015-expected.txt:
554
555 2005-02-06  Darin Adler  <darin@apple.com>
556
557         Reviewed by Ken.
558
559         - fixed <rdar://problem/3994164> setting a new style attribute with setAttribute("style") doesn't blow away the old style
560
561         * khtml/css/css_valueimpl.h: Renamed parseProperty to parseDeclaration, since it's used to parse
562         an entire style declaration, not a single property.
563         * khtml/css/css_valueimpl.cpp: (DOM::CSSMutableStyleDeclarationImpl::parseDeclaration): Renamed,
564         and added code to clear m_values.
565         * khtml/html/html_elementimpl.cpp: (HTMLElementImpl::parseHTMLAttribute): Call function by its
566         new name, and remove some unnecessary comments.
567
568 2005-02-06  Darin Adler  <darin@apple.com>
569
570         Reviewed by Maciej.
571
572         - fixed <rdar://problem/3993722> need oncut and onpaste handlers implemented for <textarea> (needed for widgets)
573
574         * kwq/KWQTextArea.mm:
575         (-[KWQTextAreaTextView dispatchHTMLEvent:]): Added.
576         (-[KWQTextAreaTextView cut:]): Dispatch "before cut" and "cut" events.
577         (-[KWQTextAreaTextView copy:]): Dispatch "before copy" and "copy" events.
578         (-[KWQTextAreaTextView paste:]): Dispatch "before paste" and "paste" events.
579         (-[KWQTextAreaTextView pasteAsPlainText:]): Ditto.
580         (-[KWQTextAreaTextView pasteAsRichText:]): Ditto.
581
582 2005-02-06  Darin Adler  <darin@apple.com>
583
584         Reviewed by Maciej.
585
586         - fixed <rdar://problem/3943038> <input type=search> that is focused in onload handler doesn't have a visible editor
587
588         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::setFocusNode): Always update layout before giving focus to a widget.
589         This prevents the bad case where we give a widget focus before it has been positioned or sized, causing us to
590         exercise edge cases AppKit doesn't handle well.
591
592         * kwq/KWQTextField.mm: (-[KWQTextFieldController initWithTextField:QLineEdit:]): Remove workaround code I added
593         to fix bug 3943049. Updating the layout fixes the same problem in a cleaner, safer way, and solves another problem,
594         with the way the clip view is set up.
595
596 2005-02-06  Darin Adler  <darin@apple.com>
597
598         Reviewed by Maciej.
599
600         - fixed <rdar://problem/3425232> textarea won't trigger onchange action when clicking to new field
601
602         * khtml/rendering/render_form.h: Added new m_dirty data member.
603         * khtml/rendering/render_form.cpp:
604         (RenderTextArea::RenderTextArea): Initialize m_dirty to false.
605         (RenderTextArea::detach): Call value() on the DOM element to cause it to fetch the value from this object.
606         (RenderTextArea::handleFocusOut): Ditto. Also send the onchange event based only on the m_dirty flag.
607         (RenderTextArea::updateFromElement): Clear the m_dirty flag if the edited value is blown away by a value
608         that comes from the DOM element. Remove code to clear the element's m_dirtyvalue flag; that's an unnecessary
609         optimization, and ideally we'll stop having code in the render object that knows about that flag later.
610         (RenderTextArea::slotTextChanged): Set the m_dirty flag.
611
612 2005-02-06  Darin Adler  <darin@apple.com>
613
614         Reviewed by Maciej.
615
616         - re-fixed <rdar://problem/3760910> please add support for custom tag names in HTML
617
618         * khtml/xml/dom_docimpl.cpp:
619         (DocumentImpl::tagId): Use ID_LAST_TAG + 1 for the ID of the first assigned tag ID. Before we'd use ID_LAST_TAG,
620         which resulted in the same number being used for ID_COMMENT and the first custom tag.
621         (DocumentImpl::tagName): Use ID_LAST_TAG + 1, as above.
622         (DocumentImpl::namespaceURI): Change a < ID_LAST_TAG to <= ID_LAST_TAG in the same spirit as above.
623
624 2005-02-06  Darin Adler  <darin@apple.com>
625
626         Reviewed by Maciej.
627
628         - fixed <rdar://problem/3986639> Crash occurs after choosing Undo Typing from the Edit menu
629
630         * kwq/KWQTextArea.mm: (-[KWQTextArea viewWillMoveToWindow:]): Remove actions from undo manager when the view is
631         removed from the window. Unfortunately, to do this the code has to know that the target of NSTextView actions
632         will be the text storage object, but given the NSText architecture, that's pretty clear.
633
634 2005-02-05  Chris Blumenberg  <cblu@apple.com>
635
636         Fixed: <rdar://problem/3991974> REGRESSION: www.jabra.com world location screen does not work
637
638         Reviewed by hyatt.
639
640         * kwq/KWQKJavaAppletWidget.mm:
641         (KJavaAppletWidget::KJavaAppletWidget): fallback to the document's base URL if there is no baseURL attribute
642         * kwq/WebCoreBridge.h:
643         * kwq/WebCoreBridge.mm:
644         (-[WebCoreBridge baseURL]): new
645
646 2005-02-04  David Harrison  <harrison@apple.com>
647
648         Reviewed by Darin.
649
650         Rolled out Ken's accidental checkin when committing <rdar://problem/3986155> fix yesterday.
651         
652         * khtml/editing/selection.cpp:
653         (khtml::Selection::validate):
654
655 2005-02-04  Adele Amchan  <adele@apple.com>
656
657         Reviewed by Darin.
658
659         Fix for <rdar://problem/3758785> Safari no longer works at BankOfAmerica online banking for military users
660   
661         When closing the document, if a body doesn't exist we now create one.  This bug was preventing the onload handler from
662         firing in cases where there wasn't a body.  In the BankOfAmerica case, the page was just a bit of script where the onload
663         handler redirected to the correct page.
664
665         * khtml/xml/dom_docimpl.cpp: (DocumentImpl::close):
666
667 2005-02-03  Ken Kocienda  <kocienda@apple.com>
668
669         Reviewed by Chris
670
671         Fix for this bug:
672         
673         <rdar://problem/3986155> Insertion point goes to beginning of doc after deleting
674
675         * khtml/editing/htmlediting.cpp:
676         (khtml::DeleteSelectionCommand::setStartNode): New convenience to handle reference counting when setting.
677         (khtml::DeleteSelectionCommand::handleGeneralDelete): This contains the crux of the bug fix. Improve tests
678         that detect when a selected node needs to be retained, rather than deleted, to preserve the intent of the user.
679         This has the side effect of causing the insertion point placement code to succeed rather than fail. Before
680         this fix, the failure of the insertion point placement code caused the insertion point to jump to the start
681         of the document, which is the symptom that can be perceived by users when editing.
682         * khtml/editing/htmlediting.h: Add setStartNode declaration.
683         * khtml/editing/visible_units.cpp:
684         (khtml::startOfBlock): This function had a stubbed-in non-tested implementation. Implement and 
685         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-001-expected.txt: Added.
686         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-001.html: Added.
687         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-002-expected.txt: Added.
688         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-002.html: Added.
689         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-003-expected.txt: Added.
690         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-003.html: Added.
691         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-004-expected.txt: Added.
692         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-004.html: Added.
693         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-005-expected.txt: Added.
694         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-005.html: Added.
695         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-006-expected.txt: Added.
696         * layout-tests/editing/deleting/delete-at-paragraph-boundaries-006.html: Added.
697
698 === Safari-183 ===
699
700 2005-02-03  Richard Williamson   <rjw@apple.com>
701
702         Fixed <rdar://problem/3987419> Stocks and Weather leak what appears to XMLHTTPRequest results
703
704         XMLHTTPRequests were causing massive leaks.  _webcore_initWithHeaderString: did funky things with
705         self replacement.  Re-wrote to use more traditional factory constructor avoiding self replacement.
706         
707         Reviewed by David Harrison.
708
709         * kwq/KWQLoader.mm:
710         (+[NSDictionary _webcore_dictionaryWithHeaderString:]):
711         (KWQServeRequest):
712         (KWQServeSynchronousRequest):
713
714 2005-02-03  Chris Blumenberg  <cblu@apple.com>
715
716         Fixed: <rdar://problem/3938763> Cannot view Windows Media Player videos (soundtrack is played twice with delay)
717
718         Reviewed by hyatt.
719
720         * khtml/html/html_objectimpl.cpp:
721         (HTMLObjectElementImpl::attach): set needWidgetUpdate to false right after calling updateWidget because dispatchHTMLEvent can end up calling this method again
722         (HTMLObjectElementImpl::recalcStyle): ditto
723
724 2005-02-02  John Sullivan  <sullivan@apple.com>
725
726         Reviewed by Chris.
727
728         - WebCore part of fix for <rdar://problem/3980651> REGRESSION (125-180): Huge number of pages printed from certain page, 
729         iFrame involved
730         
731         This also fixes the problems with printing from GMail, yay!
732
733         * khtml/rendering/render_flow.cpp:
734         (RenderFlow::paintLines):
735         If the current line is taller than the entire page height (e.g. tall iFrame), don't try
736         to avoid splitting it across pages.
737         
738         * kwq/WebCoreBridge.mm:
739         (-[WebCoreBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
740         Handle error cases in a more obvious manner; this will cause future problems like this
741         to print a blank page and complain to the console on debug builds, rather than print a 
742         zillionty mostly-blank pages.
743
744 2005-02-02  Chris Blumenberg  <cblu@apple.com>
745
746         Fixed: <rdar://problem/3960304> can't load a particular applet (at www.escape.de) unless it's the first applet to be loaded
747
748         Reviewed by hyatt.
749
750         * khtml/rendering/render_frames.cpp:
751         (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.
752
753 2005-02-02  Chris Blumenberg  <cblu@apple.com>
754
755         Fixed: <rdar://problem/3983628> control-click on WebView is not selecting the word under the cursor (Mail, non-editable WebView)
756
757         Reviewed by rjw.
758
759         * kwq/KWQKHTMLPart.mm:
760         (KWQKHTMLPart::sendContextMenuEvent): check if SPI to always enable selecting closest word is enabled
761         * kwq/WebCoreBridge.h:
762
763 2005-02-02  Ken Kocienda  <kocienda@apple.com>
764
765         Reviewed by me
766
767         * khtml/editing/markup.cpp:
768         (khtml::createMarkup): Removed debug spam I committed earlier in error.
769
770 2005-02-02  Ken Kocienda  <kocienda@apple.com>
771
772         Reviewed by Darin
773
774         Fix for this bug:
775         
776         <rdar://problem/3823109> WebKit should support -toggleBaseWritingDirection: (bidi editing support)
777
778         Since base writing direction is a paragraph-level property in AppKit, and we use the CSS direction
779         property in WebCore, which can be applied to inline elements as well as blocks, a new notion has
780         been added to the WebCore apply style logic. It is now possible to force all properties in a 
781         style declaration to be applied as though they were block properties.
782
783         * khtml/editing/htmlediting.cpp:
784         (khtml::ApplyStyleCommand::ApplyStyleCommand): Add an enum and a flag to this command that controls whether to force all
785         properties in the style to be applied as block styles. Default is "no", retaining previous behavior.
786         (khtml::ApplyStyleCommand::doApply): Switch on new flag to apply styles as before, or force all preoperties to be applied
787         as block styles.
788         * khtml/editing/htmlediting.h:
789         (khtml::ApplyStyleCommand::): Add an enum and a flag, as above.
790         * khtml/khtml_part.cpp:
791         (KHTMLPart::applyParagraphStyle): New method to force application of all style properties as block styles.
792         * khtml/khtml_part.h: Update header declarations.
793         * kwq/KWQKHTMLPart.h: Update header declarations.
794         * kwq/KWQKHTMLPart.mm:
795         (KWQKHTMLPart::baseWritingDirectionForSelectionStart): Accessor to help WebKit do a toggle operation on 
796         writing direction.
797         * kwq/WebCoreBridge.h: Update header declarations.
798         * kwq/WebCoreBridge.mm:
799         (-[WebCoreBridge applyParagraphStyle:withUndoAction:]): New method to force application of all style properties as block styles.
800         (-[WebCoreBridge baseWritingDirectionForSelectionStart]): Accessor to help WebKit do a toggle operation on 
801         writing direction.
802
803         Fix for this bug:
804         
805         <rdar://problem/3985035> REGRESSION (Mail): Text copied from wrapped line contains extra character when pasted
806
807         * khtml/editing/markup.cpp:
808         (khtml::renderedText): Add an enum and a flag to this command that controls whether to force all
809         This is the result of an error in the code that computes the rendered text that is selected 
810         when copying. Since spaces collapse at the end of lines, and these spaces need to be copied 
811         when the selection spans line endings, code runs to compute this text. However, this code 
812         was also running incorrectly in cases where lines wrapped. I have now added the missing 
813         test to check that the selection does indeed extend to the end of the line.
814
815
816 2005-02-02  Ken Kocienda  <kocienda@apple.com>
817
818         Reviewed by Darin
819
820         Fix for these bugs:
821         
822         <rdar://problem/3984894> REGRESSION (Mail): Command-right-arrow in reply does the wrong thing (two ways)
823         <rdar://problem/3985130> REGRESSION (Mail): command-right-arrow in pasted RTF selects only up to tab
824
825         * khtml/editing/visible_units.cpp:
826         (khtml::endOfLine): Two separate problems in this new function recently added to take the place of
827         selectionForLine. In the first, endOfLine did not stop at BR elements, and returned the position
828         beyond them. In the second, the VisiblePosition constructor gives the wrong answer in certain cases.
829         Darin is going to work on a solution for that problem. In the meantime, I can fix the symptom of this
830         bug by going down to the last leaf child of the root line box; a one line change we will roll out when
831         Darin's fix is in.
832
833 2005-02-01  Richard Williamson   <rjw@apple.com>
834
835         Fixed <rdar://problem/3985535> QT Plug-in JavaScript support now fails in <embed> tag only case
836
837         Reviewed by Maciej.
838
839         * khtml/ecma/kjs_html.cpp:
840         (KJS::HTMLDocument::tryGet):
841
842 2005-02-01  John Sullivan  <sullivan@apple.com>
843
844         Written by Darin, reviewed and tested by me
845         
846         - fixed <rdar://problem/3969684> Panther-only: extra blank lines between 
847         pasted content from Blot
848
849         * kwq/KWQKHTMLPart.mm:
850         (KWQKHTMLPart::attributedString):
851         don't emit paragraph breaks if the margins are tiny; matches what
852         we do for plain-text conversion
853
854 === Safari-182 ===
855
856 2005-02-01  Ken Kocienda  <kocienda@apple.com>
857
858         Reviewed by John
859
860         Fix for this bug:
861         
862         <rdar://problem/3985160> Deficiencies in pasting architecture blocking progress on other bugs
863
864         * khtml/editing/html_interchange.h: Move style span text used to mark element added to 
865         add style to this header.
866         * khtml/editing/htmlediting.cpp:
867         (khtml::styleSpanClassString): Change to use constant moved to html_interchange.h.
868         (khtml::isStyleSpan): New helper function. Checks if this is a span we added to apply style.
869         (khtml::CompositeEditCommand::insertNodeBefore): Added an assert to check that the node
870         we are inserting before is not the body.
871         (khtml::CompositeEditCommand::insertNodeAfter): Ditto, but check is for after.
872         (khtml::ReplacementFragment::ReplacementFragment): Added code to process the "default style"
873         that is added by the copy code.
874         (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand): first and last nodes inserted are
875         now member variables instead of function locals. Initialize them here.
876         (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand): Deref first and last nodes inserted
877         if necessary.
878         (khtml::ReplaceSelectionCommand::doApply): Change design to fix the bug. Major change is to
879         separate out the code that inserts nodes into the tree so additional styling checks can
880         be done in a centralized way. Also got rid of the notion of "merging into the end block." That
881         concept was just wrong.
882         (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Tweak interface now that first and 
883         last nodes inserted are member variables.
884         (khtml::ReplaceSelectionCommand::insertNodeAfterAndUpdateNodesInserted): New helper used
885         by replace code to do the stated DOM operation and update state internal to the command.
886         This will also be a catch point to handle the kinds of additional style checks needed to
887         make paste work right.
888         (khtml::ReplaceSelectionCommand::insertNodeAtAndUpdateNodesInserted): Ditto.
889         (khtml::ReplaceSelectionCommand::insertNodeBeforeAndUpdateNodesInserted): Ditto.
890         (khtml::ReplaceSelectionCommand::updateNodesInserted): Ditto.
891         * khtml/editing/htmlediting.h: Update declarations as needed.
892         * khtml/editing/markup.cpp:
893         (khtml::createMarkup): Adds a "default style" span to the content written to the pasteboard.
894         This will help us to fix some of the bugs blocked by the bug above.
895         * khtml/xml/dom_nodeimpl.cpp:
896         (NodeImpl::lastDescendent): New helper.
897         * khtml/xml/dom_nodeimpl.h: Ditto.
898         * khtml/xml/dom_position.cpp:
899         (DOM::Position::upstream): Fixed a bug which would allow the upstream position returned to be
900         in unrendered content.
901         (DOM::Position::downstream): Ditto.
902
903         * layout-tests/editing/deleting/delete-3775172-fix-expected.txt: Ending positions tweaked due to 
904         changes in upstream() and downstream() functions.
905         * layout-tests/editing/inserting/insert-3851164-fix-expected.txt: Ditto
906         * layout-tests/editing/inserting/insert-3907422-fix-expected.txt: Ditto
907         * layout-tests/editing/selection/extend-by-character-006-expected.txt: Ditto
908
909         * layout-tests/editing/pasteboard/paste-text-003-expected.txt: Changed what we expect, given
910         new behavior of paste code.
911
912 2005-01-31  John Sullivan  <sullivan@apple.com>
913
914         Reviewed by Dave Hyatt.
915         
916         - fixed <rdar://problem/3983097> Tabbing on RSS pages gets stuck in search field 
917         with "full keyboard navigation" off
918
919         * kwq/KWQSlider.h:
920         * kwq/KWQSlider.mm:
921         (QSlider::focusPolicy):
922         Implemented this method for KWQSlider. It is needed for our widget subclasses that
923         can become focused in some situations. I missed this when fixing 3949203 because
924         it only comes into play when tab-to-controls is on, and because the other relevant
925         methods are objective-C methods.
926
927 2005-01-31  David Harrison  <harrison@apple.com>
928
929         Reviewed by Darin.
930
931         <rdar://problem/3964164> AXWebArea needs to unregister on going invisible
932
933         * khtml/xml/dom_docimpl.cpp:
934         (DocumentImpl::detach):
935         Detach the AX UIElement for the AXWebArea.
936
937 2005-01-31  David Harrison  <harrison@apple.com>
938
939         Reviewed by Darin
940
941         <rdar://problem/3850876> AX: button exposed as only an AXImage at http://appleseed.apple.com/ site (<input type=image>)
942
943         * khtml/rendering/render_form.h:
944         (khtml::RenderImageButton::isImageButton):
945         New.
946         * khtml/rendering/render_image.h:
947         (khtml::RenderImage::isImageButton):
948         New.
949         * kwq/KWQAccObject.mm:
950         (-[KWQAccObject isImageButton]):
951         (-[KWQAccObject actionElement]):
952         (-[KWQAccObject role]):
953         (-[KWQAccObject accessibilityActionNames]):
954         (-[KWQAccObject accessibilityPerformAction:]):
955         Represent RenderImageButton elements as buttons instead of images.
956
957 2005-01-31  David Harrison  <harrison@apple.com>
958
959         Prevent nil dereference in debug code.
960
961         * khtml/xml/dom_nodeimpl.cpp:
962         (NodeImpl::displayTree):
963         Stop when parent is 0, too.
964
965 2005-01-31  John Sullivan  <sullivan@apple.com>
966
967         Reviewed by Dave Hyatt.
968         
969         - fixed <rdar://problem/3949203> cannot tab to, within, or out of the RSS sidebar
970
971         * kwq/KWQSlider.mm:
972         (-[KWQSlider becomeFirstResponder]):
973         (-[KWQSlider resignFirstResponder]):
974         (-[KWQSlider nextKeyView]):
975         (-[KWQSlider previousKeyView]):
976         (-[KWQSlider canBecomeKeyView]):
977         (-[KWQSlider nextValidKeyView]):
978         (-[KWQSlider previousValidKeyView]):
979         Copied these methods from KWQButton. The lack of special handling for first-responder-ness
980         here was causing the focus to get "stuck" on the RSS page's slider widget. Added FIXME
981         about how it would be nice to share more of this code rather than replicating it in each
982         KWQ widget subclass.
983
984 2005-01-31  Darin Adler  <darin@apple.com>
985
986         Reviewed by Harrison.
987
988         - fixed <rdar://problem/3980066> Double-click on single character moves insertion point to previous line
989
990         * khtml/khtml_part.cpp:
991         (KHTMLPart::selectClosestWordFromMouseEvent): Set affinity too.
992         (KHTMLPart::handleMousePressEventTripleClick): Ditto.
993         (KHTMLPart::handleMouseMoveEventSelection): Ditto.
994         (KHTMLPart::khtmlMouseReleaseEvent): Ditto.
995
996         * khtml/editing/selection.cpp:
997         (khtml::Selection::modifyExtendingRightForward): Use endOfLine and endOfDocument.
998         (khtml::Selection::modifyMovingRightForward): Ditto.
999         (khtml::Selection::modifyExtendingLeftBackward): Use startOfLine and startOfDocument.
1000         (khtml::Selection::modifyMovingLeftBackward): Ditto.
1001         (khtml::Selection::validate): Rewrote the section that handles double-click. Two main fixes: 1) use isStartOfLine to
1002         check for another case where we want to select the word to the right, and 2) use isEndOfParagraph, which seems
1003         to work correctly in cases where isLastVisiblePositionInParagraph is giving the wrong answer. Also changed the line
1004         code to use startOfLine/endOfLine and the document code to use startOfDocument/endOfDocument.
1005
1006 2005-01-31  Darin Adler  <darin@apple.com>
1007
1008         Reviewed by Harrison.
1009
1010         - fixed <rdar://problem/3935275> unexpected quit scrolling over link; last.fm (works in IE and Firefox)
1011
1012         * kwq/WebCoreBridge.mm: (-[WebCoreBridge elementAtPoint:]): By using the correct document, fix the crash reported here.
1013         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.
1014
1015 2005-01-31  Darin Adler  <darin@apple.com>
1016
1017         Reviewed by Ken and Harrison.
1018
1019         - fixed <rdar://problem/3947901> REGRESSION (Mail): Pasting paragraph of rich text leaves insertion point before pasted text
1020         - fixed <rdar://problem/3949790> hitting return after underlined line results in too much or too little underlined
1021         - fixed <rdar://problem/3981759> nil-deref and crash when pasting just a paragraph break
1022         - fixed a couple problems I discovered while working with bug 3949790
1023
1024         * khtml/editing/htmlediting.cpp:
1025         (khtml::ApplyStyleCommand::applyInlineStyle): Pass StayInBlock to upstream. Without this, we end up going too far
1026         upstream in the test case in bug 3949790.
1027         (khtml::ApplyStyleCommand::removeInlineStyle): Pass StayInBlock to upstream and downstream. Same reason as above.
1028         (khtml::ReplaceSelectionCommand::doApply): Update endPos if inserting a new node and endPos is using that node's
1029         parent and an offset past the node being inserted. That change fixes a problem with the position of the insertion point
1030         after pasting into the top level of a document (from test cases in 3947901 and 3949790). When setting insertionPos, use
1031         code that works when lastNodeInserted is a block rather than a text node. That change fixes a problem where a newline is
1032         not added when pasting an entire paragraph into the end of a document (from test case in 3949790). Added nil check before
1033         checking if lastNodeInserted is a <br> element, which fixes the crash when pasting just a paragraph break.
1034
1035         * khtml/editing/visible_units.h: Filled out the set of calls to add some boolean checks for lines (needed for the
1036         bug fix), and calls for blocks (not yet implemented), and documents. The document checks may need refinement to
1037         properly handle documents with a mix of editable and non-editable content, but for now they just refactor code
1038         and make things a little clearer. Also removed the "include line break" parameter from endOfSentence.
1039         * khtml/editing/visible_units.cpp:
1040         (khtml::rootBoxForLine): Added.
1041         (khtml::startOfLine): Added. Algorithm taken from selectionForLine in selection.cpp.
1042         (khtml::endOfLine): Ditto.
1043         (khtml::inSameLine): Added.
1044         (khtml::isStartOfLine): Added.
1045         (khtml::isEndOfLine): Added.
1046         (khtml::endOfSentence): Removed "include line break" parameter.
1047         (khtml::inSameParagraph): Added a null check.
1048         (khtml::isStartOfParagraph): Ditto.
1049         (khtml::isEndOfParagraph): Ditto.
1050         (khtml::startOfBlock): Added.
1051         (khtml::endOfBlock): Added.
1052         (khtml::inSameBlock): Added.
1053         (khtml::isStartOfBlock): Added.
1054         (khtml::isEndOfBlock): Added.
1055         (khtml::startOfDocument): Added.
1056         (khtml::endOfDocument): Added.
1057         (khtml::inSameDocument): Added.
1058         (khtml::isStartOfDocument): Added.
1059         (khtml::isEndOfDocument): Added.
1060
1061 2005-01-30  Darin Adler  <darin@apple.com>
1062
1063         Reviewed by John.
1064
1065         - fixed <rdar://problem/3977000> form data set posted for <input type="image" ...> omits name/value pair
1066
1067         * khtml/html/html_formimpl.cpp:
1068         (DOM::HTMLInputElementImpl::appendFormData): Append a name/value pair for type IMAGE in addition to the X/Y
1069         coordinates.
1070
1071 2005-01-30  Darin Adler  <darin@apple.com>
1072
1073         Reviewed by John.
1074
1075         - fixed <rdar://problem/3974246> REGRESSION (125-180): popup menus are missing item text on Harmony Remote web site
1076
1077         * khtml/html/html_formimpl.cpp: (DOM::HTMLOptionElementImpl::text): Change this function to traverse the entire tree
1078         and gather all the text rather than just looking at immediate children.
1079
1080         * khtml/xml/dom_nodeimpl.h: Added const.
1081         * khtml/xml/dom_nodeimpl.cpp:
1082         (NodeImpl::traverseNextNode): Added const.
1083         (NodeImpl::traverseNextSibling): Ditto.
1084         (NodeImpl::traversePreviousNodePostOrder): Ditto.
1085         (NodeImpl::detach): Add a missing nil check.
1086
1087 2005-01-30  Darin Adler  <darin@apple.com>
1088
1089         Reviewed by John.
1090
1091         - fixed <rdar://problem/3864536> crash copying text from other apps and pasting in a sticky in dashboard
1092
1093         * khtml/editing/markup.cpp: (khtml::createFragmentFromText): Added missing ref/deref of newly created element.
1094
1095 2005-01-28  Darin Adler  <darin@apple.com>
1096
1097         * khtml/css/cssproperties.c: Regenerated with newer gperf.
1098
1099 2005-01-28  David Harrison  <harrison@apple.com>
1100
1101         Reviewed by John Sullivan.
1102
1103         <rdar://problem/3968144> AX need to be able to focus an AXLink by setting AXFocused to true
1104         
1105         * kwq/KWQAccObject.mm:
1106         (-[KWQAccObject accessibilityPerformAction:]):
1107         (-[KWQAccObject accessibilityIsAttributeSettable:]):
1108         Add AXFocused for AXLinks.
1109
1110 2005-01-28  David Harrison  <harrison@apple.com>
1111
1112         Reviewed by Darin.
1113
1114         <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch
1115
1116         Use AppKit SPI _accessibilityParentForSubview to return KWQAccObject parent of AppKit AX object.
1117         
1118         * kwq/KWQAccObject.mm:
1119         (-[KWQAccObject _accessibilityParentForSubview:]):
1120         New.
1121
1122 2005-01-27  Adele Amchan  <adele@apple.com>
1123
1124         fixed by Darin, reviewed by me.
1125
1126         <rdar://problem/3976314> REGRESSION (180-TOT): submitting password fields fail on Panther
1127
1128         * kwq/KWQTextField.mm: (-[KWQTextFieldController string]): on panther, the secure text field's editor 
1129         does not contain the real string, so now we just call stringValue on the field in that case.
1130
1131 2005-01-26  Maciej Stachowiak  <mjs@apple.com>
1132
1133         Reviewed by Darin, Hyatt and Ken.
1134
1135         <rdar://problem/3790449> REGRESSION (Mail): underline behavior is flaky because of how CSS handles text-decoration
1136         
1137         * khtml/css/css_computedstyle.cpp:
1138         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue): Add support
1139         for -khtml-text-decorations-in-effect property. This works like text-docration
1140         but follows proper inline semantics, that is, if a parent is causing text
1141         decoration then -khtml-text-decorations-in-effect on this element will reflect that.
1142         * khtml/css/cssproperties.in: Add -khtml-text-decorations-in-effect property.
1143         * khtml/css/cssproperties.h: regenerated
1144         * khtml/css/cssvalues.c: regenerated
1145         * khtml/css/cssparser.cpp: regenerated
1146         * khtml/css/cssproperties.c: regenerated
1147
1148         * khtml/css/css_valueimpl.h: Made copyPropertiesInSet public.
1149
1150         * khtml/editing/htmlediting.cpp:
1151         (khtml::StyleChange::init): Handle -khtml-text-decorations-in-effect
1152         specially, translate to text-decoration
1153         (khtml::ApplyStyleCommand::applyInlineStyle): Fix a comment.
1154         (khtml::ApplyStyleCommand::removeInlineStyle): Add new way of pushing down
1155         text-decoration styles around the edges of the selected range.
1156         (khtml::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode): Helper for this.
1157         (khtml::ApplyStyleCommand::pushDownTextDecorationStyleAtBoundaries): ditto
1158         (khtml::ApplyStyleCommand::nodeFullyUnselected): ditto
1159         (khtml::hasTextDecorationProperty): ditto
1160         (khtml::highestAncestorWithTextDecoration): ditto
1161         (khtml::ApplyStyleCommand::extractTextDecorationStyle): ditto
1162         (khtml::ApplyStyleCommand::extractAndNegateTextDecorationStyle): ditto
1163         (khtml::ApplyStyleCommand::applyTextDecorationStyle): ditto
1164         * khtml/editing/htmlediting.h: Prototype new methods.
1165         * khtml/editing/jsediting.cpp: Make underline execCommand use the new CSS property.
1166
1167         - as a necessary part of the fix, fixed the longstanding problem
1168         that mutating an element's inlineStyleDecl would not property
1169         update its style attribute. now it does.
1170         
1171         * khtml/css/css_valueimpl.cpp:
1172         (DOM::CSSMutableStyleDeclarationImpl::setChanged): If this is an inline style
1173         declaration, tell the element it's style attribute needs updating.
1174         * khtml/html/html_elementimpl.cpp:
1175         (HTMLElementImpl::invalidateStyleAttribute): New method, just calls down
1176         to the dom element.
1177         (HTMLElementImpl::updateStyleAttribute): Regenerate style attribute from
1178         inline style declaration.
1179         * khtml/html/html_elementimpl.h: Prototype new stuff.
1180         * khtml/xml/dom_elementimpl.cpp:
1181         (ElementImpl::ElementImpl): Initialize new attribute.
1182         (ElementImpl::updateStyleAttributeIfNeeded): New method to check if the style
1183         is dirty and this is an html element, and if so call the html element to
1184         regenerate the style attribute.
1185         (ElementImpl::attributes): update style if needed
1186         (ElementImpl::getAttribute): ditto
1187         (ElementImpl::hasAttributes): ditto
1188         (ElementImpl::dump): ditto
1189         (XMLElementImpl::cloneNode): ditto
1190         * khtml/xml/dom_elementimpl.h:
1191         (DOM::ElementImpl::isStyleAttributeValid): new method to manage style attr
1192         dirty bit
1193         (DOM::ElementImpl::setStyleAttributeValid): ditto
1194
1195         - added new layout tests for underlining:
1196         
1197         * layout-tests/editing/editing.js:
1198         * layout-tests/editing/style/remove-underline-across-paragraph-expected.txt: Added.
1199         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold-expected.txt: Added.
1200         * layout-tests/editing/style/remove-underline-across-paragraph-in-bold.html: Added.
1201         * layout-tests/editing/style/remove-underline-across-paragraph.html: Added.
1202         * layout-tests/editing/style/remove-underline-after-paragraph-expected.txt: Added.
1203         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold-expected.txt: Added.
1204         * layout-tests/editing/style/remove-underline-after-paragraph-in-bold.html: Added.
1205         * layout-tests/editing/style/remove-underline-after-paragraph.html: Added.
1206         * layout-tests/editing/style/remove-underline-expected.txt: Added.
1207         * layout-tests/editing/style/remove-underline-from-stylesheet-expected.txt: Added.
1208         * layout-tests/editing/style/remove-underline-from-stylesheet.html: Added.
1209         * layout-tests/editing/style/remove-underline-in-bold-expected.txt: Added.
1210         * layout-tests/editing/style/remove-underline-in-bold.html: Added.
1211         * layout-tests/editing/style/remove-underline.html: Added.
1212         * layout-tests/editing/style/underline-expected.txt: Added.
1213         * layout-tests/editing/style/underline.html: Added.
1214
1215 2005-01-27  David Hyatt  <hyatt@apple.com>
1216
1217         Fix for 3875199, search field needs to be able to  show a magnifying  glass without a dropdown menu.
1218         
1219         Reviewed by kocienda
1220
1221         * khtml/html/html_formimpl.cpp:
1222         (DOM::HTMLInputElementImpl::HTMLInputElementImpl):
1223         (DOM::HTMLInputElementImpl::parseHTMLAttribute):
1224         * kwq/KWQLineEdit.mm:
1225         (QLineEdit::setMaxResults):
1226
1227 2005-01-27  Ken Kocienda  <kocienda@apple.com>
1228
1229         Reviewed by Maciej
1230
1231         Fix for this bug:
1232         
1233         <rdar://problem/3973254> Deletions of ranges does not coalesce correctly with subsequent typing
1234
1235         * khtml/editing/htmlediting.cpp:
1236         (khtml::InsertTextCommand::deleteCharacter): Remove this dead code.
1237         (khtml::ReplaceSelectionCommand::editingAction): Moved this code to a better place in the file. 
1238         It was in with unrelated functions.
1239         (khtml::TypingCommand::TypingCommand): Reorganize initialization list so it is easier to read.
1240         (khtml::TypingCommand::issueCommandForDeleteKey): Remove dead code. Roll in remaining code into deleteKeyPressed.
1241         (khtml::TypingCommand::deleteKeyPressed): Add in support for carrying along smart delete flag.
1242         (khtml::TypingCommand::forwardDeleteKeyPressed): New function. Makes forward delete work like
1243         "regular" delete in terms of coalescing typing.
1244         (khtml::TypingCommand::doApply): Add case for ForwardDeleteKey.
1245         (khtml::TypingCommand::preservesTypingStyle): Ditto.
1246         * khtml/editing/htmlediting.h:
1247         (khtml::TypingCommand::): Add ForwardDeleteKey constant. Remove a couple declarations for now-dead code.
1248         (khtml::TypingCommand::smartDelete): New accessor.
1249         (khtml::TypingCommand::setSmartDelete): Ditto.
1250         * kwq/WebCoreBridge.h:
1251         * kwq/WebCoreBridge.mm:
1252         (-[WebCoreBridge deleteKeyPressedWithSmartDelete:]): Add smart delete flag.
1253         (-[WebCoreBridge forwardDeleteKeyPressedWithSmartDelete:]): New method.
1254         * khtml/editing/jsediting.cpp: Add supprt for ForwardDelete command
1255         * layout-tests/editing/editing.js: Ditto.
1256         * layout-tests/editing/deleting/delete-and-undo-expected.txt: Added.
1257         * layout-tests/editing/deleting/delete-and-undo.html: Added.
1258         * layout-tests/editing/deleting/forward-delete-expected.txt: Added.
1259         * layout-tests/editing/deleting/forward-delete.html: Added.
1260
1261 === Safari-181 ===
1262
1263 2005-01-27  David Harrison  <harrison@apple.com>
1264
1265         Reviewed by Ken.
1266
1267         <rdar://problem/3962214> AX: AXLeftLineTextMarkerRangeForTextMarker returns incorrect range
1268
1269         * kwq/KWQAccObject.mm:
1270         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
1271         Allowed for selection to end of line including the linebreak.
1272         
1273 2005-01-27  David Harrison  <harrison@apple.com>
1274
1275         Reviewed by Darin, Ken.
1276
1277         <rdar://problem/3964470> AX: Include attachments in AXAttributedStringForTextMarkerRange
1278
1279         * kwq/KWQAccObject.mm:
1280         (-[KWQAccObject isAttachment]):
1281         (-[KWQAccObject attachmentView]):
1282         (-[KWQAccObject role]):
1283         (-[KWQAccObject subrole]):
1284         (-[KWQAccObject roleDescription]):
1285         (-[KWQAccObject value]):
1286         (-[KWQAccObject title]):
1287         (-[KWQAccObject accessibilityDescription]):
1288         (-[KWQAccObject accessibilityIsIgnored]):
1289         (-[KWQAccObject accessibilityAttributeNames]):
1290         (-[KWQAccObject accessibilityAttributeValue:]):
1291         Make attachments accessible.
1292         
1293         (CreateCGColorIfDifferent):
1294         (AXAttributeStringSetColor):
1295         (AXAttributeStringSetNumber):
1296         (AXAttributeStringSetFont):
1297         (AXAttributeStringSetStyle):
1298         (AXAttributeStringSetElement):
1299         (AXLinkElementForNode):
1300         (AXAttributedStringAppendText):
1301         (AXAttributedStringAppendReplaced):
1302         (-[KWQAccObject doAXAttributedStringForTextMarkerRange:]):
1303         Add attachments and more text attributes to AXAttributedStringForTextMarkerRange.
1304
1305 2005-01-27  Darin Adler  <darin@apple.com>
1306
1307         Reviewed by John.
1308
1309         - fixed <rdar://problem/3807935> DOM CSS computed style line-height is wrong in two ways
1310
1311         * khtml/css/css_computedstyle.cpp: (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
1312         Use specified size rather than computed size when dealing with a percentage for line height.
1313
1314 2005-01-27  Darin Adler  <darin@apple.com>
1315
1316         Reviewed by John.
1317
1318         - fixed <rdar://problem/3971372> SWB: template function DOM_cast() won't compile with gcc 4.0
1319         - fixed other gcc 4.0 compiling problems Patrick Beard pointed out on the phone
1320
1321         * kwq/DOMInternal.h: (DOM_cast): Change the "failToCompile()" trick to use a dependent name.
1322         Nowadays, if a name is not dependent, it is checked at template definition time. But we want
1323         a failure only at template instantiation time.
1324
1325         * ForwardingHeaders/editing/text_granularity.h: Added. Needed but a bug in the 3.3 compiler made
1326         it compile anyway without this.
1327
1328         - other changes
1329
1330         * khtml/html/html_miscimpl.h: For clarity, mark these functions virtual too. They are automatically
1331         virtual because the base class ones are virtual, but it's ugly to leave it this way.
1332
1333 2005-01-26  Ken Kocienda  <kocienda@apple.com>
1334
1335         Reviewed by Hyatt
1336
1337         Fix for this bug:
1338         
1339         <rdar://problem/3971609> REGRESSION (Mail): up/down arrow navigation broken after rewrapping text by resizing window
1340         <rdar://problem/3975661> REGRESSION (Mail): left/right arrow navigation can place insertion point after last character on line
1341
1342         * khtml/editing/selection.cpp:
1343         (khtml::Selection::modifyAffinity): PARAGRAPH and LINE movements should not alter affinity. This was
1344         just a mistake before when it reset to upstream in some cases.
1345         * khtml/rendering/render_line.cpp:
1346         (khtml::RootInlineBox::closestLeafChildForXPos): Move this function down from InlineBox, and 
1347         rework the implementation. This fixes 3971609.
1348         * khtml/rendering/render_line.h:
1349         * khtml/rendering/render_text.cpp:
1350         (RenderText::caretRect): Rework the algorithm to fix 3975661. This regressed when we began placing
1351         the spaces on the end of lines in text boxes when lines wrap.
1352
1353 2005-01-26  Richard Williamson   <rjw@apple.com>
1354
1355         Fixed <rdar://problem/3972522> (179-180) 40% slowdown on iBench JavaScript test
1356
1357         I added a member variable to ObjectImp.  This changed it's size and consequently
1358         hampered the optimizations built into the garbage collector.  Objects no longer
1359         fit within the allocators cell size, and thus allocation fell back to a slower
1360         allocator.
1361
1362         As a result of this fix I also dramatically cleaned up how runtime objects are
1363         accessed.  The path mostly *removes* code.
1364         
1365         Reviewed by Chris.
1366
1367         * khtml/ecma/kjs_dom.cpp:
1368         (DOMDocumentProtoFunc::tryCall):
1369         (DOMElementProtoFunc::tryCall):
1370         (KJS::getRuntimeObject):
1371         * khtml/ecma/kjs_dom.h:
1372         * khtml/ecma/kjs_html.cpp:
1373         (KJS::HTMLDocument::tryGet):
1374         (KJS::HTMLElement::tryGet):
1375         (KJS::HTMLElement::implementsCall):
1376         (KJS::HTMLElement::call):
1377         (KJS::HTMLElement::tryPut):
1378         (KJS::HTMLCollection::tryGet):
1379         (KJS::HTMLCollection::getNamedItems):
1380         * khtml/ecma/kjs_html.h:
1381         * khtml/ecma/kjs_window.cpp:
1382         (Window::get):
1383
1384 2005-01-26  Richard Williamson   <rjw@apple.com>
1385
1386         Fixed <rdar://problem/3757712> REGRESSION (Mail): WebCore does not allow Devanagari ligature input
1387
1388         For now we are using ICU UBreakIterator to determine grapheme boundaries for
1389         cursor and deletion.  This does not match what Cocoa does exactly, but does match
1390         what Carbon does.  The areas are difference are obscure, but, according to
1391         Deborah Goldsmith, using the UBreakIterator is the reasonable approach.
1392
1393         Reviewed by Ken.
1394
1395         * khtml/rendering/render_text.cpp:
1396         (RenderText::previousOffset):
1397         (RenderText::nextOffset):
1398
1399 2005-01-25  David Harrison  <harrison@apple.com>
1400
1401         Reviewed by Maciej and Richard.
1402
1403         <rdar://problem/3963731> AX VO: Changing window sizes causes a crash using with Voice Over - KWQPtrDictImpl::clear
1404
1405         * khtml/html/html_miscimpl.cpp:
1406         (HTMLCollectionImpl::HTMLCollectionImpl):
1407         Ensure that isHTMLDocument before calling HTMLDocument-only method.
1408
1409 2005-01-25  Richard Williamson   <rjw@apple.com>
1410
1411         Part one of fix for <rdar://problem/3757712> REGRESSION (Mail): WebCore does not allow Devanagari ligature input
1412
1413         This patch changes the semantics of next() and previous() on
1414         VisiblePosition to move a grapheme (character cluster) at a
1415         time.  This means that cursor navigation with correctly move
1416         over an entire cluster.
1417
1418         However, the expected behavior for deleting a grapheme is to
1419         delete individual code points, thus decomposing the grapheme
1420         into it constituent parts.  That will be addressed in the next
1421         part of the fix.
1422
1423         Reviewed by Ken.
1424
1425         * khtml/editing/visible_position.cpp:
1426         (khtml::VisiblePosition::previousPosition):
1427         (khtml::VisiblePosition::nextPosition):
1428         * khtml/editing/visible_position.h:
1429         * khtml/rendering/render_object.cpp:
1430         (RenderObject::previousOffset):
1431         (RenderObject::nextOffset):
1432         * khtml/rendering/render_object.h:
1433         * khtml/rendering/render_text.cpp:
1434         (RenderText::previousOffset):
1435         (RenderText::nextOffset):
1436         (RenderText::findNextInlineTextBox):
1437         * khtml/rendering/render_text.h:
1438         * khtml/xml/dom_nodeimpl.cpp:
1439         (NodeImpl::previousOffset):
1440         (NodeImpl::nextOffset):
1441         * khtml/xml/dom_nodeimpl.h:
1442
1443 2005-01-25  David Harrison  <harrison@apple.com>
1444
1445         Reviewed by Maciej.
1446
1447         <rdar://problem/3973067> AXWebArea for http://apple.netscape.com/ has an empty AXLinkUIElements
1448
1449         * kwq/KWQAccObject.mm:
1450         (-[KWQAccObject accessibilityAttributeValue:]):
1451         Omit ignored AXLinks from AXLinkUIElements result
1452
1453 2005-01-25  Ken Kocienda  <kocienda@apple.com>
1454
1455         Reviewed by John
1456
1457         Fix for this bug:
1458         
1459         <rdar://problem/3972851> REGRESSION (179-180+): Repro crash in ApplyStyleCommand::cleanUpEmptyStyleSpans
1460
1461         * khtml/editing/htmlediting.cpp:
1462         (khtml::ApplyStyleCommand::cleanUpEmptyStyleSpans): Added two null checks.
1463
1464 2005-01-25  Ken Kocienda  <kocienda@apple.com>
1465
1466         Reviewed by John
1467
1468         Fix for this bug:
1469         
1470         <rdar://problem/3954710> Mail crashed while editing signatures - NodeImpl::isBlockFlow
1471
1472         The fix is more general than for this one bug, and may work to fix many crashers. The problem
1473         is that the ReplaceSelectionCommand never checked whether its starting selection is empty. If
1474         it is, then we need to bail before doing the work of the command, which we need to deref the
1475         start and end points of the selection in order to do its work. I think you can see the crash
1476         potential.
1477
1478         * khtml/editing/htmlediting.cpp:
1479         (khtml::ReplaceSelectionCommand::doApply): Assert selection is not empty.
1480         * kwq/WebCoreBridge.mm:
1481         (partHasSelection): New helper function to test that bridge has a part with a selection.
1482         
1483         Use new helper function to test part and selection; return from these function if this test fails.
1484         
1485         (-[WebCoreBridge rangeByExpandingSelectionWithGranularity:])
1486         (-[WebCoreBridge rangeByAlteringCurrentSelection:direction:granularity:])
1487         (-[WebCoreBridge alterCurrentSelection:direction:granularity:])
1488         (-[WebCoreBridge rangeByAlteringCurrentSelection:verticalDistance:])
1489         (-[WebCoreBridge alterCurrentSelection:verticalDistance:])
1490         (-[WebCoreBridge documentFragmentWithText:])
1491         (-[WebCoreBridge replaceSelectionWithFragment:selectReplacement:smartReplace:])
1492         (-[WebCoreBridge insertLineBreak])
1493         (-[WebCoreBridge insertParagraphSeparator])
1494         (-[WebCoreBridge insertParagraphSeparatorInQuotedContent])
1495         (-[WebCoreBridge insertText:selectInsertedText:])
1496         (-[WebCoreBridge deleteSelectionWithSmartDelete:])
1497         (-[WebCoreBridge ensureSelectionVisible])
1498
1499 2005-01-24  Kevin Decker  <kdecker@apple.com>
1500
1501         Reviewed by Darin.
1502
1503         Fixed <rdar://problem/3932374> REGRESSION: 'ReferenceError - Can't find variable' JavaScript error at webxpress.fidelity.com
1504
1505         * khtml/html/html_miscimpl.h: Missing virtual identifiers for namedItem() and nextNamedItem() exposed a flaw that prevented finding variables in form [HTMLFormCollectionImpl] scopes.
1506         
1507
1508 2005-01-24  Vicki Murley <vicki@apple.com>
1509
1510         Reviewed by kocienda.
1511
1512         - fix <rdar://problem/3810661> computed style not handled for Apple extensions
1513  
1514         * khtml/css/css_computedstyle.cpp: (DOM::):
1515         (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue): add -apple-line-clamp and -apple-text-size-adjust
1516
1517 2005-01-24  Darin Adler  <darin@apple.com>
1518
1519         Reviewed by Kevin.
1520
1521         - fixed <rdar://problem/3969884> REGRESSION (179-180): Typing password not echoed as "bullets" at paypal.com when field is first focused
1522
1523         * kwq/KWQTextField.mm: (-[KWQTextFieldController initWithTextField:QLineEdit:]):
1524         Sizing up the form editor, which fixes things for normal fields and search fields,
1525         screws things up for password fields. Eventually, I'll need to figure out why this is
1526         and file a bug so that the AppKit team fixes it. In the mean time, just check for the
1527         case of the secure text field, and don't size up in that case.
1528
1529 2005-01-24  Ken Kocienda  <kocienda@apple.com>
1530
1531         Reviewed by Hyatt
1532
1533         Fix for this bug:
1534         
1535         <rdar://problem/3963560> 8A354: Inserting Japanese text to the line head causes line break
1536
1537         * khtml/editing/htmlediting.cpp:
1538         (khtml::ReplaceSelectionCommand::doApply): Add one more case where we merge content into the
1539         existing line. This covers the situation see using the steps to reproduce this bug.
1540
1541 2005-01-21  Maciej Stachowiak  <mjs@apple.com>
1542
1543         Reviewed by Darin.
1544
1545         <rdar://problem/3967572> Editing should split elements before removing style
1546         
1547         * khtml/editing/htmlediting.cpp:
1548         (khtml::CompositeEditCommand::splitElement):
1549         (khtml::CompositeEditCommand::mergeIdenticalElements):
1550         (khtml::CompositeEditCommand::wrapContentsInDummySpan):
1551         (khtml::CompositeEditCommand::splitTextNodeContainingElement):
1552         (khtml::ApplyStyleCommand::applyInlineStyle):
1553         (khtml::ApplyStyleCommand::splitTextAtStartIfNeeded):
1554         (khtml::ApplyStyleCommand::splitTextAtEndIfNeeded):
1555         (khtml::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
1556         (khtml::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
1557         (khtml::areIdenticalElements):
1558         (khtml::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
1559         (khtml::ApplyStyleCommand::mergeEndWithNextIfIdentical):
1560         (khtml::ApplyStyleCommand::cleanUpEmptyStyleSpans):
1561         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded):
1562         (khtml::InsertParagraphSeparatorCommand::doApply):
1563         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply):
1564         (khtml::InsertTextCommand::prepareForTextInsertion):
1565         (khtml::SplitTextNodeCommand::doUnapply):
1566         (khtml::SplitElementCommand::SplitElementCommand):
1567         (khtml::SplitElementCommand::~SplitElementCommand):
1568         (khtml::SplitElementCommand::doApply):
1569         (khtml::SplitElementCommand::doUnapply):
1570         (khtml::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand):
1571         (khtml::MergeIdenticalElementsCommand::~MergeIdenticalElementsCommand):
1572         (khtml::MergeIdenticalElementsCommand::doApply):
1573         (khtml::MergeIdenticalElementsCommand::doUnapply):
1574         (khtml::WrapContentsInDummySpanCommand::WrapContentsInDummySpanCommand):
1575         (khtml::WrapContentsInDummySpanCommand::~WrapContentsInDummySpanCommand):
1576         (khtml::WrapContentsInDummySpanCommand::doApply):
1577         (khtml::WrapContentsInDummySpanCommand::doUnapply):
1578         (khtml::SplitTextNodeContainingElementCommand::SplitTextNodeContainingElementCommand):
1579         (khtml::SplitTextNodeContainingElementCommand::~SplitTextNodeContainingElementCommand):
1580         (khtml::SplitTextNodeContainingElementCommand::doApply):
1581         * khtml/editing/htmlediting.h:
1582
1583         New layout test that shows the side benefit of this.
1584         
1585         * layout-tests/editing/style/unbold-in-bold-expected.txt: Added.
1586         * layout-tests/editing/style/unbold-in-bold.html: Added.
1587
1588 2005-01-24  Darin Adler  <darin@apple.com>
1589
1590         Reviewed by John.
1591
1592         - fixed <rdar://problem/3933435> -[DOMRange cloneContents] sometimes alters the original DOMRange
1593
1594         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::processContents): Fixed code that was collapsing
1595         the range after processing the contents. That's right for extract and delete, but not clone.
1596
1597         - fixed <rdar://problem/3714184> inline input works incorrectly when I type Korean slowly in textfield in form on www.google.co.kr
1598         - fixed <rdar://problem/3193848> Can't enter SSN to sign up for Chase visa online account (changing focus inside key press handler)
1599         - 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>
1600
1601         * kwq/KWQLineEdit.mm:
1602         (QLineEdit::text): Changed to call a new string method on the controller instead of calling
1603         stringValue, since stringValue has a bad side effect of ending inline input.
1604         (QLineEdit::selectAll): Changed to only call selectText: when the field is already selected.
1605         When you are giving the field focus, it automatically gets all selected, and this change
1606         is required in the case where we defer the focus change.
1607
1608         * kwq/KWQTextField.h: Added a new string method to the controller.
1609         * kwq/KWQTextField.mm:
1610         (-[KWQTextFieldController setMaximumLength:]): Call the new string method instead of using stringValue.
1611         (-[KWQTextFieldController controlTextDidChange:]): Removed the code to truncate at the first CR or LF.
1612         That's now handled in the shouldChangeTextInRange method instead.
1613         (-[KWQTextFieldController textView:shouldHandleEvent:]): Add new logic to defer responder changes until
1614         after the event is handled. This makes sure the key gets into the field that's already handling it at
1615         rather than ending up in the newly-focused field if the key press handler focuses a different element.
1616         (-[KWQTextFieldController textView:didHandleEvent:]): Turn off deferral here, now that the key press
1617         has been handled.
1618         (-[KWQTextFieldController string]): Added. Calls stringValue only if there's no editor. If there is
1619         an editor, calls string on that instead.
1620         (-[KWQTextFieldController textView:shouldChangeTextInRange:replacementString:]): Added. Called by
1621         the three field subclasses. Truncates incoming strings at the first CR or LF character. This works
1622         properly with Undo, and the old technique did not.
1623         (-[KWQTextFieldController preprocessString:]): Added. Helper used for all the setStringValue methods
1624         so they all truncate at the first CR or LF as well as truncating to the appropriate length.
1625         (-[KWQTextField setStringValue:]): Changed to call the controller.
1626         (-[KWQTextField textView:shouldChangeTextInRange:replacementString:]): Added. Calls the controller.
1627         (-[KWQSecureTextField setStringValue:]): More of the same.
1628         (-[KWQSecureTextField textView:shouldChangeTextInRange:replacementString:]): Ditto.
1629         (-[KWQSearchField setStringValue:]): Ditto.
1630         (-[KWQSearchField textView:shouldChangeTextInRange:replacementString:]): Ditto.
1631
1632         * kwq/KWQWidget.h: Added the new setDeferFirstResponderChanges function.
1633         * kwq/KWQWidget.mm:
1634         (QWidget::~QWidget): Clear out the deferredFirstResponder global just in case we are destroyed
1635         while we "have the ball".
1636         (QWidget::hasFocus): If we are in the deferred mode, use the global to decide who to say is focused.
1637         (QWidget::setFocus): If we are in the deferred mode, set the global instead of making something be
1638         the first responder.
1639         (QWidget::setDeferFirstResponderChanges): Set the boolean. If the boolean is being cleared, then
1640         get the deferred first responder and call setFocus on it again, which will do the work we didn't
1641         want to do earlier.
1642
1643 2005-01-24  Ken Kocienda  <kocienda@apple.com>
1644
1645         Reviewed by John
1646
1647         Fix for this bug:
1648         
1649         <rdar://problem/3964350> Deleting all content and typing in a message gets one letter, then beeps
1650
1651         This is a problem with the way we turn key events, when a user starts typing, into editing commands. 
1652         Right now, that initial delete key in an empty window is turned into an editing command, and much 
1653         editing code runs that need not run. What's more, this is confusing the selection machinery. The
1654         solution is to detect the "delete in an empty window" case and don't turn this into an editing
1655         command at all.
1656
1657         * khtml/editing/htmlediting.cpp:
1658         (khtml::TypingCommand::deleteKeyPressed)
1659
1660 2005-01-23  Adele Amchan  <adele@apple.com>
1661
1662         Fixed <rdar://problem/3964286> REGRESSION (178-179): menus and "go to old site" link at Ameritrade's new site don't work
1663
1664         Removed check for document from checkCompleted.  In this case, WebCore never knew that a WebImageView was complete because 
1665         it fell into this document check case in checkCompleted.  
1666         Added check for document to tokenizerProcessedData (see <rdar://problem/3807144>)
1667
1668         Reviewed by Darin.
1669
1670         * khtml/khtml_part.cpp:
1671         (KHTMLPart::stop):
1672         (KHTMLPart::checkCompleted):
1673         * khtml/khtml_part.h:
1674         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::tokenizerProcessedData):
1675
1676 2005-01-21  Richard Williamson   <rjw@apple.com>
1677
1678         Fixed <rdar://problem/3759399> Javascript / Liveconnect problems ((event handler):Undefined value)
1679
1680         Java applets specified with <object> or <embed> weren't scriptable.  Now they are.
1681
1682         Reviewed by Chris.
1683
1684         * khtml/html/html_objectimpl.cpp:
1685         (HTMLEmbedElementImpl::getEmbedInstance):
1686         (HTMLObjectElementImpl::getObjectInstance):
1687
1688 2005-01-21  Ken Kocienda  <kocienda@apple.com>
1689
1690         Reviewed by John
1691
1692         Fix for this bug:
1693         
1694         <rdar://problem/3959464> REGRESSION (Mail): Insertion point goes back to beginning of document after deleting
1695
1696         * khtml/editing/htmlediting.cpp:
1697         (khtml::DeleteSelectionCommand::handleGeneralDelete): Add special case to handle retaining a fully-selected block.
1698         This fixes the bug.
1699         * layout-tests/editing/deleting/delete-3959464-fix-expected.txt: Added.
1700         * layout-tests/editing/deleting/delete-3959464-fix.html: Added.
1701
1702 2005-01-21  Richard Williamson   <rjw@apple.com>
1703
1704         Fixed <rdar://problem/3966998> REGRESSION(179-TOT) clicking on gmail message brings me to blank screen
1705
1706         getElementById() sometimes returns Undefined() instead of Null().
1707
1708         Reviewed by Hyatt.
1709
1710         * khtml/ecma/kjs_dom.cpp:
1711         (DOMDocumentProtoFunc::tryCall):
1712
1713 2005-01-21  David Hyatt  <hyatt@apple.com>
1714
1715         Fix for 3773809, make sure that overflow regions never end up at an invalid scroll offset because of a layout change.
1716         
1717         Reviewed by kocienda
1718
1719         * khtml/rendering/render_layer.cpp:
1720         (RenderLayer::updateScrollInfoAfterLayout):
1721
1722 2005-01-21  David Hyatt  <hyatt@apple.com>
1723
1724         Fix for 3966349, hang loading page.  Make sure that loops using popOneBlock properly check for a null
1725         blockStack to avoid an infinite loop.
1726         
1727         Reviewed by kocienda
1728
1729         * khtml/html/htmlparser.cpp:
1730         (KHTMLParser::parseToken):
1731         (KHTMLParser::insertNode):
1732         (KHTMLParser::popInlineBlocks):
1733
1734 2005-01-21  Ken Kocienda  <kocienda@apple.com>
1735
1736         Reviewed by John
1737
1738         Fix for this bug:
1739         
1740         <rdar://problem/3957204> Mail crashed when sending a message in ~InsertParagraphSeparatorInQuotedContentCommand
1741
1742         * khtml/editing/htmlediting.cpp:
1743         (khtml::InsertParagraphSeparatorInQuotedContentCommand::InsertParagraphSeparatorInQuotedContentCommand):
1744         InsertParagraphSeparatorInQuotedContentCommand has this member variable: DOM::ElementImpl *m_breakNode;
1745         I failed to initialize this variable to null in the constructor, and there is an uncommonly-traveled 
1746         code path which does not set this variable to something good. In the destructor, we check for null, 
1747         and deref if non-null. Obvious "BOOM" potential. Fixed.
1748
1749 2005-01-21  Ken Kocienda  <kocienda@apple.com>
1750
1751         Reviewed by John
1752
1753         Fix for this bug:
1754         
1755         <rdar://problem/3966311> REGRESSION (Mail): Hitting return makes space character disappear
1756
1757         * khtml/editing/htmlediting.cpp:
1758         (khtml::InsertParagraphSeparatorCommand::doApply): When writing the code to insert a block
1759         in response to the return key, I did not write code to cover the case described in the bug.
1760         Now I have.
1761         * layout-tests/editing/inserting/insert-div-025-expected.txt: Added.
1762         * layout-tests/editing/inserting/insert-div-025.html: Added.
1763
1764 2005-01-20  Maciej Stachowiak  <mjs@apple.com>
1765
1766         Reviewed by Ken.
1767
1768         <rdar://problem/3965196> security fix for javascript: exploit missed one case (already fixed in updates)
1769         
1770         * khtml/ecma/kjs_window.cpp:
1771         (WindowFunc::tryCall): correct mistake in earlier fix for the following bug, caught by Adele:
1772
1773 2005-01-20  Maciej Stachowiak  <mjs@apple.com>
1774
1775         Reviewed by Ken.
1776
1777         <rdar://problem/3965466> editing needs to insert text before applying typing style
1778         
1779         * khtml/editing/htmlediting.cpp:
1780         (khtml::ApplyStyleCommand::addInlineStyleIfNeeded): Remove a FIXME comment.
1781         (khtml::InsertLineBreakCommand::doApply): Apply style to the BR
1782         node after inserting it.
1783         (khtml::InsertTextCommand::prepareForTextInsertion): Don't try to
1784         apply style to any new nodes created before inserting.
1785         (khtml::InsertTextCommand::input): Apply style to the inserted range
1786         after doing the text insert.
1787         * khtml/editing/htmlediting.h:
1788
1789         This change leads to improved results on one of the layout tests:
1790         
1791         * layout-tests/editing/inserting/insert-div-024-expected.txt:
1792
1793 === Safari-180 ===
1794
1795 2005-01-20  Ken Kocienda  <kocienda@apple.com>
1796
1797         Reviewed by John
1798
1799         Fix for this bug:
1800         
1801         <rdar://problem/3964646> REGRESSION (179-180): Typing space at end of line makes following paragraph disappear
1802
1803         * khtml/editing/htmlediting.cpp:
1804         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Recent change to block placeholder removal code 
1805         caused this regression. The code became too aggressive in removing block placeholders, and would remove them
1806         from blocks other than the block containing the selection.
1807         * layout-tests/editing/inserting/insert-div-023-expected.txt: This file had a spurious BR element in it that
1808         I did not notice earlier.
1809         * layout-tests/editing/inserting/insert-div-024-expected.txt: Ditto.
1810
1811 2005-01-20  David Hyatt  <hyatt@apple.com>
1812
1813         Fix for oddness on albertsons.com.  Make sure not to crash when setting/removing style properties on a node
1814         with no document.  The bug # is 3813900.
1815         
1816         Reviewed by john
1817
1818 2005-01-20  David Harrison  <harrison@apple.com>
1819
1820         Reviewed by Darin.
1821
1822         PARTIAL fix for following bug.  Create attributed string with fonts and links.  Still need to add attachments.
1823         <rdar://problem/3942606> AX: Support kAXAttributedStringForTextMarkerRangeParameterizedAttribute
1824         
1825         * kwq/KWQAccObject.mm:
1826         (-[KWQAccObject textUnderElement]):
1827         Touched up previous checkin to match code review comments.
1828         
1829         (-[KWQAccObject value]):
1830         Use plainText for this one instead of obsolete attributedString.
1831         
1832         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
1833         Advertise AXAttributedStringForTextMarkerRange.
1834         
1835         (AXAttributeStringAddFont):
1836         (AXAttributeStringAddElement):
1837         (-[KWQAccObject linkUIElementForNode:]):
1838         (-[KWQAccObject _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
1839         (-[KWQAccObject accessibilityAttributedStringForRange:]):
1840         New routines to support AXAttributedStringForTextMarkerRange.
1841         
1842         (-[KWQAccObject doAXAttributedStringForTextMarkerRange:]):
1843         Use new routines instead of obsolete attributedString.
1844
1845 2005-01-20  David Harrison  <harrison@apple.com>
1846
1847         Reviewed by Darin.
1848
1849         <rdar://problem/3960196> AX Crash in DOM::Range::setStartBefore
1850
1851         * khtml/xml/dom_docimpl.cpp:
1852         (DocumentImpl::getAccObjectCache):
1853         Adjust when detecting cache in non-top level WebArea.
1854         * kwq/KWQAccObject.mm:
1855         (-[KWQAccObject textUnderElement]):
1856         (-[KWQAccObject accessibilityAttributeValue:]):
1857         Make sure the elements document is the current one for the part.
1858
1859 2005-01-20  Darin Adler  <darin@apple.com>
1860
1861         Reviewed by John.
1862
1863         - fixed <rdar://problem/3922980> Mail not crashing, just quitting itself suddenly in -[WebHTMLView(MailExtras) findString:options:]
1864
1865         * khtml/dom/dom2_range.cpp: (DOM::operator==): Handle null and detached ranges without raising exceptions.
1866         The uncaught exception would make the entire program terminate.
1867
1868         - fixed <rdar://problem/3885729> attempting to modify a computed style does nothing, but should raise a DOM exception
1869
1870         * kwq/DOM-CSS.mm: (-[DOMCSSStyleDeclaration setProperty:::]): Uncommented this code which I had to disable
1871         back in November because Mail was stumbling over it.
1872
1873         - fixed <rdar://problem/3943049> focus() called during onload handler results in square text field on <input type=search>        
1874
1875         * kwq/KWQLineEdit.mm: (QLineEdit::baselinePosition): Change computation so it will work even for fields
1876         that position their text in a way that depends on vertical size. In the case of a search field, the text
1877         is centered, so the old logic was broken.
1878         * kwq/KWQTextField.mm: (-[KWQTextFieldController initWithTextField:QLineEdit:]): Set the frame size to
1879         something large enough to accomodate the field editor. If we start the frame at size 0,0 we run into
1880         AppKit trouble when it insets the frame to figure out the frame for the field editor. In the case of this
1881         bug this happens because we become first responder before being sized and positioned by the HTML layout code.
1882
1883         - improved debugging output when using "po" from gdb with Objective-C DOM
1884
1885         * kwq/DOM.mm:
1886         (-[DOMNode description]): Added. Includes node name ("<tr>") and node value (e.g., string for text node).
1887         (-[DOMRange description]): Tweaked format.
1888
1889 2005-01-19  Richard Williamson   <rjw@apple.com>
1890
1891         After further discussion with Real we have decided to NOT include the
1892         additional CLSID for the real plugin.  See 3958601.
1893
1894         Reviewed by Darin.
1895
1896         * khtml/rendering/render_frames.cpp:
1897         (RenderPartObject::updateWidget):
1898
1899 2005-01-19  David Harrison  <harrison@apple.com>
1900
1901         Reviewed by Maciej.
1902
1903         <rdar://problem/3949429> AX: word marker routines returns incorrect data for empty line
1904
1905         Previous checkin for this bug was missing some of the patch.  Editing snafu with multiple changes in tree.
1906         
1907         * kwq/KWQAccObject.mm:
1908         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
1909         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
1910         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
1911         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
1912         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
1913         (-[KWQAccObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
1914         (-[KWQAccObject doAXPreviousParagraphStartTextMarkerForTextMarker:]):
1915
1916 2005-01-19  Ken Kocienda  <kocienda@apple.com>
1917
1918         Reviewed by John
1919
1920         * khtml/editing/htmlediting.cpp:
1921         (khtml::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Small, cosmetic change John and I decided
1922         to do on my last checkin, but I forgot to do before landing.
1923
1924 2005-01-19  Ken Kocienda  <kocienda@apple.com>
1925
1926         Reviewed by John
1927
1928         Fix for this bug:
1929         
1930         <rdar://problem/3959727> REGRESSION (Mail): Style not preserved on blank lines
1931
1932         * khtml/editing/htmlediting.cpp:
1933         (khtml::CompositeEditCommand::applyStyle):
1934         (khtml::CompositeEditCommand::insertBlockPlaceholder): New function that unconditionally adds a block placeholder.
1935         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Now returns bool based on whether
1936         placeholder was added or not.
1937         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Now searches all the descendents of a block
1938         looking for a placeholder. The old code, which just looked at the last child of a node, started missing
1939         once block placeholders became styled (which started happening with this patch).
1940         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Now handles applying typing style
1941         to a block placeholder at call time, rather than setting the typing style as a latent style that
1942         might be applied later. This is an important part of the bug fix.
1943         (khtml::DeleteSelectionCommand::doApply): Now uses bool return value from insertBlockPlaceholderIfNeeded()
1944         and passes it along to calculateStyleBeforeInsertion, so the case where a block placeholder needs to
1945         be styled can be detected.
1946         (khtml::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): Changed the way this class
1947         managed style. Before it would calculate and set typing style for the block added. This is not
1948         sufficient. Added blocks need to styled immediately. Some name changes to instance variables in 
1949         this class due to the change to accommodate this change.
1950         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): Name changes, as above.
1951         (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Ditto.
1952         (khtml::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Ditto.
1953         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
1954         (khtml::ReplaceSelectionCommand::doApply): Improve check for testing when a placeholder
1955         block can be removed in its entirety after the insertion.
1956         * khtml/editing/htmlediting.h: Update header accordingly.
1957         * khtml/khtml_part.cpp:
1958         (KHTMLPart::selectionComputedStyle): Move position for computed style check downstream before
1959         doing check when the position is in an empty block (this makes sure any style on any block
1960         placeholder is accounted for).
1961
1962         New layout tests to check bug fix.
1963
1964         * layout-tests/editing/style/block-style-004-expected.txt: Added.
1965         * layout-tests/editing/style/block-style-004.html: Added.
1966         * layout-tests/editing/style/block-style-005-expected.txt: Added.
1967         * layout-tests/editing/style/block-style-005.html: Added.
1968         * layout-tests/editing/style/block-style-006-expected.txt: Added.
1969         * layout-tests/editing/style/block-style-006.html: Added.
1970
1971         Results updated to reflect new block placeholder code.
1972
1973         * layout-tests/editing/inserting/insert-div-004-expected.txt 
1974         * layout-tests/editing/inserting/insert-div-005-expected.txt
1975         * layout-tests/editing/inserting/insert-div-006-expected.txt
1976         * layout-tests/editing/inserting/insert-div-008-expected.txt
1977         * layout-tests/editing/inserting/insert-div-011-expected.txt
1978         * layout-tests/editing/inserting/insert-div-012-expected.txt
1979         * layout-tests/editing/inserting/insert-div-013-expected.txt
1980         * layout-tests/editing/inserting/insert-div-014-expected.txt
1981         * layout-tests/editing/inserting/insert-div-015-expected.txt
1982         * layout-tests/editing/inserting/insert-div-016-expected.txt
1983         * layout-tests/editing/inserting/insert-div-017-expected.txt
1984         * layout-tests/editing/inserting/insert-div-018-expected.txt
1985         * layout-tests/editing/inserting/insert-div-019-expected.txt
1986         * layout-tests/editing/inserting/insert-div-021-expected.txt
1987         * layout-tests/editing/inserting/insert-div-022-expected.txt
1988         * layout-tests/editing/inserting/insert-div-023-expected.txt
1989         * layout-tests/editing/inserting/insert-div-024-expected.txt
1990
1991 2005-01-19  David Hyatt  <hyatt@apple.com>
1992
1993         Dont null-check the renderer before submitting, since a script can set it to display:none and still expect the
1994         submission to occur.  Fixes bug #3477282.
1995         
1996         Reviewed by kdecker
1997
1998         (DOM::HTMLInputElementImpl::defaultEventHandler):
1999
2000 2005-01-18  Richard Williamson   <rjw@apple.com>
2001         
2002         Fixed several issues all arising from analysis of plugin detection code at ifilm.com:
2003
2004         Fixed <rdar://problem/3958592> can't script plug-ins if plug-in is invoked with <object> element instead of <embed>
2005         Fixed <rdar://problem/3958597> <object> elements with IDs do not show up as named properties of the document
2006         Fixed <rdar://problem/3960973> DOM objects for plugin elements are not accessible
2007         Fixed <rdar://problem/3958601> need an additional class ID in WebCore for the Real plug-in
2008
2009         We now support accessing scriptable plugin objects that are specified with <applet>, <embed>, or <object>
2010         tags.  Also, if any of these elements are named they can be accessed from the document or window objects.
2011         Finally, DOM methods are properties will be forwarded appropriately for the plugin's root scriptable object.
2012
2013         Reviewed by Chris.
2014
2015         * khtml/dom/html_document.cpp:
2016         (HTMLDocument::objects):
2017         * khtml/dom/html_document.h:
2018         * khtml/ecma/kjs_dom.cpp:
2019         (DOMDocumentProtoFunc::tryCall):
2020         (DOMElementProtoFunc::tryCall):
2021         (KJS::getRuntimeObject):
2022         * khtml/ecma/kjs_dom.h:
2023         * khtml/ecma/kjs_html.cpp:
2024         (KJS::HTMLDocument::tryGet):
2025         (KJS::HTMLElement::tryGet):
2026         (KJS::HTMLCollection::tryGet):
2027         (KJS::HTMLCollection::getNamedItems):
2028         * khtml/ecma/kjs_window.cpp:
2029         (Window::get):
2030         * khtml/html/html_miscimpl.cpp:
2031         (HTMLCollectionImpl::traverseNextItem):
2032         * khtml/html/html_miscimpl.h:
2033         (DOM::HTMLCollectionImpl::):
2034         * khtml/html/html_objectimpl.cpp:
2035         (HTMLAppletElementImpl::getAppletInstance):
2036         (HTMLObjectElementImpl::HTMLObjectElementImpl):
2037         (HTMLObjectElementImpl::getObjectInstance):
2038         * khtml/html/html_objectimpl.h:
2039         * khtml/rendering/render_frames.cpp:
2040         (RenderPartObject::updateWidget):
2041         * kwq/KWQKHTMLPart.h:
2042         * kwq/KWQKHTMLPart.mm:
2043         (KWQKHTMLPart::getObjectInstanceForView):
2044
2045 2005-01-18  David Hyatt  <hyatt@apple.com>
2046
2047         Fix for 3948123, rolling over link erases nearby text.  The repaint rect check for lines was wrong whenever
2048         two lines overlapped.
2049         
2050         Reviewed by kocienda
2051
2052         * khtml/rendering/render_flow.cpp:
2053         (RenderFlow::paintLines):
2054
2055 2005-01-18  Ken Kocienda  <kocienda@apple.com>
2056
2057         Reviewed by Hyatt
2058         
2059         Fix for this bug:
2060         
2061         <rdar://problem/3960116> Focus rings paint incorrectly for contenteditable blocks in web pages
2062
2063         * khtml/rendering/render_flow.cpp:
2064         (RenderFlow::addFocusRingRects): Fix painting of focus rings so that ring only paints around
2065         outermost contenteditable elements.
2066
2067 2005-01-18  David Harrison  <harrison@apple.com>
2068
2069         Reviewed by Darin.
2070
2071         <rdar://problem/3959668> accessibilityFocusedUIElement sometimes returns an ignored element; it must not
2072
2073         * kwq/KWQAccObject.mm:
2074         (-[KWQAccObject accessibilityFocusedUIElement]):
2075         Return parentObjectUnignored if focused object is ignored.
2076
2077 2005-01-18  Ken Kocienda  <kocienda@apple.com>
2078
2079         Reviewed by John
2080
2081         Fix for this bug:
2082         
2083         <rdar://problem/3952877> REGRESSION (Mail): Command-left/right-arrows don't work with file attachment
2084
2085         * khtml/editing/selection.cpp:
2086         (khtml::nodeForInlineBox): New helper function used in reimplementation of function below.
2087         (khtml::selectionForLine): Reimplemented using line box smarts. I originally wrote this code when
2088         I had a less than full understanding of line layout. I can do better now, and my new version no
2089         longer fails to notice attachments when doing the kind of navigation mentioned in the bug.
2090
2091 2005-01-17  David Harrison  <harrison@apple.com>
2092
2093         Reviewed by John Sullivan.
2094
2095         <rdar://problem/3949429> AX: word marker routines returns incorrect data for empty line
2096         <rdar://problem/3949848> AX: paragraph marker routines do not work when given a paragraph end marker
2097
2098         Also fixed sentence support in the same way.
2099         
2100         * kwq/KWQAccObject.mm:
2101         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
2102         (-[KWQAccObject doAXNextSentenceEndTextMarkerForTextMarker:]):
2103         (-[KWQAccObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
2104         (-[KWQAccObject doAXNextParagraphEndTextMarkerForTextMarker:]):
2105         (-[KWQAccObject doAXPreviousParagraphStartTextMarkerForTextMarker:]):
2106         Move one position in desired direction before calling visible_units.cpp code.
2107
2108 2005-01-17  David Harrison  <harrison@apple.com>
2109
2110         Updated expected test results.
2111         
2112         <rdar://problem/3945880> line-ending space seems not to be present
2113
2114         * layout-tests/editing/deleting/delete-ws-fixup-001-expected.txt:
2115         * layout-tests/editing/deleting/delete-ws-fixup-002-expected.txt:
2116         * layout-tests/editing/inserting/insert-div-020-expected.txt:
2117         * layout-tests/editing/inserting/insert-div-021-expected.txt:
2118         * layout-tests/editing/inserting/insert-div-022-expected.txt:
2119         * layout-tests/editing/inserting/insert-div-023-expected.txt:
2120         * layout-tests/editing/inserting/insert-div-024-expected.txt:
2121
2122 2005-01-17  David Harrison  <harrison@apple.com>
2123
2124         Reviewed by Dave Hyatt (bidi.cpp) and Darin Adler (selection.cpp).
2125
2126         <rdar://problem/3945880> line-ending space seems not to be present
2127
2128         * khtml/editing/selection.cpp:
2129         (khtml::Selection::validate):
2130         Extend AFTER_WHITE_SPACE code to support white spac in the middle of paragraphs, not just the end.
2131         * khtml/rendering/bidi.cpp:
2132         (khtml::RenderBlock::findNextLineBreak):
2133         Pick left/rightness of word selection based on being at the end of paragraph (i.e. after a hard line break).
2134
2135 2005-01-17  Darin Adler  <darin@apple.com>
2136
2137         Reviewed by John Louch.
2138
2139         - fixed <rdar://problem/3958503> need screenX and screenY to use WebKit windowFrame delegate
2140
2141         * khtml/ecma/kjs_window.cpp: (Window::get): Change screenX and screenY to use frameGeometry instead
2142         of using mapToGlobal and screen in a complicated way.
2143         * kwq/KWQKHTMLView.mm: Removed unused mapToGlobal function.
2144         * kwq/KWQWindowWidget.h: Ditto.
2145         * kwq/KWQWindowWidget.mm: Ditto.
2146
2147 2005-01-17  David Hyatt  <hyatt@apple.com>
2148
2149         Fix a screwup in rightmost/lowets position computation.  3955207.  Make sure floats with layers are still checked.
2150
2151         Reviewed by kocienda
2152         
2153         * khtml/rendering/render_block.cpp
2154
2155 2005-01-17  Ken Kocienda  <kocienda@apple.com>
2156
2157         Reviewed by John
2158
2159         <rdar://problem/3953366> Problems with typing attributes in HTML compose
2160
2161         * khtml/editing/htmlediting.cpp:
2162         (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Remove misguided "optimization"
2163         that tried to sense when typing style could be cleared without actually doing a style diff between
2164         before-delete and after-delete positions. Removing this extra check and running the 
2165         general-purpose code fixes the bug.
2166
2167 2005-01-17  Richard Williamson   <rjw@apple.com>
2168
2169         Fixed <rdar://problem/3753030> Need to ensure same origin for plugin binding invocations (origin security rules)
2170
2171         Keep track of originating execution context and target execution
2172         context for native JS object wrappers, and perform appropriate
2173         security checks.
2174
2175         Reviewed by David Harrison.
2176
2177         * khtml/ecma/kjs_binding.cpp:
2178         (ScriptInterpreter::isGlobalObject):
2179         (ScriptInterpreter::isSafeScript):
2180         (ScriptInterpreter::interpreterForGlobalObject):
2181         * khtml/ecma/kjs_binding.h:
2182         * khtml/ecma/kjs_window.cpp:
2183         (Window::interpreter):
2184         (Window::isSafeScript):
2185         * khtml/ecma/kjs_window.h:
2186         * kwq/DOMInternal.mm:
2187         (-[WebScriptObject _initializeScriptDOMNodeImp]):
2188         * kwq/KWQKHTMLPart.mm:
2189         (KWQKHTMLPart::windowScriptObject):
2190         (KWQKHTMLPart::windowScriptNPObject):
2191         * kwq/WebCoreBridge.mm:
2192         (rootForView):
2193         (-[WebCoreBridge init]):
2194
2195 2005-01-17  Ken Kocienda  <kocienda@apple.com>
2196
2197         Reviewed by John
2198
2199         Fix for this bug:
2200         
2201         <rdar://problem/3786659> REGRESSION (Mail): editable WebViews don't work with 
2202         "size up" and "size down" NSFontManager changes
2203
2204         * khtml/css/cssparser.cpp:
2205         (CSSParser::parseValue): Add support for parsing new font size delta property.
2206         * khtml/css/cssproperties.c: Generated file.
2207         * khtml/css/cssproperties.h: Ditto.
2208         * khtml/css/cssproperties.in: Add support for parsing new font size delta property.
2209         * khtml/editing/htmlediting.cpp:
2210         (khtml::isEmptyStyleSpan): New helper function. Code existed before, but now factored out for convenient use.
2211         (khtml::CompositeEditCommand::removeNodeAttribute): Does check on value to see it exists before creating
2212         and running command to do the removal.
2213         (khtml::ApplyStyleCommand::doApply): Now calls new applyRelativeFontStyleChange() function as part of its work.
2214         (khtml::ApplyStyleCommand::applyRelativeFontStyleChange): New function that does the "heavy lifting" to handle 
2215         relative font size changes.
2216         (khtml::ApplyStyleCommand::applyInlineStyle): Range check the start and end positions to make sure the start is
2217         before or equal to the end. Swap them if not true. I ran into this problem in some similar code in 
2218         applyRelativeFontStyleChange(). Moving that goodness here too.
2219         (khtml::ApplyStyleCommand::splitTextAtEndIfNeeded): Uses a local variable to save a value used often.
2220         Code is the same, but reads better now. Function now returns bool as well, just like splitTextAtStartIfNeeded.
2221         I use the bool return value now (I obviously did not need it before).
2222         (khtml::ApplyStyleCommand::computedFontSize): New helper function.
2223         (khtml::ApplyStyleCommand::joinChildTextNodes): Ditto.
2224         (khtml::createStyleSpanElement): Ditto.
2225         * khtml/editing/htmlediting.h: Update header accordingly.
2226         * khtml/editing/jsediting.cpp: Add new command string to enable relative font size changes.
2227         * kwq/DOM-CSS.mm:
2228         (-[DOMCSSStyleDeclaration _fontSizeDelta]): New convenience.
2229         (-[DOMCSSStyleDeclaration _setFontSizeDelta:]): Ditto.
2230         * kwq/DOMPrivate.h: Declare new conveniences.
2231         * layout-tests/editing/editing.js: Add new JS to enable relative font size changes, as well as explicit font size setting.
2232         * layout-tests/editing/style/relative-font-size-change-001-expected.txt: Added.
2233         * layout-tests/editing/style/relative-font-size-change-001.html: Added.
2234         * layout-tests/editing/style/relative-font-size-change-002-expected.txt: Added.
2235         * layout-tests/editing/style/relative-font-size-change-002.html: Added.
2236         * layout-tests/editing/style/relative-font-size-change-003-expected.txt: Added.
2237         * layout-tests/editing/style/relative-font-size-change-003.html: Added.
2238         * layout-tests/editing/style/relative-font-size-change-004-expected.txt: Added.
2239         * layout-tests/editing/style/relative-font-size-change-004.html: Added.
2240
2241 2005-01-14  Darin Adler  <darin@apple.com>
2242
2243         * khtml/css/cssproperties.c: Regenerated with gperf 3.0.1.
2244         * khtml/css/cssvalues.c: Regenerated with gperf 3.0.1.
2245         * khtml/misc/htmlattrs.c: Regenerated with gperf 3.0.1.
2246         * khtml/misc/htmltags.c: Regenerated with gperf 3.0.1.
2247
2248 2005-01-14  Chris Blumenberg  <cblu@apple.com>
2249
2250         Fixed: <rdar://problem/3886415> arrow keys don't work when the user hits Back to return to RSS page
2251
2252         Reviewed by hyatt.
2253
2254         (KWQKHTMLPart::openURLFromPageCache): restore mousePressNode
2255         (KWQKHTMLPart::mousePressNode): new
2256         * kwq/KWQPageState.h:
2257         * kwq/KWQPageState.mm:
2258         (-[KWQPageState initWithDocument:URL:windowProperties:locationProperties:interpreterBuiltins:]): save the mousePressNode
2259         (-[KWQPageState clear]): clear the mousePressNode
2260         (-[KWQPageState dealloc]): deref the mousePressNode
2261         (-[KWQPageState mousePressNode]): new
2262
2263 === Safari-179 ===
2264
2265 2005-01-13  Vicki Murley <vicki@apple.com>
2266
2267         Reviewed by Adele.
2268
2269         - fix <rdar://problem/3946836> Safari about box lists 2004 instead of 2005
2270
2271         * WebCore.pbproj/project.pbxproj: bump "2004" to "2005"
2272
2273 2005-01-13  David Harrison  <harrison@apple.com>
2274
2275         Reviewed by Ken Kocienda.
2276         
2277         Better fix for 3905066.
2278         
2279         * khtml/editing/htmlediting.cpp:
2280         (khtml::InsertParagraphSeparatorCommand::doApply):
2281
2282 2005-01-10  Maciej Stachowiak  <mjs@apple.com>
2283
2284         Reviewed by Darin.
2285
2286         <rdar://problem/3758033> REGRESSION (Mail): Support attributes in marked text (International input)
2287         
2288         * khtml/rendering/render_text.cpp:
2289         (InlineTextBox::paint): Support painting custom underline markers for
2290         marked text in place of generic yellow.
2291         (InlineTextBox::paintMarkedTextUnderline): New method that handles this.
2292         * khtml/rendering/render_text.h:
2293         * kwq/KWQKHTMLPart.h: Declare new methods and structs.
2294         * kwq/KWQKHTMLPart.mm:
2295         (KWQKHTMLPart::clear): Clear marked test underlines.
2296         (KWQKHTMLPart::setMarkedTextRange): Takes attributes and ranges now.
2297         (convertAttributesToUnderlines): Converts NSAttributedString attributes
2298         to simplified and C++-friendly form.
2299         (KWQKHTMLPart::markedTextUsesUnderlines): New method.
2300         (KWQKHTMLPart::markedTextUnderlines): New method.
2301         * kwq/KWQPainter.mm:
2302         (QPainter::drawLineForText): Handle pen width.
2303         * kwq/WebCoreBridge.h:
2304         * kwq/WebCoreBridge.mm:
2305         (-[WebCoreBridge setMarkedTextDOMRange:customAttributes:ranges:]): Take attributes
2306         and ranges.
2307         * kwq/WebCoreTextRenderer.h:
2308
2309 2005-01-12  David Harrison  <harrison@apple.com>
2310
2311         Reviewed by Dave Hyatt.
2312
2313         <rdar://problem/3888973> AX: Parent AXWebArea of nested AXWebAreas is messed up
2314         
2315         * kwq/KWQAccObject.mm:
2316         (-[KWQAccObject addChildrenToArray:]):
2317         Use the widget's outer view.
2318
2319 2005-01-12  David Harrison  <harrison@apple.com>
2320
2321         Reviewed by Darin Adler.
2322
2323         <rdar://problem/3949908> Crash when asking for the kAXLengthForTextMarkerRangeParameterizedAttribute
2324         
2325         * khtml/xml/dom_nodeimpl.cpp:
2326         (NodeImpl::displayNode):
2327         Add quotes around text node content.
2328         (NodeBaseImpl::childNode):
2329         Add nil check to return nil rather than crash when child node not found.
2330         * kwq/KWQAccObject.mm:
2331         (-[KWQAccObject doAXStringForTextMarkerRange:]):
2332         Pass range compliant positions to TextIterator.
2333
2334 2005-01-12  David Hyatt  <hyatt@apple.com>
2335
2336         Fix for 3951203, CSS border style incorrectly clipped on inline elements.  Make sure the repaint rect set during
2337         line layout is smarter about including the overflow for both old states and new states.
2338         
2339         Reviewed by john
2340
2341         * khtml/rendering/bidi.cpp:
2342         (khtml::RenderBlock::layoutInlineChildren):
2343
2344 2005-01-12  David Hyatt  <hyatt@apple.com>
2345
2346         Fix for bug 3937608, versiontracker.com flashes and displays the right column below content.  Make sure to move
2347         tables/overflows that dont fit within a block only in strict mode.
2348
2349         Fix for bug 3931049, characters dont show up when typing.  Make sure to dirty the right lines when this specific
2350         case in editing is hit.
2351         
2352         Reviewed by darin (first one), kocienda (second one)
2353
2354         * khtml/rendering/render_block.cpp:
2355         (khtml::RenderBlock::getClearDelta):
2356         * khtml/rendering/render_flow.cpp:
2357         (RenderFlow::dirtyLinesFromChangedChild):
2358         * khtml/rendering/render_line.cpp:
2359         (khtml::InlineFlowBox::verticallyAlignBoxes):
2360
2361 2005-01-12  Ken Kocienda  <kocienda@apple.com>
2362
2363         Reviewed by John
2364
2365         Fix for this bug:
2366         
2367         <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
2368
2369         * khtml/editing/htmlediting.cpp:
2370         (khtml::DeleteSelectionCommand::initializePositionData): Change test that will prevent block
2371         merging. End-of-line test was just wrong. Call new start-of and end-of paragraph functions
2372         added to visible_position files.
2373         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Add tests for BR elements, which makes
2374         tests to determine when to stop moving nodes more complete and correct. Also improved comments.
2375         * khtml/editing/visible_position.cpp:
2376         (khtml::isFirstVisiblePositionInParagraph): New function.
2377         (khtml::isLastVisiblePositionInParagraph): New function.
2378         * khtml/editing/visible_position.h: Update header accordingly.
2379         * layout-tests/editing/deleting/delete-block-merge-contents-002-expected.txt: New results, slightly different from former
2380         results but still correct.
2381         * layout-tests/editing/deleting/delete-block-merge-contents-007-expected.txt: Ditto.
2382         * layout-tests/editing/deleting/delete-block-merge-contents-018-expected.txt: Added.
2383         * layout-tests/editing/deleting/delete-block-merge-contents-018.html: Added.
2384         * layout-tests/editing/deleting/delete-block-merge-contents-019-expected.txt: Added.
2385         * layout-tests/editing/deleting/delete-block-merge-contents-019.html: Added.
2386         * layout-tests/editing/deleting/delete-block-merge-contents-020-expected.txt: Added.
2387         * layout-tests/editing/deleting/delete-block-merge-contents-020.html: Added.
2388         * layout-tests/editing/deleting/delete-block-merge-contents-021-expected.txt: Added.
2389         * layout-tests/editing/deleting/delete-block-merge-contents-021.html: Added.
2390         * layout-tests/editing/deleting/delete-line-014-expected.txt: These new results are actually better, and fix a bug.
2391
2392 2005-01-11  Richard Williamson   <rjw@apple.com>
2393
2394         Fixed 3922875.  Fall back to DOM object is EMBED element
2395         has no associated runtime object.
2396
2397         Reviewed by Chris.
2398
2399         * khtml/ecma/kjs_dom.cpp:
2400         (KJS::getRuntimeObject):
2401         * khtml/ecma/kjs_html.cpp:
2402         (KJS::HTMLDocument::tryGet):
2403         (KJS::HTMLElement::tryGet):
2404         (KJS::HTMLCollection::tryGet):
2405         (KJS::HTMLCollection::getNamedItems):
2406
2407 2005-01-11  David Hyatt  <hyatt@apple.com>
2408
2409         Fix for 3882299, missing content on gibson.com.  Change our handling of " and ' in certain states of the parser to match
2410         other browsers.
2411         
2412         Reviewed by Maciej
2413
2414         * khtml/html/htmltokenizer.cpp:
2415         (khtml::HTMLTokenizer::parseTag):
2416
2417 2005-01-11  Chris Blumenberg  <cblu@apple.com>
2418
2419         Fixed: <rdar://problem/3930733> Mail prints second page of email blank
2420
2421         Reviewed by dave.
2422
2423         * khtml/rendering/render_canvas.cpp:
2424         (RenderCanvas::paint): cache the print rect since the dirty rect can get changed during printing
2425         * khtml/rendering/render_flow.cpp:
2426         (RenderFlow::paintLines): removed null check since the print rect should never be null
2427         * khtml/rendering/render_list.cpp:
2428         (RenderListMarker::paint): ditto
2429         * kwq/KWQKHTMLPart.mm:
2430         (KWQKHTMLPart::adjustPageHeight): don't set the print rect here since this method is not called for the last page
2431
2432 2005-01-10  Ken Kocienda  <kocienda@apple.com>
2433
2434         Reviewed by Hyatt
2435
2436         Fix for this bug:
2437         
2438         <rdar://problem/3943648> extra line is inserted after pressing return within quoted text of reply
2439
2440         * khtml/editing/htmlediting.cpp:
2441         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): This bug was the result of a 
2442         simple coding mistake. A local variable was erroneously redefined in a deeper scope, and so the 
2443         result calculated in that deeper scope was not available when tested.
2444
2445 2005-01-10  Ken Kocienda  <kocienda@apple.com>
2446
2447         Reviewed by John
2448
2449         Fix for this bug:
2450         
2451         <rdar://problem/3946852> Option-e goes to next line
2452
2453         * khtml/editing/htmlediting.cpp:
2454         (khtml::ReplaceSelectionCommand::doApply): Tweak case used to determine when merging content
2455         into the start line is done. We plan to change pretty substantially soon to better handle
2456         the problem described in <rdar://problem/3937352> Quote level not maintained when copied 
2457         and pasted within a Mail message. In the meantime, this change does no harm, and fixes the bug.
2458
2459 2005-01-10  Ken Kocienda  <kocienda@apple.com>
2460
2461         Reviewed by Darin
2462
2463         Fix for this bug:
2464         
2465         <rdar://problem/3907005> Applying block styles to a line of text can unexpectedly affect other lines
2466
2467         * khtml/editing/htmlediting.cpp:
2468         (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): New function which moves "paragraphs"
2469         to their own blocks if needed so that a block style can be applied.
2470         (khtml::CompositeEditCommand::isMailBlockquote): Moved this function to base class so it can be used more generally.
2471         (khtml::ApplyStyleCommand::applyBlockStyle): Pass a node instead of a block to addBlockStyleIfNeeded().
2472         (khtml::ApplyStyleCommand::addBlockStyleIfNeeded): Now accepts a node instead of a block for styling.
2473         This function also now calls moveParagraphContentsToNewBlockIfNecessary() to make sure that only the current
2474         paragraph is styled.
2475         (khtml::SetNodeAttributeCommand::doUnapply): Should not assert on undo if old value of attribute was null.
2476         Should remove attributue instead.
2477         * khtml/editing/htmlediting.h: Touch function declarations accordingly.
2478         * layout-tests/editing/style/create-block-for-style-001-expected.txt: Added.
2479         * layout-tests/editing/style/create-block-for-style-001.html: Added.
2480         * layout-tests/editing/style/create-block-for-style-002-expected.txt: Added.
2481         * layout-tests/editing/style/create-block-for-style-002.html: Added.
2482         * layout-tests/editing/style/create-block-for-style-003-expected.txt: Added.
2483         * layout-tests/editing/style/create-block-for-style-003.html: Added.
2484         * layout-tests/editing/style/create-block-for-style-004-expected.txt: Added.
2485         * layout-tests/editing/style/create-block-for-style-004.html: Added.
2486         * layout-tests/editing/style/create-block-for-style-005-expected.txt: Added.
2487         * layout-tests/editing/style/create-block-for-style-005.html: Added.
2488         * layout-tests/editing/style/create-block-for-style-006-expected.txt: Added.
2489         * layout-tests/editing/style/create-block-for-style-006.html: Added.
2490         * layout-tests/editing/style/create-block-for-style-007-expected.txt: Added.
2491         * layout-tests/editing/style/create-block-for-style-007.html: Added.
2492         * layout-tests/editing/style/create-block-for-style-008-expected.txt: Added.
2493         * layout-tests/editing/style/create-block-for-style-008.html: Added.
2494         * layout-tests/editing/style/create-block-for-style-009-expected.txt: Added.
2495         * layout-tests/editing/style/create-block-for-style-009.html: Added.
2496         * layout-tests/editing/style/create-block-for-style-010-expected.txt: Added.
2497         * layout-tests/editing/style/create-block-for-style-010.html: Added.
2498         * layout-tests/editing/style/create-block-for-style-011-expected.txt: Added.
2499         * layout-tests/editing/style/create-block-for-style-011.html: Added.
2500         * layout-tests/editing/style/create-block-for-style-012-expected.txt: Added.
2501         * layout-tests/editing/style/create-block-for-style-012.html: Added.
2502         * layout-tests/editing/style/create-block-for-style-013-expected.txt: Added.
2503         * layout-tests/editing/style/create-block-for-style-013.html: Added.
2504
2505         Unrelated updates to these expected results.
2506         * layout-tests/editing/inserting/insert-div-007-expected.txt
2507         * layout-tests/editing/pasteboard/paste-text-013-expected.txt
2508
2509 2005-01-10  Chris Blumenberg  <cblu@apple.com>
2510
2511         Fixed: <rdar://problem/3936844> Mail: Messages with rich text do not print
2512
2513         Reviewed by john.
2514
2515         * khtml/rendering/render_flow.cpp:
2516         (RenderFlow::paintLines): don't do pagination work if printRect is not set
2517         * khtml/rendering/render_list.cpp:
2518         (RenderListMarker::paint): ditto
2519
2520 2005-01-10  David Harrison  <harrison@apple.com>
2521
2522         Reviewed by Darin.
2523
2524         * kwq/KWQTextUtilities.mm:
2525         (currentTextBreakLocaleID):
2526         Return empty string (AKA root locale) if locale pref can not be canonicalized.
2527
2528 2005-01-10  John Sullivan  <sullivan@apple.com>
2529
2530         Fixed broken Panther build.
2531
2532         * kwq/KWQTextUtilities.mm:
2533         (currentTextBreakLocaleID):
2534         This recently-added function was using code copy/pasted from CarbonCore UnicodeUtilities.
2535         That code used a Tiger-only function, CFLocaleCreateCanonicalLanguageIdentifierFromString.
2536         To fix the build, I added a BUILDING_ON_PANTHER #ifdef that avoids the call to the Tiger
2537         function. However, the Tiger-only code was wrong; the string generated using 
2538         CFLocaleCreateCanonicalLanguageIdentifierFromString was not used at all, so I fixed that
2539         as well.
2540
2541 2005-01-09  David Harrison  <harrison@apple.com>
2542
2543         Reviewed by Ken Kocienda.
2544
2545         <rdar://problem/3786362> REGRESSION (Mail): pasted text loses one newline
2546         
2547         * khtml/editing/htmlediting.cpp:
2548         (khtml::ReplaceSelectionCommand::doApply):
2549         Tune check for need for insertParagraphSeparator when hasInterchangeNewline.
2550
2551 2005-01-09  Darin Adler  <darin@apple.com>
2552
2553         Reviewed by Harrison.
2554
2555         - fixed <rdar://problem/3939176> select() method does not work on <input type=search>
2556
2557         * khtml/html/html_formimpl.cpp: (DOM::HTMLInputElementImpl::select): Changed if statement
2558         to a switch statement. Added SEARCH to the set of types that treat the renderer as a
2559         RenderLineEdit.
2560
2561 2005-01-09  David Harrison  <harrison@apple.com>
2562
2563         Reviewed by Ken Kocienda.
2564
2565         <rdar://problem/3905066> REGRESSION (Mail): Hitting return key with caret in front of space causes space to become lost (resize fixes)
2566
2567         Problem was that InsertParagraphSeparatorCommand::doApply() was not collapsing
2568         whitespace to a single non-breaking space when splitting a text node.
2569
2570         * khtml/editing/htmlediting.cpp:
2571         (khtml::InsertParagraphSeparatorCommand::doApply):
2572
2573 2005-01-08  Kevin Decker  <kdecker@apple.com>
2574
2575         Reviewed by Ken.
2576
2577         Fixed: <rdar://problem/3924219> Calling setOuterHTML: on a DOMHTMLHtmlElement can crash a program
2578
2579         * khtml/html/html_elementimpl.cpp:
2580         (HTMLElementImpl::setOuterHTML): Added a nil check for fragments who don't have parents.
2581
2582 2005-01-07  Maciej Stachowiak  <mjs@apple.com>
2583
2584         Reviewed by Darin.
2585         
2586         <rdar://problem/3807144> REGRESSION (125-TOT): my bank's website doesn't work (Societe Generale, socgen.com)
2587
2588         * Khtml/khtml_part.cpp:
2589         (KHTMLPart::checkCompleted): If the document is NULL, assume this frame has
2590         not started loading yet so it could not possibly be finishing here...
2591         (KHTMLPart::stop): ...unless the part is explicitly stopped and there is still
2592         no document, in this case we must have hit an error or been loading a non-HTML
2593         frame.
2594         * khtml/khtml_part.h:
2595
2596 2005-01-08  David Harrison  <harrison@apple.com>
2597
2598         Reviewed by Maciej.
2599
2600         <rdar://problem/3943415> REGRESSION (Mail): double-clicking past word selects previous word instead of only blank space
2601         
2602         * khtml/editing/selection.cpp:
2603         (khtml::Selection::validate):
2604         Tune word selections left/right choice to use right if on empty last line.
2605
2606 2005-01-07  David Harrison  <harrison@apple.com>
2607
2608         Reviewed by Darin.
2609
2610         <rdar://problem/3942619> AX: Support sentence ax attributes
2611
2612         Needed to use the unicode utilities properly.  Twas lame before.
2613
2614         * khtml/editing/visible_units.cpp:
2615         (khtml::previousBoundary):
2616         (khtml::nextBoundary):
2617         (khtml::startOfWord):
2618         (khtml::endOfWord):
2619         (khtml::previousWordPosition):
2620         (khtml::nextWordPosition):
2621         (khtml::startOfSentence):
2622         (khtml::endOfSentence):
2623         (khtml::previousSentencePosition):
2624         (khtml::nextSentencePosition):
2625         * kwq/KWQAccObject.mm:
2626         (-[KWQAccObject accessibilityAttributeNames]):
2627         (-[KWQAccObject accessibilityAttributeValue:]):
2628         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
2629         (-[KWQAccObject doAXAttributedStringForTextMarkerRange:]):
2630         * kwq/KWQTextUtilities.mm:
2631         (currentTextBreakLocaleID):
2632         (KWQFindSentenceBoundary):
2633         (KWQFindNextSentenceFromIndex):
2634
2635 2005-01-07  Ken Kocienda  <kocienda@apple.com>
2636
2637         Reviewed by Kevin
2638
2639         Fix for these bugs:
2640         
2641         <rdar://problem/3939523> in some cases, text does not retain style info after pressing return twice
2642         <rdar://problem/3944492> after pressing return twice, text is bold when it shouldn't be
2643
2644         * khtml/editing/htmlediting.cpp:
2645         (khtml::InsertParagraphSeparatorCommand::setFullTypingStyleBeforeInsertion):
2646         Merge the typing style with the computed style for the current position. Fixes both bugs.
2647         * khtml/editing/htmlediting.h:
2648         * layout-tests/editing/inserting/insert-div-023-expected.txt: Added.
2649         * layout-tests/editing/inserting/insert-div-023.html: Added.
2650         * layout-tests/editing/inserting/insert-div-024-expected.txt: Added.
2651         * layout-tests/editing/inserting/insert-div-024.html: Added.
2652
2653 2005-01-07  David Hyatt  <hyatt@apple.com>
2654
2655         Fix for 3941364, make sure tables reset overflowWidth/Height when they lay out again.  Fixes the odd scrolling
2656         behavior on worldofwarcraft.com.
2657         
2658         Reviewed by kevin
2659
2660         * khtml/rendering/render_table.cpp:
2661         (RenderTable::layout):
2662
2663 2005-01-06  David Hyatt  <hyatt@apple.com>
2664
2665         Fix for 3932418 and 3920998, assertion failures caused by stray inline content inside tables.  Bulletproof the hit testing to
2666         ignore inline flows in this case.
2667         
2668         Reviewed by kevin
2669
2670         * khtml/rendering/render_block.cpp:
2671         (khtml::RenderBlock::nodeAtPoint):
2672
2673 2005-01-07  Ken Kocienda  <kocienda@apple.com>
2674
2675         Reviewed by Hyatt
2676
2677         Fix for this bug:
2678         
2679         <rdar://problem/3848412> for forwarded message, tabbing to message view scrolls to bottom of view
2680
2681         * kwq/KWQKHTMLPart.mm:
2682         (KWQKHTMLPart::nextKeyViewInFrame): Don't scroll the focus node to visible if it is not
2683         in the document, or if it is not a descendent of the document element. In the case of the bug,
2684         since the selection has not yet been set up, the focus node passed here is the HTML element, and
2685         that does not yield a rect that is useful to us here. So now, in the case the bug mentions, we do nothing.
2686
2687 2005-01-06  Kevin Decker  <kdecker@apple.com>
2688
2689         Reviewed by mjs.
2690
2691         Fixed: <rdar://problem/3932215> REGRESSION (125-177): iFrame example at developer.apple.com fails in Safari
2692
2693         * khtml/khtml_part.cpp:
2694         (KHTMLPart::processObjectRequest): m_bComplete was never true for frames generated by Javascript due to our synchronous loading and as a result, scheduled redirects wouldn't fire in KHTMLPart::scheduleLocationChange().  By virtue of being an empty document, a document is complete.  In this special case it's safe at this point to call checkCompleted() which sets m_bComplete true. 
2695
2696 === Safari-178 ===
2697
2698 2005-01-06  David Harrison  <harrison@apple.com>
2699
2700         Reviewed by Chris.
2701
2702         (addendum to previous checkin for this bug) 
2703         <rdar://problem/3776056> AX: Editable HTML should not be viewed as AXStaticText
2704
2705         Fix line navigation.  Add AXUIElementForTextMarker.
2706
2707         * kwq/KWQAccObject.mm:
2708         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
2709         (-[KWQAccObject doAXUIElementForTextMarker:]):
2710         (-[KWQAccObject doAXLineForTextMarker:]):
2711         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
2712         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
2713         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
2714         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
2715         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
2716
2717 2005-01-06  Darin Adler  <darin@apple.com>
2718
2719         Reviewed by Ken.
2720
2721         - re-fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
2722
2723         (turns out the PLT regression was a false alarm)
2724
2725         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
2726         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
2727         much larger number.
2728         * khtml/html/htmlparser.cpp:
2729         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
2730         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
2731         to eliminate code that used ID_CLOSE_TAG for an array size.
2732         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
2733         that manages isindex to use deref instead of delete.
2734         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
2735         mistake of using ID_CLOSE_TAG for the array size too.
2736         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
2737         there and it would prevent custom tags from working. Added range check before using the forbidden
2738         tag array with the token ID since custom tags will use index values past the end of the array.
2739         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
2740         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
2741         createElement call is still here. Last time I left out a few form element types from this switch;
2742         fixed now.
2743         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
2744         document if getTagID fails; this creates a unique per-document ID.
2745
2746         * khtml/misc/htmltags.c: Regenerated.
2747         * khtml/misc/htmltags.h: Regenerated.
2748
2749         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
2750         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
2751         Also rewrote getTagName to work with the new scheme.
2752
2753 2005-01-06  David Harrison  <harrison@apple.com>
2754         
2755         Fixed Panther build.  Also, do not advertize sentence support since it is incomplete.
2756         
2757         * kwq/KWQAccObject.mm:
2758         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
2759         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
2760         (-[KWQAccObject accessibilityIsAttributeSettable:]):
2761
2762 2005-01-06  David Harrison  <harrison@apple.com>
2763
2764         Reviewed by Dave Hyatt.
2765
2766         <rdar://problem/3776056> AX: Editable HTML should not be viewed as AXStaticText
2767         <rdar://problem/3588548> AX: tabbing does not work correctly with the screen reader and a focused link; need AXFocusedUIElement to work
2768         
2769         Many more AX attributes supported.  Numerous fixes to previous AX work.
2770         
2771         * khtml/editing/visible_units.cpp:
2772         (khtml::startSentenceBoundary):
2773         (khtml::startOfSentence):
2774         (khtml::endSentenceBoundary):
2775         (khtml::endOfSentence):
2776         (khtml::previousSentencePositionBoundary):
2777         (khtml::previousSentencePosition):
2778         (khtml::nextSentencePositionBoundary):
2779         (khtml::nextSentencePosition):
2780         * khtml/editing/visible_units.h:
2781         * khtml/khtmlview.cpp:
2782         (KHTMLView::layout):
2783         * khtml/misc/helper.cpp:
2784         (khtml::findSentenceBoundary):
2785         (khtml::nextSentenceFromIndex):
2786         * khtml/misc/helper.h:
2787         * khtml/misc/htmltags.c:
2788         (hash_tag):
2789         (findTag):
2790         * khtml/rendering/render_container.cpp:
2791         (RenderContainer::removeChildNode):
2792         (RenderContainer::appendChildNode):
2793         (RenderContainer::insertChildNode):
2794         * khtml/rendering/render_object.cpp:
2795         (RenderObject::remove):
2796         * khtml/xml/dom_docimpl.cpp:
2797         (DocumentImpl::getAccObjectCache):
2798         (DocumentImpl::updateSelection):
2799         (DocumentImpl::close):
2800         (DocumentImpl::setFocusNode):
2801         (DocumentImpl::parentDocument):
2802         (DocumentImpl::topDocument):
2803         * khtml/xml/dom_docimpl.h:
2804         * kwq/KWQAccObject.mm:
2805         (-[KWQAccObject accessibilityShouldUseUniqueId]):
2806         (-[KWQAccObject detach]):
2807         (-[KWQAccObject anchorElement]):
2808         (-[KWQAccObject firstChild]):
2809         (-[KWQAccObject lastChild]):
2810         (-[KWQAccObject previousSibling]):
2811         (-[KWQAccObject nextSibling]):
2812         (-[KWQAccObject parentObject]):
2813         (-[KWQAccObject value]):
2814         (-[KWQAccObject accessibilityAttributeNames]):
2815         (-[KWQAccObject accessibilityPerformAction:]):
2816         (-[KWQAccObject textMarkerForVisiblePosition:]):
2817         (-[KWQAccObject visiblePositionForTextMarker:]):
2818         (-[KWQAccObject textMarkerRangeFromVisiblePositions:andEndPos:]):
2819         (-[KWQAccObject topDocument]):
2820         (-[KWQAccObject topRenderer]):
2821         (-[KWQAccObject topView]):
2822         (-[KWQAccObject accessibilityAttributeValue:]):
2823         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
2824         (-[KWQAccObject doAXLineForTextMarker:]):
2825         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
2826         (-[KWQAccObject doAXStringForTextMarkerRange:]):
2827         (-[KWQAccObject doAXTextMarkerForPosition:]):
2828         (-[KWQAccObject doAXBoundsForTextMarkerRange:]):
2829         (-[KWQAccObject doAXAttributedStringForTextMarkerRange:]):
2830         (-[KWQAccObject doAXTextMarkerRangeForUnorderedTextMarkers:]):
2831         (-[KWQAccObject doAXNextTextMarkerForTextMarker:]):
2832         (-[KWQAccObject doAXPreviousTextMarkerForTextMarker:]):
2833         (-[KWQAccObject doAXLeftWordTextMarkerRangeForTextMarker:]):
2834         (-[KWQAccObject doAXRightWordTextMarkerRangeForTextMarker:]):
2835         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
2836         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
2837         (-[KWQAccObject doAXSentenceTextMarkerRangeForTextMarker:]):
2838         (-[KWQAccObject doAXParagraphTextMarkerRangeForTextMarker:]):
2839         (-[KWQAccObject doAXNextWordEndTextMarkerForTextMarker:]):
2840         (-[KWQAccObject doAXPreviousWordStartTextMarkerForTextMarker:]):
2841         (-[KWQAccObject doAXNextLineEndTextMarkerForTextMarker:]):
2842         (-[KWQAccObject doAXPreviousLineStartTextMarkerForTextMarker:]):
2843         (-[KWQAccObject doAXNextSentenceEndTextMarkerForTextMarker:]):
2844         (-[KWQAccObject doAXPreviousSentenceStartTextMarkerForTextMarker:]):
2845         (-[KWQAccObject doAXNextParagraphEndTextMarkerForTextMarker:]):
2846         (-[KWQAccObject doAXPreviousParagraphStartTextMarkerForTextMarker:]):
2847         (-[KWQAccObject doAXLengthForTextMarkerRange:]):
2848         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
2849         (-[KWQAccObject accessibilityHitTest:]):
2850         (-[KWQAccObject accessibilityFocusedUIElement]):
2851         (-[KWQAccObject accessibilityIsAttributeSettable:]):
2852         (-[KWQAccObject doSetAXSelectedTextMarkerRange:]):
2853         (-[KWQAccObject setAccObjectID:]):
2854         (-[KWQAccObject removeAccObjectID]):
2855         * kwq/KWQAccObjectCache.h:
2856         * kwq/KWQAccObjectCache.mm:
2857         (KWQAccObjectCache::setAccObject):
2858         (KWQAccObjectCache::removeAccObject):
2859         (KWQAccObjectCache::visiblePositionForTextMarker):
2860         (KWQAccObjectCache::postNotificationToTopWebArea):
2861         (KWQAccObjectCache::postNotification):
2862         (KWQAccObjectCache::handleFocusedUIElementChanged):
2863         * kwq/KWQKHTMLPart.mm:
2864         (KWQKHTMLPart::respondToChangedContents):
2865         * kwq/KWQTextUtilities.h:
2866         * kwq/KWQTextUtilities.mm:
2867         (KWQFindNextWordFromIndex):
2868         (KWQFindSentenceBoundary):
2869         (KWQFindNextSentenceFromIndex):
2870         * kwq/WebCoreBridge.mm:
2871         (-[WebCoreBridge accessibilityTree]):
2872
2873 2005-01-05  Darin Adler  <darin@apple.com>
2874
2875         Reviewed by Ken.
2876
2877         - re-landing a subset of my custom tag change that does not fix the bug, but also does
2878           not introduce a performance regression
2879
2880         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
2881         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
2882
2883         * khtml/editing/htmlediting.cpp:
2884         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
2885         per-document tags and is just better all around for things like the document.
2886         (khtml::debugNode): Ditto.
2887         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
2888         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
2889         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
2890         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
2891
2892         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
2893         non-HTML elements to be nested as desired.
2894
2895         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
2896         * khtml/misc/htmlhashes.cpp:
2897         (khtml::getTagID): Changed return type to unsigned short.
2898         (khtml::getAttrID): Ditto.
2899
2900         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
2901         * khtml/xml/dom_docimpl.cpp:
2902         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
2903         Also updated for a few tags that the parser handled but this did not.
2904
2905         * kwq/KWQRenderTreeDebug.cpp:
2906         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
2907         the tag ID directly, which only works for standard nodes.
2908         (operator<<): Update to call getTagName.
2909         (nodePositionRelativeToRoot): Ditto.
2910         (writeSelection): Ditto.
2911
2912 2005-01-05  Ken Kocienda  <kocienda@apple.com>
2913
2914         Reviewed by Hyatt
2915
2916         Fix for this bug:
2917         
2918         <rdar://problem/3941203> REGRESSION (Mail): Paste inserts content in wrong place
2919
2920         * khtml/editing/htmlediting.cpp:
2921         (khtml::ReplaceSelectionCommand::doApply): Some cleanup and refinement of the concepts used to make
2922         this operation work correctly, particularly in the logic to figure out whether to merge content, and
2923         also performing merges.
2924         * khtml/editing/visible_position.cpp:
2925         (khtml::isFirstVisiblePositionInBlock): Simplification of test used to make this determination.
2926         * khtml/editing/visible_units.cpp:
2927         (khtml::isStartOfParagraph): New helper, used in khtml::ReplaceSelectionCommand::doApply().
2928         (khtml::isEndOfParagraph): Ditto.
2929         * khtml/editing/visible_units.h: Declare new functions.
2930
2931 2005-01-04  Ken Kocienda  <kocienda@apple.com>
2932
2933         Reviewed by John
2934
2935         Fix for this bug:
2936         
2937         <rdar://problem/3926522> Pressing return in a quoted block inserts too many newlines
2938
2939         * khtml/editing/htmlediting.cpp:
2940         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Call to insertBlockPlaceholderIfNeeded()
2941         for the block we are adding was being done at the wrong time, which led to the placeholder remaining
2942         in the document when it was not needed. This resulted in the extra space reported in the bug.
2943
2944 2005-01-04  Kevin Decker  <kdecker@apple.com>
2945
2946         Reviewed by Hyatt.
2947
2948         Fixed: <rdar://problem/3936879> nil-deref, crash in InlineFlowBox::nodeAtPoint closing DHTML menus at hrweb.apple.com
2949
2950         * khtml/rendering/render_block.cpp:
2951         (khtml::RenderBlock::fillInlineSelectionGaps): Added a nil check. If there is no selection, don't try to get the selection's containing block. If we do, we'll crash. 
2952
2953 2005-01-04  David Hyatt  <hyatt@apple.com>
2954
2955         Fix for 3937203, force an update of the dashboard regions when scrollbars are added/removed.
2956         
2957         Reviewed by kevin
2958
2959         * khtml/rendering/render_layer.cpp:
2960         (RenderLayer::updateScrollInfoAfterLayout):
2961
2962 2005-01-04  Ken Kocienda  <kocienda@apple.com>
2963
2964         Reviewed by John
2965
2966         Fix for these two bugs:
2967         
2968         <rdar://problem/3938935> REGRESSION (Mail): Pasting into an empty document mangles content
2969         <rdar://problem/3939148> REGRESSION (Mail): Pasting mistakenly reverses lines
2970
2971         * khtml/editing/htmlediting.cpp:
2972         (khtml::ReplaceSelectionCommand::doApply): For 3938935, add one more case to handle an empty document; merge
2973         neither start nor end. For 3939148, improve the code which adjusts the insertion point during 
2974         the process of pasting. It formerly handled only one of the possible cases.
2975         * layout-tests/editing/pasteboard/paste-text-015-expected.txt: Added.
2976         * layout-tests/editing/pasteboard/paste-text-015.html: Added.
2977
2978 2005-01-04  David Hyatt  <hyatt@apple.com>
2979
2980         Fix for 3936571, placeholder attribute should work for normal inputs for Dashboard.
2981         
2982         Reviewed by john
2983
2984         * khtml/rendering/render_form.cpp:
2985         (RenderLineEdit::updateFromElement):
2986         * kwq/KWQLineEdit.mm:
2987         (QLineEdit::setPlaceholderString):
2988
2989 2005-01-04  David Hyatt  <hyatt@apple.com>
2990
2991         Fix for 3830936, hang on changeforamerica.com.  Make sure to ignore the style not yet available option when
2992         returning pseudo-styles.
2993         
2994         Reviewed by john
2995
2996         * khtml/css/cssstyleselector.cpp:
2997         (khtml::CSSStyleSelector::matchRulesForList):
2998         (khtml::CSSStyleSelector::pseudoStyleForElement):
2999         * khtml/rendering/render_style.cpp:
3000         (RenderStyle::addPseudoStyle):
3001
3002 2005-01-04  Darin Adler  <darin@apple.com>
3003
3004         - rolled out my custom tag name change again -- it caused a 1 ms PLT regression
3005
3006         * khtml/css/cssstyleselector.cpp:
3007         * khtml/editing/htmlediting.cpp:
3008         * khtml/editing/selection.cpp:
3009         * khtml/editing/visible_position.cpp:
3010         * khtml/html/dtd.cpp:
3011         * khtml/html/htmlparser.cpp:
3012         * khtml/html/htmlparser.h:
3013         * khtml/html/htmltokenizer.cpp:
3014         * khtml/misc/htmlhashes.cpp:
3015         * khtml/misc/htmlhashes.h:
3016         * khtml/misc/htmltags.c:
3017         * khtml/misc/htmltags.h:
3018         * khtml/misc/maketags:
3019         * khtml/xml/dom_docimpl.cpp:
3020         * khtml/xml/dom_docimpl.h:
3021         * khtml/xml/dom_nodeimpl.cpp:
3022         * khtml/xml/dom_position.cpp:
3023         * kwq/KWQRenderTreeDebug.cpp:
3024
3025 2005-01-04  Ken Kocienda  <kocienda@apple.com>
3026
3027         Reviewed by John
3028
3029         Fix for this bug:
3030         
3031         <rdar://problem/3927554> Style info applied to remainder of document after a newline is entered
3032
3033         * khtml/editing/htmlediting.cpp:
3034         (khtml::InsertParagraphSeparatorCommand::doApply): Clean up and simplification in code that inserts
3035         a paragraph separator. The bug was all about applying styles to the new paragraph that did not need
3036         to be applied. Now the code will detect when at the end of a style run and will not move and apply 
3037         that ending style to the new paragraph, though it will place that style into the typing style. This
3038         seems to match NSText behavior.
3039         * layout-tests/editing/inserting/insert-div-021-expected.txt: This test result exhibited the bug fixed 
3040         here. The only reason it was not noticed is that the erroneously copied inline was a span, and so did
3041         not have any visible effect on the document.
3042         * layout-tests/editing/inserting/insert-div-022-expected.txt: Added.
3043         * layout-tests/editing/inserting/insert-div-022.html: Added.
3044
3045 2005-01-04  David Hyatt  <hyatt@apple.com>
3046
3047         Fix for 3904562, make sure to clear the outline dictionary when drawing so that random focus rings dont get drawn
3048         all over the place.
3049         
3050         Reviewed by john
3051
3052         * khtml/rendering/render_flow.cpp:
3053         (RenderFlow::paintLines):
3054
3055 2005-01-03  David Hyatt  <hyatt@apple.com>
3056
3057         Fix for float painting regressions 3932524, 3931664, and 3933068.  Make the noPaint flag setting more
3058         robust and make it work regardless of which objects get a layout or not.
3059         
3060         Reviewed by mjs
3061
3062         * khtml/rendering/render_block.cpp:
3063         (khtml::RenderBlock::insertFloatingObject):
3064         (khtml::RenderBlock::addOverhangingFloats):
3065         (khtml::RenderBlock::addIntrudingFloats):
3066         * khtml/rendering/render_block.h:
3067         (khtml::RenderBlock::FloatingObject::FloatingObject):
3068
3069 2005-01-03  Maciej Stachowiak  <mjs@apple.com>
3070
3071         Reviewed by Kevin.
3072
3073         <rdar://problem/3935390> Tiger 8A341: nil deref crash in DOM::NodeImpl::traverseNextNode
3074         
3075         * khtml/html/html_miscimpl.cpp:
3076         (HTMLCollectionImpl::traverseNextItem): Assert that the starting point is not nil,
3077         it should not ever be (now).
3078         (HTMLCollectionImpl::item): When traversing items stop when we hit
3079         nil, meaning the end to avoid triggering above assert (formerly crash).
3080
3081 2005-01-03  Maciej Stachowiak  <mjs@apple.com>
3082
3083         Reviewed by John and Kevin.
3084
3085         <rdar://problem/3870317> REGRESSION(125.9-125.11) broken behavior at test.profoundlearning.com - used to
3086         
3087         * khtml/ecma/kjs_window.cpp:
3088         (Window::get): Look up frame names before buitin window properties
3089         to match other browsers. This regressed because we added a builtin
3090         "toolbar" property but this site had a frame with that name.
3091
3092 2004-12-21  Maciej Stachowiak  <mjs@apple.com>
3093
3094         Reviewed by Darin.
3095
3096         <rdar://problem/3888931> frame naming allows malicious site to bring up a window when you click on a link in another
3097         
3098         Added opener bridge method to help WebKit implement security check
3099         for named frame visibility.
3100         
3101         * khtml/khtml_part.h:
3102         * kwq/WebCoreBridge.h:
3103         * kwq/WebCoreBridge.mm:
3104         (-[WebCoreBridge opener]):
3105
3106 2005-01-03  Ken Kocienda  <kocienda@apple.com>
3107
3108         Reviewed by John
3109
3110         Fix for this bug:
3111         
3112         <rdar://problem/3933926> Tiger8A341: Mail crashes while forwarding embedded HTML message in -[WebCoreBridge ensureSelectionVisible]
3113
3114         * kwq/WebCoreBridge.mm:
3115         (-[WebCoreBridge ensureSelectionVisible]): Put in some null checks to prevent crash experienced in bug.
3116
3117 2005-01-03  David Hyatt  <hyatt@apple.com>
3118
3119         Fix for 3936881, make sure positioned objects prooperly update y-position.
3120         
3121         Reviewed by john
3122
3123         * khtml/rendering/render_block.cpp:
3124         (khtml::RenderBlock::layoutPositionedObjects):
3125
3126 2005-01-03  Ken Kocienda  <kocienda@apple.com>
3127
3128         Reviewed by Harrison
3129         
3130         Fix for this bug:
3131         
3132         <rdar://problem/3928250> REGRESSION (Mail): Typing style lost after hitting return key
3133
3134         * khtml/editing/htmlediting.cpp:
3135         (khtml::InsertLineBreakCommand::preservesTypingStyle): Now implemented, returning yes for this command.
3136         (khtml::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand): Initialize new typing style member variable.
3137         (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand): Deref new typing style member variable.
3138         (khtml::InsertParagraphSeparatorCommand::preservesTypingStyle): Now implemented, returning yes for this command.
3139         (khtml::InsertParagraphSeparatorCommand::setFullTypingStyleBeforeInsertion): New function to set the typing style
3140         (khtml::InsertParagraphSeparatorCommand::calculateAndSetTypingStyleAfterInsertion): Function called after the <p>
3141         insertion is done. This function diffs the style created in setFullTypingStyleBeforeInsertion() with the style
3142         of the new <p> and only sets those styles needed to preserve the style in effect before the insertion.
3143         (khtml::InsertParagraphSeparatorCommand::doApply): Call new functions.
3144         (khtml::TypingCommand::preservesTypingStyle): Now yes for inserting line breaks and paragraphs.
3145          * khtml/editing/htmlediting.h: Declare new functions.
3146
3147 2004-12-25  Kevin Decker  <kdecker@apple.com>
3148
3149         Reviewed by Hyatt.
3150
3151         Fixed: <rdar://problem/3505072> hang in KHTMLParser::parseToken (consulting.soroos.net)
3152         
3153         * khtml/html/dtd.cpp: <label> needed a much higher priority such that it will close block elements.  Malformed HTML (ugh) is the only reason why we need to do this. 
3154
3155 2004-12-23  Darin Adler  <darin@apple.com>
3156
3157         Reviewed by Ken.
3158
3159         - re-fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
3160
3161         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
3162         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
3163
3164         * khtml/editing/htmlediting.cpp:
3165         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
3166         per-document tags and is just better all around for things like the document.
3167         (khtml::debugNode): Ditto.
3168         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
3169         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
3170         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
3171         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
3172
3173         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
3174         non-HTML elements to be nested as desired.
3175
3176         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
3177         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
3178         much larger number.
3179         * khtml/html/htmlparser.cpp:
3180         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
3181         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
3182         to eliminate code that used ID_CLOSE_TAG for an array size.
3183         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
3184         that manages isindex to use deref instead of delete.
3185         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
3186         mistake of using ID_CLOSE_TAG for the array size too.
3187         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
3188         there and it would prevent custom tags from working. Added range check before using the forbidden
3189         tag array with the token ID since custom tags will use index values past the end of the array.
3190         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
3191         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
3192         createElement call is still here. Last time I left out a few form element types from this switch;
3193         fixed now.
3194         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
3195         document if getTagID fails; this creates a unique per-document ID.
3196
3197         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
3198         * khtml/misc/htmlhashes.cpp:
3199         (khtml::getTagID): Changed return type to unsigned short.
3200         (khtml::getAttrID): Ditto.
3201
3202         * khtml/misc/htmltags.c: Regenerated.
3203         * khtml/misc/htmltags.h: Regenerated.
3204
3205         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
3206         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
3207         Also rewrote getTagName to work with the new scheme.
3208
3209         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
3210         * khtml/xml/dom_docimpl.cpp:
3211         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
3212         Also updated for a few tags that the parser handled but this did not.
3213
3214         * kwq/KWQRenderTreeDebug.cpp:
3215         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
3216         the tag ID directly, which only works for standard nodes.
3217         (operator<<): Update to call getTagName.
3218         (nodePositionRelativeToRoot): Ditto.
3219         (writeSelection): Ditto.
3220
3221 === Safari-177 ===
3222
3223 2004-12-22  Darin Adler  <darin@apple.com>
3224
3225         - rolled out my custom tag name change -- it broke amazon.com
3226
3227         * khtml/css/cssstyleselector.cpp:
3228         * khtml/editing/htmlediting.cpp:
3229         * khtml/editing/selection.cpp:
3230         * khtml/editing/visible_position.cpp:
3231         * khtml/html/dtd.cpp:
3232         * khtml/html/htmlparser.cpp:
3233         * khtml/html/htmlparser.h:
3234         * khtml/html/htmltokenizer.cpp:
3235         * khtml/misc/htmlhashes.cpp:
3236         * khtml/misc/htmlhashes.h:
3237         * khtml/misc/htmltags.c:
3238         * khtml/misc/htmltags.h:
3239         * khtml/misc/maketags:
3240         * khtml/xml/dom_docimpl.cpp:
3241         * khtml/xml/dom_docimpl.h:
3242         * khtml/xml/dom_nodeimpl.cpp:
3243         * khtml/xml/dom_position.cpp:
3244         * kwq/KWQRenderTreeDebug.cpp:
3245
3246 2004-12-22  David Harrison  <harrison@apple.com>
3247
3248         Reviewed by Darin Adler.
3249
3250         * khtml/editing/selection.cpp:
3251         (khtml::Selection::validate):
3252         The selecting/deselecting bad behavior is because the Selection code that expands by words
3253         had an inaccurate test for being at the end of the document (where double-clicking needs
3254         to select the last word).  Fixed that check.
3255
3256 2004-12-22  Adele Amchan  <adele@apple.com>
3257
3258         Reviewed by Chris.
3259
3260         Fix for <rdar://problem/3911650> tabs at safeway.com stop working after a while
3261
3262         * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::scrollToAnchor): removed call to cancelRedirection 
3263           so that we match Firefox and WinIE behavior.
3264
3265 2004-12-22  Darin Adler  <darin@apple.com>
3266
3267         Reviewed by Ken.
3268
3269         - fixed <rdar://problem/3760910> Request to include support for custom tag names in HTML (they already work in XML)
3270
3271         * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector): Changed
3272         some code that used ID_LAST_TAG in a slightly wrong, but harmless, way.
3273
3274         * khtml/editing/htmlediting.cpp:
3275         (khtml::debugPosition): Use nodeName rather than getTagName, since the latter works for
3276         per-document tags and is just better all around for things like the document.
3277         (khtml::debugNode): Ditto.
3278         * khtml/editing/selection.cpp: (khtml::Selection::debugPosition): Ditto.
3279         * khtml/editing/visible_position.cpp: (khtml::VisiblePosition::debugPosition): Ditto.
3280         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::displayNode): Ditto.
3281         * khtml/xml/dom_position.cpp: (DOM::Position::debugPosition): Ditto.
3282
3283         * khtml/html/dtd.cpp: (DOM::checkChild): Use ID_LAST_TAG rather than 1000 for the check that allows
3284         non-HTML elements to be nested as desired.
3285
3286         * khtml/html/htmlparser.h: Change forbidden tag array to be allocated in the object rather than on
3287         the heap. Also use ID_LAST_TAG for the array size; the old code used ID_CLOSE_TAG which is now a
3288         much larger number.
3289         * khtml/html/htmlparser.cpp:
3290         (KHTMLParser::KHTMLParser): Remove code that creates the forbidden tag array on the heap; makes more
3291         sense to just have the array be a member so we don't have to use new and delete on it. Also needed
3292         to eliminate code that used ID_CLOSE_TAG for an array size.
3293         (KHTMLParser::~KHTMLParser): Remove code that deletes the forbidden tag array. Also changed the code
3294         that manages isindex to use deref instead of delete.
3295         (KHTMLParser::reset): Use safer sizeof for clearing the forbidden tag array. Old code had the
3296         mistake of using ID_CLOSE_TAG for the array size too.
3297         (KHTMLParser::parseToken): Removed code that checks for bogus tags; it's not clear why it was ever
3298         there and it would prevent custom tags from working. Added range check before using the forbidden
3299         tag array with the token ID since custom tags will use index values past the end of the array.
3300         (KHTMLParser::getElement): Removed most of the code that makes an element by ID; now the work is done
3301         inside the DocumentImpl createHTMLElement. Any code that needs to be different than a dynamic
3302         createElement call is still here.
3303         * khtml/html/htmltokenizer.cpp: (khtml::HTMLTokenizer::parseTag): Call the tagId function in the
3304         document if getTagID fails; this creates a unique per-document ID.
3305
3306         * khtml/misc/htmlhashes.h: Changed return types to unsigned short.
3307         * khtml/misc/htmlhashes.cpp:
3308         (khtml::getTagID): Changed return type to unsigned short.
3309         (khtml::getAttrID): Ditto.
3310
3311         * khtml/misc/htmltags.c: Regenerated.
3312         * khtml/misc/htmltags.h: Regenerated.
3313
3314         * khtml/misc/maketags: Changed the generated constants to use "const unsigned short" instead of "#define".
3315         Changed ID_CLOSE_TAG to be a fixed value of 32000 rather than being just past the IDs of the HTML tags.
3316         Also rewrote getTagName to work with the new scheme.
3317
3318         * khtml/xml/dom_docimpl.h: Added overload of createHTMLElement, made it non-virtual since it's not overriden.
3319         * khtml/xml/dom_docimpl.cpp:
3320         (DocumentImpl::createHTMLElement): Refactored into two separate functions, one that takes the tag ID.
3321         Also updated for a few tags that the parser handled but this did not.
3322
3323         * kwq/KWQRenderTreeDebug.cpp:
3324         (getTagName): Added. Works for custom nodes, because it calls nodeName rather than using getTagName on
3325         the tag ID directly, which only works for standard nodes.
3326         (operator<<): Update to call getTagName.
3327         (nodePositionRelativeToRoot): Ditto.
3328         (writeSelection): Ditto.
3329
3330 2004-12-21  David Harrison  <harrison@apple.com>
3331
3332         Reviewed by Ken Kocienda.
3333
3334         <rdar://problem/3924934> REGRESSION: double click at end of line selects start of next line
3335
3336         Problem was the TextIterator was not handling exitNode() from a P block properly.
3337         
3338         * khtml/editing/visible_text.cpp:
3339         (khtml::TextIterator::TextIterator):
3340         Add new param that specifies whether the iterator is for content or for searching.
3341         Search iterators do not prevent newlines at the beginning.
3342         (khtml::TextIterator::advance):
3343         Added some comments.
3344         (khtml::TextIterator::handleTextNode):
3345         Added some comments.
3346         (khtml::TextIterator::exitNode):
3347         Emit newline for P (and other) blocks with position following the block, instead of the m_lastTextNode.
3348         (khtml::TextIterator::emitCharacter):
3349         Added some comments.
3350         (khtml::TextIterator::range):
3351         Added some comments.
3352         (khtml::CharacterIterator::CharacterIterator):
3353         Specify search type TextIterator.
3354         (khtml::CharacterIterator::advance):
3355         * khtml/editing/visible_text.h:
3356         (khtml::):
3357         Add new TextIterator::TextIterator param that specifies whether the iterator is for content or for searching.
3358         * khtml/editing/visible_units.cpp:
3359         (khtml::nextWordBoundary):
3360         Specify search type TextIterator.
3361
3362 2004-12-21  David Harrison  <harrison@apple.com>
3363
3364         Reviewed by Ken Kocienda.
3365
3366         <rdar://problem/3924695> REGRESSION (Mail): double-clicking past end of line shows no selection, should select to EOL
3367         
3368         Problem was that RenderText::setSelectionState did not handle the SelectionStart case where start and end are the end of the line.
3369         Fixed by pretending the start == end-1 in that situation, as long as end > 0.
3370         
3371         * khtml/rendering/render_text.cpp:
3372         (RenderText::setSelectionState)
3373
3374 2004-12-21  Maciej Stachowiak  <mjs@apple.com>
3375
3376         Reviewed by John.
3377
3378         <rdar://problem/3929187> WebKit needs to restrict access to certain window operations by domain
3379         
3380         * khtml/ecma/kjs_window.cpp:
3381         (Window::get): Change most window functions to be restricted by
3382         XSS domain check.
3383
3384 2004-12-21  Ken Kocienda  <kocienda@apple.com>
3385
3386         Reviewed by John
3387
3388         Fix for this bug:
3389         
3390         <rdar://problem/3928305> selecting an entire line and typing over causes new inserted text at top of document
3391
3392         * khtml/editing/htmlediting.cpp:
3393         (khtml::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent): New function to detect case
3394         formerly undetected and unhandled. This is the crux of the bug fix.
3395         (khtml::DeleteSelectionCommand::doApply): Call insertPlaceholderForAncestorBlockContent() during
3396         execution of command.
3397         * khtml/editing/htmlediting.h: Declare new function.
3398         * layout-tests/editing/deleting/delete-3928305-fix-expected.txt: Added.
3399         * layout-tests/editing/deleting/delete-3928305-fix.html: Added.
3400
3401 2004-12-21  Ken Kocienda  <kocienda@apple.com>
3402
3403         Reviewed by me
3404
3405         * khtml/editing/htmlediting.cpp:
3406         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Note to self: Must compile code before
3407         checking in (aka must return false from function returning bool).
3408
3409 2004-12-21  Ken Kocienda  <kocienda@apple.com>
3410
3411         Reviewed by John
3412         
3413         Fix for this bug:
3414         
3415         <rdar://problem/3927752> Crash in khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded(DOM::NodeImpl*)
3416
3417         * khtml/editing/htmlediting.cpp:
3418         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Added some null checks.
3419         (khtml::CompositeEditCommand::removeBlockPlaceholderIfNeeded): Ditto.
3420
3421 2004-12-21  Ken Kocienda  <kocienda@apple.com>
3422
3423         Reviewed by Darin
3424
3425         * khtml/editing/htmlediting.cpp:
3426         (khtml::ReplacementFragment::mergeStartNode): Refine concept of how this node is found based on
3427         further experiements.
3428         (khtml::ReplaceSelectionCommand::doApply): Add a special case for determining merges that need to
3429         be done if the insertion point is in an empty block.
3430         * layout-tests/editing/pasteboard/paste-text-012-expected.txt: Added.
3431         * layout-tests/editing/pasteboard/paste-text-012.html: Added.
3432         * layout-tests/editing/pasteboard/paste-text-013-expected.txt: Added.
3433         * layout-tests/editing/pasteboard/paste-text-013.html: Added.
3434         * layout-tests/editing/pasteboard/paste-text-014-expected.txt: Added.
3435         * layout-tests/editing/pasteboard/paste-text-014.html: Added.
3436
3437 2004-12-21  Darin Adler  <darin@apple.com>
3438
3439         Reviewed by Ken.
3440
3441         - fixed <rdar://problem/3899133> text search in a Safari window takes a very long time on Tiger updates page (and some other pages)
3442
3443         * khtml/editing/visible_text.h: Add an "offset base node" parameter to emitCharacter, and also
3444         add a field to track it. Must make a few things mutable so we can update them in the range accessor.
3445         * khtml/editing/visible_text.cpp:
3446         (khtml::TextIterator::advance): Pass in base node and offsets rather than computing actual offsets
3447         using the node's index. We only compute the node index if actually asked for the range.
3448         (khtml::TextIterator::handleTextNode): Pass 0 for base node and set base node to 0 when setting
3449         up the offsets.
3450         (khtml::TextIterator::handleTextBox): Ditto.
3451         (khtml::TextIterator::handleReplacedElement): Pass base node and set base node instead of calling
3452         nodeIndex.
3453         (khtml::TextIterator::handleNonTextNode): Pass 0 for offset.
3454         (khtml::TextIterator::exitNode): More of the same.
3455         (khtml::TextIterator::emitCharacter): Ditto.
3456         (khtml::TextIterator::range): If an offset base node is stored, then get its node index, and then
3457         add that in to the offsets. Doing the work here guarantees it's done only once when doing a text search.
3458
3459         - another small fix
3460
3461         * khtml/khtml_part.cpp: Removed SPEED_DEBUG define. Not sure why it was on.
3462
3463 === Safari-176 ===
3464
3465 2004-12-20  Ken Kocienda  <kocienda@apple.com>
3466
3467         Reviewed by Darin
3468
3469         * khtml/editing/htmlediting.cpp:
3470         (khtml::DeleteSelectionCommand::moveNodesAfterNode): My one-liner for this bug introduced layout test
3471         regressions: <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
3472         Rolling out until I can develop a real fix.
3473
3474 2004-12-20  David Harrison  <harrison@apple.com>
3475
3476         Reviewed by Dave Hyatt.
3477         
3478         Initial checkin of AXTextMarkerRef support.
3479
3480         * khtml/xml/dom_docimpl.cpp:
3481         (DocumentImpl::updateSelection):
3482         (DocumentImpl::setFocusNode):
3483         * kwq/KWQAccObject.h:
3484         * kwq/KWQAccObject.mm:
3485         (-[KWQAccObject detach]):
3486         (-[KWQAccObject anchorElement]):
3487         (-[KWQAccObject addChildrenToArray:]):
3488         (-[KWQAccObject accessibilityAttributeNames]):
3489         (-[KWQAccObject accessibilityActionDescription:]):
3490         (-[KWQAccObject accessibilityPerformAction:]):
3491         (-[KWQAccObject textMarkerRangeFromMarkers:andEndMarker:]):
3492         (-[KWQAccObject textMarkerForVisiblePosition:]):
3493         (-[KWQAccObject visiblePositionForTextMarker:]):
3494         (-[KWQAccObject AXTextMarkerRangeCopyStartMarkerWrapper:]):
3495         (-[KWQAccObject AXTextMarkerRangeCopyEndMarkerWrapper:]):
3496         (-[KWQAccObject visiblePositionForStartOfTextMarkerRange:]):
3497         (-[KWQAccObject visiblePositionForEndOfTextMarkerRange:]):
3498         (-[KWQAccObject accessibilityAttributeValue:]):
3499         (-[KWQAccObject accessibilityParameterizedAttributeNames]):
3500         (-[KWQAccObject textMarkerRangeFromVisiblePositions:andEndPos:]):
3501         (-[KWQAccObject getSelectedTextMarkerRange]):
3502         (-[KWQAccObject doAXLineForTextMarker:]):
3503         (-[KWQAccObject doAXTextMarkerRangeForLine:]):
3504         (-[KWQAccObject doAXStringForTextMarkerRange:]):
3505         (-[KWQAccObject doAXNextTextMarkerForTextMarker:]):
3506         (-[KWQAccObject doAXPreviousTextMarkerForTextMarker:]):
3507         (-[KWQAccObject doAXLeftWordTextMarkerRangeForTextMarker:]):
3508         (-[KWQAccObject doAXRightWordTextMarkerRangeForTextMarker:]):
3509         (-[KWQAccObject doAXLeftLineTextMarkerRangeForTextMarker:]):
3510         (-[KWQAccObject doAXRightLineTextMarkerRangeForTextMarker:]):
3511         (-[KWQAccObject accessibilityAttributeValue:forParameter:]):
3512         (-[KWQAccObject accessibilityFocusedUIElement]):
3513         (-[KWQAccObject clearChildren]):
3514         (-[KWQAccObject accObjectID]):
3515         (-[KWQAccObject setAccObjectID:]):
3516         (-[KWQAccObject removeAccObjectID]):
3517         * kwq/KWQAccObjectCache.h:
3518         * kwq/KWQAccObjectCache.mm:
3519         (KWQAccObjectCache::KWQAccObjectCache):
3520         (KWQAccObjectCache::~KWQAccObjectCache):
3521         (KWQAccObjectCache::getAccObjectID):
3522         (KWQAccObjectCache::removeAccObjectID):
3523         (KWQAccObjectCache::textMarkerForVisiblePosition):
3524         (KWQAccObjectCache::visiblePositionForTextMarker):
3525
3526 2004-12-19  Darin Adler  <darin@apple.com>
3527
3528         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added nil check.
3529
3530 2004-12-19  Darin Adler  <darin@apple.com>
3531
3532         Reviewed by Kevin.
3533
3534         - a garbage collection fix
3535
3536         * kwq/KWQFoundationExtras.h: (KWQCFAutorelease): Added a more-extensive comment and fixed the BUILDING_ON_PANTHER
3537         #ifndef to use #if (in practice, either is OK).
3538         * kwq/KWQKURL.mm: (KURL::getNSURL): Use KWQCFAutorelease instead of autorelease.
3539
3540 2004-12-17  David Hyatt  <hyatt@apple.com>
3541
3542         Fix for 3923255, specified percentage heights of divs with overflow auto inside tables not honored.
3543         
3544         Reviewed by kocienda
3545
3546         * khtml/rendering/render_box.cpp:
3547         (RenderBox::calcPercentageHeight):
3548         * khtml/rendering/render_table.cpp:
3549         (RenderTableSection::layoutRows):
3550
3551 2004-12-17  David Harrison  <harrison@apple.com>
3552
3553         Reviewed by Ken Kocienda.
3554
3555         <rdar://problem/3924930> REGRESSION: triple click does not select to end of line
3556         
3557         * khtml/editing/visible_units.cpp:
3558         (khtml::endOfParagraph):
3559         When includeLineBreak is true, allow traversal to next node after enclosingBlockFlowElement.
3560
3561 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3562
3563         Reviewed by Vicki
3564
3565         * khtml/editing/htmlediting.cpp:
3566         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Missed deleting some now-obsolete expcetion
3567         codes when I added the createBreakElement() function.
3568
3569 2004-12-17  Richard Williamson   <rjw@apple.com>
3570
3571         Set the floor of max cacheable object size to 40K.  This restores
3572         the long standing floor.  Lower floor deleteriously impacts the PLT.
3573         Reviewed by Hyatt.
3574
3575         * khtml/khtml_part.cpp:
3576         (KHTMLPart::checkCompleted):
3577         * khtml/misc/loader.cpp:
3578         (Cache::setSize):
3579
3580 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3581
3582         Reviewed by Hyatt
3583
3584         Fix for this bug:
3585         
3586         <rdar://problem/3926142> REGRESSION (Mail): Deleting text decreases quote level
3587
3588         * khtml/editing/htmlediting.cpp:
3589         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Stop merging nodes when a <br> is hit.
3590         Formerly checked only for block boundary.
3591
3592 2004-12-17  David Harrison  <harrison@apple.com>
3593
3594         Reviewed by Darin.
3595
3596                 Add KWQCFAutorelease for autoreleasing CF objects.
3597         * kwq/KWQFoundationExtras.h:
3598         (KWQCFAutorelease):
3599         New.
3600
3601 2004-12-17  David Harrison  <harrison@apple.com>
3602
3603         Reviewed by Darin.
3604
3605                 Fix GC compatibility in getNSString.
3606
3607         * kwq/KWQString.mm:
3608         (QString::getNSString):
3609                 Use NSString allocator instead of CFString, so that autorelease works under GC.
3610
3611 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3612
3613         Reviewed by Hyatt
3614
3615         Fix for this bug:
3616         
3617         <rdar://problem/3890973> REGRESSION (Mail): Deleting reorders remaining text
3618
3619         * khtml/editing/htmlediting.cpp:
3620         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Added check to ensure that moving content will not
3621         move it after the <body> element.
3622
3623 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3624
3625         Reviewed by me
3626         
3627         Added new layout tests covering cases from recent bug fixes.
3628
3629         * layout-tests/editing/inserting/insert-div-018-expected.txt: Added.
3630         * layout-tests/editing/inserting/insert-div-018.html: Added.
3631         * layout-tests/editing/inserting/insert-div-019-expected.txt: Added.
3632         * layout-tests/editing/inserting/insert-div-019.html: Added.
3633         * layout-tests/editing/inserting/insert-div-020-expected.txt: Added.
3634         * layout-tests/editing/inserting/insert-div-020.html: Added.
3635         * layout-tests/editing/inserting/insert-div-021-expected.txt: Added.
3636         * layout-tests/editing/inserting/insert-div-021.html: Added.
3637
3638 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3639
3640         Reviewed by me
3641
3642         Changes in layout resulting from giving <p> elements no margin rather than 0.1em margin.
3643
3644         * layout-tests/editing/inserting/insert-div-013-expected.txt
3645         * layout-tests/editing/inserting/insert-div-014-expected.txt
3646
3647 2004-12-17  Ken Kocienda  <kocienda@apple.com>
3648
3649         Reviewed by John
3650
3651         Fix for this bug:
3652         
3653         <rdar://problem/3925317> Increase quote in email and with cursor below the quote the new line appears above the quote
3654
3655         * khtml/editing/htmlediting.cpp:
3656         (khtml::InsertParagraphSeparatorCommand::doApply):
3657         * khtml/editing/visible_position.cpp: Refine rules for whether to use the starting node or the starting
3658         block as the reference node for the insertion of the new block.
3659         (khtml::isLastVisiblePositionInBlock): Tweak rules again. Descendants of following blocks should answer true.
3660         I worked this all out on the whiteboard this time. This should be the last tweak.
3661
3662 2004-12-17  Kevin Decker  <kdecker@apple.com>
3663
3664         Reviewed by Ken.
3665
3666         Fixed <rdar://problem/3824438> Need a clean way for Dashboard to detect when an XML parsing error occurs
3667
3668         * khtml/xml/xml_tokenizer.cpp:
3669         (khtml::XMLTokenizer::insertErrorMessageBlock): In the xml error report, instead of a generic <div>, use <parsererror> to match Mozilla.
3670
3671 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3672
3673         Reviewed by Chris
3674
3675         Fix for this bug:
3676         
3677         <rdar://problem/3924888> REGRESSION (Mail): Hitting return key at end of line does not insert visible newline
3678
3679         * khtml/editing/htmlediting.cpp:
3680         (khtml::InsertParagraphSeparatorCommand::doApply): Tweaked code I added just before to fix 3924486, so that
3681         it checks the downstream node for the starting position.
3682
3683 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3684
3685         Reviewed by Chris
3686
3687         Added new createBreakElement() function that makes creating a <br> element a one-liner.
3688         Converted all the code that used to call the DocumentImpl, and dealt with the exceptionCode,
3689         over to this new helper.
3690
3691         * khtml/editing/htmlediting.cpp:
3692         (khtml::DeleteSelectionCommand::moveNodesAfterNode): Now uses new helper function.
3693         (khtml::InsertLineBreakCommand::doApply): Ditto.
3694         (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
3695         (khtml::InsertParagraphSeparatorInQuotedContentCommand::doApply): Ditto.
3696         (khtml::ReplaceSelectionCommand::doApply): Ditto.
3697         (khtml::createBreakElement): New helper.
3698         * khtml/editing/htmlediting.h: Ditto.
3699
3700 2004-12-16  David Hyatt  <hyatt@apple.com>
3701
3702         Fix a bug where vertical-align values that depended on their parent's value went crazy if the parent was
3703         vertical-align top or bottom.  The bug is 3771007, bankofamerica's ebills page.
3704         
3705         Reviewed by kocienda
3706
3707         * khtml/rendering/render_object.cpp:
3708         (RenderObject::getVerticalPosition):
3709
3710 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3711
3712         Reviewed by John
3713
3714         Fix for these bugs:
3715         
3716         <rdar://problem/3924486> REGRESSION (Mail): Hitting return key does not insert visible newline
3717         <rdar://problem/3924579> REGRESSION (Mail): After deleting, hitting return key does not insert visible newline
3718
3719         * khtml/editing/htmlediting.cpp:
3720         (khtml::InsertParagraphSeparatorCommand::doApply): For the first bug, detect when inserting a <p> will
3721         make a visible <br> collapse. For the second bug, move the code that inserts the new <p> after
3722         a check which may move the node used as the reference node for the insertion. Also change this code to
3723         insert the <p> after the last sibling of the starting position, to move it past the nodes we're going
3724         to want to shift into the new <p>.
3725
3726 2004-12-16  Darin Adler  <darin@apple.com>
3727
3728         Reviewed by Ken.
3729
3730         - use <p> elements rather than <br> when pasting plain text; also use margin of 0 rather than 0.1 em
3731           after talking this over with Dave and Ken
3732
3733         * khtml/editing/htmlediting.h: Added createDefaultParagraphElement and createBlockPlaceholderElement.
3734         * khtml/editing/htmlediting.cpp:
3735         (khtml::CompositeEditCommand::insertBlockPlaceholderIfNeeded): Use new createBlockPlaceholderElement
3736         helper so this can share code with the plain-text conversion code.
3737         (khtml::InsertParagraphSeparatorCommand::createParagraphElement): Use new createDefaultParagraphElement
3738         helper so this can share code with the plain-text conversion code.
3739         (khtml::createDefaultParagraphElement): Added.
3740         (khtml::createBlockPlaceholderElement): Added.
3741
3742         * khtml/editing/markup.cpp: (khtml::createFragmentFromText): Use paragraphs rather than
3743         <br> elements for pasting plain text.
3744
3745         - regenerated these files with the newer gperf
3746
3747         * khtml/css/cssproperties.c: Regenerated.
3748         * khtml/css/cssvalues.c: Regenerated.
3749         * khtml/misc/htmlattrs.c: Regenerated.
3750         * khtml/misc/htmltags.c: Regenerated.
3751
3752 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3753
3754         Reviewed by Hyatt
3755
3756         Fix for this bug:
3757         
3758         <rdar://problem/3924291> REGRESSION (Mail): Crash deleting content following a <p> element
3759
3760         * khtml/xml/dom_nodeimpl.cpp:
3761         (NodeImpl::enclosingInlineElement): Fixed problem in this function where recursive search for
3762         parent that is not an inline would skip past previous siblings of nodes which were blocks. Now
3763         it stops looking in this situation. This problem eventually caused the delete code to try to 
3764         merge a node under a descendent.
3765
3766 2004-12-16  Adele Amchan  <adele@apple.com>
3767
3768         Change by Richard, reviewed by me.
3769
3770         Fix for: <rdar://problem/3923983> background image decoding prevents page with 0Kb image from finishing to load
3771
3772         * khtml/misc/loader.cpp: (CachedImage::data): Added call to notifyFinished so the 0Kb image case finishes loading.
3773
3774 2004-12-16  Adele Amchan  <adele@apple.com>
3775
3776         Reviewed by Chris.
3777
3778         Fix for: <rdar://problem/3534824> VIP: some navigation links on safeway.com don't work due to a JavaScript quirk
3779
3780         Added a call to ObjectImp::get before Window::get just returns Undefined.  
3781         This was preventing us from getting the toString function from a Window object.
3782
3783         * khtml/ecma/kjs_window.cpp: (Window::get):
3784
3785 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3786
3787         Reviewed by John
3788         
3789         Fix for this bug:
3790         
3791         <rdar://problem/3918351> REGRESSION (Mail, 173-175+): Return before first char of line leaves insertion point in wrong place
3792         
3793         * khtml/editing/htmlediting.cpp:
3794         (khtml::InsertParagraphSeparatorCommand::doApply): Basically, did a rewrite of this function
3795         to do a better job than it was doing before. Added several test cases to prove I am on a 
3796         better track.
3797         * khtml/editing/visible_position.cpp:
3798         (khtml::isFirstVisiblePositionInBlock): Tweaked the rules a bit to fix an issue very similar to the
3799         leaving-the-bar-node case problem I just fixed in a recent checkin (relevant markup: <p>foo</p>bar).
3800         This function was returning true for the first position in "bar". Wrong. Also tightened up other 
3801         rule: Should not report true when relationship between blocks cannot be determined.
3802         (khtml::isLastVisiblePositionInBlock): Tightened up rule as above: Should not report true 
3803         when relationship between blocks cannot be determined.
3804         * layout-tests/editing/inserting/insert-div-010-expected.txt: Added.
3805         * layout-tests/editing/inserting/insert-div-010.html: Added.
3806         * layout-tests/editing/inserting/insert-div-011-expected.txt: Added.
3807         * layout-tests/editing/inserting/insert-div-011.html: Added.
3808         * layout-tests/editing/inserting/insert-div-012-expected.txt: Added.
3809         * layout-tests/editing/inserting/insert-div-012.html: Added.
3810         * layout-tests/editing/inserting/insert-div-013-expected.txt: Added.
3811         * layout-tests/editing/inserting/insert-div-013.html: Added.
3812         * layout-tests/editing/inserting/insert-div-014-expected.txt: Added.
3813         * layout-tests/editing/inserting/insert-div-014.html: Added.
3814         * layout-tests/editing/inserting/insert-div-015-expected.txt: Added.
3815         * layout-tests/editing/inserting/insert-div-015.html: Added.
3816         * layout-tests/editing/inserting/insert-div-016-expected.txt: Added.
3817         * layout-tests/editing/inserting/insert-div-016.html: Added.
3818         * layout-tests/editing/inserting/insert-div-017-expected.txt: Added.
3819         * layout-tests/editing/inserting/insert-div-017.html: Added.
3820             
3821 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3822
3823         Reviewed by me
3824         
3825         Added a layout test based on my last checkin.
3826
3827         * layout-tests/editing/selection/move-by-word-001-expected.txt: Added.
3828         * layout-tests/editing/selection/move-by-word-001.html: Added.
3829
3830 2004-12-16  Ken Kocienda  <kocienda@apple.com>
3831
3832         Reviewed by John
3833
3834         Fix for this bug:
3835         
3836         <rdar://problem/3917929> REGRESSION (Mail): Command-left-arrow leaves insertion point too high after specific steps
3837
3838         * khtml/editing/visible_text.cpp: