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