Reviewed by Darin.
[WebKit-https.git] / WebCore / ChangeLog-2005-08-23
1 2004-08-17  Maciej Stachowiak  <mjs@apple.com>
2
3         Reviewed by Darin.
4
5         <rdar://problem/3703768> CrashTracer: ...50 crashes at com.apple.WebCore: KHTMLPart::xmlDocImpl const + 0
6         
7         * khtml/khtmlview.cpp:
8         (KHTMLView::viewportMouseMoveEvent): Add a nil check and an
9         assertion for m_part being null. It seems impossible for this to
10         happen, so we want to debug it ourselves, but in the meantime,
11         let's try to avoid causing crashes for our users.
12
13 2004-08-17  David Hyatt  <hyatt@apple.com>
14
15         Fix the line truncation function for Emerson so that at the far left setting of the slider, only the header
16         is visible.
17         
18         Reviewed by darin
19
20         * khtml/rendering/render_block.cpp:
21         (khtml::getHeightForLineCount):
22         * khtml/rendering/render_flexbox.cpp:
23         (khtml::RenderFlexibleBox::layoutVerticalBox):
24
25 2004-08-17  Ken Kocienda  <kocienda@apple.com>
26
27         Reviewed by Hyatt
28
29         Rewrite of the command that deletes a selection. I deleted great 
30         big swaths of bug-ridden code to accomplish this and replaced it
31         with code that is much cleaner and smarter.
32         
33         Also, renamed equivalentUpstreamPosition and equivalentDownstreamPosition to
34         upstream to downstream, respectively.
35         
36         Added a couple of new helper methods.
37         
38         * khtml/editing/htmlediting.cpp: DeleteCollapsibleWhitespaceCommand and
39         RemoveNodeAndPruneCommand now obsolete. A huge win.
40         * khtml/editing/htmlediting.h: Ditto.
41         * khtml/editing/htmlediting_impl.cpp:
42         (khtml::debugPosition): Fix printf which had a placeholder, but no argument passed in the varargs.
43         (khtml::CompositeEditCommandImpl::deleteUnrenderedText): New helper. Much simplified and cleaner
44         version of 
45         (khtml::ApplyStyleCommandImpl::doApply): upstream/downstream name change
46         (khtml::ApplyStyleCommandImpl::nodeFullySelected):  upstream/downstream name change
47         (khtml::DeleteSelectionCommandImpl::doApply):  upstream/downstream name change
48         (khtml::DeleteTextCommandImpl::DeleteTextCommandImpl): Add an assert to check that the
49         passed offset is less than the length of the text node.
50         (khtml::InputNewlineCommandImpl::insertNodeAfterPosition): upstream/downstream name change
51         (khtml::InputNewlineCommandImpl::insertNodeBeforePosition): upstream/downstream name change
52         (khtml::InputNewlineCommandImpl::doApply): upstream/downstream name change
53         (khtml::InputTextCommandImpl::prepareForTextInsertion): upstream/downstream name change
54         (khtml::InputTextCommandImpl::execute): upstream/downstream name change
55         (khtml::InputTextCommandImpl::insertSpace): upstream/downstream name change
56         (khtml::ReplaceSelectionCommandImpl::doApply): upstream/downstream name change
57         (khtml::TypingCommandImpl::issueCommandForDeleteKey): upstream/downstream name change
58         (khtml::TypingCommandImpl::deleteKeyPressed):
59         * khtml/editing/htmlediting_impl.h:
60         * khtml/xml/dom_position.cpp:
61         (DOM::Position::previousWordBoundary):
62         (DOM::Position::nextWordBoundary):
63         (DOM::Position::upstream):
64         (DOM::Position::downstream):
65         (DOM::Position::inRenderedText): Add null check.
66         (DOM::Position::isRenderedCharacter): New helper.
67         (DOM::isWS): New helper in this file.
68         (DOM::Position::leadingWhitespacePosition): New helper. Factored out from htmlediting_impl.cpp.
69         (DOM::Position::trailingWhitespacePosition): Ditto.
70         (DOM::Position::debugPosition): Add null check.
71         * khtml/xml/dom_position.h:
72         * khtml/xml/dom_selection.cpp:
73         (DOM::Selection::toRange): upstream/downstream name change
74         (DOM::Selection::validate): upstream/downstream name change
75         (DOM::Selection::debugPosition): upstream/downstream name change
76         * layout-tests/editing/deleting/delete-block-contents-003-expected.txt: Updated tests with new expected results.
77         * layout-tests/editing/deleting/delete-contiguous-ws-001-expected.txt: Ditto.
78         * layout-tests/editing/deleting/delete-selection-001-expected.txt: Ditto.
79         * layout-tests/editing/deleting/delete-trailing-ws-001-expected.txt: Ditto.
80         * layout-tests/editing/inserting/insert-br-case1-expected.txt: Ditto.
81         * layout-tests/editing/inserting/insert-br-case2-expected.txt: Ditto.
82         * layout-tests/editing/style/style-3681552-fix-002-expected.txt: Ditto.
83
84 2004-08-17  Trey Matteson  <trey@apple.com>
85
86         Various spelling fixes.
87
88         Reviewed by Ken.
89
90         * khtml/khtml_part.cpp:
91         (KHTMLPart::setSelection): No misspellings in the spelling code comments
92         * khtml/xml/dom_docimpl.cpp:
93         (DocumentImpl::removeMarker):  Repaint if doc changes.  Sometimes the markers
94         were not being erased when you clicked in a word.
95         * khtml/xml/dom_position.cpp:
96         (DOM::Position::previousWordBoundary):  Small optimization.  Bail after first
97         try if the second try will not come out any different.
98         (DOM::Position::nextWordBoundary):  Ditto
99         * kwq/KWQKHTMLPart.mm:
100         (KWQKHTMLPart::markMisspellingsInSelection):  Comment.
101
102 2004-08-17  Darin Adler  <darin@apple.com>
103
104         Reviewed by Maciej.
105
106         - fixed <rdar://problem/3689700> crash loading page; stoxx.com (works in IE and Firefox)
107
108         * khtml/khtml_part.h: Make completeURL public.
109         * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::KJavaAppletWidget): Complete the base URL
110         before passing it across the bridge. This sidesteps the crashing bug in CFURL, filed as
111         '<rdar://problem/3764632> CFURLCreateAbsoluteURLWithBytes crashes if passed the string "../.."'
112         and also is obviously correct behavior that may fix other sites too.
113
114         - fixed <rdar://problem/3547725> Crashes at csuohio.edu, list box vs. mouse event problem (Spoof No Fix)
115
116         * kwq/KWQListBox.mm:
117         (QListBox::~QListBox): Nil out the pointer from the KWQTableView back to the widget by calling
118         a new detach method.
119         (-[KWQTableView detach]): Set the pointer to the QListBox to 0. Also set the delegate and data
120         source to nil, so we don't need nil checks in delegate and data source methods.
121         (-[KWQTableView mouseDown:]): Add nil check.
122         (-[KWQTableView keyDown:]): Add nil check.
123         (-[KWQTableView keyUp:]): Add nil check.
124         (-[KWQTableView becomeFirstResponder]): Add nil check.
125         (-[KWQTableView resignFirstResponder]): Add nil check.
126         (-[KWQTableView canBecomeKeyView]): Add nil check.
127         (-[KWQTableView tableViewSelectionDidChange:]): Add nil checks, even though this is a delegate
128         callback, to handle cases where calls to JavaScript result in the QListBox going away partway
129         through.
130         (-[KWQTableView drawRow:clipRect:]): Add nil check.
131         (-[KWQTableView _accessibilityTableCell:tableColumn:]): Add nil check.
132
133 2004-08-17  Trey Matteson  <trey@apple.com>
134
135         Fix ASSERT in spelling marker management.
136
137         Reviewed by John.
138
139         * khtml/xml/dom_docimpl.cpp:
140         (DocumentImpl::shiftMarkers):  Use assert instead of ASSERT.
141         Tweak test to allow for a start position of 0.
142
143 2004-08-17  Trey Matteson  <trey@apple.com>
144
145         3764147 - failure of subframe to load leaves links in parent doc broken
146
147         Reviewed by Maciej.
148
149         * khtml/khtml_part.cpp:
150         (KHTMLPart::childBegin):  New method to mark part as not complete.
151         (KHTMLPart::processObjectRequest):  Mark child part imcomplete, so if we
152         later get a failure on load it won't think it's already complete and do nothing.
153         * khtml/khtml_part.h:
154
155 === Safari-157 ===
156
157 2004-08-16  David Hyatt  <hyatt@apple.com>
158
159         Fix the #define.  I had it all backwards.
160         
161         * WebCorePrefix.h:
162
163 2004-08-16  David Hyatt  <hyatt@apple.com>
164
165         Land initial support for XSLT using xml-stylesheet PIs.
166         
167         * WebCore.pbproj/project.pbxproj:
168         * khtml/khtml_part.cpp:
169         (KHTMLPart::replaceDocImpl):
170         * khtml/khtml_part.h:
171         * khtml/khtmlview.h:
172         * khtml/xml/dom_docimpl.cpp:
173         (DocumentImpl::DocumentImpl):
174         (DocumentImpl::~DocumentImpl):
175         (DocumentImpl::recalcStyleSelector):
176         (DocumentImpl::applyXSLTransform):
177         (DocumentImpl::setTransformSourceDocument):
178         * khtml/xml/dom_docimpl.h:
179         (DOM::DocumentImpl::setTransformSource):
180         (DOM::DocumentImpl::transformSource):
181         (DOM::DocumentImpl::transformSourceDocument):
182         * khtml/xml/dom_xmlimpl.cpp:
183         (DOM::ProcessingInstructionImpl::checkStyleSheet):
184         * khtml/xml/dom_xmlimpl.h:
185         (DOM::ProcessingInstructionImpl::isXSL):
186         * khtml/xml/xml_tokenizer.cpp:
187         (khtml::matchFunc):
188         (khtml::openFunc):
189         (khtml::createQStringParser):
190         (khtml::XMLTokenizer::processingInstruction):
191         (khtml::XMLTokenizer::finish):
192         (khtml::XMLTokenizer::setTransformSource):
193         * khtml/xml/xml_tokenizer.h:
194         (khtml::Tokenizer::setTransformSource):
195         * khtml/xml/xsl_stylesheetimpl.cpp: Removed.
196         * khtml/xml/xsl_stylesheetimpl.h: Removed.
197         * khtml/xsl/xsl_stylesheetimpl.cpp: Added.
198         (DOM::XSLStyleSheetImpl::XSLStyleSheetImpl):
199         (DOM::XSLStyleSheetImpl::~XSLStyleSheetImpl):
200         (DOM::XSLStyleSheetImpl::isLoading):
201         (DOM::XSLStyleSheetImpl::checkLoaded):
202         (DOM::XSLStyleSheetImpl::docLoader):
203         (DOM::XSLStyleSheetImpl::parseString):
204         * khtml/xsl/xsl_stylesheetimpl.h: Added.
205         (DOM::XSLStyleSheetImpl::isXSLStyleSheet):
206         (DOM::XSLStyleSheetImpl::type):
207         (DOM::XSLStyleSheetImpl::ownerDocument):
208         (DOM::XSLStyleSheetImpl::document):
209         (DOM::XSLStyleSheetImpl::clearDocument):
210         * khtml/xsl/xslt_processorimpl.cpp: Added.
211         (DOM::m_sourceDocument):
212         (DOM::XSLTProcessorImpl::~XSLTProcessorImpl):
213         (DOM::XSLTProcessorImpl::transformDocument):
214         (DOM::bufferWrite):
215         (DOM::XSLTProcessorImpl::addToResult):
216         (DOM::XSLTProcessorImpl::documentFromXMLDocPtr):
217         * khtml/xsl/xslt_processorimpl.h: Added.
218
219 2004-08-16  Maciej Stachowiak  <mjs@apple.com>
220
221         Fix build.
222
223         * khtml/khtml_part.cpp:
224         (KHTMLPart::isImmediateRedirectPending):
225
226 2004-08-16  Richard Williamson   <rjw@apple.com>
227
228         Fixed <rdar://problem/3704339> Context2D forces integer positions in drawImage
229
230         Use floats instead of ints to draw images.
231
232         Reviewed by Ken.
233
234         * khtml/ecma/kjs_html.cpp:
235         (KJS::Context2DFunction::tryCall):
236         * kwq/KWQPainter.h:
237         * kwq/KWQPainter.mm:
238         (QPainter::drawPixmap):
239         (QPainter::drawFloatPixmap):
240
241 2004-08-13  Maciej Stachowiak  <mjs@apple.com>
242
243         Reviewed by Darin.
244
245         - fixed <rdar://problem/3752509> Pop up windows not showing up within SAP's BW Module (changing location.href on new window created by window.open)
246         
247         (actually the previous fix for this bug was mostly correct, but
248         this additional change is needed to avoid the regression in
249         <rdar://problem/3751025> REGRESSION: website rejects Safari 125.9
250         as "need to upgrade to IE 6", but didn't reject 125.8
251
252         So if merging for a software update, make sure to include both
253         this and the previous fix.
254         
255         * khtml/html/htmltokenizer.cpp:
256         (khtml::HTMLTokenizer::write): When there is an immediate reidrect pending,
257         make sure to stop tokenizing, because we need to make sure no further
258         script tags are processed beyond the one that triggered the redirect.
259         * khtml/khtml_part.cpp:
260         (KHTMLPart::isImmediateRedirectPending): New method to allow
261         checking if a redirect is pending.
262         * khtml/khtml_part.h:
263
264 2004-08-15  David Hyatt  <hyatt@apple.com>
265
266         - fixed <rdar://problem/3760508> REGRESSION (154-155): No text in textarea
267
268         Fix the blank textarea problem by ensuring that any change to a <textarea>'s DOM children causes the form control
269         to resync with the DOM.  This behavior matches WinIE.
270         
271         Reviewed by kocienda
272
273         * khtml/html/html_formimpl.cpp:
274         (HTMLTextAreaElementImpl::childrenChanged):
275         * khtml/html/html_formimpl.h:
276
277 2004-08-13  Trey Matteson  <trey@apple.com>
278
279         3761794 Slider doesn't call onmouseup handler
280
281         Reviewed by Hyatt
282
283         * khtml/rendering/render_form.cpp:
284         (RenderSlider::RenderSlider):  Listen for signal.
285         (RenderSlider::slotClicked):  Pass to superclass.
286         * khtml/rendering/render_form.h:
287         * kwq/KWQSlider.h:
288         * kwq/KWQSlider.mm:
289         (-[KWQSlider mouseDown:]):  Generate mouseUp and clicked events,
290         since AK consumes the mouseUp event in a modal tracking loop.
291         (QSlider::QSlider):  Make signal.
292         (QSlider::clicked):  Send signal.
293
294 2004-08-12  Trey Matteson  <trey@apple.com>
295
296         3761329 - query result links all dead in ingrammicro.com (sometimes)
297         3761328 - links in some docs dead when doc is loaded from WebArchive
298
299         Make sure to get part to completed state when end is called,
300         even if we have no doc.  See WebKit changelog for more info.
301
302         Reviewed by Richard and Darin.
303
304         * khtml/khtml_part.cpp:
305         (KHTMLPart::end):
306
307 2004-08-13  Trey Matteson  <trey@apple.com>
308
309         3761098 - red dotted underline for misspelled words shows up in drag image
310
311         Reviewed by Ken
312
313         * khtml/rendering/render_text.cpp:
314         (RenderText::paint):  Don't draw misspelling when creating selection image.
315
316 2004-08-12  Richard Williamson   <rjw@apple.com>
317
318         Bring npruntime.h and friends closer to compliance with
319         latest spec.
320
321         Reviewed by Maciej.
322
323         * kwq/KWQKHTMLPart.mm:
324         (KWQKHTMLPart::windowScriptNPObject):
325
326 2004-08-12  Maciej Stachowiak  <mjs@apple.com>
327
328         Reviewed by Richard.
329
330         <rdar://problem/3245706> URLs with backslashes instead of slashes work on WinIE; should work on Safari (SAP)
331         <rdar://problem/3506429> <BASE> tag containing backslash is breaking images with absolute URLs
332         
333         * kwq/KWQKURL.mm:
334         (substituteBackslashes): Helper method
335         (KURL::KURL): If the URL contains any backslashes, substitute all
336         that appear before the query or fragment.
337
338 2004-08-12  Ken Kocienda  <kocienda@apple.com>
339
340         Reviewed by Chris
341
342         Fix for this bug:
343         
344         <rdar://problem/3761014> command-down-arrow takes you to start of document instead of end of document
345
346         * khtml/xml/dom_selection.cpp:
347         (DOM::Selection::modifyExtendingRightForward): Code used to assume, incorrectly, that index 1 of the
348         document element was beyond the last node in the document. But this is not true, since the document
349         element is the HTML element (generally). Instead, move to the index equal to the number of children
350         of the document element. This puts us past everything.
351         (DOM::Selection::modifyMovingRightForward): Ditto.
352
353 2004-08-12  Ken Kocienda  <kocienda@apple.com>
354
355         Reviewed by Trey
356
357         Fix for this bug:
358         
359         <rdar://problem/3695446> shift-down-arrow on last line of editable text should select to end of document
360         
361         Detect when current position is on first or last line and move to the
362         start or end of that line, respectively.
363
364         * khtml/xml/dom_position.cpp:
365         (DOM::Position::previousLinePosition)
366         (DOM::Position::nextLinePosition)
367
368 === Safari-156 ===
369
370 2004-08-12  Ken Kocienda  <kocienda@apple.com>
371
372         Reviewed by Darin
373
374         Some consolidation in style application code.
375
376         * khtml/editing/htmlediting_impl.cpp:
377         (khtml::StyleChange::StyleChange): Made this a full-on class and added a couple of 
378         members and a constructors to make a StyleChange from a CSSStyleDeclarationImpl, as
379         well as from a CSSStyleDeclarationImpl and a Position.
380         (khtml::StyleChange::init): Common init function for StyleChange constructors.
381         (khtml::StyleChange::currentlyHasStyle): Moved this here from ApplyStyleCommandImpl.
382         (khtml::CompositeEditCommandImpl::applyTypingStyle): Tweak to adjust to new StyleChange
383         interface.
384         (khtml::ApplyStyleCommandImpl::applyStyleIfNeeded): Ditto.
385         * khtml/editing/htmlediting_impl.h:
386         (khtml::StyleChange::StyleChange):
387         (khtml::StyleChange::cssStyle): New accessor.
388         (khtml::StyleChange::applyBold): Ditto.
389         (khtml::StyleChange::applyItalic): Ditto.
390         * khtml/xml/dom_position.cpp:
391         (DOM::Position::computedStyle): New helper.
392         * khtml/xml/dom_position.h: Ditto.
393
394 2004-08-12  Ken Kocienda  <kocienda@apple.com>
395
396         Reviewed by Darin
397
398         Fix for this bug:
399         <rdar://problem/3751098> HTML email has one set of SPAN tags per character in the message
400         
401         Progress on this bug:
402         <rdar://problem/3755562> Typing styles do not use same tag application conventions as font and color panel
403
404         * khtml/editing/htmlediting_impl.cpp:
405         (khtml::CompositeEditCommandImpl::applyTypingStyle): Name changed from createTypingStyleElement.
406         Also, interface changed to take the node to which the typing style is to be applied. 
407         This makes it easier to apply what may be up to three levels of nested tags to get the 
408         desired style (<B>, <I>, and <SPAN STYLE="">).
409         Also, Borrow some of the style change smarts from ApplyStyleCommandImpl to use bold and
410         italic tags for applying styles when that is apprpriate. This creates on opportunity to
411         factor the code to do this so that this function and the ApplyStyleCommandImpl class can
412         share the implementation. I will follow up with a change to do that after landing this
413         change. Some future code factoring could be done here to bring together some similar code
414         into one place.
415         (khtml::ApplyStyleCommandImpl::applyStyleIfNeeded): Add comment about code factoring work.
416         (khtml::ApplyStyleCommandImpl::computeStyleChange): StyleChange struct no longer a member of the
417         ApplyStyleCommandImpl class. CompositeEditCommandImpl needs it now in its applyTypingStyle()
418         function.
419         (khtml::InputNewlineCommandImpl::doApply): Pass along node to style to applyTypingStyle.
420         (khtml::InputTextCommandImpl::prepareForTextInsertion): Ditto.
421         * khtml/editing/htmlediting_impl.h:
422         (khtml::StyleChange::StyleChange): Pull this struct out of ApplyStyleCommandImpl so 
423         CompositeEditCommandImpl can use it.
424         * khtml/khtml_part.cpp:
425         (KHTMLPart::notifySelectionChanged): Always clear typing style when the selection
426         changes, not only when closing typing. This fixes 3751098.
427         
428         These three tests actually had results that treated the buggy behavior as correct!
429         
430         * layout-tests/editing/style/style-3681552-fix-001-expected.txt
431         * layout-tests/editing/style/style-3681552-fix-002-expected.txt
432         * layout-tests/editing/style/typing-style-002-expected.txt
433
434 2004-08-12  Darin Adler  <darin@apple.com>
435
436         Reviewed by Ken.
437
438         - fixed <rdar://problem/3740485> Repro crash involving replacing content that includes form field
439
440         * kwq/KWQLineEdit.mm: (QLineEdit::selectAll): Since this function calls selectText: which has a side
441         effect of making the text field be first responder, call to bridge first to make it first responder.
442         The bridge version lets WebHTMLView know we are changing the responder, avoiding some unpleasantness
443         because it sets the "changing focus programmatically" flag. Without that flag set, we were getting
444         an additional setFocusNode(0) call, which is unnecessary and incorrect.
445
446 2004-08-12  Darin Adler  <darin@apple.com>
447
448         Reviewed by Ken.
449
450         - fixed <rdar://problem/3758756> copying text selected with down arrow results in all text to end of document
451
452         * khtml/xml/dom2_rangeimpl.h: Make startNode and pastEndNode public.
453         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::pastEndNode): Fix bug where this would return
454         one node too far in the case where the end container was not a text node.
455
456         * khtml/xml/dom_nodeimpl.cpp:
457         (NodeImpl::recursive_toHTMLWithOptions): Rewrite loop, using startNode and pastEndNode,
458         to fix bug where it would run past the end node, including too many nodes in the generated
459         HTML. Nice side benefit: easier to read the code.
460
461 2004-08-11  Chris Blumenberg  <cblu@apple.com>
462
463         Fixed: <rdar://problem/3758216> PARENTAL: buttons on parental controls page only work once
464
465         Reviewed by john.
466
467         * kwq/KWQKHTMLPart.mm:
468         (KWQKHTMLPart::submitForm): prevent a form from being submitted more than once only if it uses a scheme of http or https
469
470 2004-08-11  Darin Adler  <darin@apple.com>
471
472         Reviewed by Ken.
473
474         - fixed <rdar://problem/3715878> 8A162: connect.apple.com password field showed in cleartext
475
476         * kwq/KWQTextField.mm: (-[KWQSecureTextField textDidEndEditing:]):
477         Enhanced workaround for shifting focus from one secure text field to another so that it works
478         even for the case of shifting focus from a secure text field back to itself.
479
480 2004-08-11  Ken Kocienda  <kocienda@apple.com>
481
482         Reviewed by me
483
484         Missed adding this file before.
485
486         * kwq/KWQTextUtilities.mm: Added.
487         (KWQFindNextWordFromIndex):
488
489 2004-08-11  Ken Kocienda  <kocienda@apple.com>
490
491         Reviewed by Trey
492
493         Efficiency improvements on string manipulations in these two new function
494         implementations. Use the versions of QString append/prepend that take
495         (QChar *c, uint length) instead of creating new strings each time.
496
497         * khtml/xml/dom_position.cpp:
498         (DOM::Position::previousWordPosition): Changed, as described above.
499         (DOM::Position::nextWordPosition): Ditto.
500
501 2004-08-11  Ken Kocienda  <kocienda@apple.com>
502
503         Reviewed by Darin
504
505         Fix for this bug:
506         <rdar://problem/3675812> Moving a word at a time does not use the correct conception of "word"
507         
508         I have implemented versions of previousWordPosition and nextWordPosition that are now
509         different than previousWordBoundary and nextWordBoundary. The behavior of the new
510         functions attempts to match what Cocoa does as closely as it can. Let the bug filing begin! 
511
512         * WebCore.pbproj/project.pbxproj: Added KWQTextUtilities.mm
513         * khtml/misc/helper.cpp:
514         (khtml::nextWordFromIndex): Glue to call through to KWQFindNextWordFromIndex.
515         * khtml/misc/helper.h: Declare the function above.
516         * khtml/misc/khtml_text_operations.cpp: Added SimplifiedBackwardsTextIterator class.
517         (khtml::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): New
518         (khtml::SimplifiedBackwardsTextIterator::advance): Ditto.
519         (khtml::SimplifiedBackwardsTextIterator::handleTextNode): Ditto.
520         (khtml::SimplifiedBackwardsTextIterator::handleReplacedElement): Ditto.
521         (khtml::SimplifiedBackwardsTextIterator::handleNonTextNode): Ditto.
522         (khtml::SimplifiedBackwardsTextIterator::exitNode): Ditto.
523         (khtml::SimplifiedBackwardsTextIterator::emitCharacter): Ditto.
524         (khtml::SimplifiedBackwardsTextIterator::range): Ditto.
525         * khtml/misc/khtml_text_operations.h:
526         (khtml::SimplifiedBackwardsTextIterator::atEnd): Ditto.
527         (khtml::SimplifiedBackwardsTextIterator::length): Ditto.
528         (khtml::SimplifiedBackwardsTextIterator::characters): Ditto.
529         * khtml/xml/dom_position.cpp:
530         (DOM::Position::previousWordBoundary): Updated to gather appropriate text and call through to
531         AppKit to perform the same calculations NSText uses.
532         (DOM::Position::nextWordBoundary): Ditto.
533         (DOM::Position::previousWordPosition): Unrelated change to fix case where the function could get "stuck".
534         (DOM::Position::nextWordPosition): Ditto
535         (DOM::Position::equivalentDeepPosition): Changed to look backwards if the position's offset is equal
536         to the number of child nodes it has. This handles more cases correctly, like when the position is
537         gives as one beyond the end of a document element's last child.
538         * kwq/KWQTextUtilities.h: Declared KWQFindNextWordFromIndex.
539         * kwq/KWQTextUtilities.mm: Added.
540         (KWQFindNextWordFromIndex): New function.
541
542 2004-08-11  Ken Kocienda  <kocienda@apple.com>
543
544         Reviewed by John
545
546         Fix for this bug:
547         
548         <rdar://problem/3732702> crash in CSSComputedStyleDeclarationImpl running devtools.com editing sample code
549
550         * khtml/khtml_part.cpp:
551         (KHTMLPart::selectionComputedStyle): Added a null check.
552
553 2004-08-10  Darin Adler  <darin@apple.com>
554
555         Reviewed by Trey.
556
557         - fixed <rdar://problem/3710123> Loading iframe that replaces content in the parent document crashes Safari
558
559         I fixed three problems:
560
561             1) script interpreter destroyed while it was interpreting scripts, caused random havoc
562             2) code trying to get to view after view was detached from part, caused nil-deref
563             3) signals sent to parent after child was no longer in the parent's frames list, caused nil-deref
564
565         Now the test page works fine. Hope the real sites do too.
566
567         * khtml/khtml_part.h: Add connectChild and disconnectChild helper functions (private).
568         * khtml/khtml_part.cpp:
569         (KHTMLPart::clear): Call disconnectChild on each frame as we detach it (see below).
570         (KHTMLPart::end): Ref the part at the start, and deref the part at the end, of this function.
571         Otherwise, we can end up destroying the part, and hence the interpreter, inside a script that
572         the interpreter itself is running.
573         (KHTMLPart::slotFinishedParsing): Add another check for a nil m_view, after the call to
574         checkCompleted.
575         (KHTMLPart::checkCompleted): Remove bogus if statement with empty body.
576         (KHTMLPart::processObjectRequest): Call disconnectChild to disconnect the child <-> parent signals of the
577         old child that the new one is replacing, and connectChild to connect the signals (nicer factoring).
578         (KHTMLPart::slotChildCompleted): Fixed up a confusing boolean if/expression to be simpler. Not related to
579         the bug fix, but an earlier version of the fix had changes in this function.
580         (KHTMLPart::connectChild): Added. Connects the appropriate signals for a child frame.
581         (KHTMLPart::disconnectChild): Added. Disconnects the same signals that connectChild connects.
582
583         * kwq/KWQKHTMLPart.mm: (KHTMLPart::frameDetached): Added a call to disconnectChild before removing the
584         child from the frames list.
585
586 2004-08-09  Maciej Stachowiak  <mjs@apple.com>
587
588         Reviewed by Trey.
589
590         WebCore part of:
591
592         - made basic marked text highlighting work to complete basic level of <rdar://problem/3704359> input method support not yet implemented for HTML editing
593
594         * kwq/WebCoreBridge.mm:
595         (-[WebCoreBridge setMarkedDOMRange:]): Added this new call to support storing
596         a marked range in WebCore. The provided DOMRange must start and end in the same
597         node, which must be a text node.
598         (-[WebCoreBridge markedDOMRange]): New call to get the marked range. 
599         (-[WebCoreBridge clearMarkedDOMRange]): New call to clear the marked range.
600         * kwq/WebCoreBridge.h: Prototype new methods.
601         * kwq/KWQKHTMLPart.mm:
602         (KWQKHTMLPart::markedRange): Implementation of WebCore call above.
603         (KWQKHTMLPart::setMarkedRange): Implementation of WebCore call above -
604         store the marked range, and repaint new and old nodes if needed.
605         (KWQKHTMLPart::clear): Clear marked range.
606         * kwq/KWQKHTMLPart.h: Prototype new methods.
607         * khtml/rendering/render_text.cpp:
608         (InlineTextBox::paintMarkedTextBackground): New method to paint the background
609         for marked text, modeled on paintSelection.
610         (RenderText::paint): Optionally handle painting marked text
611         background as well as selection background in the marked text
612         pass.
613         * khtml/rendering/render_text.h: Prototype new method.
614
615 2004-08-10  Darin Adler  <darin@apple.com>
616
617         Reviewed by Dave.
618
619         - switch PCRE to do UTF-16 directly instead of converting to/from UTF-8 for speed
620
621         * kwq/KWQRegExp.mm:
622         (QRegExp::KWQRegExpPrivate::compile): Null-terminate the pattern and pass it.
623         (QRegExp::match): Use the 16-bit string directly, no need to convert to UTF-8.
624
625 2004-08-10  Darin Adler  <darin@apple.com>
626
627         Reviewed by Ken.
628
629         - minor cleanup
630
631         * khtml/editing/jsediting.cpp: Capitalize command names to match Windows.
632         The dictionary lookup is case insensitive.
633
634         * kwq/KWQFoundationExtras.h: Remove inaccurate comment.
635
636 2004-08-10  Trey Matteson  <trey@apple.com>
637
638         3757094 - crash spell checking after a paste
639
640         Reviewed by Ken
641
642         * khtml/rendering/render_text.cpp:
643         (InlineTextBox::paintSelection):  Add nil check.
644
645 2004-08-09  Trey Matteson  <trey@apple.com>
646
647         3756195 - spell checking leaves misspelling marker behind after bad word is deleted
648         ... and other follow-on spell check fixes
649
650         Reviewed by Ken
651
652         * khtml/rendering/render_text.cpp:
653         (InlineTextBox::paintMarker):  Close inspection shows we were drawing the 
654         misspelling marker one pixel lower than AK, and one pixel outside the selection
655         rect we draw, in the case of Times-16.  So move it up one.  Still not an exact
656         match for AK, but less bad.
657         * khtml/xml/dom_docimpl.cpp:
658         (DocumentImpl::removeMarker):  Track whether we make any changes, so we only
659         repaint if something actually changed.
660         (DocumentImpl::removeAllMarkers):  New utility.
661         (DocumentImpl::removeAllMarkers):  Use clear() instead of (errant)
662         hand-rolled loop to empty array.
663         (DocumentImpl::shiftMarkers):  Track whether we make any changes, so we only
664         repaint if something actually changed.
665         * khtml/xml/dom_docimpl.h:
666         * khtml/xml/dom_textimpl.cpp:
667         (CharacterDataImpl::deleteData):  Along with shifting existing markers around,
668         remove any markers in the deleted range.  Fixes 3756195.
669         (CharacterDataImpl::replaceData):  Ditto for the replaced range.
670         * kwq/KWQKHTMLPart.mm:
671         (KWQKHTMLPart::updateSpellChecking): comment
672
673 2004-08-08  Trey Matteson  <trey@apple.com>
674
675         3745023 - Safari crashes trying to access anchor while downloading
676
677         I bet this is behind a few other crashers as well.  In this bug the start of the
678         download leaves a KWQPageState hanging around, and when that is freed it damages
679         the part and view.  If you're still using that page, you're dead.
680
681         The fix is to properly invalidate the PageState when we receive an error before
682         reaching WebFrameCommitted state.  Normally this happens when a page is reheated
683         from the PageState, but in this case we never manage to leave the page to begin
684         with, although we've already created the PageState.
685
686         Other errors besides the synthetic one download generates would have caused similar
687         crashing.  Another example would be clicking on a second link before the load
688         caused by clicking on the first link reached committed state.
689
690         Reviewed by Richard
691
692         * kwq/WebCoreBridge.h:
693         * kwq/WebCoreBridge.mm:
694         (-[WebCoreBridge didNotOpenURL:pageCache:]):  Invalidate the pageCache state
695         when a load doesn't get off the ground.
696
697 2004-08-06  Ken Kocienda  <kocienda@apple.com>
698
699         Reviewed by Maciej
700
701         Finish off spellchecking support to HTML editing. Includes work to
702         enable continuous spellchecking.
703
704         * khtml/editing/htmlediting_impl.cpp:
705         (khtml::EditCommandImpl::markMisspellingsInSelection): Basically, a one-liner convenience to
706         make the call over to the KWQKHTMLPart.
707         (khtml::ReplaceSelectionCommandImpl::doApply): Did some rearranging of code so that the
708         inserted content can be spell-checked. The function is basically the same, except for
709         the addition of calls to markMisspellingsInSelection.
710         (khtml::TypingCommandImpl::markMisspellingsAfterTyping): New function. Takes a look at the
711         selection that results after typing and determines whether it needs to spellcheck. 
712         Since the word containing the current selection is never marked, this does a check to
713         see if typing made a new word that is not in the current selection. Basically, you
714         get this by being at the end of a word and typing a space.
715         (khtml::TypingCommandImpl::typingAddedToOpenCommand): Call markMisspellingsAfterTyping.
716         * khtml/editing/htmlediting_impl.h: Add new function declarations.
717          * khtml/khtml_part.cpp:
718         (KHTMLPart::setSelection): Since spell checks are updated when the selection changes, 
719         and every selection change passes through here, this is a good place to put the call 
720         to the spellchecker.
721         * khtml/rendering/render_text.cpp:
722         (InlineTextBox::paintMarker): Remove temporary misspelling line drawing code. Replace with
723         call that does AppKit-style drawing. Fix up some comments.
724         * khtml/xml/dom_docimpl.cpp:
725         (DocumentImpl::addMarker): Repaint the node that had the marker added. This makes it show 
726         up on setting it.
727         (DocumentImpl::removeMarker): Ditto.
728         (DocumentImpl::removeAllMarkers): New function. Convenience for clearing all markers.
729         Used when not in continuous spellchecking mode.
730         (DocumentImpl::shiftMarkers): Moves markers in response to changes in a node's contents.
731         This shifts the marker offsets by a given amount. This keeps the markers in the right
732         place when a user types in a node with markers already set on it.
733         * khtml/xml/dom_docimpl.h: Added new functions. Removed unnecessary enum qualifier from some
734         declarations.
735         * khtml/xml/dom_position.cpp:
736         (DOM::Position::previousWordBoundary): This function was susceptible to endless loops...and
737         needlessly so. Basically, if the current position is at a word boundary, run the code again
738         to find the previous word boundary.
739         (DOM::Position::nextWordBoundary): Same as above, but for next word boundary.
740         * khtml/xml/dom_textimpl.cpp:
741         (CharacterDataImpl::setData): Call shiftMarkers to update markers when this node changes.
742         (CharacterDataImpl::insertData): Ditto.
743         (CharacterDataImpl::deleteData): Ditto.
744         (CharacterDataImpl::replaceData): Ditto.
745         * kwq/KWQKHTMLPart.h:
746         * kwq/KWQKHTMLPart.mm:
747         (KWQKHTMLPart::advanceToNextMisspelling):
748         (KWQKHTMLPart::markMisspellingsInSelection):
749         (KWQKHTMLPart::updateSpellChecking):
750         (KWQKHTMLPart::respondToChangedSelection):
751         * kwq/KWQPainter.h:
752         * kwq/KWQPainter.mm:
753         (QPainter::drawLineForMisspelling): New function. Call over to WebKit to do the drawing.
754         * kwq/WebCoreBridge.h:
755         * kwq/WebCoreBridge.mm:
756         (-[WebCoreBridge alterCurrentSelection:direction:granularity:]): Pass markMisspellings flag to
757         setSelection call. 
758         * kwq/WebCoreTextRenderer.h:
759
760 === Safari-155 ===
761
762 2004-08-05  David Hyatt  <hyatt@apple.com>
763
764         Fix for 3752542, stack overflow that crashes Safari at www.dr.dk.  This bug is a regression caused by a fix that
765         attempted to repair <caption> behavior to make it behave like Panther.  This fix was incorrect, and in addition
766         even our <caption> behavior on Panther was incorrect.
767
768         The patch that fixes this bug also makes <caption> handling work when <caption>s are contained inside a <td>, a <tr>,
769         a <th>, or various table section tags (<tbody>, <tfoot>, <thead>).  The <caption> is pulled out and inserted just before
770         the relevant ancestor table section.  This behavior matches other browsers.
771         
772         Reviewed by mjs
773
774         * khtml/html/htmlparser.cpp:
775         (KHTMLParser::insertNode):
776
777 2004-08-04  David Hyatt  <hyatt@apple.com>
778
779         The top-level XSL sheet is now loaded and shows up in the activity window.  It is not yet parsed.
780         
781         Reviewed by kocienda
782
783         * WebCore.pbproj/project.pbxproj:
784         * khtml/css/css_base.h:
785         (DOM::StyleBaseImpl::isXSLStyleSheet):
786         * khtml/css/css_stylesheetimpl.cpp:
787         (CSSStyleSheetImpl::CSSStyleSheetImpl):
788         * khtml/css/css_stylesheetimpl.h:
789         (DOM::StyleSheetImpl::isLoading):
790         * khtml/misc/loader.cpp:
791         * khtml/xml/dom_xmlimpl.cpp:
792         (DOM::ProcessingInstructionImpl::ProcessingInstructionImpl):
793         (DOM::ProcessingInstructionImpl::checkStyleSheet):
794         (DOM::ProcessingInstructionImpl::sheet):
795         (DOM::ProcessingInstructionImpl::isLoading):
796         (DOM::ProcessingInstructionImpl::setStyleSheet):
797         * khtml/xml/dom_xmlimpl.h:
798
799 2004-08-04  David Hyatt  <hyatt@apple.com>
800
801         Add XSL Stylesheets to the WebCore cache.
802         
803         Reviewed by kocienda
804
805         * khtml/misc/loader.cpp:
806         (CachedXSLStyleSheet::CachedXSLStyleSheet):
807         (CachedXSLStyleSheet::ref):
808         (CachedXSLStyleSheet::deref):
809         (CachedXSLStyleSheet::data):
810         (CachedXSLStyleSheet::checkNotify):
811         (CachedXSLStyleSheet::error):
812         (DocLoader::requestXSLStyleSheet):
813         (Cache::requestXSLStyleSheet):
814         (Cache::getStatistics):
815         * khtml/misc/loader.h:
816         (khtml::CachedObject::):
817         (khtml::CachedXSLStyleSheet::sheet):
818         (khtml::CachedXSLStyleSheet::schedule):
819
820 2004-08-03  Ken Kocienda  <kocienda@apple.com>
821
822         Reviewed by Hyatt
823
824         Changes to improve our handling of object tags during editing, including
825         fixing this bug:
826         
827         <rdar://problem/3744533> Problem editing <OBJECT> elements displayed by WebPlugIns 
828
829         Part of the fix for this bug involves removing the close() function from render objects.
830         It was decided that this code was no longer needed, as the work it did could be moved
831         to other, more modern, places.
832
833         Fixed this bug:
834         
835         <rdar://problem/3748537> crash due to nil node passed into parentNode in computeTypingStyle deleting text
836
837         Finally, I filed and fixed this bug I discovered while fixing the one above:
838         
839         <rdar://problem/3749338> Select-all + delete leaves editing view without blinking caret
840
841         * khtml/editing/htmlediting_impl.cpp:
842         (khtml::DeleteSelectionCommandImpl::computeTypingStyle): Fix for 3748537. Put in some more null
843         checks. Bail, returning 0 for typing style if any null checks yield a null.
844         (khtml::DeleteSelectionCommandImpl::doApply): Fix for 3749338. A removeNodeAndPrune call may wind
845         up deleting the node where we calculated that we wanted to put the selection after deleting.
846         If this happens, move this ending selection to a sensible alternative.
847         (khtml::RemoveNodeAndPruneCommandImpl::doApply): Call previousNodeConsideringAtomicNodes instead 
848         of traversePreviousNode when doing the prune.
849         * khtml/html/html_objectimpl.cpp:
850         (HTMLObjectElementImpl::attach): Part of the fix for 3744533.
851         (HTMLObjectElementImpl::recalcStyle): Change old strcmp check for type of renderer to be a call
852         to canRenderImageType.
853         (HTMLObjectElementImpl::childrenChanged): New function. Helps to keep object tags up to date 
854         as their children change. This also will help to make object tags respond properly to having their
855         params changed by DOM calls.
856         * khtml/html/html_objectimpl.h: Cosmetic change.
857         * khtml/html/htmlparser.cpp:
858         (KHTMLParser::insertNode): Remove call to obsolete closeRenderer() function.
859         (KHTMLParser::popOneBlock): Ditto.
860         * khtml/rendering/render_block.cpp:
861         (khtml::RenderBlock::makeChildrenNonInline): Remove call to obsolete close() function.
862         * khtml/rendering/render_container.cpp:
863         (RenderContainer::updatePseudoChild): Ditto.
864         * khtml/rendering/render_form.cpp: Remove obsolete close() function.
865         * khtml/rendering/render_form.h: Ditto.
866         * khtml/rendering/render_frames.cpp: Ditto.
867         * khtml/rendering/render_frames.h: Ditto.
868         * khtml/rendering/render_inline.cpp:
869         (RenderInline::splitFlow): Remove calls to obsolete close() function.
870         * khtml/rendering/render_object.h: Remove obsolete close() function.
871         * khtml/rendering/render_table.cpp:
872         (RenderTableCell::layout): Ditto.
873         * khtml/rendering/render_table.h: Ditto.
874         * khtml/xml/dom_docimpl.cpp:
875         (DocumentImpl::closeInternal): Remove call to obsolete close() function.
876         * khtml/xml/dom_nodeimpl.cpp: Remove obsolete m_rendererNeedsClose initialization.
877         (NodeImpl::NodeImpl): Remove obsolete closeRenderer() function.
878         (NodeImpl::attach): Remove call to obsolete close() function.
879         (NodeImpl::isAtomicNode): New function. Helps to fix 3744533. Determines if a node should
880         be treated as an atomic node for the purposes of editing.
881         (NodeImpl::previousNodeConsideringAtomicNodes): New helper to traverse tree taking atomic nodes
882         into account.
883         (NodeImpl::nextNodeConsideringAtomicNodes): Ditto.
884         (NodeImpl::previousLeafNode): Now calls nextNodeConsideringAtomicNodes to iterate. This helps to 
885         prevent deleting PARAM tag portions of object tags erroneously.
886         (NodeImpl::nextLeafNode): Ditto.
887         * khtml/xml/dom_nodeimpl.h: Removed m_rendererNeedsClose bit. Added declarations for new functions.
888         * khtml/xml/dom_position.cpp:
889         (DOM::Position::equivalentDeepPosition): Now takes atomic nodes into account as it drills down into the
890         tree.
891         * khtml/xml/xml_tokenizer.cpp:
892         (khtml::XMLTokenizer::endElement): Remove call to obsolete closeRenderer() function.
893
894 2004-08-03  David Hyatt  <hyatt@apple.com>
895
896         Add the deprecated text/xsl MIME type (introduced by Internet Explorer 5) as an acceptable MIME type for XML
897         documents.
898         
899         Reviewed by john
900
901         * khtml/ecma/xmlhttprequest.cpp:
902         (KJS::XMLHttpRequest::getValueProperty):
903         * khtml/khtml_part.cpp:
904         (KHTMLPart::begin):
905         * khtml/misc/loader.cpp:
906         (CachedXBLDocument::CachedXBLDocument):
907
908 2004-08-03  Maciej Stachowiak  <mjs@apple.com>
909
910         Reviewed by Ken.
911
912         - remove assertions that asserted text is non-empty, just avoid
913         doing anything for the empty case; this is needed because input
914         methods like to insert empty text in various cases.
915
916         * khtml/editing/htmlediting_impl.cpp:
917         (khtml::InsertTextCommandImpl::InsertTextCommandImpl):
918         (khtml::InsertTextCommandImpl::doApply):
919         (khtml::InsertTextCommandImpl::doUnapply):
920
921 2004-08-03  Darin Adler  <darin@apple.com>
922
923         Reviewed by Ken.
924
925         - fixed <rdar://problem/3740937> ER: A way to turn a DOMRange into text (equivalent of -innerText)
926
927         * khtml/xml/dom2_rangeimpl.h: Added text function. Like innerText, but on a range.
928         * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::text): Added.
929
930         * kwq/DOM.mm: (-[DOMRange _text]): Added. Calls DOM::RangeImpl::text.
931         * kwq/DOMPrivate.h: Added.
932
933         * WebCore.pbproj/project.pbxproj: Added DOMPrivate.h, an internal header (private in WebKit, internal here).
934
935 2004-08-02  John Sullivan  <sullivan@apple.com>
936
937         Reviewed by Darin.
938         
939         WebCore part of fix for <rdar://problem/3631868> NSToolbar adoption: 
940         Tab key should cycle around toolbar and page content
941
942         * kwq/WebCoreBridge.mm:
943         (-[WebCoreBridge nextKeyViewInsideWebFrameViews]):
944         Made this method start looking from the current focus node. This won't
945         affect any existing callers because there were no existing callers.
946         (-[WebCoreBridge previousKeyViewInsideWebFrameViews]):
947         ditto
948
949 2004-08-02  David Hyatt  <hyatt@apple.com>
950
951         Create a #define for XSLT support that at the moment will only be enabled on Tiger.
952         
953         Reviewed by kocienda
954
955         * WebCorePrefix.h:
956
957 2004-08-02  Ken Kocienda  <kocienda@apple.com>
958
959         Reviewed by Hyatt
960
961         Fix for this bug:
962         
963         <rdar://problem/3747945> Deleting replaced element can cause crash
964
965         * khtml/xml/dom_selection.cpp:
966         (DOM::Selection::layoutCaret): The crux of the problem is that
967         the caret drawing code tries to draw the caret at the image
968         offset after it has been removed from the document. So, make
969         sure the start node for the selection is in the document before
970         trying to lay out the caret using that node.
971
972 2004-07-31  Ken Kocienda  <kocienda@apple.com>
973
974         Reviewed by John
975
976         <rdar://problem/3745498> HTMLCompose: Can't edit new empty message (and typing eventually crashes)
977         <rdar://problem/3746408> HTMLCompose: cannot type in message body of new messages (and tabbing causes a crash.)
978         
979         * kwq/KWQKHTMLPart.mm:
980         (KWQKHTMLPart::setDisplaysWithFocusAttributes): Add in some smarts to look around for
981         a good place to put the caret if focus is turning "on", the part is contentEditable,
982         and it does not currently have a selection. This has the effect of flashing the caret 
983         in a contentEditable view automatically without requiring the programmer to set a 
984         selection explicitly. This also fixes the bug listed above. Both are cases where the
985         bad behavior happened since the editing code tried to process input without an active 
986         selection. I always took the extra step of setting the selection explicitly when
987         opening new windows in programs like Blot, but it seems silly to require developers to
988         do this in general. With this patch, they no longer need to.
989
990 2004-07-30  Ken Kocienda  <kocienda@apple.com>
991
992         Reviewed by John
993
994         Fix for this bug:
995         
996         <rdar://problem/3745498> HTMLCompose: Can't edit new empty message (and typing eventually crashes)
997
998         * khtml/xml/dom_selection.cpp:
999         (DOM::Selection::layoutCaret): Don't bail when the start position of the selection is not in rendered
1000         content. The validate() bottleneck function will do all it can to make sure that the start is
1001         moved to rendered content if at all possible before this function runs. If no rendered position can
1002         be found, like in the case of an empty body element, we still want to flash the caret there.
1003         (DOM::Selection::validate): Look for rendered positions for the base and extent, but save off the
1004         base before making this move, and set the selection to the enclosing block flow element of this
1005         original base if no rendered positions can be found. This has the effect of flashing the caret 
1006         someplace in an editable block, even if it does not contain any rendered content.
1007
1008 2004-07-30  Ken Kocienda  <kocienda@apple.com>
1009
1010         Reviewed by John
1011
1012         Fix a large number of editing layout test regressions.
1013
1014         * khtml/misc/khtml_text_operations.cpp:
1015         (khtml::TextIterator::TextIterator): Use a new way to compute the end offset of a node for
1016         purposes of text iteration. The end offset is either child count of a node with children,
1017         or the maxOffset() of a node that does not.
1018         * khtml/xml/dom_nodeimpl.cpp: Remove maxOffset() implementation from NodeBaseImpl. This 
1019         conflicted with the usage of this function that is needed for editing.
1020         * khtml/xml/dom_nodeimpl.h: Ditto.
1021
1022 2004-07-30  Trey Matteson  <trey@apple.com>
1023
1024         Next steps for spell checking:  We have data structures for the marked pieces of
1025         text and the smarts to draw them (although at this point, they just get a green
1026         underline instead of using the real AppKit pattern.)
1027
1028         Note we don't call this code outside of development, since at this point I suspect
1029         it could be made to crash by mixing spelling and editing. 
1030
1031         Reviewed by Ken.
1032
1033         * khtml/rendering/render_text.cpp:
1034         (InlineTextBox::paintMarker):  Paint one marker's intersection with a text run
1035         (RenderText::paint):  Find intersections of all markers and runs, call paintMarker
1036         * khtml/rendering/render_text.h:
1037         * khtml/xml/dom_docimpl.cpp:
1038         (DocumentImpl::addMarker):  Adds a marker to a DOM Range.
1039         (DocumentImpl::removeMarker):  Removes a marker from a DOM Range.
1040         (DocumentImpl::addMarker):  Adds a marker to a single DOM Node, merging previous
1041         markers as needed.
1042         (DocumentImpl::removeMarker):  Removes a marker from a single DOM Node, breaking
1043         up previous markers as needed.
1044         (DocumentImpl::markersForNode):  Return markers for a Node.
1045         * khtml/xml/dom_docimpl.h:
1046         (DOM::DocumentMarker::):  New marker struct
1047         (DOM::DocumentMarker::operator == ):
1048         (DOM::DocumentMarker::operator != ):
1049         * kwq/KWQKHTMLPart.mm:
1050         (KWQKHTMLPart::advanceToNextMisspelling):  Mark misspelled ranges when we find them.
1051         Debug only for now.
1052
1053 2004-07-29  Maciej Stachowiak  <mjs@apple.com>
1054
1055         Reviewed by Darin.
1056
1057         <rdar://problem/3745808> Seed: WebKit: Table's caption broken
1058         
1059         * khtml/html/htmlparser.cpp:
1060         (KHTMLParser::insertNode): When a caption appears in an illegal
1061         place in a table, pop blocks until we hit a place where it's
1062         allowed.
1063
1064 === Safari-154 ===
1065
1066 2004-07-29  Darin Adler  <darin@apple.com>
1067
1068         Reviewed by Ken.
1069
1070         - added constants for motion across entire document for use in operations like
1071           move to beginning of document
1072
1073         * khtml/xml/dom_selection.h: Added DOCUMENT to ETextGranularity.
1074         * khtml/xml/dom_selection.cpp:
1075         (DOM::Selection::modifyExtendingRightForward): Added case for DOCUMENT.
1076         (DOM::Selection::modifyMovingRightForward): Added case for DOCUMENT.
1077         (DOM::Selection::modifyExtendingLeftBackward): Added case for DOCUMENT.
1078         (DOM::Selection::modifyMovingLeftBackward): Added case for DOCUMENT.
1079         (DOM::Selection::validate): Changed if statements into switch statement,
1080         added case for DOCUMENT.
1081
1082         * kwq/WebCoreBridge.h: Added WebCoreBridge to WebSelectionGranularity.
1083
1084 2004-07-28  Trey Matteson  <trey@apple.com>
1085
1086         Small refinement of last checkin.  The text iterators now return reasonable values
1087         for range() when atEnd, which gets rid of special cases and pitfalls in the client.
1088
1089         Reviewed by Ken.
1090
1091         * khtml/misc/khtml_text_operations.cpp:
1092         (khtml::TextIterator::TextIterator):  Set endOffset to a valid value instead of
1093         using LONG_MAX.
1094         (khtml::TextIterator::range):  Implement when atEnd.
1095         (khtml::CharacterIterator::range):  Don't massage result when atEnd.
1096         (khtml::WordAwareIterator::WordAwareIterator):  Now that this is fixed, we no
1097         longer need this special case.
1098         (khtml::WordAwareIterator::advance):  Always set range, even when atEnd, now that
1099         TextIterator::range() always works.
1100         * khtml/xml/dom_nodeimpl.cpp:
1101         (NodeImpl::childNodeCount):  Made const
1102         (NodeBaseImpl::maxOffset):  Add missing implementation
1103         * khtml/xml/dom_nodeimpl.h:
1104         * kwq/KWQKHTMLPart.mm:
1105         (KWQKHTMLPart::advanceToNextMisspelling):  Get rid of special cases, always call
1106         range on our iterator even when it is atEnd.
1107
1108 2004-07-28  Maciej Stachowiak  <mjs@apple.com>
1109
1110         Reviewed by Trey.
1111
1112         <rdar://problem/3678534> controls on page at http://help.sap.com don't work properly
1113
1114         To fix this I implemented the various JavaScript BarInfo properties in JavaScript.
1115         
1116         * khtml/ecma/kjs_window.cpp:
1117         (Window::Window):
1118         (Window::locationbar):
1119         (Window::menubar):
1120         (Window::personalbar):
1121         (Window::statusbar):
1122         (Window::toolbar):
1123         (Window::scrollbars):
1124         (Window::mark):
1125         (Window::get):
1126         (SelectionFunc::tryCall):
1127         (BarInfo::BarInfo):
1128         (BarInfo::~BarInfo):
1129         (BarInfo::get):
1130         (BarInfo::put):
1131         * khtml/ecma/kjs_window.h:
1132         (KJS::Window::):
1133         (KJS::BarInfo::):
1134         (KJS::BarInfo::part):
1135         (KJS::BarInfo::classInfo):
1136         * khtml/ecma/kjs_window.lut.h:
1137         (KJS::):
1138         * kwq/KWQKHTMLPart.h:
1139         * kwq/KWQKHTMLPart.mm:
1140         (KWQKHTMLPart::locationbarVisible):
1141         (KWQKHTMLPart::menubarVisible):
1142         (KWQKHTMLPart::personalbarVisible):
1143         (KWQKHTMLPart::scrollbarsVisible):
1144         (KWQKHTMLPart::statusbarVisible):
1145         (KWQKHTMLPart::toolbarVisible):
1146
1147 2004-07-28  Ken Kocienda  <kocienda@apple.com>
1148
1149         Reviewed by me
1150         
1151         Added more layout tests.
1152
1153         * layout-tests/editing/style/style-3681552-fix-001-expected.txt: Added.
1154         * layout-tests/editing/style/style-3681552-fix-001.html: Added.
1155         * layout-tests/editing/style/style-3681552-fix-002-expected.txt: Added.
1156         * layout-tests/editing/style/style-3681552-fix-002.html: Added.
1157         * layout-tests/editing/style/style-3690704-fix-expected.txt: Added.
1158         * layout-tests/editing/style/style-3690704-fix.html: Added.
1159         * layout-tests/editing/style/typing-style-001-expected.txt: Added.
1160         * layout-tests/editing/style/typing-style-001.html: Added.
1161         * layout-tests/editing/style/typing-style-002-expected.txt: Added.
1162         * layout-tests/editing/style/typing-style-002.html: Added.
1163
1164 2004-07-28  Ken Kocienda  <kocienda@apple.com>
1165
1166         Reviewed by me
1167         
1168         Added some layout tests.
1169
1170         * layout-tests/editing/selection/select-all-001-expected.txt: Added.
1171         * layout-tests/editing/selection/select-all-001.html: Added.
1172         * layout-tests/editing/selection/select-all-002-expected.txt: Added.
1173         * layout-tests/editing/selection/select-all-002.html: Added.
1174         * layout-tests/editing/selection/select-all-003-expected.txt: Added.
1175         * layout-tests/editing/selection/select-all-003.html: Added.
1176
1177 2004-07-28  Trey Matteson  <trey@apple.com>
1178
1179         Spellchecking, Part I.  Basic spellcheck is working.  Spelling panel is hooked up.
1180
1181         At this point, no special marking of misspellings, no grammar check, no context
1182         menu integration, no "check continually" mode.
1183
1184         Much of the TextIterator and CharacterIterator interface got published outside
1185         of khtml_text_operations.cpp, with a little API rationalizing.
1186
1187         Reviewed by Ken.
1188
1189         * khtml/misc/khtml_text_operations.cpp:
1190         (khtml::TextIterator::range):  Name changes.
1191         (khtml::CharacterIterator::CharacterIterator):  Ditto.
1192         (khtml::CharacterIterator::range):  Ditto.
1193         (khtml::CharacterIterator::advance):  Ditto.
1194         (khtml::CharacterIterator::string):  New method to consume chars into a string.
1195         (khtml::WordAwareIterator::WordAwareIterator):  New class that iterates over
1196         the text respecting word boundaries.
1197         (khtml::WordAwareIterator::advance):
1198         (khtml::WordAwareIterator::length):
1199         (khtml::WordAwareIterator::characters):
1200         (khtml::plainText):  Name changes.
1201         (khtml::findPlainText):  Ditto.
1202
1203         API moved from cpp to header file.
1204         * khtml/misc/khtml_text_operations.h:
1205         (khtml::TextIterator::atEnd):
1206         (khtml::TextIterator::length):
1207         (khtml::TextIterator::characters):
1208         (khtml::CharacterIterator::atBreak):
1209         (khtml::CharacterIterator::atEnd):
1210         (khtml::CharacterIterator::length):
1211         (khtml::CharacterIterator::characters):
1212         (khtml::CharacterIterator::characterOffset):
1213         (khtml::WordAwareIterator::atEnd):
1214         (khtml::WordAwareIterator::range):
1215
1216         * khtml/xml/dom_position.cpp:
1217         (DOM::Position::previousWordBoundary):  New name for the old routine.  This routines semantics
1218         match the current behavior of this code.
1219         (DOM::Position::nextWordBoundary):  Ditto.
1220         (DOM::Position::previousWordPosition):  Call old code with the new name.  When we fix
1221         word advancement, this routine will have its own impl.
1222         (DOM::Position::nextWordPosition):  Ditto.
1223         * khtml/xml/dom_position.h:
1224         * khtml/xml/dom_selection.h:
1225         (DOM::Selection::rangeStart):  New convenience methods
1226         (DOM::Selection::rangeEnd):
1227         * kwq/KWQKHTMLPart.h:
1228         * kwq/KWQKHTMLPart.mm:
1229         (KWQKHTMLPart::findString):  Ensure we use range-compatible positions.
1230         (KWQKHTMLPart::advanceToNextMisspelling):  Brand new.
1231         * kwq/WebCoreBridge.h:
1232         * kwq/WebCoreBridge.mm:
1233         (-[WebCoreBridge advanceToNextMisspelling]):  Typical bridge glue.
1234
1235 2004-07-28  Ken Kocienda  <kocienda@apple.com>
1236
1237         Reviewed by Maciej
1238         
1239         Fixed this bug:
1240         
1241         <rdar://problem/3690704> marking partly bold text italic across blocks wrongly extends the bold section
1242
1243         * khtml/editing/htmlediting_impl.cpp:
1244         (khtml::ApplyStyleCommandImpl::doApply): Fixed loop that gathers up groups of nodes to
1245         pass off to the function that applies styles. While this is meant to be conservative in
1246         order to leave the DOM well-formed in all cases, it contained an error where the set
1247         of nodes to be styled together erroneously could include a node that was meant for 
1248         the next set. Fixed.
1249         (khtml::ApplyStyleCommandImpl::applyStyleIfNeeded): Unrelated change to remove DOM:: scope
1250         resolution qualifier. Unneeded here.
1251
1252 2004-07-28  Darin Adler  <darin@apple.com>
1253
1254         Reviewed by Trey.
1255
1256         - fixed <rdar://problem/3658471> REGRESSION: Node.appendChild( ) fails when parent already contains that child
1257
1258         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::isAncestor): Restore the original meaning of this function.
1259         It returns true if the parameter is an ancestor of this, but had been changed to return true if this
1260         is an ancestor of the parameter. However, we do retain one change we made at the same time, which is
1261         that it does not consider a node an ancestor of itself.
1262
1263         * khtml/editing/htmlediting_impl.cpp: (khtml::ApplyStyleCommandImpl::nodeFullySelected):
1264         * khtml/xml/dom2_traversalimpl.cpp: (DOM::NodeIteratorImpl::notifyBeforeNodeRemoval):
1265         Reverse parameters for callers who wanted the new meaning of isAncestor, with care to not use it in
1266         any cases where the pointer might be 0.
1267
1268         * khtml/xml/dom_nodeimpl.h: Added const to the parameter to make things more symmetric and allow the
1269         new uses to all compile.
1270
1271 2004-07-28  Ken Kocienda  <kocienda@apple.com>
1272
1273         Reviewed by Darin
1274
1275         Fix for this bug:
1276         
1277         <rdar://problem/3681552> html editing needs to preserve typing font when replacing selection
1278
1279         * khtml/css/css_valueimpl.cpp:
1280         (CSSStyleDeclarationImpl::merge): New helper that merges styles together. Helpful for
1281         dealing with typing styles.
1282         * khtml/css/css_valueimpl.h:
1283         * khtml/editing/htmlediting_impl.cpp:
1284         (khtml::DeleteSelectionCommandImpl::computeTypingStyle): New helper that updates the
1285         typing style based on the current selection. This is a convenient bottleneck for all
1286         the code that needs to worry about typing style.
1287         (khtml::DeleteSelectionCommandImpl::doApply): Update typing style before doing the delete.
1288         (khtml::InputNewlineCommandImpl::doApply): No need to redeclare exceptionCode local.
1289         Improve comments. 
1290         (khtml::InputTextCommandImpl::prepareForTextInsertion): Remove unneeded complication when 
1291         figuring out where to insert style node. Not even sure what I was trying to do here, but
1292         it does not seem to be needed any more.
1293         (khtml::InputTextCommandImpl::execute): Remove unneeded comment.
1294         * khtml/editing/htmlediting_impl.h: Declare new computeTypingStyle helper.
1295         * khtml/khtml_part.cpp:
1296         (KHTMLPart::setCaretVisible): Call selectionLayoutChanged instead of notifySelectionChanged
1297         in this function. The selection did not change simply by calling this function, but it
1298         does need a layout.
1299         (KHTMLPart::notifySelectionChanged): Treat clearing the typing style much like closing typing,
1300         instead of clearing it unconditionally.
1301         (KHTMLPart::applyStyle): In the case where the current selection is a caret, merge the
1302         style being applied with any current typing style that already exists.
1303
1304 2004-07-28  Darin Adler  <darin@apple.com>
1305
1306         Reviewed by Ken.
1307
1308         - fixed <rdar://problem/3711080> REGRESSION (125-146): form fields have shrunk by 1 pixel, and now clip descenders
1309
1310         * kwq/KWQLineEdit.mm: (QLineEdit::sizeForCharacterWidth):
1311         Compute the size without ever calling cellSize. After talking with Andrew Platzer,
1312         we decided that hard-coding the size of the borders of a text field was the best
1313         way for WebCore to handle this.
1314
1315 2004-07-28  Darin Adler  <darin@apple.com>
1316
1317         Reviewed by Ken.
1318
1319         - fixed <rdar://problem/3743204> REGRESSION: crash at startribune.com in InlineBox::root()
1320
1321         * khtml/rendering/render_flow.cpp: (RenderFlow::dirtyLinesFromChangedChild):
1322         Added a check for nil.
1323
1324 2004-07-27  Darin Adler  <darin@apple.com>
1325
1326         Reviewed by Trey.
1327
1328         - fixed <rdar://problem/3743138> opaque colors come out of getComputedStyle as "rgba", transparent ones as "rgb"
1329
1330         * khtml/css/css_valueimpl.cpp: (CSSPrimitiveValueImpl::cssText): Use "rgb" rather than
1331         "rgba" when alpha is 0xFF, not when alpha is 0.
1332
1333 2004-07-27  Ken Kocienda  <kocienda@apple.com>
1334
1335         Reviewed by Hyatt
1336         
1337         Fixed the problem where BR elements on lines by themselves don't paint when selected.
1338
1339         * khtml/khtml_part.cpp:
1340         (KHTMLPart::selectAll): Related fix. Include BR's when figuring out what "all" is.
1341         * khtml/rendering/render_br.cpp:
1342         (RenderBR::paint): New function implementation. Teach BR's how to paint selections.
1343         * khtml/rendering/render_br.h:
1344         * khtml/rendering/render_text.cpp: 
1345         (InlineTextBox::paintSelection): Fix some geometry calculations to be more readable (i.e. don't
1346         reuse function argument as a local). Also, improve the logic for determining whether to 
1347         extend the selection to block boundaries.
1348         (RenderText::paint): Remove extendSelection argument from paintSelection. The logic to figure out
1349         extensions is now fully contained in paintSelection.
1350         * khtml/rendering/render_text.h:
1351
1352 2004-07-27  David Hyatt  <hyatt@apple.com>
1353
1354         Fix for 3665211 (again).  Make sure not to leave child line boxes pointing to deleted ancestor line boxes.
1355         
1356         Reviewed by kocienda
1357
1358         * khtml/rendering/render_block.cpp:
1359         (khtml::RenderBlock::removeChild):
1360
1361 2004-07-26  Chris Blumenberg  <cblu@apple.com>
1362
1363         Fixed: WebView scrolls to the top after making an editing change via drag & drop
1364
1365         Fixed by Ken, reviewed by me.
1366
1367         * kwq/WebCoreBridge.mm:
1368         (-[WebCoreBridge ensureCaretVisible]): do nothing if the selection is not a caret
1369
1370 === Safari-153 ===
1371
1372 2004-07-26  Maciej Stachowiak  <mjs@apple.com>
1373
1374         Reviewed by John.
1375
1376         <rdar://problem/3740855> REGRESSION: Flash incorrectly positioned at macromedia.com
1377         
1378         * khtml/html/htmltokenizer.cpp:
1379         (khtml::HTMLTokenizer::scriptExecution): Do the prepending-src
1380         trick as for inline script execution.
1381
1382         Added new layout tests covering this and other recent tokenizer
1383         bugs.
1384         
1385         * layout-tests/fast/tokenizer/001-expected.txt: Added.
1386         * layout-tests/fast/tokenizer/001.html: Added.
1387         * layout-tests/fast/tokenizer/002-expected.txt: Added.
1388         * layout-tests/fast/tokenizer/002.html: Added.
1389         * layout-tests/fast/tokenizer/003-expected.txt: Added.
1390         * layout-tests/fast/tokenizer/003.html: Added.
1391         * layout-tests/fast/tokenizer/resources/003-script.js: Added.
1392
1393 2004-07-23  Ken Kocienda  <kocienda@apple.com>
1394
1395         Reviewed by Trey
1396
1397         Fix for this bug:
1398         
1399         <rdar://problem/3738920> Caret blinks in inactive window
1400
1401         As part of the fix, I cleaned up the way we handle special drawing that needs
1402         to be done in the HTML view that is first responder in the key window (e.g the
1403         drawing of text selection highlight and caret blinking).
1404
1405         * khtml/khtml_part.cpp: Removed setCaretVisible function. Updating caret visibility
1406         is now done in setDisplaysWithFocusAttributes, described below.
1407         * khtml/khtml_part.h: Ditto.
1408         * khtml/khtmlpart_p.h:
1409         (KHTMLPartPrivate::KHTMLPartPrivate): m_caretVisible now defaults to false. This prevents
1410         the caret from blinking when an app is started from the command line and remains in the
1411         background.
1412         * khtml/khtmlview.cpp:
1413         (KHTMLView::focusInEvent): Remove caret code from here. Not needed.
1414         (KHTMLView::focusOutEvent): Ditto.
1415         * kwq/KWQKHTMLPart.h:
1416         (KWQKHTMLPart::displaysWithFocusAttributes): New accessor to return cached value to other code
1417         in WebCore.
1418         * kwq/KWQKHTMLPart.mm:
1419         (KWQKHTMLPart::KWQKHTMLPart):
1420         (KWQKHTMLPart::setDisplaysWithFocusAttributes): Renamed from setShowsFirstResponder and modified
1421         to do the display updating in a clearer way....and now has comments!
1422         * kwq/WebCoreBridge.h: Remove several obsolete functions that use to try to do the work of the new
1423         setDisplaysWithFocusAttributes function (and did so less well).
1424         * kwq/WebCoreBridge.mm:
1425         (-[WebCoreBridge drawRect:]): Now calls displaysWithFocusAttributes to figure out how to draw the
1426         text selection background.
1427         (-[WebCoreBridge setDisplaysWithFocusAttributes:]): Calls through to setDisplaysWithFocusAttributes in 
1428         KWQKHTMLPart.
1429         (-[WebCoreBridge selectionColor]): Flipped the value of this ternary expression to accommodate the
1430         change from usesInactiveTextBackgroundColor to setDisplaysWithFocusAttributes.
1431         (-[WebCoreBridge setCaretVisible:]): Removed.
1432
1433 2004-07-23  John Sullivan  <sullivan@apple.com>
1434
1435         Reviewed by Maciej.
1436
1437         - fixed <rdar://problem/3691569> REGRESSION (142): cmd-shift-clicking on a link 
1438         now also extends selection (even if there wasn't one before)
1439
1440         * khtml/khtml_part.cpp:
1441         (KHTMLPart::handleMousePressEventSingleClick):
1442         Uh, duh. Got a ! wrong last time somehow, so it did even more the wrong thing
1443         than ever. I did test this before, so my best guess is an accidental undo or
1444         something before committing.
1445
1446 2004-07-23  David Hyatt  <hyatt@apple.com>
1447
1448         Fix for 3735084 and 3737209, when you can find no line boxes in your previous sibling, the line box to dirty
1449         should be the *first* line box and not the last.
1450         
1451         Reviewed by kocienda
1452
1453         * khtml/rendering/render_flow.cpp:
1454         (RenderFlow::dirtyLinesFromChangedChild):
1455
1456 2004-07-23  Ken Kocienda  <kocienda@apple.com>
1457
1458         Reviewed by John
1459
1460         * khtml/xml/dom_selection.cpp:
1461         (DOM::Selection::validate): Not exactly a fix of anything per se, but more of a refinement
1462         of how selection validation works. The idea is to let the selection validation process
1463         end up with an empty selection given real DOM position inputs if the validation code
1464         cannot find a rendered position. Since selection is all about display, this makes sense.
1465         Currently, the code will allow the selection to be placed in a location that is not
1466         rendered, and this does nobody any good, as it can lead to bugs like accepting key input
1467         in a div that is set to display:none.
1468
1469 2004-07-23  Ken Kocienda  <kocienda@apple.com>
1470
1471         Reviewed by me
1472
1473         Updated layout tests with new expected results.
1474
1475         * layout-tests/editing/execCommand/boldSelection-expected.txt
1476         * layout-tests/editing/selection/extend-by-character-001-expected.txt
1477         * layout-tests/editing/selection/extend-by-character-003-expected.txt
1478         * layout-tests/editing/selection/unrendered-005-expected.txt
1479
1480 2004-07-22  Maciej Stachowiak  <mjs@apple.com>
1481
1482         Reviewed by Kevin.
1483
1484         <rdar://problem/3725467> REGRESSION(140-142) nothing displayed at http://Ye-Olde-Movies.tripod.com
1485         <rdar://problem/3599494> REGRESSION (100-125): Frame does not refresh until user clicks on browser.
1486         
1487         * khtml/rendering/render_frames.cpp:
1488         (RenderFrameSet::layout): When returning early because there are
1489         no children, make sure to mark self as no longer needing
1490         layout. Otherwise, when children are added, we'll fail to
1491         propagate childrenNeedLayout to our own parent! This is almost
1492         certainly a long-standing bug that was just masked by our old
1493         layout tomfoolery.
1494
1495 2004-07-22  Kevin Decker  <kdecker@apple.com>
1496
1497         Reviewed by Darin
1498
1499         Fixed <rdar://problem/3682340> (error console does not include source urls or line numbers of event exceptions).
1500
1501         * khtml/ecma/kjs_events.cpp:
1502         (JSLazyEventListener::JSLazyEventListener):
1503         (JSLazyEventListener::parseCode):
1504         * khtml/ecma/kjs_events.h:
1505         * khtml/ecma/kjs_proxy.cpp:
1506         (KJSProxyImpl::createHTMLEventHandler):
1507         * khtml/ecma/kjs_window.cpp:
1508         (Window::getJSLazyEventListener):
1509         * khtml/ecma/kjs_window.h:
1510
1511 2004-07-22  Ken Kocienda  <kocienda@apple.com>
1512
1513         Reviewed by Hyatt
1514
1515         Fix for this bug:
1516
1517         <rdar://problem/3724344> Bolding and unbolding creates extraneous tags
1518
1519         * khtml/editing/htmlediting_impl.cpp:
1520         (khtml::ApplyStyleCommandImpl::doApply): Move the start of the selection upstream
1521         before calling removeStyle. This makes sure we remove all styles that could apply to the 
1522         selection, and not just ones in from the start position of the selection passed to us. 
1523         This fixes the bug.
1524         * khtml/xml/dom_selection.cpp:
1525         (DOM::Selection::validate): Related fix to "constrain" the selection to be the 
1526         smallest equivalent range of nodes, in effect making a "canonical" version of the
1527         selection. While this is not strictly necessary to fix the bug, it is a step I have been 
1528         wanting to take this step for a long time, and some recent improvements made it 
1529         possible for me to do now in just two lines of code.
1530
1531 2004-07-22  Ken Kocienda  <kocienda@apple.com>
1532
1533         Reviewed by Hyatt
1534
1535         Fix for this bug:
1536         
1537         <rdar://problem/3711264> difficult (impossible?) to get cursor in an editable webview containing only tags
1538
1539         * khtml/rendering/render_container.cpp:
1540         (RenderContainer::positionForCoordinates): Don't assume you can pass off
1541         the check to a first child if there is one, since the child can be an element
1542         we do not want to place the caret in, like a table row with no cells (the case
1543         in the bug above). So now, we iterate of the renderer's children looking for
1544         the closest one, but only consider those renderers which either have children
1545         themselves, or are render block flows or are render inlines. 
1546
1547 2004-07-22  Darin Adler  <darin@apple.com>
1548
1549         - remove a bunch of now-unused code
1550
1551         * ForwardingHeaders/qxml.h: Removed.
1552         * kwq/KWQXmlAttributes.h: Removed.
1553         * kwq/KWQXmlAttributes.mm: Removed.
1554         * kwq/KWQXmlDefaultHandler.h: Removed.
1555         * kwq/KWQXmlDefaultHandler.mm: Removed.
1556         * kwq/KWQXmlSimpleReader.h: Removed.
1557         * kwq/KWQXmlSimpleReader.mm: Removed.
1558
1559 2004-07-22  Darin Adler  <darin@apple.com>
1560
1561         Reviewed by Dave.
1562
1563         - got rid of QXml classes and changed XML parsing to use libxml directly
1564
1565         This is the first step toward more direct use of libxml and libxslt.
1566         Dave is planning to build on this to implement XSLT and to improve our handling
1567         of XML documents (faster and more feature complete, including DTDs).
1568
1569         * khtml/html/html_elementimpl.cpp:
1570         (HTMLElementImpl::createContextualFragment):
1571         * khtml/html/htmltokenizer.cpp:
1572         (khtml::HTMLTokenizer::HTMLTokenizer):
1573         * khtml/html/htmltokenizer.h:
1574         * khtml/xml/dom_docimpl.cpp:
1575         (DocumentImpl::createTokenizer):
1576         (DocumentImpl::open):
1577         * khtml/xml/dom_docimpl.h:
1578         (DOM::DocumentImpl::tokenizer):
1579         * khtml/xml/dom_xmlimpl.cpp:
1580         (DOM::ProcessingInstructionImpl::checkStyleSheet):
1581         * khtml/xml/dom_xmlimpl.h:
1582         * khtml/xml/xml_tokenizer.h:
1583         * khtml/xml/xml_tokenizer.cpp: Redid this all to use libxml directly.
1584
1585         * WebCore.pbproj/project.pbxproj: Removed a bunch of files.
1586
1587 2004-07-21  Trey Matteson  <trey@apple.com>
1588
1589         DHTML dragging should use UTI for MIME-pboard type conversion
1590
1591         Reviewed by Ken
1592
1593         * kwq/KWQClipboard.mm:
1594         (cocoaTypeFromMIMEType):  Use UTI, except for cases we need to hardwire.  Only cut off
1595         MIME args following a semi-colon for text/plain.
1596         (MIMETypeFromCocoaType): Use UTI, except for cases we need to hardwire.  
1597         (KWQClipboard::types):  Filter out ancient NSAsciiPboardType so DHTML never sees this cruft.
1598
1599 2004-07-21  Ken Kocienda  <kocienda@apple.com>
1600
1601         Reviewed by Trey
1602
1603         Remove handling of HTML editing key events from WebCore.
1604         This now happens in WebKit if an event passes all the
1605         way through WebCore without being handled by the DOM.
1606
1607         In each case below, function were removed, as their
1608         only purpose was to handle editing key events.
1609
1610         * khtml/xml/dom_elementimpl.cpp
1611         * khtml/xml/dom_elementimpl.h
1612         * kwq/KWQKHTMLPart.h
1613         * kwq/KWQKHTMLPart.mm
1614         * kwq/WebCoreBridge.h
1615
1616 2004-07-21  Ken Kocienda  <kocienda@apple.com>
1617
1618         Reviewed by John
1619
1620         * khtml/xml/dom_selection.cpp:
1621         (DOM::Selection::modifyExtendingRightForward): Add LINE_BOUNDARY case to the switch statement in this
1622         function. Use the startAndEndLineNodesIncludingNode helper which already existed to get the right
1623         position.
1624         (DOM::Selection::modifyMovingRightForward): Ditto
1625         (DOM::Selection::modifyExtendingLeftBackward): Ditto
1626         (DOM::Selection::modifyMovingLeftBackward): Ditto
1627         * khtml/xml/dom_selection.h: 
1628         (DOM::Selection::): Add LINE_BOUNDARY constant to ETextGranularity enum. This
1629         specifies a new kind of movement that we need to implement the "move-to beggining/end of line"
1630         behavior which AppKit binds to cmd+left/right arrow keys.
1631         * kwq/WebCoreBridge.h: Add WebSelectToLineBoundary constant. This matches
1632
1633 2004-07-20  David Hyatt  <hyatt@apple.com>
1634
1635         Fix for 3714434, user stylesheet is always parsed in strict mode, when it should honor the document's setting.
1636         
1637         Reviewed by john
1638
1639         * khtml/css/cssstyleselector.cpp:
1640         (khtml::CSSStyleSelector::CSSStyleSelector):
1641
1642 2004-07-20  Ken Kocienda  <kocienda@apple.com>
1643
1644         Reviewed by Richard
1645
1646         * khtml/xml/dom_elementimpl.cpp:
1647         (ElementImpl::defaultEventHandler): No longer check whether
1648         the command key is modifying the key event. This check is
1649         now done elsewhere in the code. See the WebKit checkin that
1650         added the _web_keyBindingManagerHasBinding method to 
1651         WebNSEventExtras.
1652
1653 2004-07-20  Chris Blumenberg  <cblu@apple.com>
1654
1655         Fixed:
1656         <rdar://problem/3580589> REGRESSION (1.1-1.2): can't open a new window for an image that has not loaded
1657         <rdar://problem/3612691> Missing image icons (blue ?) lack context menu
1658
1659         Reviewed by john.
1660
1661         * kwq/WebCoreBridge.mm:
1662         (-[WebCoreBridge elementAtPoint:]): if there is no image, put the image URL on the element anyway
1663
1664 2004-07-20  David Hyatt  <hyatt@apple.com>
1665
1666         Fix for alt text not working on images.
1667         
1668         Reviewed by john
1669
1670         * khtml/rendering/render_image.cpp:
1671         (RenderImage::RenderImage):
1672         (RenderImage::setPixmap):
1673         (RenderImage::paint):
1674         (RenderImage::calcReplacedWidth):
1675         (RenderImage::calcReplacedHeight):
1676
1677 2004-07-20  Maciej Stachowiak  <mjs@apple.com>
1678
1679         Reviewed by Dave.
1680
1681         <rdar://problem/3720111> REGRESSION(125-152): map fails to load depending on banner ad; weather.com (works in IE and Firefox)
1682         
1683         * khtml/html/htmltokenizer.cpp:
1684         (khtml::HTMLTokenizer::begin): Initialize currentPrependingSrc.
1685         (khtml::HTMLTokenizer::scriptHandler): Store a pointer to the currently
1686         active prependingSrc variable on the stack, the better to handle weird cases
1687         of scripts writing out additional script tags and so forth.
1688         (khtml::HTMLTokenizer::write): Deal with the above.
1689         * khtml/html/htmltokenizer.h: Declare new member field.
1690
1691 2004-07-20  David Hyatt  <hyatt@apple.com>
1692
1693         Fix for layer positioning error that occurs when absolute positioned blocks are inside static positioned overflow:auto
1694         elements.
1695         
1696         Reviewed by john
1697
1698         * khtml/rendering/render_layer.cpp:
1699         (RenderLayer::updateLayerPosition):
1700
1701 2004-07-20  Trey Matteson  <trey@apple.com>
1702
1703         3705624 REGRESSION: can't rearrange photos on homepage.mac.com album
1704
1705         A subtle problem stemming from some interaction between focus handing and
1706         event propagation.  We previously made it so when a focus shift fails we
1707         don't propagate the event to KHTML.  The fix is to get rid of the inverse
1708         effect, so now even if a focus shift succeeds, we don't propagate to KHTML if
1709         the page already canceled default behavior.
1710
1711         In this specific case, the page is cancelling default behavior since it
1712         does its own dragging, and the bug was our new system dragging was
1713         kicking in.
1714
1715         Reviewed by Ken.
1716
1717         * khtml/khtmlview.cpp:
1718         (KHTMLView::dispatchMouseEvent):  What he said.
1719
1720 2004-07-20  Ken Kocienda  <kocienda@apple.com>
1721
1722         Reviewed by Darin
1723
1724         Fix for this bug:
1725         
1726         <rdar://problem/3695240> pasting plain text with newlines in it turns them into spaces
1727
1728         * kwq/WebCoreBridge.mm:
1729         (-[WebCoreBridge documentFragmentWithText:]): Refine this function to be smart about converting
1730         line endings into BR elements.
1731
1732 2004-07-20  Ken Kocienda  <kocienda@apple.com>
1733
1734         Reviewed by Hyatt
1735
1736         Fix for this bug:
1737         
1738         <rdar://problem/3707505> HTMLCompose: blinking cursor in both an address text field and the message body
1739
1740         * khtml/khtml_part.cpp:
1741         (KHTMLPart::setCaretVisible): This method renamed from setSelectionVisible. Since it really only operates
1742         on the caret, this seems like a better name.
1743         * khtml/khtml_part.h:
1744         * khtml/khtmlview.cpp:
1745         (KHTMLView::focusInEvent): Call setCaretVisible(true)
1746         (KHTMLView::focusOutEvent): Call setCaretVisible(false)
1747         * kwq/KWQKHTMLPart.mm:
1748         (KWQKHTMLPart::setShowsFirstResponder): Name change: setSelectionVisible becomes setCaretVisible.
1749         * kwq/WebCoreBridge.h: Expose setCaretVisible as a bridge method.
1750         * kwq/WebCoreBridge.mm:
1751         (-[WebCoreBridge setCaretVisible:]): Ditto.
1752
1753 2004-07-19  Maciej Stachowiak  <mjs@apple.com>
1754
1755         Reviewed by Trey.
1756
1757         <rdar://problem/3721428> REGRESSION (125.8-146): external javascript statements produce extra garbage character (sina.com)
1758         
1759         * khtml/misc/stringit.h:
1760         (khtml::TokenizerSubstring::TokenizerSubstring): For the apple branch, use the new
1761         stableUnicode() method to get the unicode pointer.
1762         * kwq/KWQString.h:
1763         * kwq/KWQString.mm:
1764         (QString::detachIfInternal): Reorganize this to be a bit less wacky about refcounts.
1765         It does not leave around a zombie internal data handle but rather destroys it right away,
1766         and leaves the object pointing to the new handle (which it can then deref). This makes
1767         the code more clear.
1768         (QString::~QString): Simplify.
1769         (QString::stableUnicode): New method that detaches a copy of the KWQStringData if it
1770         is internal to a string besides this one. This guarantees that if you get the unicode()
1771         pointer, it won't go bad so long as this string is still alive.
1772
1773 2004-07-19  David Hyatt  <hyatt@apple.com>
1774
1775         Fix for 3715117, crash from a bug in removeChildren.  Clean up node removal and fix an n-squared removal
1776         bug.  Also clean up checks in removeChild and in the dispatch of removedFromDocument mutation events to
1777         make node removal more efficient.
1778         
1779         Reviewed by kocienda
1780
1781         * khtml/xml/dom_nodeimpl.cpp:
1782
1783 2004-07-19  John Sullivan  <sullivan@apple.com>
1784
1785         Reviewed by Trey.
1786         
1787         - fixed <rdar://problem/3141150> can't undo in form textarea fields
1788
1789         * kwq/KWQTextArea.mm:
1790         (-[KWQTextArea _createTextView]):
1791         call setAllowsUndo:YES. My, wasn't this easy?
1792
1793 2004-07-19  David Hyatt  <hyatt@apple.com>
1794
1795         Merge @import fix for CSS1 test suite from Stephan Kulow.
1796         
1797         Reviewed by hyatt
1798
1799         * khtml/css/parser.cpp:
1800         * khtml/css/parser.y:
1801         * layout-tests/css1/basic/containment-expected.txt:
1802
1803 2004-07-19  David Hyatt  <hyatt@apple.com>
1804
1805         Fix for 3718697, crash clicking on JS tab at alaskaair.com.
1806         
1807         Reviewed by kocienda
1808
1809         * khtml/rendering/render_flow.cpp:
1810         (RenderFlow::detach):
1811         (RenderFlow::dirtyLinesFromChangedChild):
1812         * khtml/rendering/render_flow.h:
1813         * khtml/rendering/render_object.cpp:
1814         (RenderObject::dirtyLinesFromChangedChild):
1815         * khtml/rendering/render_object.h:
1816
1817 2004-07-16  David Hyatt  <hyatt@apple.com>
1818
1819         Fix for 3726471, need to ensure that it's safe to do updateRendering from within layout, since isContentEditable
1820         relies on it.  The fix is to just recalcStyle up front before beginning the layout, so that all of our renderobjects
1821         will be up-to-date.
1822         
1823         Reviewed by john
1824
1825         * khtml/khtmlview.cpp:
1826         (KHTMLView::layout):
1827
1828 2004-07-16  Ken Kocienda  <kocienda@apple.com>
1829
1830         Reviewed by Hyatt
1831
1832         Fix for this bug:
1833         
1834         <rdar://problem/3722153> Random crash while typing (DOM::NodeImpl::parentNode (this=0x0))
1835
1836         * khtml/editing/htmlediting_impl.cpp:
1837         (khtml::DeleteSelectionCommandImpl::doApply): This check merely makes the code
1838         more robust. I do not understand how Grant ended up with null start or end 
1839         blocks in the case of his bug report, but by adding two null checks, the code is 
1840         now hardened a bit in case it happens again.
1841
1842 2004-07-16  Ken Kocienda  <kocienda@apple.com>
1843
1844         Reviewed by Hyatt
1845
1846         Fix for these bugs:
1847
1848         <rdar://problem/3730785> Crash when arrow navigation goes to empty table cell
1849         <rdar://problem/3730790> Caret does not blink when placed in empty table cell
1850
1851         * khtml/rendering/render_block.cpp:
1852         (khtml::RenderBlock::paintObject): Caret node's renderer might be this block, so
1853         don't block the painting of the caret in this case. This was the case in 3730790.
1854         We had the right geometry for the caret but blocked its painting. 
1855         * khtml/xml/dom_position.cpp:
1856         (DOM::Position::previousLinePosition): Rework the logic here. This function asserted
1857         that the new position we would navigate to had a line box, but empty table cells, for
1858         instance will not. So, deal with this situation as well. The end result is a 
1859         function that worked like it did before in cases where the previous line position has
1860         a line box, but now also will allow navigation to work when it does not.
1861         (DOM::Position::nextLinePosition): Ditto.
1862
1863 2004-07-16  Ken Kocienda  <kocienda@apple.com>
1864
1865         Reviewed by Hyatt
1866
1867         Fix for this bug:
1868         
1869         <rdar://problem/3687216> editable inline causes crash when focused
1870
1871         * khtml/xml/dom_docimpl.cpp:
1872         (DocumentImpl::relinquishesEditingFocus): Add null check for rootEditableElement.
1873         (DocumentImpl::acceptsEditingFocus): Ditto.
1874
1875 2004-07-16  David Hyatt  <hyatt@apple.com>
1876
1877         Fix for 3709337, crash when using display: compact.  Need to make sure that the isCompact() check in bidi.cpp is
1878         also checking for RenderBlocks, since otherwise you match text nodes (and that's just wrong).
1879         
1880         Reviewed by kocienda
1881
1882         * khtml/rendering/bidi.cpp:
1883         (khtml::RenderBlock::layoutInlineChildren):
1884
1885 === Safari-152 ===
1886
1887 2004-07-15  David Hyatt  <hyatt@apple.com>
1888
1889         Fix for 3625611, images offset on first visit to page.  The method for determining the last clean line was
1890         flawed and would incorrectly miss dirty lines that occurred after the first clean line.
1891         
1892         Reviewed by john
1893
1894         * khtml/rendering/bidi.cpp:
1895         (khtml::RenderBlock::determineEndPosition):
1896
1897 2004-07-15  Ken Kocienda  <kocienda@apple.com>
1898
1899         Reviewed by John
1900
1901         Fix for this bug:
1902         <rdar://problem/3587601> reproducible assertion failure in Blot deleting text, then image at Yahoo.com
1903         
1904         * khtml/editing/htmlediting_impl.cpp:
1905         (khtml::DeleteCollapsibleWhitespaceCommandImpl::deleteWhitespace): Relax assertion
1906         that nodes are text nodes during the walk of eligible nodes that could possibly be
1907         deleted. Change the assertion to an conditional check for text nodes. We may have 
1908         unrendered nodes in the mix here (as is the case in the bug where the assertion
1909         failed on an AREA element), and the conditional check is sufficient to
1910         skip them while leaving the delete logic we want unperturbed. 
1911
1912 2004-07-14  Ken Kocienda  <kocienda@apple.com>
1913
1914         Reviewed by John
1915
1916         * khtml/rendering/render_block.cpp:
1917         (khtml::RenderBlock::paintObject): Add null check on DOM node before
1918         asking if it is contentEditable.
1919
1920 2004-07-14  David Hyatt  <hyatt@apple.com>
1921
1922         Fix for 3595073, setting innerHTML on a <table> should work.
1923         
1924         Reviewed by rjw
1925
1926         * khtml/html/html_elementimpl.cpp:
1927         (HTMLElementImpl::createContextualFragment):
1928
1929 2004-07-14  Ken Kocienda  <kocienda@apple.com>
1930
1931         Reviewed by Hyatt
1932         
1933         Updated these layout tests as a result of the last patch.
1934         These results are better.
1935
1936         * layout-tests/editing/execCommand/selectAll-expected.txt
1937         * layout-tests/editing/selection/extend-by-character-006-expected.txt
1938         * layout-tests/editing/selection/unrendered-001-expected.txt
1939         * layout-tests/editing/selection/unrendered-003-expected.txt
1940
1941 2004-07-14  Ken Kocienda  <kocienda@apple.com>
1942
1943         Reviewed by Hyatt
1944
1945         * khtml/rendering/render_block.cpp: 
1946         (khtml::RenderBlock::paintObject): Change back to start() from caretPosition().
1947         Since the policy is now to move the selection to rendered content, if possible,
1948         when the selection is set, there is no longer any reason to have the additional
1949         caretPosition() function to store where the caret should be drawn.
1950         * khtml/xml/dom_docimpl.cpp:
1951         (DocumentImpl::updateSelection): No longer any need to call closestRenderedPosition here.
1952         This is done in Selection::validate.
1953         * khtml/xml/dom_position.cpp:
1954         (DOM::Position::closestRenderedPosition): Improved algorithm. Now much simpler.
1955         * khtml/xml/dom_selection.cpp:
1956         (DOM::Selection::Selection): caretPosition() and m_caretPosition now obsolete.
1957         (DOM::Selection::init): Ditto.
1958         (DOM::Selection::modifyExtendingRightForward): No longer any need to call 
1959         closestRenderedPosition here. This is done in Selection::validate.
1960         (DOM::Selection::modifyMovingRightForward): Ditto.
1961         (DOM::Selection::modifyExtendingLeftBackward): Ditto.
1962         (DOM::Selection::modifyMovingLeftBackward): Ditto.
1963         (DOM::Selection::layoutCaret): Ditto.
1964         (DOM::Selection::validate): Add code to move the selection to rendered content if possible.
1965         * khtml/xml/dom_selection.h: caretPosition() and m_caretPosition now obsolete.
1966
1967 2004-07-14  David Hyatt  <hyatt@apple.com>
1968
1969         Fix for 3716082, assert when you dynamically remove float or position styles.
1970         
1971         Reviewed by kevin
1972
1973         * khtml/rendering/render_object.cpp:
1974         (RenderObject::setStyle):
1975
1976 2004-07-14  David Hyatt  <hyatt@apple.com>
1977
1978         Fix for various table regressions (malumovies.com and cityofheroes.gameamp.com) involving bungling of
1979         percentage heights.
1980         
1981         Reviewed by kocienda
1982
1983         * khtml/rendering/render_box.cpp:
1984         (RenderBox::calcPercentageHeight):
1985         (RenderBox::availableHeightUsing):
1986         * khtml/rendering/render_table.cpp:
1987         (RenderTable::layout):
1988         (RenderTableSection::calcRowHeight):
1989         (RenderTableSection::layoutRows):
1990         (RenderTableCell::updateFromElement):
1991         * khtml/rendering/render_table.h:
1992
1993 2004-07-14  Ken Kocienda  <kocienda@apple.com>
1994
1995         Reviewed by John
1996
1997         * khtml/xml/dom_position.cpp:
1998         (DOM::Position::equivalentDeepPosition): New helper function to improve selection handling.
1999         Soon, I plan to land some changes that use this new function.
2000         * khtml/xml/dom_position.h:
2001
2002 2004-07-14  Ken Kocienda  <kocienda@apple.com>
2003
2004         Reviewed by Vicki
2005
2006         * WebCore-combined.exp: Added QString.at symbol to tests exports to facilitate debugging
2007         data formatting change that is to come.
2008         * WebCore-tests.exp:
2009         
2010 2004-07-13  John Sullivan  <sullivan@apple.com>
2011
2012         Reviewed by Ken.
2013         
2014         - fixed <rdar://problem/3705500> REGRESSION (125.8-146): Cmd-E on an 
2015         HTML page puts a trailing space on Find pasteboard
2016
2017         * khtml/misc/khtml_text_operations.cpp:
2018         (khtml::TextIterator::handleTextBox):
2019         In the case where a subrun doesn't extend to the end of the text box,
2020         the well-commented code was supposed to return from this routine, but
2021         the wrong variable was being compared. This would send us through another
2022         pass of the loop, which would end up worrying about collapsed space at the
2023         end of the current box, even though we only cared about the beginning of the
2024         current box.
2025
2026 2004-07-12  Richard Williamson   <rjw@apple.com>
2027
2028         Fixed 3717982.  Implemented navigator.language!
2029
2030         Reviewed by John.
2031
2032         * khtml/ecma/kjs_navigator.cpp:
2033         (Navigator::getValueProperty):
2034
2035 2004-07-12  Ken Kocienda  <kocienda@apple.com>
2036
2037         Reviewed by Hyatt
2038
2039         * khtml/xml/dom_position.cpp:
2040         (DOM::Position::inRenderedContent): I broke selection drawing with my last patch. This 
2041         function is now used in selection drawing, and it was making an unneeded check to see
2042         that content was editable to answer whether or not is was rendered. Bad. Fixed.
2043
2044 2004-07-12  David Hyatt  <hyatt@apple.com>
2045
2046         Fix for 3621138, crash on hrweb.apple.com.  Make sure that in the case where objects get pulled up from merging
2047         blocks that we just delete all line boxes.
2048         
2049         Reviewed by kocienda
2050
2051         * khtml/rendering/render_block.cpp:
2052         (khtml::RenderBlock::removeChild):
2053
2054 2004-07-10  Maciej Stachowiak  <mjs@apple.com>
2055
2056         Reviewed by John.
2057
2058         <rdar://problem/3706080>: (REGRESSION (125.8-147u): Nested <ul> do not display bullets)
2059         <rdar://problem/3676376>: (Second level bullets not printed when printing Xcode release notes)
2060         
2061         * kwq/KWQPainter.h:
2062         * kwq/KWQPainter.mm:
2063         (CGColorFromNSColor):
2064         (QPainter::drawEllipse):
2065         (QPainter::setShadow):
2066
2067 2004-07-12  Ken Kocienda  <kocienda@apple.com>
2068
2069         Reviewed by me
2070         
2071         Added new editing-related layout tests
2072
2073         * layout-tests/editing/deleting/delete-after-span-ws-001-expected.txt: Added.
2074         * layout-tests/editing/deleting/delete-after-span-ws-001.html: Added.
2075         * layout-tests/editing/deleting/delete-after-span-ws-002-expected.txt: Added.
2076         * layout-tests/editing/deleting/delete-after-span-ws-002.html: Added.
2077         * layout-tests/editing/deleting/delete-after-span-ws-003-expected.txt: Added.
2078         * layout-tests/editing/deleting/delete-after-span-ws-003.html: Added.
2079         * layout-tests/editing/selection/unrendered-001-expected.txt: Added.
2080         * layout-tests/editing/selection/unrendered-001.html: Added.
2081         * layout-tests/editing/selection/unrendered-002-expected.txt: Added.
2082         * layout-tests/editing/selection/unrendered-002.html: Added.
2083         * layout-tests/editing/selection/unrendered-003-expected.txt: Added.
2084         * layout-tests/editing/selection/unrendered-003.html: Added.
2085         * layout-tests/editing/selection/unrendered-004-expected.txt: Added.
2086         * layout-tests/editing/selection/unrendered-004.html: Added.
2087         * layout-tests/editing/selection/unrendered-005-expected.txt: Added.
2088         * layout-tests/editing/selection/unrendered-005.html: Added.
2089         * layout-tests/traversal/node-iterator-008-expected.txt: Added.
2090         * layout-tests/traversal/node-iterator-008.html: Added.
2091         * layout-tests/traversal/tree-walker-005-expected.txt: Added.
2092         * layout-tests/traversal/tree-walker-005.html: Added.
2093
2094 2004-07-12  Ken Kocienda  <kocienda@apple.com>
2095
2096         Reviewed by Hyatt
2097
2098         Fixes for these bugs:
2099         
2100         <rdar://problem/3723359> Extending then "unextending" selection with arrow keys should draw caret but doesn't
2101         <rdar://problem/3724626> White-space deletion code deletes wrong character when space follows span
2102         
2103         * khtml/editing/htmlediting_impl.cpp:
2104         (khtml::DeleteSelectionCommandImpl::doApply): Modify special-case white-space deletion code so it runs
2105         only in the special case. It was throwing its net too widely, catching the case described in 3724626.
2106         By tightening up the special-case white-space deletion, and allowing the more general-purpose code to run,
2107         the bug is fixed.
2108         * khtml/xml/dom_docimpl.cpp:
2109         (DocumentImpl::updateSelection): Use recently-added closestRenderedPosition helper in Position class
2110         to figure out the start and end positions for selection drawing.
2111         * khtml/xml/dom_position.cpp:
2112         (DOM::Position::equivalentUpstreamPosition): Added code to handle white-space that causes line breaks.
2113         (DOM::Position::equivalentDownstreamPosition): Ditto.
2114         (DOM::Position::closestRenderedPosition): Trap empty selections at function entry, return *this.
2115         (DOM::Position::isFirstRenderedPositionOnLine): Can't be first rendered position on line if not rendered.
2116         Add check for this.
2117         (DOM::Position::isLastRenderedPositionOnLine): Ditto, but s/first/last/
2118         * khtml/xml/dom_selection.cpp:
2119         (DOM::Selection::validate): A selection is in caret state if the start and end are equal *or* equivalent.
2120         The equivalence case is new, and fixes 3723359.
2121
2122 2004-07-09  Kevin Decker  <kdecker@apple.com>
2123
2124         Reviewed by Hyatt.
2125         
2126         fixes the width:auto problem in
2127         <rdar://problem/3698344> REGRESSION (143?-144): macrumors.com tabs are compressed and illegible
2128         
2129         * khtml/css/cssstyleselector.cpp:
2130         (khtml::CSSStyleSelector::applyProperty):
2131
2132 2004-07-09  Ken Kocienda  <kocienda@apple.com>
2133
2134         Reviewed by me
2135         
2136         Updated some layout test results.
2137
2138         * layout-tests/editing/deleting/delete-image-004-expected.txt:
2139         * layout-tests/editing/selection/extend-by-character-006-expected.txt:
2140
2141 2004-07-09  Chris Blumenberg  <cblu@apple.com>
2142
2143         Allowed my change for 3715785 to compile on Jaguar.
2144
2145         Reviewed by kocienda.
2146
2147         * kwq/WebCoreBridge.h:
2148         * kwq/WebCoreBridge.mm:
2149         (-[WebCoreBridge domain]): new, allows access to the domain without using the DOM API which doesn't exist on Jaguar
2150
2151 2004-07-09  Ken Kocienda  <kocienda@apple.com>
2152
2153         Reviewed by Hyatt
2154         
2155         Some improvements to fix:
2156         
2157         <rdar://problem/3723111> Caret not drawn when selection set to unrendered content
2158
2159         * khtml/editing/htmlediting_impl.cpp:
2160         (khtml::TypingCommandImpl::issueCommandForDeleteKey): Adjust selection to delete if
2161         selected position is not rendered.
2162         * khtml/rendering/render_block.cpp:
2163         (khtml::RenderBlock::paintObject): Use new caretPosition() function on Selection to
2164         figure out whether to paint.
2165         * khtml/xml/dom_position.cpp:
2166         (DOM::Position::previousCharacterPosition): Now correctly deals with a start
2167         position that is not rendered.
2168         (DOM::Position::nextCharacterPosition): Ditto.
2169         (DOM::Position::closestRenderedPosition): New helper.
2170         * khtml/xml/dom_position.h:
2171         (DOM::): Moved in EAffinity from Selection header. Now used in closestRenderedPosition function.
2172         * khtml/xml/dom_selection.cpp:
2173         (DOM::Selection::Selection): Added new m_caretPosition member. This is the position of the caret
2174         after a caret layout. This may be different from start or end if start and end are not rendered. 
2175         (DOM::Selection::init):
2176         (DOM::Selection::modifyExtendingRightForward): New helper to clean up modify() and make it more readble.
2177         (DOM::Selection::modifyMovingRightForward): Ditto.
2178         (DOM::Selection::modifyExtendingLeftBackward): Ditto.
2179         (DOM::Selection::modifyMovingLeftBackward): Ditto.
2180         (DOM::Selection::modify): Use new helpers to make this more readble.
2181         (DOM::Selection::layoutCaret): Uses new closestRenderedPosition helper to place the caret if in unrendered
2182         content.
2183         (DOM::Selection::paintCaret): Remove moveToRenderedContent. obsolete.
2184         * khtml/xml/dom_selection.h:
2185         (DOM::Selection::caretPosition): New accessor.
2186         * kwq/WebCoreBridge.mm:
2187         (-[WebCoreBridge setSelectedDOMRange:affinity:]): EAffinity no longer a member enum of Selection class.
2188
2189 2004-07-08  David Hyatt  <hyatt@apple.com>
2190
2191         Fix for the table layout test that failed because of a change in how innerText worked.  We need to do
2192         updateLayout now when using innerText, since the method has been changed to use line boxes in the render tree
2193         that might otherwise be out of date.
2194         
2195         Reviewed by kocienda
2196
2197         * khtml/html/html_elementimpl.cpp:
2198         (HTMLElementImpl::innerText):
2199
2200 2004-07-08  John Sullivan  <sullivan@apple.com>
2201
2202         Reviewed by Ken.
2203         
2204         - fixed <rdar://problem/3691569> REGRESSION (142): cmd-shift-clicking on a link 
2205         now also extends selection (even if there wasn't one before)
2206
2207         * khtml/khtml_part.cpp:
2208         (KHTMLPart::handleMousePressEventSingleClick):
2209         if there's a URL associated with the event, don't extend the selection
2210
2211 2004-07-08  Ken Kocienda  <kocienda@apple.com>
2212
2213         Reviewed by Vicki
2214
2215         Added some helper functions which provide strings to display in the 
2216         Xcode debugger's variable inspector window. These functions are called
2217         from the LabyrinthDataFormatter debugger plugin I just checked in to 
2218         the Labyrinth/Tools directory.
2219         
2220         Note that these functions are compiled in on Development builds only.
2221
2222         * WebCore-combined.exp:
2223         * WebCore-tests.exp: Export all the formatForDebugger symbols so the
2224         debugger program can link with them.
2225         * khtml/xml/dom2_rangeimpl.cpp:
2226         (DOM::RangeImpl::formatForDebugger):
2227         * khtml/xml/dom2_rangeimpl.h:
2228         * khtml/xml/dom_elementimpl.cpp:
2229         (ElementImpl::formatForDebugger):
2230         * khtml/xml/dom_elementimpl.h:
2231         * khtml/xml/dom_nodeimpl.cpp:
2232         * khtml/xml/dom_nodeimpl.h:
2233         * khtml/xml/dom_position.cpp:
2234         (DOM::Position::formatForDebugger):
2235         * khtml/xml/dom_position.h:
2236         * khtml/xml/dom_selection.cpp:
2237         (DOM::Selection::formatForDebugger):
2238         * khtml/xml/dom_selection.h:
2239         * khtml/xml/dom_textimpl.cpp:
2240         (TextImpl::formatForDebugger):
2241         * khtml/xml/dom_textimpl.h:
2242
2243 2004-07-08  John Sullivan  <sullivan@apple.com>
2244
2245         Reviewed by Vicki.
2246         
2247         - fixed <rdar://problem/3721544> crash increasing font size; 
2248         entrezeroetun.com (works in IE and Firefox)
2249
2250         * khtml/rendering/render_block.cpp:
2251         (khtml::RenderBlock::updateFirstLetter):
2252         Check for nil originalString() before dereffing
2253
2254 2004-07-08  David Hyatt  <hyatt@apple.com>
2255
2256         Fix for 3721453, CSS3 initial property caused crashes because the macros were not written correctly.
2257         
2258         Reviewed by john
2259
2260         * khtml/css/cssstyleselector.cpp:
2261
2262 === Safari-151 ===
2263
2264 2004-07-07  David Hyatt  <hyatt@apple.com>
2265
2266         Fix for 3712133, crash from first-line pseudo-style use.
2267         
2268         Reviewed by kocienda
2269
2270         * khtml/css/cssstyleselector.cpp:
2271         (khtml::CSSStyleSelector::styleForElement):
2272         * khtml/css/cssstyleselector.h:
2273         * khtml/rendering/render_object.cpp:
2274         (RenderObject::getPseudoStyle):
2275
2276 2004-07-07  Ken Kocienda  <kocienda@apple.com>
2277
2278         Reviewed by Hyatt
2279
2280         Fix for this bug:
2281         
2282         <rdar://problem/3716479> calling setInnerHTML during a webViewDidChange delegate call causes a crash
2283         
2284         The fix involves some rearrangement of code in TypingCommand and TypingCommandImpl.
2285         Formerly, new TypingCommands would apply themselves (which was a no-op) and then
2286         do their action in some code a way different than other commands. This type of command
2287         application is different than for all other commands since TypingCommands can be coalesced.
2288         The crash occurred as a result of the "no-op" TypingCommand having the unconsidered
2289         consequence of causing editing delegate notifications to be sent before the command 
2290         has actually run. This change takes a small step towards making TypingCommandImpl function like
2291         other commands, where the command work is done in doApply. This makes the notification
2292         happen in the right order.
2293
2294         * khtml/editing/htmlediting.cpp:
2295         (khtml::TypingCommand::TypingCommand):
2296         (khtml::TypingCommand::insertText):
2297         (khtml::TypingCommand::insertNewline):
2298         (khtml::TypingCommand::deleteKeyPressed):
2299         * khtml/editing/htmlediting.h:
2300         (khtml::TypingCommand::):
2301         * khtml/editing/htmlediting_impl.cpp:
2302         (khtml::TypingCommandImpl::TypingCommandImpl):
2303         (khtml::TypingCommandImpl::doApply):
2304         * khtml/editing/htmlediting_impl.h:
2305
2306 2004-07-06  Ken Kocienda  <kocienda@apple.com>
2307
2308         Reviewed by me
2309
2310         * khtml/html/html_tableimpl.cpp:
2311         (HTMLTableElementImpl::addChild): Added a better comment in the
2312         code I just checked in a few minutes ago.
2313
2314 2004-07-06  Ken Kocienda  <kocienda@apple.com>
2315
2316         Reviewed by Hyatt
2317         
2318         Fix for this bug:
2319         
2320         <rdar://problem/3672377> assertion failure in AppendNodeCommandImpl::doApply 
2321         due to non-0 exception code trying to insert a DIV markup string
2322         
2323         The solution was to revert to the code that was rolled out, and removing
2324         the child checks from NodeImpl::checkAddChild. However, this time, I added
2325         code very similar to this check into the code that runs while HTML is 
2326         being parsed to build up tables. This code relies on child-add failure
2327         to ensure the proper construction of well-formed tables (as gross as that
2328         sounds), so the check needs to be retained there. No other code seems to
2329         be so affected. Layout tests are unchanged by this patch.
2330
2331         * khtml/html/html_tableimpl.cpp:
2332         (HTMLTableElementImpl::addChild):
2333         * khtml/xml/dom_nodeimpl.cpp:
2334         (NodeImpl::checkAddChild):
2335
2336 2004-07-06  Ken Kocienda  <kocienda@apple.com>
2337
2338         Reviewed by John
2339         
2340         Simple change. I switched the arguments of the appendNode helper function
2341         and the AppendNodeCommand and AppendNodeCommandImpl classes. The node to 
2342         insert now comes before the parent node in the argument list. I did this
2343         to make this function match the convention of others in the HTML editing code.
2344         This was the only one that was "different" in the way that it ordered arguments.
2345         As a result, I was always looking to see that I was passing things in the right
2346         order.
2347         
2348         * khtml/editing/htmlediting.cpp:
2349         (khtml::AppendNodeCommand::AppendNodeCommand):
2350         (khtml::AppendNodeCommand::appendChild):
2351         (khtml::AppendNodeCommand::parentNode):
2352         * khtml/editing/htmlediting.h:
2353         * khtml/editing/htmlediting_impl.cpp:
2354         (khtml::CompositeEditCommandImpl::insertNodeAfter):
2355         (khtml::CompositeEditCommandImpl::insertNodeAt):
2356         (khtml::CompositeEditCommandImpl::appendNode):
2357         (khtml::AppendNodeCommandImpl::AppendNodeCommandImpl):
2358         (khtml::AppendNodeCommandImpl::~AppendNodeCommandImpl):
2359         (khtml::AppendNodeCommandImpl::doApply):
2360         (khtml::AppendNodeCommandImpl::doUnapply):
2361         (khtml::ApplyStyleCommandImpl::surroundNodeRangeWithElement):
2362         (khtml::DeleteSelectionCommandImpl::doApply):
2363         (khtml::InputNewlineCommandImpl::insertNodeAfterPosition):
2364         (khtml::InputNewlineCommandImpl::insertNodeBeforePosition):
2365         (khtml::InputTextCommandImpl::prepareForTextInsertion):
2366         * khtml/editing/htmlediting_impl.h:
2367         (khtml::AppendNodeCommandImpl::parentNode):
2368
2369 2004-07-06  Ken Kocienda  <kocienda@apple.com>
2370
2371         Reviewed by Trey
2372
2373         Fixed several problems with traversal classes. For one, NodeIterators treat
2374         FILTER_REJECT and FILTER_SKIP the same, since it treats the DOM tree as a
2375         flat collection of nodes free of hierarchy. The code before this change did
2376         not do this correctly. It sure pays to go back and read the specs. :)
2377         
2378         Also, the code to traverse from node to node when filters were applied was
2379         not working correctly. My first attemmpt to implement this was just plain
2380         buggy, as I discovered when I tried to write tests for my WWDC talk. I have
2381         settled on an implementation which is much simpler and worked for all the
2382         tests I threw at it. 
2383
2384         * khtml/xml/dom2_traversalimpl.cpp:
2385         (DOM::NodeIteratorImpl::findNextNode):
2386         (DOM::NodeIteratorImpl::nextNode):
2387         (DOM::NodeIteratorImpl::findPreviousNode):
2388         (DOM::NodeIteratorImpl::previousNode):
2389         (DOM::TreeWalkerImpl::parentNode):
2390         (DOM::TreeWalkerImpl::firstChild):
2391         (DOM::TreeWalkerImpl::lastChild):
2392         (DOM::TreeWalkerImpl::previousSibling):
2393         (DOM::TreeWalkerImpl::nextSibling):
2394         (DOM::TreeWalkerImpl::previousNode):
2395         (DOM::TreeWalkerImpl::nextNode):
2396         (DOM::TreeWalkerImpl::ancestorRejected):
2397         * khtml/xml/dom2_traversalimpl.h:
2398
2399 2004-07-06  Vicki Murley  <vicki@apple.com>
2400
2401         Reviewed by kocienda.
2402
2403         - added backColorCommand, foreColorCommand, fontNameCommand, 
2404         and fontSizeCommand
2405   
2406         * layout-tests/editing/editing.js:
2407
2408 2004-07-06  Trey Matteson  <trey@apple.com>
2409
2410         3716053 - www.theage.com.au has extra back/forward items due to ads
2411
2412         This turned out to be easily fixed by generalizing the fix to 3438441.  We prevent
2413         addition to the b/f list not just during an onload event, but during any non-user
2414         gesture, which includes top level script executing.
2415
2416         Reviewed by Richard.
2417
2418         * kwq/KWQKHTMLPart.mm:
2419         (KWQKHTMLPart::openURL):  Only real change - prevent adding to b/f list if not
2420         a user gesture.
2421         (KWQKHTMLPart::openURLRequest):  Rename "onLoadEvent" to "userGesture", swap sense
2422         (KWQKHTMLPart::submitForm):  Ditto
2423         (KWQKHTMLPart::urlSelected): Ditto
2424         * kwq/KWQKHTMLPartBrowserExtension.mm:
2425         (KHTMLPartBrowserExtension::createNewWindow):  Ditto
2426         * kwq/WebCoreBridge.h:
2427
2428 2004-07-02  Darin Adler  <darin@apple.com>
2429
2430         Reviewed by Dave.
2431
2432         - fixed half of <rdar://problem/3709244> utf-8 meta tag not parsed when page title contains angle brackets or if </meta> tag used
2433
2434         * khtml/misc/decoder.cpp: (Decoder::decode): Allow </meta> tags without deciding we
2435         are done with the header.
2436
2437 2004-06-30  Trey Matteson  <trey@apple.com>
2438
2439         Dragging within a web view should be allowed to start when the window isn't key.
2440
2441         A few months ago, Chris made this work, but it relied on the fact that all dragging
2442         was done in WebKit.  When WebCore got involved in dragging, it was broken.  Now we
2443         have a new scheme that gets it working again that properly involves WebCore.
2444
2445         The general idea is that when AK asks us whether to accept the first mouse and do
2446         "delayed window ordering", we must consult WC to see if we might start a drag.  In
2447         addition, instead of these drags in non-active windows being started as a special
2448         case in WK, they go through the normal WK-WC drag machinery.
2449
2450         Reviewed by John.
2451
2452         * khtml/khtml_part.cpp:
2453         (KHTMLPart::shouldDragAutoNode):  New x,y args.
2454         * khtml/khtml_part.h:
2455         * khtml/rendering/render_object.cpp:
2456         (RenderObject::draggableNode):  Pass through new x,y args.
2457         * khtml/rendering/render_object.h:
2458         * kwq/KWQKHTMLPart.h:
2459         (KWQKHTMLPart::setActivationEventNumber):  New setter.
2460         * kwq/KWQKHTMLPart.mm:
2461         (KWQKHTMLPart::KWQKHTMLPart):  Init new ivar.
2462         (KWQKHTMLPart::eventMayStartDrag):  New routine that checks if we might start
2463         a drag in response to a mouseDown.
2464         (KWQKHTMLPart::khtmlMouseMoveEvent):  Pass x,y to the routine that finds a draggable
2465         node.  This eventually gets back up to WK's _mayStartDragAtEventLocation:.
2466         Delay requirement when dragging the selection now implemented here.
2467         (KWQKHTMLPart::khtmlMouseReleaseEvent):  Must avoid changing the selection if we
2468         wind up here as part of the first click in a window (because we started handling
2469         the click to possible start a drag, but that never came through).
2470         (KWQKHTMLPart::mouseDown): Save away event timestamp.
2471         (KWQKHTMLPart::shouldDragAutoNode):  Pass location up to WK instead of the
2472         most recent event we stashed.
2473         * kwq/WebCoreBridge.h:
2474         * kwq/WebCoreBridge.mm:
2475         (-[WebCoreBridge setActivationEventNumber:]):  Trivial glue.
2476         (-[WebCoreBridge eventMayStartDrag:]):  Ditto.
2477
2478 2004-06-29  Trey Matteson  <trey@apple.com>
2479
2480         Need to tighten up JS error checking for requesting drag props
2481         in the wrong cases.
2482
2483         Reviewed by John.
2484
2485         * khtml/ecma/kjs_events.cpp:
2486         (Clipboard::getValueProperty):  Assert if someone somehow set
2487         dropEffect or effectAllowed and it's a copy/paste clipboard
2488         instead of a dragging clipboard.
2489         (Clipboard::putValue):  Don't let anyone set dropEffect or
2490         effectAllowed on a copy/paste clipboard.
2491         (ClipboardProtoFunc::tryCall):  Disallow setting dragImage on
2492         a copy/paste clipboard.
2493
2494 2004-06-29  Trey Matteson  <trey@apple.com>
2495
2496         DHTML dragging - source should have access to the operation chosen
2497         by the destination.
2498
2499         Reviewed by John
2500
2501         * kwq/KWQKHTMLPart.h:
2502         * kwq/KWQKHTMLPart.mm:
2503         (KWQKHTMLPart::dragSourceEndedAt):  Set the destination's operation
2504         on the clipboard.
2505         * kwq/WebCoreBridge.mm:
2506         (-[WebCoreBridge dragExitedWithDraggingInfo:]):  For completeness
2507         we set the source op for the ondragexit event.
2508         (-[WebCoreBridge concludeDragForDraggingInfo:]):  Ditto for the
2509         drop event.
2510         (-[WebCoreBridge dragSourceEndedAt:operation:]):  Pass through of operation.
2511
2512 2004-06-24  Trey Matteson  <trey@apple.com>
2513
2514         3710422 - REGRESSION: Safari crashes trying to send onbeforecut event at about://blank
2515
2516         Simple fix - don't try to send the event to the body element if we have no body element.
2517
2518         Reviewed by John
2519
2520         * kwq/KWQKHTMLPart.mm:
2521         (KWQKHTMLPart::dispatchCPPEvent):
2522
2523 2004-06-24  Trey Matteson  <trey@apple.com>
2524
2525         3704950 drag image in DB ConfigBar has horizontal graphics turd WebCore JavaScript
2526
2527         When we generate a drag image (or a selection image too, for that matter) we
2528         translate the CTM using a CG call.  Later, WebImageRenderer adjusts the pattern
2529         phase based on the CTM of the focused view, which doesn't include our translate.
2530         So we must inform WebKit about the additional phase adjustment.
2531
2532         Reviewed by Richard
2533
2534         * kwq/KWQKHTMLPart.mm:  Tell WebKit about the phase adjustment.
2535         (KWQKHTMLPart::imageFromRect):
2536         * kwq/WebCoreGraphicsBridge.h:
2537         * kwq/WebCoreGraphicsBridge.m:
2538         (-[WebCoreGraphicsBridge setAdditionalPatternPhase:]):  New routine to receive
2539         the phase adjustment.
2540
2541 2004-06-24  Trey Matteson  <trey@apple.com>
2542
2543         3679986 - screenX and screenY are flipped and relative to the bottom left of the WebView, rather than the screen
2544         3699510 - synthesized click events have bogus screen coords
2545
2546         Reviewed by Darin.
2547
2548         * khtml/khtmlview.cpp:
2549         (KHTMLView::dispatchDragEvent):  Generate screen coords for drag events using new func.
2550         (KHTMLView::dispatchMouseEvent):   Ditto.
2551         * khtml/khtmlview.h:
2552         * khtml/xml/dom_nodeimpl.cpp:
2553         (NodeImpl::dispatchMouseEvent):  Comment tricky semantics.
2554         Calc screen coords in apple-specific way.
2555         * kwq/KWQKHTMLView.mm:
2556         (KHTMLView::viewportToGlobal):  Passthrough to window widget.
2557         * kwq/KWQScrollView.mm:
2558         * kwq/KWQWindowWidget.h:
2559         * kwq/KWQWindowWidget.mm:
2560         (KWQWindowWidget::mapToGlobal):  Call former code factored to new method below.
2561         (KWQWindowWidget::viewportToGlobal):  New method to convert "viewport" (which for us
2562         really means NSWindow coords) to screen coords.
2563
2564 2004-06-24  Trey Matteson  <trey@apple.com>
2565
2566         3693420 - onbeforecut and onbeforepaste need real implementaion
2567
2568         Reviewed by Chris.
2569
2570         * kwq/KWQKHTMLPart.h:
2571         * kwq/KWQKHTMLPart.mm:
2572         (KWQKHTMLPart::mayCut):  Dispatch event to DHTML.
2573         (KWQKHTMLPart::mayCopy):  Ditto
2574         (KWQKHTMLPart::mayPaste):  Ditto
2575         (KWQKHTMLPart::tryCut):  No more need to send fake onbefore event
2576         (KWQKHTMLPart::tryCopy):  Ditto
2577         (KWQKHTMLPart::tryPaste): Ditto
2578         * kwq/WebCoreBridge.h:
2579         * kwq/WebCoreBridge.mm:
2580         (-[WebCoreBridge mayDHTMLCut]):  Standard glue
2581         (-[WebCoreBridge mayDHTMLCopy]):  Ditto
2582         (-[WebCoreBridge mayDHTMLPaste]):  Ditto
2583
2584 2004-06-24  Darin Adler  <darin@apple.com>
2585
2586         Reviewed by John.
2587
2588         - fixed <rdar://problem/3709385> Find on page doesn't find a string at the very end of the file
2589
2590         * khtml/misc/khtml_text_operations.cpp: (khtml::findPlainText): Rearrange loop to avoid an early
2591         exit once we have all the characters we need, but are at the end of the range we are searching.
2592
2593         - fixed <rdar://problem/3102271>: (text areas have scroll bars even when they don't need them)
2594         - fixed <rdar://problem/3665430>: (horizontal scroll bar of text area does not show, even when text is wide in "no wrap" mode)
2595
2596         * kwq/KWQTextArea.mm:
2597         (-[KWQTextArea _configureTextViewForWordWrapMode]): Added. Helper method that sets up the
2598         view for a new word wrap mode.
2599         (-[KWQTextArea _createTextView]): Moved much of the code inside _configureTextViewForWordWrapMode.
2600         (-[KWQTextArea _frameSizeChanged]): Added. Method shared by setFrame: and initWithFrame: to
2601         avoid duplicate code that was there before. The old code also had redundant code to update
2602         the text container size, but NSText handles that automatically.
2603         (-[KWQTextArea initWithFrame:]): Set wrap to YES by default, which is the key to fixing bug 3665430.
2604         Call setAutohidesScrollers:YES, which fixes bug 3102271. Also call the new _frameSizeChanged method.
2605         (-[KWQTextArea setWordWrap:]): Call _configureTextViewForWordWrapMode instead of trying
2606         to do the work here. The old version did both too little and too much.
2607         (-[KWQTextArea setFrame:]): Call _frameSizeChanged instead of trying to do the work here.
2608         The old version did both too little and too much.
2609
2610 2004-06-24  John Sullivan  <sullivan@apple.com>
2611
2612         Darin made this change on my machine; I reviewed it.
2613         
2614         - fixed <rdar://problem/3698333> Find on page doesn't find a particular string 
2615         with a newline in the source
2616
2617         * khtml/misc/khtml_text_operations.cpp:
2618         (khtml::TextIterator::handleTextBox):
2619         Clear m_lastTextNodeEndedWithCollapsedSpace after taking it into account.
2620
2621 2004-06-23  Richard Williamson   <rjw@apple.com>
2622
2623         Implemented changes for latest npruntime.h.
2624
2625         Reviewed by Chris.
2626
2627         * kwq/KWQKHTMLPart.h:
2628         * kwq/KWQKHTMLPart.mm:
2629         (KWQKHTMLPart::KWQKHTMLPart):
2630         (KWQKHTMLPart::windowScriptNPObject):
2631         (KWQKHTMLPart::getEmbedInstanceForView):
2632         * kwq/WebCoreBridge.h:
2633         * kwq/WebCoreBridge.mm:
2634         (-[WebCoreBridge windowScriptObject]):
2635         (-[WebCoreBridge windowScriptNPObject]):
2636
2637 2004-06-22  Richard Williamson   <rjw@apple.com>
2638
2639         Fixed <rdar://problem/3707162>: accessing embeds[] plug-in interface may crash
2640
2641         embedInstance was uninitialized.
2642
2643         Reviewed by Chris.
2644
2645         * khtml/html/html_objectimpl.cpp:
2646         (HTMLEmbedElementImpl::HTMLEmbedElementImpl):
2647
2648 2004-06-18  John Sullivan  <sullivan@apple.com>
2649
2650         Reviewed by Darin
2651         
2652         - fixed <rdar://problem/3534851> Pop up windows not showing up within SAP's 
2653         BW Module (changing location.href on new window created by window.open)
2654
2655         * khtml/khtml_part.cpp:
2656         (KHTMLPart::scheduleRedirection):
2657         allow new redirect to win if delay <= current delay, not just <
2658
2659 === WebCore-146.1 ===
2660
2661 2004-06-18  Trey Matteson  <trey@apple.com>
2662
2663         3702053 - DHTML dragging destination can't control the cursor (by setting the drop operation)
2664
2665         Fallout from security work, but an easy fix.
2666
2667         Reviewed by Darin
2668
2669         * kwq/KWQClipboard.mm:
2670         (KWQClipboard::setDropEffect):  Allow dest side to set dropEffect.
2671
2672 2004-06-18  Darin Adler  <darin@apple.com>
2673
2674         Reviewed by John.
2675
2676         - re-fixed <rdar://problem/3701893> show expert preferences notes in xcode causes crash (in EllipsisBox code)
2677
2678         * khtml/rendering/render_block.cpp: (khtml::RenderBlock::paintEllipsisBoxes):
2679         Check !isInlineFlow rather than checking hasMarkupTruncation. Otherwise, we break
2680         plain old non-markup truncation.
2681
2682 2004-06-18  Darin Adler  <darin@apple.com>
2683
2684         Reviewed by John.
2685
2686         - fixed <rdar://problem/3701893> show expert preferences notes in xcode causes crash (in EllipsisBox code)
2687
2688         * khtml/rendering/render_block.cpp: (khtml::RenderBlock::paintEllipsisBoxes):
2689         Only walk the ellipsis list if hasMarkupTruncation is true.
2690
2691 === Safari-146 ===
2692
2693 2004-06-17  Richard Williamson   <rjw@apple.com>
2694
2695         Fixed <rdar://problem/3698867> setting the canvas or parent to display:none and updating the causes a nil-deref
2696
2697         Ensured that we have a renderer before rendering.
2698
2699         Reviewed by John.
2700
2701         * khtml/ecma/kjs_html.cpp:
2702         (KJS::Context2DFunction::tryCall):
2703
2704 2004-06-17  David Hyatt  <hyatt@apple.com>
2705
2706         Fix for 3674601, "Read More..." links should trail articles in Emerson.
2707         
2708         Reviewed by darin
2709
2710         * khtml/rendering/bidi.cpp:
2711         (khtml::RenderBlock::layoutInlineChildren):
2712         (khtml::RenderBlock::deleteEllipsisLineBoxes):
2713         (khtml::RenderBlock::checkLinesForTextOverflow):
2714         * khtml/rendering/render_block.cpp:
2715         (khtml:::RenderFlow):
2716         (khtml::RenderBlock::paintEllipsisBoxes):
2717         (khtml::RenderBlock::nodeAtPoint):
2718         (khtml::shouldCheckLines):
2719         (khtml::getLineAtIndex):
2720         (khtml::getHeightForLineCount):
2721         (khtml::RenderBlock::lineAtIndex):
2722         (khtml::RenderBlock::lineCount):
2723         (khtml::RenderBlock::heightForLineCount):
2724         (khtml::RenderBlock::clearTruncation):
2725         * khtml/rendering/render_block.h:
2726         (khtml::RenderBlock::setHasMarkupTruncation):
2727         (khtml::RenderBlock::hasMarkupTruncation):
2728         * khtml/rendering/render_flexbox.cpp:
2729         (khtml::RenderFlexibleBox::layoutVerticalBox):
2730         * khtml/rendering/render_line.cpp:
2731         (khtml::EllipsisBox::m_str):
2732         (khtml::InlineBox::adjustPosition):
2733         (khtml::InlineFlowBox::adjustPosition):
2734         (khtml::InlineFlowBox::clearTruncation):
2735         (khtml::EllipsisBox::paint):
2736         (khtml::EllipsisBox::nodeAtPoint):
2737         (khtml::RootInlineBox::clearTruncation):
2738         (khtml::RootInlineBox::placeEllipsis):
2739         (khtml::RootInlineBox::paintEllipsisBox):
2740         (khtml::RootInlineBox::hitTestEllipsisBox):
2741         (khtml::RootInlineBox::adjustPosition):
2742         (khtml::RootInlineBox::childRemoved):
2743         * khtml/rendering/render_line.h:
2744         (khtml::InlineBox::clearTruncation):
2745         * khtml/rendering/render_text.cpp:
2746         * khtml/rendering/render_text.h:
2747         (khtml::InlineTextBox::clearTruncation):
2748
2749 2004-06-17  Trey Matteson  <trey@apple.com>
2750
2751         3698514 - coordinates in ondragstart and ondrag events are wrong
2752
2753         This part fixes the ondragstart coords.  We salt away the window-based mouseDown
2754         location, since we need that when we dispatch the ondragstart event.  Previously
2755         we were errantly using a mouseDown point that had already been converted to view
2756         coords, and then the dispatch converted it again.
2757
2758         Reviewed by Maciej.
2759
2760         * kwq/KWQKHTMLPart.h:
2761         * kwq/KWQKHTMLPart.mm:
2762         (KWQKHTMLPart::khtmlMouseMoveEvent):  Use window based mouse event coords to dispatch event.
2763         (KWQKHTMLPart::mouseDown):  Save window based mouse event coords .
2764
2765 2004-06-16  David Hyatt  <hyatt@apple.com>
2766
2767         Fix for 3596620, implement a subset of CSS3 text truncation for Emerson.
2768         
2769         Reviewed by mjs
2770
2771         * khtml/rendering/bidi.cpp:
2772         (khtml::RenderBlock::checkLinesForTextOverflow):
2773         * khtml/rendering/font.cpp:
2774         (Font::checkSelectionPoint):
2775         * khtml/rendering/font.h:
2776         * khtml/rendering/render_block.cpp:
2777         (khtml::RenderBlock::paintObject):
2778         (khtml::RenderBlock::paintFloats):
2779         (khtml::RenderBlock::paintEllipsisBoxes):
2780         * khtml/rendering/render_block.h:
2781         * khtml/rendering/render_line.cpp:
2782         (InlineBox::canAccommodateEllipsis):
2783         (InlineBox::placeEllipsisBox):
2784         (InlineFlowBox::paintDecorations):
2785         (InlineFlowBox::placeEllipsisBox):
2786         (EllipsisBox::paint):
2787         (RootInlineBox::placeEllipsis):
2788         (RootInlineBox::placeEllipsisBox):
2789         * khtml/rendering/render_line.h:
2790         (khtml::EllipsisBox::m_str):
2791         (khtml::RootInlineBox::ellipsisBox):
2792         * khtml/rendering/render_text.cpp:
2793         (InlineTextBox::placeEllipsisBox):
2794         (InlineTextBox::paintDecoration):
2795         (InlineTextBox::offsetForPosition):
2796         (RenderText::positionForCoordinates):
2797         (RenderText::paint):
2798         * khtml/rendering/render_text.h:
2799         * kwq/KWQFontMetrics.h:
2800         * kwq/KWQFontMetrics.mm:
2801         (QFontMetrics::checkSelectionPoint):
2802         * kwq/WebCoreTextRenderer.h:
2803
2804 === WebCore-145.1 ===
2805
2806 2004-06-16  Maciej Stachowiak  <mjs@apple.com>
2807
2808         Reviewed by John.
2809
2810         <rdar://problem/3697602> REGRESSION (144.2-TOT) Selection highlight does not draw
2811
2812         * khtml/rendering/render_canvas.cpp:
2813         (RenderCanvas::setSelection):
2814
2815 === Safari-145 ===
2816
2817 2004-06-16  Richard Williamson   <rjw@apple.com>
2818
2819         Fixed 3695730:  Added support for embeds[], much like
2820         applets[], to allow access to a plugin's exported interface.
2821
2822         Reviewed by Chris.
2823
2824         * khtml/dom/html_document.cpp:
2825         (HTMLDocument::embeds):
2826         * khtml/dom/html_document.h:
2827         * khtml/ecma/kjs_dom.cpp:
2828         (KJS::getRuntimeObject):
2829         * khtml/ecma/kjs_html.cpp:
2830         (KJS::HTMLDocument::tryGet):
2831         (KJS::HTMLElement::tryGet):
2832         (KJS::HTMLCollection::tryGet):
2833         (KJS::HTMLCollection::getNamedItems):
2834         * khtml/ecma/kjs_html.h:
2835         (KJS::HTMLDocument::):
2836         * khtml/ecma/kjs_html.lut.h:
2837         (KJS::):
2838         * khtml/html/html_miscimpl.cpp:
2839         (HTMLCollectionImpl::calcLength):
2840         (HTMLCollectionImpl::getItem):
2841         (HTMLCollectionImpl::getNamedItem):
2842         * khtml/html/html_miscimpl.h:
2843         (DOM::HTMLCollectionImpl::):
2844         * khtml/html/html_objectimpl.cpp:
2845         (HTMLEmbedElementImpl::getEmbedInstance):
2846         * khtml/html/html_objectimpl.h:
2847         * kwq/KWQKHTMLPart.h:
2848         * kwq/KWQKHTMLPart.mm:
2849         (KWQKHTMLPart::getEmbedInstanceForView):
2850
2851 2004-06-15  Maciej Stachowiak  <mjs@apple.com>
2852
2853         Reviewed by Dave.
2854
2855         <rdar://problem/3695907>: (can't enable selection inside parent where it is disabled via CSS)
2856
2857         * khtml/css/cssparser.cpp:
2858         (CSSParser::parseValue): 
2859         * khtml/css/cssstyleselector.cpp:
2860         (khtml::CSSStyleSelector::applyProperty):
2861         * khtml/rendering/render_object.cpp:
2862         (RenderObject::shouldSelect):
2863         * khtml/rendering/render_style.h:
2864         (khtml::):
2865         (khtml::RenderStyle::userSelect):
2866         (khtml::RenderStyle::setUserSelect):
2867         (khtml::RenderStyle::initialUserSelect):
2868
2869 2004-06-15  David Hyatt  <hyatt@apple.com>
2870
2871         Initial impl of the EllipsisBox.  This code just gets the box created and gets it placed vertically.  The next
2872         stage will be to position the box horizontally as well.
2873         
2874         Reviewed by trey
2875
2876         * khtml/rendering/bidi.cpp:
2877         (khtml::RenderBlock::checkLinesForTextOverflow):
2878         * khtml/rendering/render_line.cpp:
2879         (RootInlineBox::placeEllipsis):
2880         * khtml/rendering/render_line.h:
2881         (khtml::EllipsisBox::m_str):
2882
2883 2004-06-15  David Hyatt  <hyatt@apple.com>
2884
2885         Implement canAccommodateEllipsis.  The basic idea is that everything on a line will allow an ellipsis to be
2886         drawn on top of it unless it's a replaced element.  Then, if the replaced element overlaps, the ellipsis won't
2887         be allowed.
2888         
2889         Reviewed by john
2890
2891         * khtml/rendering/bidi.cpp:
2892         (khtml::RenderBlock::checkLinesForTextOverflow):
2893         * khtml/rendering/render_line.cpp:
2894         (InlineBox::closestLeafChildForXPos):
2895         (InlineBox::canAccommodateEllipsis):
2896         (InlineFlowBox::canAccommodateEllipsis):
2897         (RootInlineBox::canAccommodateEllipsis):
2898         * khtml/rendering/render_line.h:
2899
2900 2004-06-15  Vicki Murley <vicki@apple.com>
2901
2902         - added a few layout tests, rdar://3694510
2903
2904         * layout-tests/editing/deleting/delete-image-004-expected.txt: Added.
2905         * layout-tests/editing/deleting/delete-image-004.html: Added.
2906         * layout-tests/editing/selection/extend-by-character-006-expected.txt: Added.
2907         * layout-tests/editing/selection/extend-by-character-006.html: Added.
2908
2909 2004-06-15  Trey Matteson  <trey@apple.com>
2910
2911         Dragging tweak:  We pass the mouse down coords instead of the
2912         latest mouse drag coords to the ondragstart event.  This makes it
2913         easy for the client to figure the correct drag image offset,
2914         whereas the mouse drag location is next to useless for that.
2915
2916         Reviewed by Louch
2917
2918         * kwq/KWQKHTMLPart.mm:
2919         (KWQKHTMLPart::khtmlMouseMoveEvent):
2920
2921 2004-06-15  Maciej Stachowiak  <mjs@apple.com>
2922
2923         Reviewed by Darin.
2924
2925         <rdar://problem/3685236>: (Safari does not support onselectstart event handler)
2926
2927         * khtml/ecma/kjs_dom.cpp:
2928         (DOMNode::getValueProperty):
2929         (DOMNode::putValue):
2930         * khtml/ecma/kjs_dom.h:
2931         (KJS::DOMNode::):
2932         * khtml/ecma/kjs_dom.lut.h:
2933         (KJS::):
2934         * khtml/html/html_elementimpl.cpp:
2935         (HTMLElementImpl::parseHTMLAttribute):
2936         * khtml/misc/htmlattrs.c:
2937         (hash_attr):
2938         (findAttr):
2939         * khtml/misc/htmlattrs.h:
2940         * khtml/misc/htmlattrs.in:
2941         * khtml/rendering/render_object.cpp:
2942         (RenderObject::shouldSelect):
2943         * khtml/xml/dom2_eventsimpl.cpp:
2944         (EventImpl::typeToId):
2945         (EventImpl::idToType):
2946         * khtml/xml/dom2_eventsimpl.h:
2947         (DOM::EventImpl::):
2948
2949 2004-06-15  Maciej Stachowiak  <mjs@apple.com>
2950
2951         Reviewed by Darin.
2952
2953         Fix crash with last checkin.
2954
2955         * khtml/ecma/kjs_binding.cpp:
2956         (ScriptInterpreter::domObjectsPerDocument): check the same
2957         property we want to initialize.
2958
2959 2004-06-15  Maciej Stachowiak  <mjs@apple.com>
2960
2961         Reviewed by Darin.
2962
2963         <rdar://problem/3685309>: (properties not shared for JS wrappers of same DOM object, accessed from different frames)
2964
2965         * khtml/ecma/kjs_binding.cpp:
2966         (ScriptInterpreter::domObjects):
2967         (ScriptInterpreter::domObjectsPerDocument):
2968         (ScriptInterpreter::ScriptInterpreter):
2969         (ScriptInterpreter::forgetDOMObject):
2970         (ScriptInterpreter::getDOMObjectForDocument):
2971         (ScriptInterpreter::putDOMObjectForDocument):
2972         (ScriptInterpreter::deleteDOMObjectsForDocument):
2973         (ScriptInterpreter::mark):
2974         (ScriptInterpreter::forgetDOMObjectsForDocument):
2975         (ScriptInterpreter::updateDOMObjectDocument):
2976         * khtml/ecma/kjs_binding.h:
2977         (KJS::ScriptInterpreter::getDOMObject):
2978         (KJS::ScriptInterpreter::putDOMObject):
2979         (KJS::ScriptInterpreter::deleteDOMObject):
2980
2981 2004-06-15  Darin Adler  <darin@apple.com>
2982
2983         - rolled out Ken's fix for <rdar://problem/3672377> assertion failure in AppendNodeCommandImpl::doApply due to non-0 exception code trying to insert a DIV markup string
2984           (it was making most layout tests fail)
2985
2986         * khtml/xml/dom_nodeimpl.cpp: (NodeImpl::checkAddChild): Rolled check back in.
2987
2988 2004-06-15  David Hyatt  <hyatt@apple.com>
2989
2990         Add a truncation variable to text run boxes that will eventually be used to know how to cut out some of the glyphs when
2991         rendering.
2992         
2993         Reviewed by darin
2994
2995         * khtml/rendering/render_text.cpp:
2996         (RenderText::clearTextOverflowTruncation):
2997         * khtml/rendering/render_text.h:
2998         (khtml::InlineTextBox:::InlineRunBox):
2999         (khtml::InlineTextBox::clearTruncation):
3000
3001 2004-06-14  Darin Adler  <darin@apple.com>
3002
3003         Reviewed by Maciej.
3004
3005         - fixed some things for GC that Patrick missed, or that happened after the branch
3006
3007         * kwq/DOM-CSS.mm:
3008         (-[DOMStyleSheet finalize]): Added.
3009         (-[DOMStyleSheetList finalize]): Added.
3010         (-[DOMCSSStyleSheet finalize]): Added.
3011         (-[DOMMediaList finalize]): Added.
3012         (-[DOMCSSRuleList finalize]): Added.
3013         (-[DOMCSSRule finalize]): Added.
3014         (-[DOMCSSStyleDeclaration finalize]): Added.
3015         (-[DOMCSSValue finalize]): Added.
3016         (-[DOMRGBColor finalize]): Added.
3017         (-[DOMRect finalize]): Added.
3018         (-[DOMCounter finalize]): Added.
3019         * kwq/DOM.mm:
3020         (-[DOMObject finalize]): Added.
3021         (-[DOMNode finalize]): Added.
3022         (-[DOMNamedNodeMap finalize]): Added.
3023         (-[DOMNodeList finalize]): Added.
3024         (-[DOMImplementation finalize]): Added.
3025         (-[DOMRange finalize]): Added.
3026         (-[DOMNodeFilter finalize]): Added.
3027         (-[DOMNodeIterator finalize]): Added.
3028         (-[DOMTreeWalker dealloc]): Removed unneeded nil check.
3029         (-[DOMTreeWalker finalize]): Added.
3030         * kwq/DOMHTML.mm:
3031         (-[DOMHTMLCollection finalize]): Added.
3032         (-[DOMHTMLOptionsCollection finalize]): Added.
3033         * kwq/KWQClipboard.mm:
3034         (KWQClipboard::KWQClipboard): Use KWQRetain instead of retain.
3035         (KWQClipboard::~KWQClipboard): Use KWQRelease instead of release.
3036         * kwq/KWQEditCommand.mm:
3037         (-[KWQEditCommand finalize]): Added.
3038         * kwq/KWQFont.mm:
3039         (QFont::~QFont): Use KWQRelease instead of release.
3040         * kwq/KWQKHTMLPart.mm:
3041         (KWQKHTMLPart::keyEvent): Use KWQRetain instead of retain, and KWQRelease instead of release.
3042         (KWQKHTMLPart::mouseDown): Use KWQRetain instead of retain, and KWQRelease instead of release.
3043         (KWQKHTMLPart::mouseDragged): Use KWQRetain instead of retain, and KWQRelease instead of release.
3044         (KWQKHTMLPart::mouseUp): Use KWQRetain instead of retain, and KWQRelease instead of release.
3045         (KWQKHTMLPart::mouseMoved): Use KWQRetain instead of retain, and KWQRelease instead of release.
3046         (KWQKHTMLPart::sendContextMenuEvent): Use KWQRetain instead of retain, and KWQRelease instead of release.
3047         * kwq/KWQPageState.mm:
3048         (-[KWQPageState finalize]): Added. Filed <rdar://problem/3694163> about the fact that this is not right.
3049         * kwq/KWQTimer.mm:
3050         (-[KWQSingleShotTimerTarget finalize]): Added.
3051         * kwq/WebCoreBridge.mm:
3052         (-[WebCoreBridge finalize]): Added. Filed <rdar://problem/3694165> about the fact that this is not right.
3053
3054 2004-06-15  David Hyatt  <hyatt@apple.com>
3055
3056         Initial work on text truncation.  Working top-down, I think I've made all the changes I will need to bidi.cpp
3057         and to the block code itself.  The rest of the code can be concentrated in the render_line and render_text files.
3058         
3059         Reviewed by darin
3060
3061         * khtml/rendering/bidi.cpp:
3062         (khtml::RenderBlock::layoutInlineChildren):
3063         (khtml::RenderBlock::findNextLineBreak):
3064         (khtml::RenderBlock::deleteEllipsisLineBoxes):
3065         (khtml::RenderBlock::checkLinesForTextOverflow):
3066         * khtml/rendering/render_block.h:
3067         * khtml/rendering/render_line.cpp:
3068         (RootInlineBox::detach):
3069         (RootInlineBox::detachEllipsisBox):
3070         (RootInlineBox::canAccommodateEllipsis):
3071         (RootInlineBox::placeEllipsis):
3072         * khtml/rendering/render_line.h:
3073         (khtml::RootInlineBox::RootInlineBox):
3074         * khtml/rendering/render_text.cpp:
3075         (RenderText::clearTextOverflowTruncation):
3076         * khtml/rendering/render_text.h:
3077
3078 2004-06-14  Trey Matteson  <trey@apple.com>
3079
3080         3692690 - REGRESSION: canceling drag from WebView cause link to load
3081         Just need to take extra care to cancel any click handling in
3082         all cases once we're committed to doing the drag.
3083
3084         Reviewed by Darin.
3085
3086         * kwq/KWQKHTMLPart.mm:
3087         (KWQKHTMLPart::khtmlMouseMoveEvent):  Call invalidateClick once
3088         we're past the hysteresis point, and definitely going to try
3089         to start a drag and drop.
3090
3091 2004-06-14  Darin Adler  <darin@apple.com>
3092
3093         - fixed crash on boot
3094
3095         * kwq/KWQFoundationExtras.h: (KWQRetainNSRelease):
3096         Fixed return value of this method; was uninitialized.
3097
3098 2004-06-14  Trey Matteson  <trey@apple.com>
3099
3100         Dashboard wants access to pastboard data during the drag gesture.
3101
3102         We address this need be allowing docs that are local files to access the
3103         pasteboard data during a drag, while other pages can only get at the types
3104         list until the drop happens.  This is deemed safe because local files already
3105         have such broad super powers.
3106
3107         Reviewed by Maciej.
3108
3109         * kwq/KWQKURL.h:
3110         * kwq/KWQKURL.mm:
3111         (KURL::isLocalFile):  Implement this QT method to look for the file scheme.
3112         * kwq/WebCoreBridge.mm:
3113         (-[WebCoreBridge dragOperationForDraggingInfo:]):  Use more relaxed clipboard
3114         security for local file pages.
3115         (-[WebCoreBridge dragExitedWithDraggingInfo:]):  Ditto.
3116
3117 2004-06-14  Darin Adler  <darin@apple.com>
3118
3119         Reviewed by me, code changes by Patrick Beard.
3120
3121         - fixed <rdar://problem/3671507>: (WebKit should adopt GC changes and compile with GC enabled)
3122
3123         * WebCore.pbproj/project.pbxproj: Added KWQFoundationExtras.h.
3124         * kwq/KWQFoundationExtras.h: Added.
3125         (KWQRetain): Cover for CFRetain that is tolerant of nil.
3126         (KWQRelease): Cover for CFRelease that is tolerant of nil.
3127         (KWQRetainNSRelease): Combination of a CFRetain and an -[NSObject release] that is tolerant of nil.
3128         Also includes a declaration of finalize so we can call [super finalize] without warnings on Panther.
3129
3130         * kwq/DOM.mm:
3131         (ObjCNodeFilterCondition::ObjCNodeFilterCondition): Use CFRetain instead of retain.
3132         (ObjCNodeFilterCondition::~ObjCNodeFilterCondition): Use CFRelease instead of release.
3133         * kwq/KWQComboBox.mm:
3134         (QComboBox::~QComboBox): Use KWQRelease instead of release.
3135         (QComboBox::setFont): Use KWQRelease instead of release.
3136         (QComboBox::labelFont): Use KWQRetain instead of retain.
3137         * kwq/KWQCursor.mm:
3138         (QCursor::QCursor): Use KWQRetain instead of retain.
3139         (QCursor::~QCursor): Use KWQRelease instead of release.
3140         (QCursor::operator=): More of the same.
3141         * kwq/KWQFileButton.mm:
3142         (KWQFileButton::KWQFileButton): Use KWQRetainNSRelease to retain a newly-allocated object.
3143         (KWQFileButton::~KWQFileButton): Use CFRelease instead of release.
3144         * kwq/KWQFont.mm:
3145         (QFont::QFont): Use KWQRetain instead of retain.
3146         (QFont::operator=): More of the same.
3147         (QFont::setFamily): Use KWQRelease instead of release.
3148         (QFont::setFirstFamily): Use KWQRelease instead of release.
3149         (QFont::setPixelSize): Use KWQRelease instead of release.
3150         (QFont::setWeight): Use KWQRelease instead of release.
3151         (QFont::setItalic): Use KWQRelease instead of release.
3152         (QFont::getNSFont): Use KWQRetain instead of retain.
3153         * kwq/KWQFontMetrics.mm:
3154         (QFontMetricsPrivate::~QFontMetricsPrivate): Use KWQRelease instead of release.
3155         (QFontMetricsPrivate::getRenderer): Use KWQRetain instead of retain.
3156         (QFontMetricsPrivate::setFont): Use KWQRelease instead of release.
3157         * kwq/KWQKHTMLPart.mm:
3158         (KWQKHTMLPart::~KWQKHTMLPart): Use KWQRelease instead of release.
3159         (KWQKHTMLPart::clearRecordedFormValues): Use KWQRelease instead of release.
3160         (KWQKHTMLPart::recordFormValue): Use KWQRetainNSRelease and use KWQRetain instead of retain.
3161         (KWQKHTMLPart::windowScriptObject): Use KWQRetainNSRelease.
3162         * kwq/KWQKJobClasses.mm:
3163         (KIO::TransferJobPrivate::TransferJobPrivate): Use KWQRetainNSRelease.
3164         (KIO::TransferJobPrivate::~TransferJobPrivate): Use KWQRelease instead of release.
3165         (KIO::TransferJob::setLoader): More of the same.
3166         * kwq/KWQLoader.mm:
3167         (KWQRetainResponse): Use KWQRetain instead of retain.
3168         (KWQReleaseResponse): Use KWQRelease instead of release.
3169         * kwq/KWQPainter.mm:
3170         (QPainterPrivate::~QPainterPrivate): Use KWQRelease instead of release.
3171         (QPainter::_updateRenderer): More of the same.
3172         (QPainter::initFocusRing): Use KWQRetainNSRelease.
3173         (QPainter::clearFocusRing): Use KWQRelease instead of release.
3174         * kwq/KWQPixmap.mm:
3175         (QPixmap::QPixmap): Use KWQRetain instead of retain.
3176         (QPixmap::~QPixmap): Use KWQRelease instead of release.
3177         (QPixmap::receivedData): Use KWQRetain instead of retain.
3178         (QPixmap::resize): Use KWQRetainNSRelease and use KWQRelease instead of release.
3179         (QPixmap::operator=): More of the same.
3180         * kwq/KWQRegion.mm:
3181         (QRegion::QRegion): Use KWQRetain instead of retain.
3182         (QRegion::~QRegion): Use KWQRelease instead of release.
3183         (QRegion::operator=): More of the same.
3184         * kwq/KWQTimer.mm:
3185         (QTimer::start): Use KWQRetain instead of retain.
3186         (QTimer::stop): Use KWQRelease instead of release.
3187         (QTimer::fire): Use KWQRelease instead of release.
3188         * kwq/KWQWidget.mm:
3189         (QWidget::QWidget): Use KWQRetain instead of retain.
3190         (QWidget::~QWidget): Use KWQRelease instead of release.
3191         (QWidget::setView): More of the same.
3192         * kwq/WebCoreSettings.mm: (-[WebCoreSettings finalize]):
3193         Delete the storage here, as well as in dealloc.
3194
3195 2004-06-14  Maciej Stachowiak  <mjs@apple.com>
3196
3197         Reviewed by Trey.
3198
3199         <rdar://problem/3693818>: (Safari should use CG calls for circle drawing for better performance)
3200
3201         * kwq/KWQPainter.mm:
3202         (QPainter::drawEllipse): Use CG calls instead of NS calls for faster circle drawing.
3203         (QPainter::drawArc): Ditto.
3204
3205 2004-06-14  Ken Kocienda  <kocienda@apple.com>
3206
3207         Reviewed by Vicki
3208
3209         Fix for this bug:
3210         
3211         <rdar://problem/3690115> Crash deleting text out of iChat's profile (an editable Webview)
3212
3213         * khtml/html/html_elementimpl.cpp:
3214         (HTMLElementImpl::isFocusable): Added null-check of parent node before deref'ing it.
3215
3216 2004-06-14  Trey Matteson  <trey@apple.com>
3217
3218         Two tweaks to recently added "drag" pseudo-class, as suggested by
3219         Dave.  The class is renamed to "-khtml-drag", and we update layout
3220         when using it, instead of only updating styles.
3221
3222         Reviewed by hyatt.
3223
3224         * khtml/css/css_base.cpp:
3225         (CSSSelector::extractPseudoType):
3226         * kwq/KWQKHTMLPart.mm:
3227         (KWQKHTMLPart::snapshotDragImage):
3228
3229 2004-06-13  Trey Matteson  <trey@apple.com>
3230
3231         Support for DHTML cut/copy/paste.  We now support oncut, oncopy, onpaste.  The events
3232         are sent to the first node in the selection, or else the body.  Current holes are
3233         that we do not send events for operations in text fields or text areas (because it
3234         is hard to get the right hooks into the AppKit).
3235
3236         We also send onbeforecut, onbeforecopy, onbeforepaste before the other events, which
3237         isn't really WinIE compatible, but is close.  WinIE uses these to enable cut/paste
3238         menu items in its UI.  DB doesn't need this for now.
3239
3240         Reviewed by Chris
3241
3242         * khtml/ecma/kjs_dom.cpp:
3243         (DOMNode::getValueProperty):  Boilerplate for new events
3244         (DOMNode::putValue):    Boilerplate for new events
3245         * khtml/ecma/kjs_dom.h:
3246         (KJS::DOMNode::):    Boilerplate for new events
3247         * khtml/ecma/kjs_dom.lut.h:
3248         * khtml/ecma/kjs_events.cpp:
3249         (DOMEvent::DOMEvent): "dataTransfer" and "clipboardData" properties are conditionally
3250         defined on DOMEvent, depending on if the event is a dragging or clipboard event.
3251         (DOMMouseEvent::mark):  Pass mark along to any clipboard object we have.
3252         (DOMEvent::getValueProperty):  Return "dataTransfer" or "clipboardData".
3253         (DOMMouseEvent::getValueProperty):  Returning "dataTransfer" now handled by
3254         the superclass.
3255         * khtml/ecma/kjs_events.h:
3256         (KJS::DOMEvent::):
3257         (KJS::DOMMouseEvent::DOMMouseEvent):
3258         (KJS::DOMMouseEvent::):
3259         (KJS::DOMMouseEvent::toMouseEvent):
3260         * khtml/ecma/kjs_events.lut.h:
3261         * khtml/html/html_elementimpl.cpp:
3262         (HTMLElementImpl::parseHTMLAttribute):  Boilerplate for new events
3263         * khtml/misc/htmlattrs.c:
3264         * khtml/misc/htmlattrs.h:
3265         * khtml/misc/htmlattrs.in:  Boilerplate for new events
3266         * khtml/xml/dom2_eventsimpl.cpp:
3267         (EventImpl::typeToId):  Boilerplate for new events
3268         (EventImpl::idToType):  Boilerplate for new events
3269         (EventImpl::isDragEvent):  New utility
3270         (EventImpl::isClipboardEvent):  New utility
3271         (MouseEventImpl::isDragEvent):  New utility
3272         (ClipboardEventImpl::ClipboardEventImpl):  ref optional clipboard
3273         (ClipboardEventImpl::~ClipboardEventImpl):  deref optional clipboard
3274         (ClipboardEventImpl::isClipboardEvent):  New utility
3275         * khtml/xml/dom2_eventsimpl.h:
3276         (DOM::EventImpl::):  Boilerplate for new events
3277         (DOM::ClipboardEventImpl::clipboard):
3278         * kwq/KWQClipboard.h:  Monkey business so this file is includable in C++.
3279         * kwq/KWQClipboard.mm:
3280         * kwq/KWQKHTMLPart.h:
3281         * kwq/KWQKHTMLPart.mm:
3282         (KWQKHTMLPart::dispatchCPPEvent):  Send one of the new events.
3283         (KWQKHTMLPart::tryCut):  Declare pasteboard types, send cut events.
3284         (KWQKHTMLPart::tryCopy):  Declare pasteboard types, send copy events.
3285         (KWQKHTMLPart::tryPaste):  Send paste events.
3286         * kwq/WebCoreBridge.h:
3287         * kwq/WebCoreBridge.mm:
3288         (-[WebCoreBridge tryDHTMLCut]):  Pass through to part
3289         (-[WebCoreBridge tryDHTMLCopy]):  Ditto
3290         (-[WebCoreBridge tryDHTMLPaste]):  Ditto
3291
3292 2004-06-14  Trey Matteson  <trey@apple.com>
3293
3294         A new CSS pseudo-class ".drag" is added.  Analogous to the "hover" class,
3295         this class determines styles used while an element is generating a drag
3296         image.
3297
3298         Reviewed by hyatt.
3299
3300         * khtml/css/css_base.cpp:
3301         (CSSSelector::extractPseudoType):  Boilerplate for adding new class.
3302         * khtml/css/css_base.h:  Boilerplate for adding new class.
3303         * khtml/css/cssstyleselector.cpp:
3304         (khtml::CSSStyleSelector::checkOneSelector):  Match new class against
3305         elements being dragged.
3306         * khtml/css/cssstyleselector.h:
3307         (khtml::StyleSelector::):  Boilerplate for adding new class.
3308         * khtml/rendering/render_object.cpp:
3309         (RenderObject::RenderObject):  Init new member.
3310         (RenderObject::isDragging):  Return whether this object is being dragged.
3311         (RenderObject::updateDragState):  Paint us an all children with a new dragged state.
3312         * khtml/rendering/render_object.h:
3313         * khtml/rendering/render_style.h: Boilerplate for adding new class.
3314         (khtml::RenderStyle::NonInheritedFlags::operator==):
3315         (khtml::RenderStyle::setBitDefaults):
3316         (khtml::RenderStyle::affectedByDragRules):
3317         (khtml::RenderStyle::setAffectedByDragRules):
3318         * kwq/KWQClipboard.mm:
3319         (KWQClipboard::dragNSImage):  Method rename.
3320         * kwq/KWQKHTMLPart.h:
3321         * kwq/KWQKHTMLPart.mm:
3322         (KWQKHTMLPart::snapshotDragImage):  Mark the element as being dragged before
3323         we snapshot it, so new style class will apply.
3324
3325 2004-06-14  Ken Kocienda  <kocienda@apple.com>
3326
3327         Reviewed by me
3328         
3329         Added a few more editing-related layout tests.
3330
3331         * layout-tests/editing/inserting/insert-3654864-fix-expected.txt: Added.
3332         * layout-tests/editing/inserting/insert-3654864-fix.html: Added.
3333         * layout-tests/editing/inserting/insert-3659587-fix-expected.txt: Added.
3334         * layout-tests/editing/inserting/insert-3659587-fix.html: Added.
3335         * layout-tests/editing/inserting/insert-after-delete-001-expected.txt: Added.
3336         * layout-tests/editing/inserting/insert-after-delete-001.html: Added.
3337         * layout-tests/editing/inserting/insert-br-case1-expected.txt: Added.
3338         * layout-tests/editing/inserting/insert-br-case1.html: Added.
3339         * layout-tests/editing/inserting/insert-br-case2-expected.txt: Added.
3340         * layout-tests/editing/inserting/insert-br-case2.html: Added.
3341         * layout-tests/editing/inserting/insert-br-case3-expected.txt: Added.
3342         * layout-tests/editing/inserting/insert-br-case3.html: Added.
3343
3344 2004-06-14  Ken Kocienda  <kocienda@apple.com>
3345
3346         Reviewed by me
3347
3348         Regarding the bug below, removing some tests since we have removed the execCommand("paste") 
3349         feature, at least for now.
3350
3351         <rdar://problem/3684792>: (JavaScript execCommand("paste") presents security issues)
3352