2006-05-10  Matt Gough  <matt@softchaos.com>

        Reviewed, tweaked, and landed by Darin.

        Optimization of [DOMNode _nodeWith:] to look up the obj-c wrapperClass
        for each HTMLElement using a HashMap instead of by repeated calls to
        htmlElt->hasLocalName(someTag). 

        * bindings/objc/DOM.mm:
        (addElementClass): Added.
        (createHTMLElementClassMap):
        (elementClass):
        (+[DOMNode _nodeWith:]): Added code to call elementClass.

2006-05-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8760
          crash (hang?) on subtlegradient.com article page

        * manual-tests/first-line-style-crash.html: Added.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::createStyleForElement): Changed to not return the
        shared styleNotYetAvailable if allowSharing is off.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getPseudoStyle): In the FIRST_LINE_INHERITED case,
        set the styleType on the style returned from createStyleForElement().
        * rendering/render_style.h:
        (WebCore::RenderStyle::setStyleType): Added. Called from RenderObject::getPseudoStyle().

2006-05-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8789
          RenderStyle::getPseudoStyle() always returns 0

        No test possible (no functionality change).

        * dom/Node.cpp:
        (WebCore::Node::diff): When checking if :before or :after has changed,
        return NoInherit unless both pseudoStyles are known and equal.
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::getPseudoStyle): Fixed to match the requested
        type against the pseudoStyle's styleType instead of our own.

2006-05-09  Darin Adler  <darin@apple.com>

        - another attempt to fix the Windows build

        * bindings/js/kjs_window.cpp: (KJS::isSeparator): Take a UChar, not a KJS::UChar.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::runJavaScriptAlert): Use UChar instead of QChar.
        (WebCore::FrameWin::runJavaScriptConfirm): Ditto.
        * editing/TextIterator.h: Include DeprecatedString.h.

2006-05-09  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8781
          REGRESSION: image maps with "poly" areas, including one at lisp.geek.nz, don't work

        * html/html_imageimpl.cpp: (WebCore::HTMLAreaElement::getRegion): Remove extra Path
        definition that was shadowing the real one.

2006-05-09  Darin Adler  <darin@apple.com>

        - fix build

        * rendering/render_style.cpp: (WebCore::RenderStyle::getPseudoStyle):
        Fix a typo.

        - attempt to fix Windows build

        * css/maketokenizer: Use UChar instead of unsigned short.
        * platform/win/FontWin.cpp:
        (WebCore::getFontData): Removed cast to QChar.
        (WebCore::hackishExtentForString): Use UChar.
        (WebCore::Font::floatWidth): Use UChar.
        (WebCore::Font::drawText): Use UChar.
        (WebCore::Font::drawHighlightForText): Use UChar.
        (WebCore::Font::selectionRectForText): Use UChar.
        (WebCore::Font::checkSelectionPoint): Use UChar.
        * platform/win/KeyEventWin.cpp:
        (WebCore::singleCharacterString): Added.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): Use above function.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::findNextSentenceFromIndex): Use UChar.
        (WebCore::findSentenceBoundary): Use UChar.
        (WebCore::findNextWordFromIndex): Use UChar.
        (WebCore::findWordBoundary): Use UChar.
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::start): Use a different String constructor.
        * rendering/RenderTable.h: Added an include of DeprecatedArray.h.
        * rendering/RenderText.cpp: Added an include of DeprecatedString.h.
        * rendering/render_list.h: Ditto.

2006-05-09  Darin Adler  <darin@apple.com>

        Rubber stamped by Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=8782
          use ICU and UChar more, QChar less

        - fix http://bugs.webkit.org/show_bug.cgi?id=6310
          text-transform: uppercase/lowercase don't handle cases one character becomes two

        Test: fast/css/case-transform.html

        By using ICU more, this fixes some bugs in a few places.

        * bindings/js/JSXMLSerializer.cpp:
        * css/css_valueimpl.h:
        * kwq/KWQTextStream.cpp:
        * loader/CachedObject.h:
        * platform/Color.cpp:
        Add includes of DeprecatedString.h as needed, now that StringImpl.h no longer
        includes it.

        * bindings/js/kjs_css.cpp: (KJS::cssPropertyName):
        Eliminate use of QChar::latin1() in a case where it's not helpful.

        * bindings/js/kjs_proxy.cpp: (WebCore::KJSProxy::evaluate):
        Use characters() function instead of the old unicode() function.

        * bindings/js/kjs_window.cpp: (KJS::isSeparator):
        Use UChar instead of QChar.

        * bindings/objc/DOMInternal.mm:
        (StringImpl::operator NSString*): Remove typecast that's no longer needed.
        (String::String): Ditto. Also use Vector for local buffer to make code read simpler.

        * bridge/mac/FrameMac.mm:
        (WebCore::selectorForKeyEvent): Remove call to unicode() function, no longer needed.
        (WebCore::FrameMac::setTitle): Remove QChar cast, no longer needed.
        (WebCore::FrameMac::setStatusBarText): Ditto.
        (WebCore::FrameMac::advanceToNextMisspelling): Use UChar instead of QChar.
        (WebCore::FrameMac::runJavaScriptAlert): Remove QChar cast, no longer needed.
        (WebCore::FrameMac::runJavaScriptConfirm): Ditto.
        (WebCore::FrameMac::runJavaScriptPrompt): Ditto.
        (WebCore::FrameMac::attributedString): Replaces calls of QChar::direction() with
        calls to u_charDirection and use ICU constants instead of QChar ones.
        (WebCore::FrameMac::markMisspellings): Remove QChar cast, no longer needed. Added a
        QChar cast so we can call isSpace -- slated to be removed later.
        (WebCore::FrameMac::shouldClose): Remove QChar cast, no longer needed.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectedString]): Remove QChar cast, no longer needed.
        (-[WebCoreFrameBridge stringForRange:]): Ditto.

        * css/CSSGrammar.y: Update for field name change from string to characters.
        Use UChar instead of unsigned short. 

        * css/css_valueimpl.cpp:
        (WebCore::propertyID): Use UChar instead of unsigned short and get rid of call to
        unicode() function, no longer needed.
        (WebCore::quoteStringIfNeeded): Use strings when building up a resulting string,
        instead of depending on the feature where you can append characters to a string.

        * css/csshelper.cpp: (WebCore::parseURL): Remove calls to unicode() function and
        rewrite to obviate the need to call lower() just to check for a few constant
        character values. Also remove a now-unneeded type cast.

        * css/cssparser.h: Changed ParseString field to use UChar and to be named characters
        instead of string. Changed many other fields to be UChar instead of unsigned short.
        (WebCore::domString): Update for that.
        (WebCore::atomicString): Ditto.
        * css/cssparser.cpp:
        (WebCore::ParseString::lower): Use u_tolower instead of QChar::lower(). Also change
        name to characters from string.
        (WebCore::CSSParser::setupParser): Use UChar instead of unsigned short.
        (WebCore::CSSParser::lex): Ditto. Also update for characters name change.
        (WebCore::CSSParser::text): Use UChar instead of unsigned short. Also tweak some
        of the code a little bit to handle a couple of overflow cases better and reduce
        type casting.
        (WebCore::deprecatedString): Moved here so we don't have to include DeprecatedString.h
        in the header file.

        * css/cssstyleselector.cpp: (WebCore::checkPseudoState): Added a type cast since this
        code now bridges the world between modern code and QChar/DeprecatedString.

        * dom/CharacterData.cpp: (WebCore::CharacterData::CharacterData): Changed QChar to UChar.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::isValidName): Updated for name change from unicode to characters.
        (WebCore::Document::parseQualifiedName): Ditto.
        (WebCore::Document::backslashAsCurrencySymbol): Changed return type to UChar.

        * dom/NamedMappedAttrMap.cpp:
        (WebCore::isClassWhitespace): Changed parameter to UChar from QChar.
        (WebCore::NamedMappedAttrMap::parseClassAttribute): Changed from UChar to QChar and
        from unicode to characters.

        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition): Changed from QChar to UChar.
        (WebCore::Position::trailingWhitespacePosition): Ditto.

        * dom/StyledElement.cpp:
        (WebCore::isClassWhitespace): Changed from QChar to UChar.
        (WebCore::StyledElement::addCSSLength): Changed from QChar to UChar, and remove one
        case where latin1() was used and was not helpful.
        (WebCore::StyledElement::addCSSColor): Removed unicode() function call, no longer needed.

        * dom/dom2_eventsimpl.cpp: (WebCore::KeyboardEvent::charCode):
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::constrainValue):
        Removed unicode() function call, no longer needed.

        * dom/xml_tokenizer.h: Removed default parameter for xmlDocPtrForString so we don't have
        to include the DeprecatedString.h header in this file (and since no one uses it).

        * editing/HTMLInterchange.cpp: (convertHTMLTextToInterchangeFormat): Added a couple calls
        to the unicode() function to bridge the gap from QChar/DeprecatedString back to modern
        code.

        * editing/InsertTextCommand.cpp: Removed unused function.

        * editing/TextIterator.h: Changed from QChar to UChar.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Initialize m_lastCharacter since it's now a UChar
        (which is just a typedef) rather than a QChar (which was a class with a default value of 0).
        (WebCore::TextIterator::handleTextNode): Updated to use characters() instead of unicode().
        (WebCore::TextIterator::handleTextBox): Removed unicode() call since it's now a UChar instead
        of a QChar.
        (WebCore::TextIterator::emitCharacter): More of the same.
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::emitCharacter): Ditto.
        (WebCore::CharacterIterator::string): Ditto.
        (WebCore::WordAwareIterator::advance): Ditto.
        (WebCore::WordAwareIterator::length): Ditto.
        (WebCore::WordAwareIterator::characters): Ditto.
        (WebCore::CircularSearchBuffer::CircularSearchBuffer): Changed to use UChar
        instead of QChar, but also to use foldCase() instead of lower(), because
        we want case folding here, not lowercasing.
        (WebCore::CircularSearchBuffer::append): Ditto, with u_foldCase.
        (WebCore::CircularSearchBuffer::isMatch): Ditto.
        (WebCore::plainText): Added type cast since this bridges the gap from the modern stuff
        to QChar/DeprecatedString.

        * editing/VisiblePosition.h: Changed from QChar to UChar.
        * editing/VisiblePosition.cpp: (WebCore::VisiblePosition::characterAfter): Ditto.

        * editing/markup.cpp: (WebCore::escapeTextForMarkup): Changed code that used latin1()
        for no good reason to use unicode() instead.
 
        * html/HTMLTokenizer.h: Changed from QChar to UChar.
        * html/HTMLTokenizer.cpp: Changed from QChar to UChar, including removing the
        KHTML_ALLOC_QCHAR_VEC and KHTML_DELETE_QCHAR_VEC macros, which weren't being
        used consistently anyway.
        (WebCore::fixUpChar): More of the same.
        (WebCore::tagMatch): Ditto.
        (WebCore::HTMLTokenizer::reset): Ditto.
        (WebCore::HTMLTokenizer::begin): Ditto. Also corrected anomaly where buffer
        size was not the same as the size value -- this was only true in the initial
        allocation, so I believe there was no value in it.
        (WebCore::HTMLTokenizer::parseSpecial): Ditto. Also removed a use of latin1()
        that was unnnecessary extra work.
        (WebCore::HTMLTokenizer::scriptHandler): More of the same.
        (WebCore::HTMLTokenizer::parseComment): Ditto.
        (WebCore::HTMLTokenizer::parseServer): Ditto.
        (WebCore::HTMLTokenizer::parseProcessingInstruction): Ditto. Another unnecessary
        use of latin1() removed.
        (WebCore::HTMLTokenizer::parseText): Ditto.
        (WebCore::HTMLTokenizer::parseEntity): Ditto. Changed hex-parsing code to handle
        uppercase hex a more-efficient way than calling QChar::lower() on each character.
        Also changed surrogate code logic to fix a couple things -- reject character codes
        > 0x10FFFF as it should and use U16_LEAD and U16_TRAIL instead of writing our
        own versions of these.
        (WebCore::HTMLTokenizer::parseTag): Ditto.
        (WebCore::HTMLTokenizer::write): Ditto.
        (WebCore::HTMLTokenizer::end): Ditto.
        (WebCore::HTMLTokenizer::finish): Ditto.
        (WebCore::HTMLTokenizer::enlargeBuffer): Ditto.
        (WebCore::HTMLTokenizer::enlargeScriptBuffer): Ditto.
        (WebCore::HTMLTokenizer::notifyFinished):
        (WebCore::decodeNamedEntity): Ditto.

        * html/html_inlineimpl.cpp: (WebCore::parseFontSizeNumber): Changed from QChar
        to UChar, including using u_isdigit and u_charDigitValue instead of QChar::isNumber
        and QChar::digitValue. Also removed unneeded range checking that's already done
        by WebCore::String.

        * kwq/KWQLoader.mm: (KWQIsResponseURLEqualToURL): Rewrote to use Vector and UChar,
        removing all the type casts and making the whole function much shorter.

        * kwq/WebCoreAXObject.mm:
        (AXAttributedStringAppendText): Use UChar instead of QChar.
        (-[WebCoreAXObject doAXAttributedStringForTextMarkerRange:]): More of the same.

        * loader/Cache.h: Remove unnecessary default parameters, preventing the need to
        include the DeprecatedString.h header in this header. Cleaned up the header
        structure a bit, removing some obsolete and redundant comments and fixing typos.
        * loader/Cache.cpp: Removed unused preload functions.

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader): Added explicit arguments.
        This was the only caller anywhere that took advantage of the default parameter
        values in one of the Cache class request functions.
        (WebCore::Frame::backslashAsCurrencySymbol): Changed QChar to UChar.

        * platform/AtomicString.h: Changed QChar to UChar. Removed constructor that makes
        an AtomicString from a single character. Renamed unicode() function to characters().
        Renamed KHTML_ATOMICSTRING_HIDE_GLOBALS to ATOMICSTRING_HIDE_GLOBALS.
        * platform/AtomicString.cpp:
        (WebCore::CStringTranslator::equal): Changed QChar to UChar.
        (WebCore::operator==): Changed unicode() to characters().
        (WebCore::UCharBufferTranslator::hash): More of the same.
        (WebCore::UCharBufferTranslator::equal): Ditto.
        (WebCore::UCharBufferTranslator::translate): Ditto.
        (WebCore::AtomicString::add): Ditto.
        (WebCore::AtomicString::operator Identifier): Ditto.
        (WebCore::AtomicString::operator UString): Ditto.
        (WebCore::AtomicString::AtomicString): Moved here so we don't need DeprecatedString.h
        in the header.
        (WebCore::AtomicString::deprecatedString): Ditto.

        * platform/DeprecatedString.h: Removed QChar::Direction enum and all the DirXXX values,
        isDigit, isLetter, isNumber, isLetterOrNumber, isPunct, digitValue, and direction functions.
        (QChar::isSpace): Changed to use u_charDirection instead of QChar::direction.

        * platform/Font.h: (WebCore::Font::width): Changed QChar to UChar.
        * platform/Font.cpp: (WebCore::Font::width): Ditto.

        * platform/GraphicsContext.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText): Changed QChar to UChar. Removed horizontalAlignment
        parameter from simplified string drawing entry point, since it's not used.
        (WebCore::GraphicsContext::drawHighlightForText): Changed QChar to UChar.

        * platform/PlatformString.h: Changed QChar to UChar. Removed constructor that makes
        a String from a single character. Renamed unicode() function to characters(). Added
        an append function and changed += operator to just call that. Added a foldCase() function.
        Removed the concatenation operators that add individual strings before or after.
        * platform/String.cpp:
        (WebCore::String::String): Changed QChar to UChar.
        (WebCore::String::append): Renamed from operator+= and removed the return value.
        (WebCore::String::operator[]): Changed QChar to UChar.
        (WebCore::String::foldCase): Added.
        (WebCore::String::percentage): More of the same.
        (WebCore::String::characters): Renamed from unicode().
        (WebCore::String::deprecatedString): More of the same.
        (WebCore::String::sprintf): Fixed mistakes in the comments.
        (WebCore::String::isEmpty): Tweaked a bit.
        (WebCore::operator==): More of the same.
        (WebCore::String::operator Identifier): Ditto.
        (WebCore::String::operator UString): Ditto.

        * platform/SegmentedString.h: Changed from QChar to UChar. Had to initialize
        data members that are now UChar.
        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::length): Updated for change from QChar to UChar.
        (WebCore::SegmentedString::append): Ditto.
        (WebCore::SegmentedString::prepend): Ditto.
        (WebCore::SegmentedString::toString): Ditto.

        * platform/StringHash.h: Updated to use UChar instead of QChar and for name changes.
        Also changed to use case folding intead of lowercasing for case insensitive hashing.

        * platform/StringImpl.h:
        * platform/StringImpl.cpp:
        (WebCore::newUCharVector): Changed to UChar from QChar.
        (WebCore::deleteUCharVector): Ditto.
        (WebCore::StringImpl::StringImpl): Ditto.
        (WebCore::StringImpl::init): Ditto. Also renamed from initWithChar and initWithQChar.
        (WebCore::StringImpl::~StringImpl): Ditto.
        (WebCore::StringImpl::append): Ditto.
        (WebCore::StringImpl::insert): Ditto.
        (WebCore::StringImpl::truncate): Ditto.
        (WebCore::StringImpl::remove): Ditto.
        (WebCore::StringImpl::split): Ditto.
        (WebCore::StringImpl::containsOnlyWhitespace): Ditto. Also added comment because this
        function seems a little broken.
        (WebCore::parseLength): More of the same.
        (WebCore::StringImpl::toCoordsArray): Ditto.
        (WebCore::StringImpl::toLengthArray): Ditto.
        (WebCore::StringImpl::isLower): Ditto.
        (WebCore::StringImpl::lower): Rewrote to use u_strToLower.
        (WebCore::StringImpl::upper): Rewrote to use u_strToUpper.
        (WebCore::StringImpl::foldCase): Added. Uses u_strFoldCase.
        (WebCore::getWordBreakIterator): Changed to use U_FAILURE instead of accepting only
        U_ZERO_ERROR as a success code.
        (WebCore::StringImpl::capitalize): More QChar to UChar changes.
        (WebCore::StringImpl::toInt): Ditto.
        (WebCore::equal): Changed from QChar to UChar and was careful to preserve the old
        semantics where "high ASCII" is treated as U+0080-U+00FF even though I don't know
        if this feature is important.
        (WebCore::equalIgnoringCase): Ditto, but used case folding instead of lowercasing
        by using the u_foldCase and u_memcasecmp functions. Also renamed from
        equalCaseInsensitive for more-consistent naming.
        (WebCore::StringImpl::find): Ditto. Use case folding for the case insensitive branch.
        (WebCore::StringImpl::replace): More of the same.
        (WebCore::StringImpl::computeHash): Ditto.
        (WebCore::StringImpl::ascii): Ditto.

        * platform/TextBoundaries.h: Changed from QChar to UChar.
        * platform/mac/TextBoundaries.mm:
        (WebCore::findWordBoundary): Made the change to UChar and removed some type casts.
        (WebCore::findNextWordFromIndex): Ditto.
        (WebCore::findSentenceBoundary): Ditto.
        (WebCore::findNextSentenceFromIndex): Ditto.

        * platform/TextEncoding.h:
        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::backslashAsCurrencySymbol): Changed from QChar to UChar.
        (WebCore::TextEncoding::fromUnicode): More of the same.
        * platform/mac/TextEncodingMac.cpp: (WebCore::TextEncoding::fromUnicode): More
        of the same.

        * platform/mac/FontFamilyMac.mm: (WebCore::FontFamily::getNSFamily): Removed a
        now-unneeded type cast.

        * platform/mac/FontMac.mm:
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        Changed QChar to UChar and removed some now-unneeded type casts.

        * editing/RebalanceWhitespaceCommand.cpp: (WebCore::isWhitespace):
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startWordBoundary):
        (WebCore::endWordBoundary):
        (WebCore::previousWordPositionBoundary):
        (WebCore::nextWordPositionBoundary):
        (WebCore::startSentenceBoundary):
        (WebCore::endSentenceBoundary):
        (WebCore::previousSentencePositionBoundary):
        (WebCore::nextSentencePositionBoundary):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLParser.cpp: (WebCore::HTMLParser::handleError):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        * rendering/RenderTreeAsText.cpp: (quoteAndEscapeNonPrintables):
        * rendering/break_lines.cpp: (WebCore::nextBreakablePosition):
        * rendering/break_lines.h: (WebCore::isBreakable):
        * rendering/render_style.h: (WebCore::RenderStyle::isCollapsibleWhiteSpace):
        * xml/XSLStyleSheet.cpp: (WebCore::XSLStyleSheet::parseString):
        * xml/xmlhttprequest.cpp:
        (WebCore::getMIMEType):
        (WebCore::getCharset):
        Changed QChar to UChar.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): Changed QChar to UChar.
        (WebCore::RenderImage::paint): Changed callers of drawText to no-longer pass 0
        for the horizontal alignment, since I removed that parameters.

        * rendering/RenderText.h: Changed QChar to UChar.
        * rendering/RenderText.cpp:
        (WebCore::characterBreakIterator): Update for name change.
        (WebCore::RenderText::RenderText): Ditto.
        (WebCore::RenderText::allAscii): Remove uneeded unicode() and allow the value
        U+007F to count as ASCII.
        (WebCore::RenderText::cacheWidths): Changed QChar to UChar.
        (WebCore::RenderText::widthFromCache): Changed code that deals with direction to
        use the ICU direction calls.
        (WebCore::RenderText::trimmedMinMaxWidth): Changed QChar to UChar.
        (WebCore::RenderText::calcMinMaxWidth): Ditto.
        (WebCore::RenderText::containsOnlyWhitespace): Ditto.
        (WebCore::RenderText::setText): Ditto.
        (WebCore::RenderText::width): Ditto.

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::updateFromElement): Removed unneeded QChar cast.
        (WebCore::RenderTextField::calcMinMaxWidth): Changed from QChar to UChar.

        * rendering/bidi.h:
        * rendering/bidi.cpp:
        (WebCore::BidiIterator::BidiIterator):
        (WebCore::BidiState::BidiState):
        (WebCore::BidiContext::BidiContext):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::BidiIterator::current):
        (WebCore::BidiIterator::direction):
        (WebCore::addRun):
        (WebCore::checkMidpoints):
        (WebCore::appendRun):
        (WebCore::embed):
        (WebCore::RenderBlock::tabWidth):
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::skipWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        Changed from QChar to UChar and all direction from QChar constants to the
        ones from ICU.

        * rendering/render_form.cpp:
        (WebCore::RenderLineEdit::updateFromElement):
        (WebCore::RenderSelect::updateFromElement):
        (WebCore::RenderTextArea::updateFromElement):
        (WebCore::RenderTextArea::text):
        (WebCore::RenderTextArea::textWithHardLineBreaks):
        Got rid of now-unneeded QChar type casts.

        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Updated for change from QChar
        to UChar.
        (WebCore::EllipsisBox::paint): Updated for unicode() -> characters() name change.

        * rendering/render_list.cpp:
        (WebCore::toRoman): Updated from QChar to UChar.
        (WebCore::toLetterString): Ditto.
        (WebCore::toHebrew): More of the same, also cleaned up the logic a bit.
        (WebCore::RenderListMarker::paint): Removed the alignment parameters from the
        various functions. Also removed all reliance on the width-measuring functions
        that take a string.
        (WebCore::RenderListMarker::calcMinMaxWidth): More of the same.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.

2006-05-09  Tim Omernick  <timo@apple.com>

        Reviewed by/co-written by Darin.

        Performance improvement when drawing large numbers of animated images.

        Instead of removing the "first" object from a set on each next(),
        copy the clients into a vector once and keep track of the current index.

        * loader/CachedObjectClientWalker.h:
        * loader/CachedObjectClientWalker.cpp:
        (WebCore::CachedObjectClientWalker::CachedObjectClientWalker):
        (WebCore::CachedObjectClientWalker::next):

2006-05-09  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.  Added TextDocument.cpp to vcproj.
        
        Reviewed by adele.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-05-09  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build.
        Add host calback so caller can determine success/failure of a page load.
        
        Reviewed by kevin.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Fix paths, add missing files
        * loader/CachedResource.h: Fix include path.
        * loader/CachedResourceClientWalker.h: Fix include path.
        * platform/FontPlatformData.h: Fix include path.
        * platform/TransferJobClient.h: Make PlatformData, PlatformResponse an opaque struct.
        * platform/image-decoders/ImageDecoder.h: Fix include path.
        * platform/win/SharedTimerWin.cpp: Fix include path.
        * platform/win/TransferJobWin.cpp: 
        (WebCore::TransferJobWndProc): Add host callback for success/failure of load.
        * platform/win/TransferJobWin.h: Added. Windows version of PlatformData/PlatformResponse.
        * xpath/impl/XPathFunctions.cpp: Work around missing math functions in MSVC.
        (round): Work around missing math functions in MSVC.
        * xpath/impl/XPathPredicate.cpp: Work around missing math functions in MSVC.
        * xpath/impl/XPathValue.cpp: Work around missing math functions in MSVC.

2006-05-09  David Hyatt  <hyatt@apple.com>

        Revert styleForElement, pseudoStyleForElement, styleForRenderer back to
        their old names, since the term "create" is not accurate.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        * css/cssstyleselector.h:
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::styleForRenderer):
        * dom/Node.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::rebuildStops):

2006-05-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::write):
        Use the correct variable to prevent crashes.

2006-05-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8808
        WebCore should handle text files
        
        * WebCore.xcodeproj/project.pbxproj:
        Add TextDocument.cpp and TextDocument.h
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedMIMETypes]):
        Add text types here.
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createTextDocument):
        (WebCore::DOMImplementation::isTextMIMEType):
        * dom/DOMImplementation.h:
        New functions for creating a TextDocument and determining if a 
        mime type is a text MIME type.
        
        * loader/TextDocument.cpp: Added.
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextTokenizer::write):
        (WebCore::TextTokenizer::finish):
        (WebCore::TextTokenizer::isWaitingForScripts):
        Special tokenizer which will put text inside a <pre> tag
        in a document.
        
        (WebCore::TextDocument::TextDocument):        
        (WebCore::TextDocument::createTokenizer):
        Create a TextTokenizer.
        
        * loader/TextDocument.h: Added.
        
        * page/Frame.cpp:
        (WebCore::Frame::begin):
        Create a TextDocument if the MIME type is of type text.

2006-05-09  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Anders.
        
        - renamed kxmlcore to wtf
        
        kxmlcore --> wtf
        KXMLCore --> WTF
        KXC --> WTF

        * ForwardingHeaders/kxmlcore: Removed.
        * ForwardingHeaders/kxmlcore/AlwaysInline.h: Removed.
        * ForwardingHeaders/kxmlcore/Assertions.h: Removed.
        * ForwardingHeaders/kxmlcore/FastMalloc.h: Removed.
        * ForwardingHeaders/kxmlcore/Forward.h: Removed.
        * ForwardingHeaders/kxmlcore/HashCountedSet.h: Removed.
        * ForwardingHeaders/kxmlcore/HashMap.h: Removed.
        * ForwardingHeaders/kxmlcore/HashSet.h: Removed.
        * ForwardingHeaders/kxmlcore/HashTraits.h: Removed.
        * ForwardingHeaders/kxmlcore/Noncopyable.h: Removed.
        * ForwardingHeaders/kxmlcore/OwnArrayPtr.h: Removed.
        * ForwardingHeaders/kxmlcore/OwnPtr.h: Removed.
        * ForwardingHeaders/kxmlcore/PassRefPtr.h: Removed.
        * ForwardingHeaders/kxmlcore/Platform.h: Removed.
        * ForwardingHeaders/kxmlcore/RefPtr.h: Removed.
        * ForwardingHeaders/kxmlcore/Vector.h: Removed.
        * ForwardingHeaders/wtf: Added.
        * bindings/js/JSHTMLElementWrapperFactory.h:
        * bindings/js/kjs_binding.cpp:
        * bindings/js/kjs_window.h:
        * bindings/objc/DOMImplementationFront.h:
        * bridge/JavaAppletWidget.h:
        * bridge/mac/WebCoreFrameNamespaces.mm:
        * bridge/mac/WebCorePageBridge.mm:
        (initializeLogChannel):
        * bridge/mac/WebCoreStringTruncator.mm:
        * bridge/mac/WebCoreViewFactory.m:
        * config.h:
        * css/css_base.h:
        * css/css_valueimpl.h:
        * css/csshelper.cpp:
        * css/cssparser.h:
        * dom/DOMImplementation.h:
        * dom/Document.h:
        * dom/NamedNodeMap.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/QualifiedName.cpp:
        * dom/Range.h:
        * dom/StyledElement.cpp:
        * dom/dom2_traversalimpl.h:
        * dom/xml_tokenizer.h:
        * editing/RebalanceWhitespaceCommand.cpp:
        * editing/RemoveCSSPropertyCommand.cpp:
        * editing/RemoveNodeAttributeCommand.cpp:
        * editing/RemoveNodeCommand.cpp:
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        * editing/ReplaceSelectionCommand.h:
        * editing/Selection.cpp:
        * editing/SetNodeAttributeCommand.cpp:
        * editing/SplitElementCommand.cpp:
        * editing/SplitTextNodeCommand.cpp:
        * editing/SplitTextNodeContainingElementCommand.cpp:
        * editing/TextIterator.h:
        * editing/htmlediting.h:
        * editing/markup.h:
        * html/CanvasGradient.h:
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.cpp:
        * html/HTMLCollection.h:
        * html/HTMLElementFactory.h:
        * kcanvas/KCanvasFilters.cpp:
        * kcanvas/KCanvasPath.h:
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/RenderSVGText.cpp:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * kcanvas/device/quartz/QuartzSupport.mm:
        * ksvg2/misc/KSVGTimeScheduler.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/scripts/make_names.pl:
        * ksvg2/svg/SVGDOMImplementation.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGTests.h:
        * ksvg2/svg/SVGTransform.h:
        * ksvg2/svg/SVGTransformable.cpp:
        * kwq/AccessibilityObjectCache.h:
        * kwq/KWQCString.cpp:
        * kwq/KWQFormData.mm:
        * kwq/KWQListBox.mm:
        * kwq/KWQResourceLoader.mm:
        * kwq/KWQTextEdit.mm:
        * loader/Cache.h:
        * loader/CachedObject.h:
        * loader/CachedObjectClientWalker.h:
        * loader/Decoder.h:
        * loader/DocLoader.h:
        * loader/loader.cpp:
        * loader/loader.h:
        * page/DOMWindow.h:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTree.cpp:
        * page/Page.cpp:
        * page/Page.h:
        * page/Plugin.h:
        * platform/Arena.cpp:
        * platform/ArrayImpl.h:
        * platform/AtomicString.cpp:
        * platform/CharsetNames.cpp:
        * platform/Color.cpp:
        * platform/DeprecatedPtrListImpl.cpp:
        * platform/DeprecatedValueListImpl.h:
        * platform/FontFallbackList.h:
        * platform/GraphicsContext.h:
        * platform/GraphicsTypes.cpp:
        * platform/Image.h:
        * platform/KURL.cpp:
        * platform/Logging.cpp:
        * platform/Logging.h:
        * platform/PlatformString.h:
        * platform/PlugInInfoStore.h:
        * platform/StreamingTextDecoder.cpp:
        * platform/StreamingTextDecoder.h:
        * platform/String.cpp:
        * platform/StringHash.h:
        * platform/StringImpl.cpp:
        * platform/StringImpl.h:
        * platform/TextEncoding.cpp:
        * platform/Timer.cpp:
        * platform/Timer.h:
        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        * platform/mac/BlockExceptions.mm:
        * platform/mac/ColorMac.mm:
        * platform/mac/FontData.mm:
        * platform/mac/KURLMac.mm:
        * platform/mac/QStringMac.mm:
        * platform/mac/SharedTimerMac.cpp:
        * platform/mac/TextEncodingMac.cpp:
        * platform/mac/WebCoreImageRendererFactory.m:
        * platform/mac/WebCoreKeyGenerator.m:
        * platform/mac/WebCoreTextArea.mm:
        * platform/mac/WebCoreTextField.mm:
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        (JavaAppletWidget::JavaAppletWidget):
        * rendering/InlineTextBox.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderTreeAsText.cpp:
        * rendering/bidi.cpp:
        * xml/XSLTProcessor.h:
        * xpath/impl/XPathExpressionNode.h:
        * xpath/impl/XPathParser.h:
        * xpath/impl/XPathPath.h:
        * xpath/impl/XPathUtil.h:

2006-05-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=8803
        XPath query for empty attributes crashes in XPath::StringExpression::StringExpression
        
        * xpath/impl/XPathParser.cpp:
        (WebCore::XPath::Parser::lexString):
        Make sure an empty string is returned instead of a null string.
        
        (WebCore::XPath::Parser::lex):
        Only assign the string if it isn't null.

2006-05-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8769
          TextEncoding::fromUnicode() - support non-BMP characters and convert to NFC

        Fix the ICU code path, too (currently unused on the Mac).

        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::fromUnicode): Normalize the string.

2006-05-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Tim Hatcher.
        
        - refactor things so that WebKit doesn't save a WebResource for every loaded URL,
        but rather retrieves the data from the WebCore cache as needed.
        http://bugs.webkit.org/show_bug.cgi?id=8802

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getData:andResponse:forURL:]):
        (-[WebCoreFrameBridge getAllResourceDatas:andResponses:]):
        * loader/Cache.cpp:
        (WebCore::Cache::updateCacheStatus):
        (WebCore::Cache::requestImage):
        (WebCore::Cache::requestStyleSheet):
        (WebCore::Cache::requestScript):
        (WebCore::Cache::requestXSLStyleSheet):
        (WebCore::Cache::requestXBLDocument):
        * loader/Cache.h:
        * loader/CachedResource.cpp: Added.
        * loader/CachedResource.h: Added.
        * loader/CachedResourceClient.h: Added.
        * loader/CachedResourceClientWalker.cpp: Added.
        * loader/CachedResourceClientWalker.h: Added.
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::setAutoloadImages):
        (WebCore::DocLoader::removeCachedObject):
        * loader/DocLoader.h:
        (WebCore::DocLoader::cachedObject):
        (WebCore::DocLoader::allCachedObjects):

2006-05-08  Levi Weintraub  <lweintraub@apple.com>

        Reviewed by justin.

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitSpaceBeforeAndAfterNode):
        Returns true when the node should have a leading and trailing space. Currently only
        used for inline tables. The function shouldEmitNewlinesBeforeAndAfterNode has a
        fallback for nodes with no RenderObject, but the inline property doesn't really
        have a meaning without one.
        (WebCore::TextIterator::handleNonTextNode):
        Checks shouldEmitSpaceBeforeAndAfterNode and inserts a space if necessary.
        (WebCore::TextIterator::exitNode):
        Checks shouldEmitSpaceBeforeAndAfterNode and inserts a space if necessary.

2006-05-08  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Win32 build
        
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        Add XPath files to project.

2006-05-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin, Eric and Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=6638
        Support Mozilla's XPathEvaluator object.
        
        * DerivedSources.make:
        Generate XPath grammar, and JavaScript wrappers.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add new files to project
        
        * bindings/js/kjs_binding.cpp:
        (KJS::):
        (KJS::setDOMException):
        Handle setting XPath exceptions.
        
        * bindings/objc/DOM.mm:
        Just return nil for now when trying to create a wrapper for 
        XPath namespace nodes.

        * bindings/scripts/CodeGeneratorJS.pm:
        Add XPath types. Also add a "CanBeConstructed" extended attribute
        for interfaces that can be constructed directly.
        
        * bridge/mac/WebCorePageBridge.mm:
        (initializeLoggingChannelsIfNecessary):
        Initialize LogXPath channel.
        
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::hasFeature):
        Support "xpath" version "3.0".
        
        * dom/Document.cpp:
        (WebCore::Document::Document):
        
        (WebCore::Document::importNode):
        Ignore XPath namespace nodes.
        
        (WebCore::Document::createExpression):
        (WebCore::Document::createNSResolver):
        (WebCore::Document::evaluate):
        New functions which call down to a lazily created XPathEvaluator.

        * dom/Document.h:
        Add function declarations.
        
        * dom/Document.idl:
        Add XPath methods.
        
        * dom/Node.h:
        (WebCore::Node::):
        Add XPATH_NAMESPACE_NODE type.
        
        * editing/markup.cpp:
        (WebCore::startMarkup):
        Ignore XPath namespace nodes.
        
        * page/DOMWindow.idl:
        Add constructors for XPathEvaluator and XPathResult.
        
        * platform/Logging.cpp:
        * platform/Logging.h:
        Add XPath log channel

        * xpath: Added.
        * xpath/XPathEvaluator.cpp: Added.
        (WebCore::XPathEvaluator::createExpression):
        (WebCore::XPathEvaluator::createNSResolver):
        (WebCore::XPathEvaluator::evaluate):
        * xpath/XPathEvaluator.h: Added.
        (WebCore::):
        * xpath/XPathEvaluator.idl: Added.
        * xpath/XPathExpression.cpp: Added.
        (WebCore::XPathExpression::createExpression):
        (WebCore::XPathExpression::~XPathExpression):
        (WebCore::XPathExpression::evaluate):
        * xpath/XPathExpression.h: Added.
        * xpath/XPathExpression.idl: Added.
        * xpath/XPathNSResolver.cpp: Added.
        (WebCore::XPathNSResolver::XPathNSResolver):
        (WebCore::XPathNSResolver::lookupNamespaceURI):
        * xpath/XPathNSResolver.h: Added.
        * xpath/XPathNSResolver.idl: Added.
        * xpath/XPathNamespace.cpp: Added.
        (WebCore::XPathNamespace::XPathNamespace):
        (WebCore::XPathNamespace::~XPathNamespace):
        (WebCore::XPathNamespace::ownerDocument):
        (WebCore::XPathNamespace::ownerElement):
        (WebCore::XPathNamespace::prefix):
        (WebCore::XPathNamespace::nodeName):
        (WebCore::XPathNamespace::nodeValue):
        (WebCore::XPathNamespace::namespaceURI):
        (WebCore::XPathNamespace::nodeType):
        * xpath/XPathNamespace.h: Added.
        * xpath/XPathResult.cpp: Added.
        (WebCore::InvalidatingEventListener::InvalidatingEventListener):
        (WebCore::InvalidatingEventListener::handleEvent):
        (WebCore::XPathResult::XPathResult):
        (WebCore::XPathResult::~XPathResult):
        (WebCore::XPathResult::convertTo):
        (WebCore::XPathResult::resultType):
        (WebCore::XPathResult::numberValue):
        (WebCore::XPathResult::stringValue):
        (WebCore::XPathResult::booleanValue):
        (WebCore::XPathResult::singleNodeValue):
        (WebCore::XPathResult::invalidateIteratorState):
        (WebCore::XPathResult::invalidIteratorState):
        (WebCore::XPathResult::snapshotLength):
        (WebCore::XPathResult::iterateNext):
        (WebCore::XPathResult::snapshotItem):
        * xpath/XPathResult.h: Added.
        (WebCore::XPathResult::):
        * xpath/XPathResult.idl: Added.
        * xpath/impl: Added.
        * xpath/impl/XPathExpressionNode.cpp: Added.
        (WebCore::XPath::Expression::evaluationContext):
        (WebCore::XPath::Expression::Expression):
        (WebCore::XPath::Expression::~Expression):
        (WebCore::XPath::Expression::evaluate):
        (WebCore::XPath::Expression::addSubExpression):
        (WebCore::XPath::Expression::optimize):
        (WebCore::XPath::Expression::subExprCount):
        (WebCore::XPath::Expression::subExpr):
        (WebCore::XPath::Expression::isConstant):
        * xpath/impl/XPathExpressionNode.h: Added.
        (WebCore::XPath::EvaluationContext::EvaluationContext):
        * xpath/impl/XPathFunctions.cpp: Added.
        (WebCore::XPath::Interval::Interval):
        (WebCore::XPath::Interval::contains):
        (WebCore::XPath::Interval::asString):
        (WebCore::XPath::Function::setArguments):
        (WebCore::XPath::Function::setName):
        (WebCore::XPath::Function::arg):
        (WebCore::XPath::Function::argCount):
        (WebCore::XPath::Function::name):
        (WebCore::XPath::FunLast::doEvaluate):
        (WebCore::XPath::FunLast::isConstant):
        (WebCore::XPath::FunPosition::doEvaluate):
        (WebCore::XPath::FunPosition::isConstant):
        (WebCore::XPath::FunLocalName::isConstant):
        (WebCore::XPath::FunLocalName::doEvaluate):
        (WebCore::XPath::FunNamespaceURI::isConstant):
        (WebCore::XPath::FunNamespaceURI::doEvaluate):
        (WebCore::XPath::FunName::isConstant):
        (WebCore::XPath::FunName::doEvaluate):
        (WebCore::XPath::FunCount::doEvaluate):
        (WebCore::XPath::FunCount::isConstant):
        (WebCore::XPath::FunString::doEvaluate):
        (WebCore::XPath::FunConcat::doEvaluate):
        (WebCore::XPath::FunStartsWith::doEvaluate):
        (WebCore::XPath::FunContains::doEvaluate):
        (WebCore::XPath::FunSubstringBefore::doEvaluate):
        (WebCore::XPath::FunSubstringAfter::doEvaluate):
        (WebCore::XPath::FunSubstring::doEvaluate):
        (WebCore::XPath::FunStringLength::doEvaluate):
        (WebCore::XPath::FunNormalizeSpace::doEvaluate):
        (WebCore::XPath::FunTranslate::doEvaluate):
        (WebCore::XPath::FunBoolean::doEvaluate):
        (WebCore::XPath::FunNot::doEvaluate):
        (WebCore::XPath::FunTrue::doEvaluate):
        (WebCore::XPath::FunTrue::isConstant):
        (WebCore::XPath::FunLang::doEvaluate):
        (WebCore::XPath::FunLang::isConstant):
        (WebCore::XPath::FunFalse::doEvaluate):
        (WebCore::XPath::FunFalse::isConstant):
        (WebCore::XPath::FunNumber::doEvaluate):
        (WebCore::XPath::FunSum::doEvaluate):
        (WebCore::XPath::FunFloor::doEvaluate):
        (WebCore::XPath::FunCeiling::doEvaluate):
        (WebCore::XPath::FunRound::doEvaluate):
        (WebCore::XPath::FunctionLibrary::self):
        (WebCore::XPath::FunctionLibrary::FunctionLibrary):
        (WebCore::XPath::FunctionLibrary::createFunction):
        * xpath/impl/XPathFunctions.h: Added.
        * xpath/impl/XPathGrammar.y: Added.
        * xpath/impl/XPathParser.cpp: Added.
        (WebCore::XPath::):
        (WebCore::XPath::Parser::charCat):
        (WebCore::XPath::Parser::isAxisName):
        (WebCore::XPath::Parser::isNodeTypeName):
        (WebCore::XPath::Parser::isOperatorContext):
        (WebCore::XPath::Parser::skipWS):
        (WebCore::XPath::Parser::makeTokenAndAdvance):
        (WebCore::XPath::Parser::makeIntTokenAndAdvance):
        (WebCore::XPath::Parser::peekAheadHelper):
        (WebCore::XPath::Parser::peekCurHelper):
        (WebCore::XPath::Parser::lexString):
        (WebCore::XPath::Parser::lexNumber):
        (WebCore::XPath::Parser::lexNCName):
        (WebCore::XPath::Parser::lexQName):
        (WebCore::XPath::Parser::nextTokenInternal):
        (WebCore::XPath::Parser::nextToken):
        (WebCore::XPath::Parser::Parser):
        (WebCore::XPath::Parser::reset):
        (WebCore::XPath::Parser::lex):
        (WebCore::XPath::Parser::parseStatement):
        (WebCore::XPath::Parser::registerParseNode):
        (WebCore::XPath::Parser::unregisterParseNode):
        (WebCore::XPath::Parser::registerPredicateVector):
        (WebCore::XPath::Parser::unregisterPredicateVector):
        (WebCore::XPath::Parser::registerExpressionVector):
        (WebCore::XPath::Parser::unregisterExpressionVector):
        (WebCore::XPath::Parser::registerString):
        (WebCore::XPath::Parser::unregisterString):
        * xpath/impl/XPathParser.h: Added.
        (WebCore::XPath::Token::Token):
        (WebCore::XPath::Parser::):
        (WebCore::XPath::Parser::current):
        * xpath/impl/XPathPath.cpp: Added.
        (WebCore::XPath::Filter::Filter):
        (WebCore::XPath::Filter::~Filter):
        (WebCore::XPath::Filter::doEvaluate):
        (WebCore::XPath::LocationPath::LocationPath):
        (WebCore::XPath::LocationPath::~LocationPath):
        (WebCore::XPath::LocationPath::optimize):
        (WebCore::XPath::LocationPath::doEvaluate):
        (WebCore::XPath::Path::Path):
        (WebCore::XPath::Path::~Path):
        (WebCore::XPath::Path::doEvaluate):
        * xpath/impl/XPathPath.h: Added.
        * xpath/impl/XPathPredicate.cpp: Added.
        (WebCore::XPath::Number::Number):
        (WebCore::XPath::Number::isConstant):
        (WebCore::XPath::Number::doEvaluate):
        (WebCore::XPath::StringExpression::StringExpression):
        (WebCore::XPath::StringExpression::isConstant):
        (WebCore::XPath::StringExpression::doEvaluate):
        (WebCore::XPath::Negative::doEvaluate):
        (WebCore::XPath::NumericOp::NumericOp):
        (WebCore::XPath::NumericOp::doEvaluate):
        (WebCore::XPath::EqTestOp::EqTestOp):
        (WebCore::XPath::EqTestOp::doEvaluate):
        (WebCore::XPath::LogicalOp::LogicalOp):
        (WebCore::XPath::LogicalOp::shortCircuitOn):
        (WebCore::XPath::LogicalOp::isConstant):
        (WebCore::XPath::LogicalOp::doEvaluate):
        (WebCore::XPath::Union::doEvaluate):
        (WebCore::XPath::Predicate::Predicate):
        (WebCore::XPath::Predicate::~Predicate):
        (WebCore::XPath::Predicate::evaluate):
        (WebCore::XPath::Predicate::optimize):
        * xpath/impl/XPathPredicate.h: Added.
        (WebCore::XPath::NumericOp::):
        (WebCore::XPath::EqTestOp::):
        (WebCore::XPath::LogicalOp::):
        * xpath/impl/XPathStep.cpp: Added.
        (WebCore::XPath::Step::axisAsString):
        (WebCore::XPath::Step::Step):
        (WebCore::XPath::Step::~Step):
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::Step::nodesInAxis):
        (WebCore::XPath::Step::nodeTestMatches):
        (WebCore::XPath::Step::optimize):
        (WebCore::XPath::Step::namespaceFromNodetest):
        (WebCore::XPath::Step::primaryNodeType):
        * xpath/impl/XPathStep.h: Added.
        (WebCore::XPath::Step::):
        * xpath/impl/XPathUtil.cpp: Added.
        (WebCore::XPath::isRootDomNode):
        (WebCore::XPath::stringValue):
        (WebCore::XPath::isValidContextNode):
        * xpath/impl/XPathUtil.h: Added.
        * xpath/impl/XPathValue.cpp: Added.
        (WebCore::XPath::Value::Value):
        (WebCore::XPath::Value::type):
        (WebCore::XPath::Value::isNodeVector):
        (WebCore::XPath::Value::isBoolean):
        (WebCore::XPath::Value::isNumber):
        (WebCore::XPath::Value::isString):
        (WebCore::XPath::Value::toNodeVector):
        (WebCore::XPath::Value::toBoolean):
        (WebCore::XPath::Value::toNumber):
        (WebCore::XPath::Value::toString):
        * xpath/impl/XPathValue.h: Added.
        (WebCore::XPath::Value::):
        * xpath/impl/XPathVariableReference.cpp: Added.
        (WebCore::XPath::VariableReference::VariableReference):
        (WebCore::XPath::VariableReference::isConstant):
        (WebCore::XPath::VariableReference::doEvaluate):
        * xpath/impl/XPathVariableReference.h: Added.

2006-05-08  David Hyatt  <hyatt@apple.com>

        Comprehensive box-sizing fix.  This patch changes all form controls to
        have the right box-sizing values (text fields and text areas actually only
        use border-box in quirks mode now, and image buttons never use border-box).

        Tables are supposed to use border-box box-sizing as well, but that's a scary
        enough change that I'm saving it for a separate patch.

        Reviewed by mjs

        * css/html4.css:
        * css/quirks.css:

2006-05-07  Darin Adler  <darin@apple.com>
        
        Suggested by Mitz. Reviewed and landed by Maciej.
        
        * dom/Document.cpp: (WebCore::Document::formElementsState): Fixed mistake where the
        vector has an initial size and instead should have an initial capacity. Harmless in
        a way, but hurts performance.
        
2006-05-07  David Hyatt  <hyatt@apple.com>

        Fix for bugzilla bug 8060.

        Fixed width table cells weren't having their border widths
        included in the effective width of the column (and thus could end up being
        too small).

        Reviewed by darin

        Added fast/tables/fixed-cell-growth.html

        * rendering/table_layout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):

2006-05-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8769
          TextEncoding::fromUnicode() - support non-BMP characters and convert to NFC

        Tests: 
        * fast/forms/form-data-encoding.html
        * fast/forms/form-data-encoding-2.html

        * platform/mac/TextEncodingMac.cpp:
        (WebCore::TextEncoding::fromUnicode): Normalize the string; handle surrogate pairs.

2006-05-06  David Hyatt  <hyatt@apple.com>

        Rename WebCoreFont to FontPlatformData and WebTextRenderer to FontData.  Merge them into the
        headers (uncleanly with ifdefs at the moment, so I can see what I'm working towards).

        Reviewed by mjs

        * ChangeLog:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreStringTruncator.mm:
        (stringWidth):
        (truncateString):
        (+[WebCoreStringTruncator widthOfString:font:]):
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.mm:
        (itemTextRenderer):
        (groupLabelTextRenderer):
        (QListBox::sizeForNumberOfLines):
        (-[KWQTableView drawRow:clipRect:]):
        * platform/Font.cpp:
        (WebCore::m_wordSpacing):
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::update):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::isFixedPitch):
        * platform/Font.h:
        (WebCore::Font::getNSFont):
        * platform/FontData.h:
        (WebCore::FontData::ascent):
        (WebCore::FontData::descent):
        (WebCore::FontData::lineSpacing):
        (WebCore::FontData::lineGap):
        (WebCore::FontData::misspellingLineThickness):
        (WebCore::FontData::misspellingLinePatternWidth):
        (WebCore::FontData::misspellingLinePatternGapWidth):
        * platform/FontDataSet.h: Removed.
        * platform/FontFallbackList.h: Added.
        * platform/FontPlatformData.h:
        * platform/mac/FontData.mm: Added.
        (WebCore::WebCoreInitializeFont):
        (WebCore::WebCoreInitializeEmptyTextGeometry):
        (WebCore::widthForGlyph):
        (WebCore::overrideLayoutOperation):
        (WebCore::FontData::~FontData):
        (WebCore::FontData::xHeight):
        (WebCore::FontData::drawRun):
        (WebCore::FontData::floatWidthForRun):
        (WebCore::FontData::drawLineForCharacters):
        (WebCore::FontData::selectionRectForRun):
        (WebCore::FontData::drawHighlightForRun):
        (WebCore::FontData::drawLineForMisspelling):
        (WebCore::FontData::pointToOffset):
        (WebCore::FontData::setAlwaysUseATSU):
        (WebCore::getSmallCapsRenderer):
        (WebCore::findSubstituteFont):
        (WebCore::rendererForAlternateFont):
        (WebCore::findSubstituteRenderer):
        (WebCore::computeWidthForSpace):
        (WebCore::setUpFont):
        (WebCore::CG_drawHighlight):
        (WebCore::CG_selectionRect):
        (WebCore::CG_draw):
        (WebCore::CG_floatWidthForRun):
        (WebCore::updateGlyphMapEntry):
        (WebCore::extendGlyphMap):
        (WebCore::extendWidthMap):
        (WebCore::initializeATSUStyle):
        (WebCore::createATSULayoutParameters):
        (WebCore::getTextBounds):
        (WebCore::ATSU_floatWidthForRun):
        (WebCore::ATSU_drawHighlight):
        (WebCore::ATSU_selectionRect):
        (WebCore::ATSU_draw):
        (WebCore::ATSU_pointToOffset):
        (WebCore::advanceWidthIteratorOneCharacter):
        (WebCore::CG_pointToOffset):
        (WebCore::glyphForCharacter):
        (WebCore::initializeWidthIterator):
        (WebCore::advanceWidthIterator):
        * platform/mac/FontMac.mm:
        (WebCore::m_font):
        (WebCore::FontFallbackList::~FontFallbackList):
        (WebCore::FontFallbackList::platformFont):
        (WebCore::FontFallbackList::primaryFont):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::Font::platformFont):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawLineForText):
        (WebCore::Font::drawLineForMisspelling):
        (WebCore::Font::misspellingLineThickness):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        (WebCoreSetAlwaysUseATSU):
        * platform/mac/WebTextRenderer.h: Removed.
        * platform/mac/WebTextRenderer.mm: Removed.
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory isFontFixedPitch:]):
        (-[WebTextRendererFactory init]):
        (-[WebTextRendererFactory rendererWithFont:]):
        (-[WebTextRendererFactory fontWithFamilies:traits:size:]):
        * platform/win/FontWin.cpp:
        (WebCore::FontFallbackList::~FontFallbackList):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::primaryFont):
        (WebCore::Font::floatWidth):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::checkSelectionPoint):

2006-05-05  Darin Adler  <darin@apple.com>

        - fix the Windows build

        * platform/win/FontWin.cpp: (WebCore::getFontData):

2006-05-05  Darin Adler  <darin@apple.com>

        * platform/SegmentedString.h: (WebCore::SegmentedString::advance): Oops!
        Removed an extra ! that was causing everything to fail.

2006-05-05  Darin Adler  <darin@apple.com>

        Reviewed by Tim Hatcher.

        - remove a few of the stranger features of QChar on the road to
          eventually replacing it with an integer type (probably ICU's UChar)

        * platform/DeprecatedString.h: Remove SpecialCharacter, byteOrderMark, null,
        cell, row, isNull, mirrored, mirroredChar, operator char, >, >=, <, and <=
        from QChar. Also removed the many unneeded friend declarations. Remove findArg
        and arg from DeprecatedString.

        * dom/Document.cpp: (WebCore::Document::parseQualifiedName): Cast the type of the
        buffer before invoking the U16_NEXT function. Turns out this was converting each
        QChar to a char and back to a UChar, which means it caused a bug with characters
        that are U+0100 or greater.

        * css/csshelper.cpp: (WebCore::parseURL):
        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::constrainValue):
        * platform/StringImpl.cpp: (WebCore::StringImpl::toCoordsArray):
        * xml/xmlhttprequest.cpp: (WebCore::getCharset):
        Add some calls to unicode() since we don't have comparison operators any more.

        * dom/StyledElement.cpp:
        (WebCore::toHex): Rewrote to just take a UChar parameter.
        (WebCore::StyledElement::addCSSColor): Call toHex on the character code.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge smartInsertForString:replacingRange:beforeString:afterString:]):
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextIterator.cpp: (WebCore::TextIterator::handleTextBox):
        * platform/SegmentedString.h:
        (WebCore::SegmentedString::push):
        (WebCore::SegmentedString::advance):
        (WebCore::SegmentedString::escaped):
        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::length):
        (WebCore::SegmentedString::append):
        (WebCore::SegmentedString::prepend):
        (WebCore::SegmentedString::toString):
        Changed calls to isNull() to instead just use unicode() and check for 0.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseEntity): Change callers that used cell and row to
        just use unicode() instead.
        (WebCore::HTMLTokenizer::parseTag): Ditto.

        * loader/Decoder.cpp: (Decoder::decode): Changed code that did a type cast to
        unsigned char to instead call unicode().

        * platform/DeprecatedString.cpp:
        (KWQStringData::makeAscii): Call latin1() instead of relying on the conversion operator.
        (DeprecatedString::DeprecatedString): Call unicode() instead of relying on the conversion
        operator (the character has been tested and is known to be ASCII).
        (DeprecatedString::at): Use 0 instead of QChar::null.
        (DeprecatedString::compare): Use unicode() so we can do comparison since we don't have
        comparison operators any more.
        (DeprecatedString::find): Call unicode() instead of relying on the conversion
        operator (the character has been tested and is known to be ASCII).
        (DeprecatedString::findRev): Ditto.
        (DeprecatedString::copyLatin1): Call latin1() instead of relying on the conversion operator.
        (DeprecatedString::lower): Call unicode() instead of relying on the conversion
        operator (the character has been tested and is known to be ASCII).
        (DeprecatedString::insert): Ditto.
        (DeprecatedString::replace): Ditto.
        (DeprecatedString::fill): Ditto.
        (DeprecatedString::append): Ditto.

        * html/html_inlineimpl.cpp: (WebCore::HTMLAnchorElement::defaultEventHandler):
        Eliminate the one use of DeprecatedString::arg.

        - other cleanup

        * kwq/KWQCString.cpp: Remove unneeded "using" directive.

        * html/HTMLElementFactory.cpp:
        (WebCore::htmlConstructor):
        (WebCore::headConstructor):
        (WebCore::bodyConstructor):
        (WebCore::baseConstructor):
        (WebCore::linkConstructor):
        (WebCore::metaConstructor):
        (WebCore::styleConstructor):
        (WebCore::titleConstructor):
        (WebCore::frameConstructor):
        (WebCore::framesetConstructor):
        (WebCore::iframeConstructor):
        (WebCore::formConstructor):
        (WebCore::buttonConstructor):
        (WebCore::inputConstructor):
        (WebCore::isindexConstructor):
        (WebCore::fieldsetConstructor):
        (WebCore::labelConstructor):
        (WebCore::legendConstructor):
        (WebCore::optgroupConstructor):
        (WebCore::optionConstructor):
        (WebCore::selectConstructor):
        (WebCore::textareaConstructor):
        (WebCore::dlConstructor):
        (WebCore::ulConstructor):
        (WebCore::olConstructor):
        (WebCore::dirConstructor):
        (WebCore::menuConstructor):
        (WebCore::liConstructor):
        (WebCore::blockquoteConstructor):
        (WebCore::divConstructor):
        (WebCore::headingConstructor):
        (WebCore::hrConstructor):
        (WebCore::paragraphConstructor):
        (WebCore::preConstructor):
        (WebCore::basefontConstructor):
        (WebCore::fontConstructor):
        (WebCore::modConstructor):
        (WebCore::anchorConstructor):
        (WebCore::imageConstructor):
        (WebCore::mapConstructor):
        (WebCore::areaConstructor):
        (WebCore::canvasConstructor):
        (WebCore::appletConstructor):
        (WebCore::embedConstructor):
        (WebCore::objectConstructor):
        (WebCore::paramConstructor):
        (WebCore::scriptConstructor):
        (WebCore::tableConstructor):
        (WebCore::tableCaptionConstructor):
        (WebCore::tableColConstructor):
        (WebCore::tableRowConstructor):
        (WebCore::tableCellConstructor):
        (WebCore::tableSectionConstructor):
        (WebCore::brConstructor):
        (WebCore::quoteConstructor):
        (WebCore::marqueeConstructor):
        Mark functions static, remove unused parameters, change from docPtr to doc.

2006-05-05  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=8626
          Strict mode erroneously triggered by a broken comment

        Test: fast/parser/broken-comments-vs-parsing-mode.html

        * page/Frame.cpp:
        (WebCore::Frame::endIfNotLoading): Call determineParseMode() if needed.

2006-05-05  Darin Adler  <darin@apple.com>

        - fix the Windows build (this time for sure)

        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::translate): Added.
        (GraphicsContext::rotate): Ditto.
        (GraphicsContext::scale): Ditto.

2006-05-05  Darin Adler  <darin@apple.com>

        - fix the Windows build

        * bridge/win/FrameWin.h: Add Element* parameter to createPlugin.
        * platform/win/TemporaryLinkStubs.cpp: (FrameWin::createPlugin): Ditto.

2006-05-05  Darin Adler  <darin@apple.com>

        - get the Windows build a little closer to building again

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect): Call alpha to check if the color is transparent.
        Call setColor directly instead of setColorFromPen.
        (WebCore::GraphicsContext::drawLine): Ditto.
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        (WebCore::GraphicsContext::drawArc): Ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        * platform/win/TemporaryLinkStubs.cpp: (JavaAppletWidget::JavaAppletWidget): Updated parameter types.

2006-05-05  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fixed data structure used to save/restore form element state to remove the
          O(n^2) algorithm and remove anomalies in how it works
        - fix http://bugs.webkit.org/show_bug.cgi?id=8683
          REGRESSION: imdb search button has "Submit" overload after going back

        * manual-tests/form-value-restore.html: Added.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge saveDocumentState]): Rewrote to call the new formElementsState
        function on the document and also to convert null strings to NSNull instead of empty
        NSString objects.
        (-[WebCoreFrameBridge restoreDocumentState]): Ditto, with the setStateForNewFormElements
        function.

        * dom/Document.h: Added FormElementKey, FormElementKeyHash, and FormElementKeyHashTraits
        for use in the hash map. Made readyState, inputEncoding, defaultCharset, charset,
        characterSet, getElementByAccessKey, haveStylesheetsLoaded, usesDescendantRules,
        usesSiblingRules, inCompatMode, inAlmostStrictMode, inStrictMode, preferredStylesheetSet,
        selectedStylesheetSet, and getCSSTarget all const member functions. Removed the unused
        nextState function. Renamed registerMaintainsState and deregisterMaintainsState to
        registerFormElementWithState and HTMLGenericFormElement and changed them to use form
        elements rather than arbitrary DOM nodes. Replaced docState with formElementsState and
        setRestoreState and restoreState with setStateForNewFormElements, hasStateForNewFormElements,
        and takeStateForFormElement. Replaced m_maintainsState with m_formElementsWithState,
        m_state with m_stateForNewFormElements. Made m_elementsByAccessKey and m_accessKeyMapValid
        mutable. Removed unused m_elementNames, m_elementNameAlloc, m_elementNameCount, m_attrNames,
        m_attrNameAlloc, m_attrNameCount, m_namespaceURIs, m_namespaceURIAlloc, m_namespaceURICount.

        * dom/Document.cpp:
        (WebCore::Document::Document): Remove initialization of long-obsolete m_elementNames and
        m_attrNames.
        (WebCore::Document::~Document): Remove destruction of same.
        (WebCore::Document::readyState): Made const.
        (WebCore::Document::inputEncoding): Ditto.
        (WebCore::Document::defaultCharset): Ditto.
        (WebCore::Document::getElementByAccessKey): Ditto.
        (WebCore::Document::preferredStylesheetSet): Ditto.
        (WebCore::Document::selectedStylesheetSet): Ditto.
        (WebCore::Document::getCSSTarget): Ditto.
        (WebCore::Document::formElementsState): Added. Replaces the old docState function.
        Builds a vector of strings, with 3 strings for each form element containing the
        name, type, and state value.
        (WebCore::Document::setStateForNewFormElements): Added. Converts the state vector
        into a hash map, considering the scheme with 3 strings for form element used above.
        (WebCore::Document::hasStateForNewFormElements): Added.
        (WebCore::Document::takeStateForFormElement): Added. Given a name and type, looks
        up the values in the hash map and "peels off" the last one.
        (WebCore::FormElementKey::FormElementKey): Added.
        (WebCore::FormElementKey::~FormElementKey): Added.
        (WebCore::FormElementKey::operator=): Added.
        (WebCore::FormElementKey::ref): Added.
        (WebCore::FormElementKey::deref): Added.
        (WebCore::FormElementKeyHash::hash): Added.
        (WebCore::FormElementKeyHashTraits::deletedValue): Added.

        * dom/Element.h: Removed state function.
        * dom/Node.h: Removed maintainsState, state, and restoreState functions.
        * dom/Node.cpp: Ditto.

        * dom/QualifiedName.cpp: Reformatted.
        (WebCore::hashComponents): Removed code to handle buffers that are not multiples
        of 4 bytes, since a QualifiedName is guaranteed to be; also asserted that fact.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode): Remove code to restore state; that's now handled
        by closeRenderer.
        (WebCore::HTMLParser::popOneBlock): Ditto.

        * html/HTMLFormElement.cpp: Added include of HTMLInputElement.h.

        * html/HTMLGenericFormElement.h: Changed form to be a const member function.
        Changed type function to return a const AtomicString& instead of a String.
        Added an override of closeRenderer. Removed state and findMatchingState functions.
        Added stateValue and restoreState functions. Made m_form, m_disabled, and m_readOnly
        be private instead of protected. Removed m_inited. Changed booleans to not use bit
        fields since there are only two of them.
        * html/HTMLGenericFormElement.cpp: Removed encodedElementName, state, and
        findMatchingState functions.
        (WebCore::HTMLGenericFormElement::stateValue): Added. No implementation. This will only be
        called for subclasses that call registerFormElementWithState, and those will override and
        implement it.
        (WebCore::HTMLGenericFormElement::restoreState): Ditto.
        (WebCore::HTMLGenericFormElement::closeRenderer): Added. Replaces code that was in the
        HTML parser. Calls takeStateForFormElement, passing in the name and type, and if a
        state is found, calls restoreState.

        * html/HTMLButtonElement.h: Changed type to return a const AtomicString& instead
        of a String.
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::type): Return a const AtomicString& instead of a
        String.
        (WebCore::HTMLButtonElement::defaultEventHandler): Use form() instead of m_form.
        (WebCore::HTMLButtonElement::isSuccessfulSubmitButton): Use disabled() instead of
        m_disabled.

        * html/HTMLInputElement.h: Changed type to return a const AtomicString& instead
        of a String. Removed maintainsState, state, and restoreState functions, and added
        new stateValue and restoreState functions. Added m_inited (moved here from the generic
        form element base class).
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init): Call registerFormElementWithState. This was
        formerly done by the HTML parser.
        (WebCore::HTMLInputElement::~HTMLInputElement): Call deregisterFormElementWithState
        by its new name.
        (WebCore::HTMLInputElement::isKeyboardFocusable): Use form() instead of m_form.
        (WebCore::HTMLInputElement::setType): Ditto.
        (WebCore::HTMLInputElement::setInputType): Ditto. Also call inputType() != PASSWORD
        instead of maintainsState(), since this is the only function that needs to know
        the rule and it's no longer a function in the base class. Also call register and
        deregister functions by their new names.
        (WebCore::HTMLInputElement::type): Changed to return const AtomicString& instead
        of String.
        (WebCore::HTMLInputElement::stateValue): Renamed from state and changed to no
        longer include the name and type, formerly obtained by calling the base class's
        HTMLGenericFormElement::state, and to no longer modify the value() string by
        adding a ".", which gets in the way of distinguishing null and empty values
        and is slower and unnecessary.
        (WebCore::HTMLInputElement::restoreState):  Changed because it takes a single
        state and doesn't need to call findMatchingState, and also to no longer remove the last
        character from the value when restoring state.
        (WebCore::HTMLInputElement::parseMappedAttribute): Use form() instead of m_form.
        (WebCore::HTMLInputElement::isSuccessfulSubmitButton): Use disabled() instead of
        m_disabled.
        (WebCore::HTMLInputElement::setChecked): Use form() instead of m_form.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): Ditto.

        * html/HTMLSelectElement.h: Changed type to return a const AtomicString& instead
        of a String.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Call registerFormElementWithState.
        This was formerly done by the HTML parser.
        (WebCore::HTMLSelectElement::~HTMLSelectElement): Call deregisterFormElementWithState
        by its new name.
        (WebCore::HTMLSelectElement::type): Changed to return const AtomicString& instead
        of String.
        (WebCore::HTMLSelectElement::stateValue): Renamed from state and changed to no
        longer include the name and type, formerly obtained by calling the base class's
        HTMLGenericFormElement::state, and to build the string in a Vector<char> instead of
        appending characters one at a time to a string.
        (WebCore::HTMLSelectElement::restoreState):  Changed because it takes a single
        state and doesn't need to call findMatchingState.
        (WebCore::HTMLSelectElement::defaultEventHandler): Use form() instead of m_form.

        * html/HTMLTextAreaElement.h: Changed type to return a const AtomicString& instead
        of a String. Removed maintainsState, state, and restoreState functions, and added
        new stateValue and restoreState functions.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Call registerFormElementWithState.
        This was formerly done by the HTML parser. Also use member initialization instead of
        assignment.
        (WebCore::HTMLTextAreaElement::~HTMLTextAreaElement): Call deregisterFormElementWithState
        by its new name.
        (WebCore::HTMLTextAreaElement::type): Changed to return const AtomicString& instead
        of String.
        (WebCore::HTMLTextAreaElement::stateValue): Renamed from state and changed to no
        longer include the name and type, formerly obtained by calling the base class's
        HTMLGenericFormElement::state, and to no longer modify the value() string by
        adding a ".", which is unnecessary.
        (WebCore::HTMLTextAreaElement::restoreState): Changed because it takes a single
        state and doesn't need to call findMatchingState, and also to no longer remove the last
        character from the value when restoring state.
        (WebCore::HTMLTextAreaElement::updateValue): Changed to const.
        (WebCore::HTMLTextAreaElement::value): Ditto.
        (WebCore::HTMLTextAreaElement::defaultValue): Ditto.

        * html/HTMLFieldSetElement.h: Changed type to return a const AtomicString& instead
        of a String.
        * html/HTMLFieldSetElement.cpp: (WebCore::HTMLFieldSetElement::type): Ditto.
        * html/HTMLKeygenElement.h: Ditto.
        * html/HTMLKeygenElement.cpp: (WebCore::HTMLKeygenElement::type): Ditto.
        * html/HTMLLegendElement.h: Ditto.
        * html/HTMLLegendElement.cpp: (WebCore::HTMLLegendElement::type):
        * html/HTMLOptGroupElement.h: Ditto.
        * html/HTMLOptGroupElement.cpp: (WebCore::HTMLOptGroupElement::type): Ditto.
        * html/HTMLOptionElement.h: Ditto.
        * html/HTMLOptionElement.cpp: (WebCore::HTMLOptionElement::type): Ditto.

        * ksvg2/svg/SVGAnimationElement.cpp: (SVGAnimationElement::closeRenderer):
        Added missing call to base class.

        * rendering/render_form.h: Removed element() functions that cast to the
        appropriate derived element class. They do make some bits of code slightly
        more readable, but they also require including too many headers. Removed
        the includes of HTMLInputElement.h, HTMLSelectElement.h, HTMLTextAreaElement.h,
        and KWQLineEdit.h, and added an include of GraphicsTypes.h.
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::updateFromElement): Changed use of element()
        to instead use node() and cast.
        (WebCore::RenderFormElement::clicked): Ditto.
        (WebCore::RenderLineEdit::selectionChanged): Ditto.
        (WebCore::RenderLineEdit::returnPressed): Ditto.
        (WebCore::RenderLineEdit::performSearch): Ditto.
        (WebCore::RenderLineEdit::addSearchResult): Ditto.
        (WebCore::RenderLineEdit::calcMinMaxWidth): Ditto.
        (WebCore::RenderLineEdit::setStyle): Ditto.
        (WebCore::RenderLineEdit::updateFromElement): Ditto.
        (WebCore::RenderLineEdit::valueChanged): Ditto.
        (WebCore::RenderFileButton::calcMinMaxWidth): Ditto.
        (WebCore::RenderFileButton::updateFromElement): Ditto.
        (WebCore::RenderFileButton::returnPressed): Ditto.
        (WebCore::RenderFileButton::valueChanged): Ditto.
        (WebCore::RenderSelect::updateFromElement): Ditto.
        (WebCore::RenderSelect::layout): Ditto.
        (WebCore::RenderSelect::valueChanged): Ditto.
        (WebCore::RenderSelect::selectionChanged): Ditto.
        (WebCore::RenderSelect::updateSelection): Ditto.
        (WebCore::RenderTextArea::destroy): Ditto.
        (WebCore::RenderTextArea::calcMinMaxWidth): Ditto.
        (WebCore::RenderTextArea::setStyle): Ditto.
        (WebCore::RenderTextArea::updateFromElement): Ditto.
        (WebCore::RenderTextArea::valueChanged): Ditto.
        (WebCore::RenderTextArea::selectionChanged): Ditto.
        (WebCore::RenderSlider::updateFromElement): Ditto.
        (WebCore::RenderSlider::valueChanged): Ditto.

2006-05-05  Matt Gough  <matt@softchaos.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=8563

        Test: fast/doctypes/005-case-preserving.html

        The doctype object in the DOM is now usable by client code
        as opposed to always being exposed as nil. Now also ensures that
        the 'name' of the component preserves the case of the original html source.
        (i.e HtMl -> HtMl not HTML)

        * dom/Document.h:
        Changes comment by docType() to say it may return 0 for html
        * html/HTMLDocument.cpp:
        (WebCore::parseDocTypeDeclaration):
        (WebCore::HTMLDocument::determineParseMode):
        Preserves the case of the name component
        (WebCore::HTMLDocument::doctype):removed
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::doctype):removed

2006-05-05  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8445:
        [DOMHTMLSelectElement multiple] returns no when the select element is multiple

        Correct the logic errors, which are clearly indicated by the changeset given
        in the bug report.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLLinkElement disabled]):
        (-[DOMHTMLSelectElement disabled]):
        (-[DOMHTMLSelectElement multiple]):
        (-[DOMHTMLOptGroupElement disabled]):
        (-[DOMHTMLOptionElement defaultSelected]):
        (-[DOMHTMLOptionElement disabled]):

2006-05-04  Darin Adler  <darin@apple.com>

        Reviewed by Tim Omernick.

        - fix storage leak I introduced yesterday

        * platform/cg/GraphicsContextCG.cpp:
        (WebCore::setCGFillColor): Added.
        (WebCore::setCGStrokeColor): Added.
        (WebCore::GraphicsContext::drawRect): Use setCGFillColor to avoid allocating
        a CGColorRef object.
        (WebCore::GraphicsContext::drawLine): Use setCGStrokeColor and setCGFillColor
        to avoid allocating a CGColorRef object.
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        (WebCore::GraphicsContext::drawArc): Ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.

2006-05-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        * dom/Node.cpp:
        (WebCore::Node::rootEditableElement):
        Restored code to stop at the body tag.  Editing shouldn't be allowed to 
        happen outside the body, so it needs to be the editable root even if the 
        html element is contentEditable.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd):
        Now takes in more information so it can be "the decider".
        (WebCore::ReplaceSelectionCommand::doApply):
        Merging two paragraphs will destroy the moved one's block styles. Perform 
        the end merge backward (from content already in the document to just inserted
        content) if moving forward would move the paragraph that contained the start of 
        the selection being pasted into, since we always want to preserve that paragraph's 
        block style.
        Moving backward in this case is also helpful because otherwise it would be
        difficult to remember the position where inserted content began (since merging
        would remove m_firstNodeInserted).  That position is needed in order to select 
        the replacement and to add smart replace whitespace.
        (WebCore::ReplaceSelectionCommand::removeEndBRIfNeeded):
        If [br, 0] is at the end of a block, the br is not necessarily collapsed
        in quirks mode.  [br, 0] needs to also not be at the start of a block.
         
        * editing/ReplaceSelectionCommand.h:

2006-05-04  Tim Omernick  <timo@apple.com>

        Reviewed by Darin.

        <rdar://problem/4537606> Give Java WebKit plugin access to its own DOM element

        * bridge/mac/WebCoreFrameBridge.h:
        Added DOMElement parameter to -viewForJavaAppletWithFrame:attributeNames:attributeValues:baseURL:.

        * bridge/JavaAppletWidget.h:
        Constructor now takes the applet's element instead of its containing frame.

        * bridge/mac/JavaAppletWidget.mm:
        (JavaAppletWidget::JavaAppletWidget):
        Pass the applet's element to viewForJavaAppletWithFrame:.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        Pass the element along to JavaAppletWidget.

2006-05-04  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/4480186> Give WebKit plugins access to their own DOM element

        * bridge/mac/WebCoreFrameBridge.h:
        Added DOMElement: parameter to -viewForPluginWithURL:attributeNames:attributueValues:MIMEType:

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::createPlugin):
        Added "element" parameter; wrap element in DOMElement and pass up to the bridge.

        * page/Frame.h:
        Added "element" parameter to createPlugin().
        * page/Frame.cpp:
        (WebCore::Frame::loadPlugin):
        Get the plugin's DOM element and pass to createPlugin().

2006-05-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by timo.

        Add drag & drop support to <input type="file">
        http://bugs.webkit.org/show_bug.cgi?id=8733

        Test: manual/input-type-file-drag-drop.html

        * kwq/KWQFileButton.mm:
        (-[WebFileChooserButton initWithWidget::]):
        (-[WebCoreFileButton initWithWidget:]):
        (-[WebCoreFileButton drawRect:]):
        (-[WebCoreFileButton updateLabel]):
        (-[WebCoreFileButton setFilename:]):
        (-[WebCoreFileButton changeFilename:]):
        (-[WebCoreFileButton chooseFilename:]):
        (validFilenameFromPasteboard):
        (-[WebCoreFileButton draggingEntered:]):
        (-[WebCoreFileButton draggingExited:]):
        (-[WebCoreFileButton performDragOperation:]):

2006-05-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8732 
        Backgrounds with background-size and background-origin do not 
        always lay out correctly

        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::drawTiled): We no longer need to scale the source 
        point since it will now come in with the scale already taken into 
        account.
        * platform/mac/ImageMac.mm:
        (WebCore::Image::drawTiled): Same as above.
        * rendering/RenderBox.cpp:
        (WebCore::cacluateBackgroundSize): Now calculate the background 
        size in a helper method.
        (WebCore::RenderBox::paintBackgroundExtended): Calculate the 
        background size before calculating cx, cy, cw, ch, sx, and sy so 
        that they can all be calculated with the scaled image size taken 
        into account.

2006-05-04  David Hyatt  <hyatt@apple.com>

        Fix for 8693, crash when reloading PDF. Make sure to clear the truncator's
        cached renderer.

        Reviewed by beth

        * bridge/mac/WebCoreStringTruncator.h:
        * bridge/mac/WebCoreStringTruncator.mm:
        (+[WebCoreStringTruncator clear]):
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory clearCaches]):

2006-05-03  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=8696
          another round of GraphicsContext improvements

        * WebCore.xcodeproj/project.pbxproj: Added GraphicsContextCG.cpp.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale): Use new GraphicsContext function.
        (WebCore::CanvasRenderingContext2D::rotate): Ditto.
        (WebCore::CanvasRenderingContext2D::translate): Ditto.
        * kwq/KWQComboBox.mm: Added include (not sure if this is needed for this patch,
        but it's needed for one of my upcoming ones).

        * platform/GraphicsContext.h: Changed fillColor and setFillColor to use Color
        instead of RGBA32. Removed setColorFromFillColor and setColorFromPen. Added
        scale, rotate, and translate functions.
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setFillColor): Changed to use Color instead of RGBA32.
        (WebCore::GraphicsContext::fillColor): Ditto.

        * platform/GraphicsTypes.h: Moved HorizontalAlignment here.
        * platform/Widget.h: Removed HorizontalAlignment from here.

        * platform/cg/GraphicsContextCG.cpp: Added. Started as a copy of GraphicsContextMac.mm.
        (WebCore::GraphicsContext::drawRect): Rewrote to not rely on [NSGraphicsContext currentContext].
        (WebCore::GraphicsContext::drawLine): Ditto.
        (WebCore::GraphicsContext::drawEllipse): Ditto.
        (WebCore::GraphicsContext::drawArc): Ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::setLineWidth):  Added check of paintingDisabled(). 
        (WebCore::GraphicsContext::setMiterLimit): Ditto.
        (WebCore::GraphicsContext::setAlpha): Ditto.
        (WebCore::GraphicsContext::clearRect): Ditto.
        (WebCore::GraphicsContext::strokeRect): Ditto.
        (WebCore::GraphicsContext::setLineCap): Ditto.
        (WebCore::GraphicsContext::setLineJoin): Ditto.
        (WebCore::GraphicsContext::clip): Ditto.
        (WebCore::GraphicsContext::scale): Added.
        (WebCore::GraphicsContext::rotate): Added.
        (WebCore::GraphicsContext::translate): Added.

        * platform/mac/GraphicsContextMac.mm: Moved most of this file into GraphicsContextCG.cpp.
        (WebCore::GraphicsContext::setCompositeOperation): Added check of paintingDisabled().

        * platform/mac/WebCoreSystemInterface.h: Added declarations so this header
        stands alone.

2006-05-03  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8159
          REGRESSION: Clicking outside new text field focuses the field

        This bug has always been present for "content editable" HTML, but
        now affects <input type=text> as well. The problem is with the editing
        concept of a "deep equivalent". When computing the deep equivalent,
        the code can move from outside an editable area to inside. To fix this,
        I removed all use of the "deep equivalent" concept.

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::positionForCoordinates):
        Changed argument names from _x and _y to just x and y. When the element
        is the editable root, changed things so that clicks that are not within
        the element at all return positions before or after the element, rather than
        always choosing the closest point within the element. This gets us off on
        the right foot, by not choosing a position inside an editable root when you
        click outside that editable root. This code handles shadowParentNode as well,
        and also calls positionForCoordinates on children rather than calling
        positionForRenderer (which I believe is now a function that can be removed).

        * editing/VisiblePosition.h: Removed the deepEquivalent function.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::previousVisiblePosition): Removed use of the
        deepEquivalent function. Also, to make this function easier to understand
        I separated out the case where the start point is "in rendered content"
        and the case where it's not into two separate loops.
        (WebCore::VisiblePosition::nextVisiblePosition): Ditto.
        (WebCore::VisiblePosition::initDeepPosition): Removed use of the deepEquivalent
        function. Also added code to make sure that this work never turns a position
        outside an editable element into a position inside that editable element, or
        vice versa. Reorganized the code a bit.

        * dom/Position.cpp:
        (WebCore::Position::upstream): Removed use of the deepEquivalent function.
        (WebCore::Position::downstream): Ditto.

        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent): Changed to use isReplaced instead of isWidget
        and isImage to determine if editing should ignore content.
        (WebCore::firstInSpecialElement): Rewrote isFirstVisiblePositionInSpecialElement
        to have code to share with positionBeforeContainingSpecialElement. And changed
        to allow both the position just before a table and the position just inside a
        table to qualify. While this is slightly sloppy, the old code worked because
        of the "deep equivalent" technique. This change is needed to get the desired
        results even without that technique.
        (WebCore::lastInSpecialElement): Ditto.
        (WebCore::isFirstVisiblePositionInSpecialElement): Changed to use the new function.
        (WebCore::positionBeforeContainingSpecialElement): Ditto.
        (WebCore::isLastVisiblePositionInSpecialElement): Ditto.
        (WebCore::positionAfterContainingSpecialElement): Ditto.

        * dom/Node.cpp: (WebCore::Node::rootEditableElement): Rewrote to remove
        special case for body tag.

        - other changes

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterHTML): Added a FIXME about the fact
        that this won't merge neighboring text nodes the way setOuterText does.
        (WebCore::HTMLElement::setInnerText): Added a FIXME about the fact that
        this creates a text node even when setting to empty text.
        (WebCore::HTMLElement::setOuterText): Ditto.

        * editing/DeleteSelectionCommand.cpp: Removed some #if 1 and #if 0.
        * editing/ReplaceSelectionCommand.cpp: A little reformatting.
        * rendering/render_button.h: Tiny formatting tweak.

2006-05-02  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/4523671> 
        REGRESSION (NativeTextField): Auto-complete popup list doesn't appear at the correct location after scrolling page.

        * bindings/objc/DOMHTML.mm: (-[DOMHTMLInputElement _rectOnScreen]):
        Use the documentView to compute the correct rect for the element when the view is scrolled.

2006-05-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=8704>
        Fix a few end merge bugs
        <rdar://problem/4424044>
        REGRESSION: Extra line appears when typing

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge smartInsertForString:replacingRange:beforeString:afterString:]): 
        Use renamed characterAfter.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        Regenerate a VisiblePosition that became stale during a text node split.
        Don't rebalance whitespace after the operation, 1) it has a bug that turns preserved
        newlines into nbsps, 2) I think it should only be done during serialization, not after 
        every command (since editable regions now always have -webkit-nbsp-mode:space on them).
        Use a regular br for the placeholder as I think we can move away from -webkit-block-placeholders.
        
        * editing/RebalanceWhitespaceCommand.cpp: Added FIXMEs.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart): Removed FIXME.
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd): Can now use rendering information.
        (WebCore::ReplaceSelectionCommand::doApply):
        Call shouldMergeEnd after the insertion so that it can use rendering information.
        Don't use positionAfterNode of the last node inserted to mark the position at the end 
        of inserted content because canonicalization can send it into content that was already
        in the document.
        
        * editing/ReplaceSelectionCommand.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter): 
        Renamed.  When two candidates are visually equivalent, the rightmost candidate will be 
        the one inside the text node where the character will be.
        
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::enclosingTableCell): Added.
        (WebCore::enclosingList):
        * editing/htmlediting.h:

2006-05-02  David Hyatt  <hyatt@apple.com>

        Partial fix for the crash in bugzilla bug 8088.  There's a third crash
        even after fixing this though.

        Reviewed by darin

        * platform/mac/WebTextRenderer.mm:
        (WebCore::WidthMap::widths):
        (WebCore::extendWidthMap):
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory clearCaches]):

2006-05-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        * WebCore.vcproj/WebCore/WebCore.vcproj: defined NDEBUG in release build
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin): turned on javascript.
        * kwq/KWQKHTMLSettings.h: 
        (KHTMLSettings::KHTMLSettings): initialized settings to 0

2006-05-02  David Hyatt  <hyatt@apple.com>

        Make sure to updateLayout on all scrolling functions (in particular when
        setting scrollLeft/Top).

        Reviewed by eric

        fast/overflow/008,html added as a test case.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView):
        (WebCore::Element::scrollIntoViewIfNeeded):
        (WebCore::Element::setScrollLeft):
        (WebCore::Element::setScrollTop):

2006-05-02  Anders Carlsson  <andersca@mac.com>

        Reviewed by Dave Hyatt.
        
        http://bugs.webkit.org/show_bug.cgi?id=8688
        file URLs aren't being serialized correctly when using window.location
        
        * platform/KURL.cpp:
        (KURL::prettyURL):
        Append "//" for file URLs.
        
2006-05-01  David Hyatt  <hyatt@apple.com>

        Convert WebTextRenderer to be a C++ class.  Change the factory so
        that it uses pointer-based hashmaps instead of NSMutableDictionaries.
        Convert uses of malloc/free to new/delete so that they start using
        the fastMalloc/fastFree code.

        Reviewed by darin

        * bridge/mac/WebCoreStringTruncator.mm:
        (stringWidth):
        (truncateString):
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.mm:
        (itemTextRenderer):
        (groupLabelTextRenderer):
        (QListBox::sizeForNumberOfLines):
        (QListBox::clearCachedTextRenderers):
        (-[KWQTableView drawRow:clipRect:]):
        * platform/FontDataSet.h:
        * platform/mac/FontMac.mm:
        (WebCore::FontDataSet::~FontDataSet):
        (WebCore::FontDataSet::getRenderer):
        (WebCore::FontDataSet::invalidate):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawLineForText):
        (WebCore::Font::drawLineForMisspelling):
        (WebCore::Font::misspellingLineThickness):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        * platform/mac/WebCoreTextRenderer.mm:
        (WebCoreDrawTextAtPoint):
        (WebCoreTextFloatWidth):
        (WebCoreSetAlwaysUseATSU):
        * platform/mac/WebTextRenderer.h:
        (WebCore::WebTextRenderer::ascent):
        (WebCore::WebTextRenderer::descent):
        (WebCore::WebTextRenderer::lineSpacing):
        (WebCore::WebTextRenderer::lineGap):
        (WebCore::WebTextRenderer::misspellingLineThickness):
        (WebCore::WebTextRenderer::misspellingLinePatternWidth):
        (WebCore::WebTextRenderer::misspellingLinePatternGapWidth):
        * platform/mac/WebTextRenderer.mm:
        (WebCore::WebCoreInitializeFont):
        (WebCore::WebCoreInitializeTextRun):
        (WebCore::WebCoreInitializeEmptyTextStyle):
        (WebCore::WebCoreInitializeEmptyTextGeometry):
        (WebCore::widthForGlyph):
        (WebCore::overrideLayoutOperation):
        (WebCore::m_ATSUMirrors):
        (WebCore::WebTextRenderer::~WebTextRenderer):
        (WebCore::WebTextRenderer::xHeight):
        (WebCore::WebTextRenderer::drawRun):
        (WebCore::WebTextRenderer::floatWidthForRun):
        (WebCore::WebTextRenderer::drawLineForCharacters):
        (WebCore::WebTextRenderer::selectionRectForRun):
        (WebCore::WebTextRenderer::drawHighlightForRun):
        (WebCore::WebTextRenderer::drawLineForMisspelling):
        (WebCore::WebTextRenderer::pointToOffset):
        (WebCore::WebTextRenderer::setAlwaysUseATSU):
        (WebCore::getSmallCapsRenderer):
        (WebCore::findSubstituteFont):
        (WebCore::rendererForAlternateFont):
        (WebCore::computeWidthForSpace):
        (WebCore::setUpFont):
        (WebCore::CG_selectionRect):
        (WebCore::CG_draw):
        (WebCore::updateGlyphMapEntry):
        (WebCore::extendGlyphMap):
        (WebCore::extendWidthMap):
        (WebCore::initializeATSUStyle):
        (WebCore::createATSULayoutParameters):
        (WebCore::disposeATSULayoutParameters):
        (WebCore::addDirectionalOverride):
        (WebCore::ATSU_selectionRect):
        (WebCore::ATSU_draw):
        (WebCore::ATSU_pointToOffset):
        (WebCore::freeWidthMap):
        (WebCore::freeGlyphMap):
        (WebCore::glyphForCharacter):
        (WebCore::advanceWidthIterator):
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        (-[WebTextRendererFactory clearCaches]):
        (-[WebTextRendererFactory init]):
        (-[WebTextRendererFactory dealloc]):
        (-[WebTextRendererFactory rendererWithFont:]):

2006-05-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8653>
        Remove a use of hasMoreThanOneBlock, which uses info from the test rendering.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        Removed code that stopped the merge if the end of the selection to delete
        was in a fully selected line, which was nonsense.
        
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        Deletion does a bad job of updating the endpoints of the selection as it removes 
        content.  If the endpoints have been flip flipped, bail.
        If deletion has removed everything from the block that contained the
        start of the selection to delete, we can't create a visible position inside 
        that block to serve as a destination for the merge.  So, we insert a placeholder 
        at that position to prop the block open to let content in.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Added an assert and two early returns for cases where we'll crash.
        Removed a use of !fragment.hasMoreThanOneBlock, which uses test rendering info 
        and which was wrong.
        If we've already inserted content during the start merge, insertionPos will be 
        the position just after that content, so inserting new content before insertionPos 
        will reverse its order.

2006-05-01  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - manual test for http://bugs.webkit.org/show_bug.cgi?id=8658
          Assertion failure in -[WebPluginContainerCheck _isForbiddenFileLoad]
          (bridge is null) when clicking QuickTime object with href

        * manual-tests/plugin-controller-datasource.html: Added.
        * manual-tests/resources/orange.mov: Added.

2006-04-30  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8651:
        CGContextSetLineDash: invalid dash array: emmited during WebKit tests

        Properly discard invalid stroke-dasharray properties like in
        invalid-css.svg.  (Tests updated.)

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGStrokeDasharray):

2006-04-28  David Hyatt  <hyatt@apple.com>

        Make image buffer sizes in the loader more accurate, since we know we store
        buffers with 4 bytes per pixel.  Double sizes to account for this.  Also
        deal better with animated GIFs that may have thousands of frames by adding
        in a heuristic that will use the data size instead of a single frame RGBA32
        buffer size if it's larger.

        Reviewed by darin

        * loader/Cache.cpp:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):

2006-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by eric.

        No test necessary - fixing Win32 build, turned off C++ exceptions, turned off RTTI

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::~FrameWin):
        * bridge/win/PageWin.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::saveDocumentState):
        (Path::contains):
        (Path::boundingRect):

2006-04-28  David Hyatt  <hyatt@apple.com>

        Merge WebCoreTextRenderer into WebTextRenderer.  Merge WebCoreTextRendererFactory
        into WebTextRendererFactory.  Change all callers to refer to the concrete classes
        now.  Change WebCoreTextRenderer.h to be the public API that WebKit uses when
        it calls in to WebCore.  Clean up the exports to remove things WebKit no longer
        needs.

        Reviewed by darin

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreStringTruncator.mm:
        (stringWidth):
        (truncateString):
        (+[WebCoreStringTruncator widthOfString:font:]):
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.mm:
        (itemTextRenderer):
        (groupLabelTextRenderer):
        (QListBox::sizeForNumberOfLines):
        (-[KWQTableView drawRow:clipRect:]):
        * platform/Font.h:
        * platform/FontDataSet.h:
        * platform/mac/FontMac.mm:
        (WebCore::FontDataSet::getWebCoreFont):
        (WebCore::FontDataSet::getRenderer):
        (WebCore::FontDataSet::determinePitch):
        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreTextRendererFactory.mm:
        (-[WebCoreTextRendererFactory init]):
        * platform/mac/WebTextRenderer.h:
        * platform/mac/WebTextRenderer.mm:
        * platform/mac/WebTextRendererFactory.h:
        * platform/mac/WebTextRendererFactory.mm:
        (WebCoreInitializeFont):
        (WebCoreInitializeTextRun):
        (WebCoreInitializeEmptyTextStyle):
        (WebCoreInitializeEmptyTextGeometry):
        (-[WebTextRendererFactory clearCaches]):
        (+[WebTextRendererFactory createSharedFactory]):
        (+[WebTextRendererFactory sharedFactory]):
        (-[WebTextRendererFactory init]):

2006-04-28  David Hyatt  <hyatt@apple.com>

        Fix for 8586, move WebTextRenderer into WebCore.

        Reviewed by darin

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreStringTruncator.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebCoreTextRenderer.h:
        * platform/mac/WebCoreTextRendererFactory.mm:
        (+[WebCoreTextRendererFactory sharedFactory]):
        * platform/mac/WebTextRenderer.h: Added.
        * platform/mac/WebTextRenderer.mm: Added.
        (widthForGlyph):
        (-[WebTextRenderer initWithFont:]):
        (destroy):
        (-[WebTextRenderer drawLineForCharacters:yOffset:width:color:thickness:]):
        (-[WebTextRenderer drawLineForMisspelling:withWidth:]):
        (findSubstituteFont):
        (setUpFont):
        (pathFromFont):
        (drawGlyphs):
        (CG_draw):
        (extendGlyphMap):
        (extendWidthMap):
        (initializeATSUStyle):
        (createATSULayoutParameters):
        (getTextBounds):
        (addDirectionalOverride):
        (ATSU_draw):
        (normalizeVoicingMarks):
        (advanceWidthIterator):
        (fillStyleWithAttributes):
        * platform/mac/WebTextRendererFactory.h: Added.
        * platform/mac/WebTextRendererFactory.mm: Added.
        (getAppDefaultValue):
        (getUserDefaultValue):
        (getLCDScaleParameters):
        (fontsChanged):
        (+[WebTextRendererFactory createSharedFactory]):
        (-[WebTextRendererFactory isFontFixedPitch:]):
        (-[WebTextRendererFactory fontWithFamily:traits:size:]):
        (FontCacheKeyCopy):
        (-[WebTextRendererFactory cachedFontFromFamily:traits:size:]):

2006-04-28  Eric Seidel  <eseidel@apple.com>

        Fix by beth.  Reviewed by darin.  Landed by eseidel.

        Make hackish fix to avoid crash in Xcode and Filemaker.
        <rdar://problem/4059059> Crash in RenderFlow::detach (XCode Documentation Window)

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge didNotOpenURL:pageCache:]):

2006-04-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=5855
          REGRESSION: revert SGML comment parsing fix (comment parsing causes most of usbank.com page to be missing)

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseComment): Revert one change made for acid2, 
        <http://weblogs.mozillazine.org/hyatt/acid6.txt>.

2006-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=8608
          make GraphicsContext more suitable for cross-platform use, step 2

        - Changed GraphicsContext to use NSGraphicsContext as little as possible.
        - Removed the printing flag from GraphicsContext.
        - Changed GraphicsContext to assume the NSGraphicsContext is always flipped,
          and got rid of parameters to pass the flipped boolean around.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add GraphicsTypes.h/cpp and remove
        CompositeOperator.h/cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::setDisplaysWithFocusAttributes):
        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge drawRect:]):
        * html/CanvasPattern.cpp: (WebCore::patternCallback):
        * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::createDrawingContext):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::createGraphicsContext):
        * platform/mac/WidgetMac.mm: (WebCore::Widget::lockDrawingFocus):
        Update for changes to GraphicsContext constructor (no flipped or printing boolean).

        * html/CanvasRenderingContext2D.h: Added a Path to the context state. Changed the
        LineCap and LineJoin types to use the new ones in GraphicsTypes.h instead of defining
        types here in this class. Changed m_platformContextStrokeStyleIsPattern and
        m_platformContextFillStyleIsPattern to be named m_appliedStrokePattern and
        m_appliedFillPattern and moved them outside the __APPLE__ ifdefs. Removed the
        platformContext() function. Moved applyStrokePattern and applyFillPattern out of
        the __APPLE__ ifdef.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State): Moved the stroke pattern
        booleans out of Mac-specific ifdef.
        (WebCore::CanvasRenderingContext2D::save): Changed to use GraphicsContext instead
        of using CGContext directly.
        (WebCore::CanvasRenderingContext2D::restore): Ditto.
        (WebCore::CanvasRenderingContext2D::setStrokeStyle): Ditto.
        (WebCore::CanvasRenderingContext2D::setFillStyle): Ditto.
        (WebCore::CanvasRenderingContext2D::setLineWidth): Ditto.
        (WebCore::CanvasRenderingContext2D::lineCap): Ditto.
        (WebCore::CanvasRenderingContext2D::setLineCap): Ditto.
        (WebCore::CanvasRenderingContext2D::lineJoin): Ditto.
        (WebCore::CanvasRenderingContext2D::setLineJoin): Ditto.
        (WebCore::CanvasRenderingContext2D::setMiterLimit): Ditto.
        (WebCore::CanvasRenderingContext2D::shadowColor): Ditto.
        (WebCore::CanvasRenderingContext2D::setGlobalAlpha): Ditto.
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation): Ditto.
        (WebCore::CanvasRenderingContext2D::scale): Update since platformContext() function
        no longer exists.
        (WebCore::CanvasRenderingContext2D::rotate): Ditto.
        (WebCore::CanvasRenderingContext2D::translate): Ditto.
        (WebCore::CanvasRenderingContext2D::beginPath): Changed to use GraphicsContext instead
        of using CGContext directly.
        (WebCore::CanvasRenderingContext2D::closePath): Ditto.
        (WebCore::CanvasRenderingContext2D::moveTo): Ditto.
        (WebCore::CanvasRenderingContext2D::lineTo): Ditto.
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo): Ditto.
        (WebCore::CanvasRenderingContext2D::bezierCurveTo): Ditto.
        (WebCore::CanvasRenderingContext2D::arcTo): Ditto.
        (WebCore::CanvasRenderingContext2D::arc): Ditto.
        (WebCore::CanvasRenderingContext2D::rect): Ditto.
        (WebCore::CanvasRenderingContext2D::fill): Changed to use the current path from this class
        instead of relying on the CGContext's current path.
        (WebCore::CanvasRenderingContext2D::stroke): Ditto.
        (WebCore::CanvasRenderingContext2D::clip): Changed to use the current path and use the
        GraphicsContext instead of using CGContext directly.
        (WebCore::CanvasRenderingContext2D::clearRect): Changed to use GraphicsContext instead
        of using CGContext directly.
        (WebCore::CanvasRenderingContext2D::fillRect): Update since platformContext() function
        no longer exists.
        (WebCore::CanvasRenderingContext2D::strokeRect): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadow): Ditto.
        (WebCore::CanvasRenderingContext2D::applyShadow): Ditto.
        (WebCore::CanvasRenderingContext2D::drawImage): Ditto.
        (WebCore::CanvasRenderingContext2D::drawImageFromRect): Ditto.
        (WebCore::CanvasRenderingContext2D::createPattern): Ditto.
        (WebCore::CanvasRenderingContext2D::applyStrokePattern): Made a tiny bit of this function
        cross-platform. The bulk is still Mac-specific.
        (WebCore::CanvasRenderingContext2D::applyFillPattern): Ditto.

        * html/CanvasStyle.h: Changed to use GraphicsContext instead of CGContext. Now the
        platform-specific stuff is in the implementation, not the header.
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor): Moved the ifdefs inside the function, getting
        us one step closer to platform independence.
        (WebCore::CanvasStyle::applyFillColor): Ditto.

        * html/html_imageimpl.cpp:
        (WebCore::HTMLAreaElement::getRect): Update for changes to the Path class.
        (WebCore::HTMLAreaElement::getRegion): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::paint): Change to check printing flag on the document, rather than on
        the GraphicsContext, since there is no printing flag for GraphicsContext any more.
        (WebCore::Frame::adjustPageHeight): Update for change to GraphicsContext constructor.

        * platform/GraphicsContext.h: Define a type called PlatformGraphicsContext so the
        platform-specific getter and constructor don't have to be ifdef'd. Added clearRect,
        strokeRect, setLineWidth, setLineCap, setLineJoin, setMiterLimit, setAlpha, setCompositeOperation,
        and clip functions. Removed the isForPrinting parameter from createGraphicsContextPrivate.
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate): Removed isForPrinting.
        (WebCore::GraphicsContext::createGraphicsContextPrivate): Ditto.
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        Removed NSGraphicsContext.
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        Ditto.
        (WebCore::GraphicsContext::GraphicsContext): Removed constructor that
        takes an NSGraphicsContext. Removed the flipText and forPrinting parameters
        to the other constructor.
        (WebCore::GraphicsContext::savePlatformState): Removed NSGraphicsContext code.
        (WebCore::GraphicsContext::restorePlatformState): Ditto.
        (WebCore::GraphicsContext::drawRect): Updated assertion to more-precisely
        reflect the limitation of the current version of this function.
        (WebCore::GraphicsContext::setColorFromFillColor): Ditto.
        (WebCore::GraphicsContext::setColorFromPen): Ditto.
        (WebCore::GraphicsContext::drawLine): Updated assertion to more-precisely
        reflect the limitation of the current version of this function.
        (WebCore::setCompositeOperation):
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::setLineWidth): Added.
        (WebCore::GraphicsContext::setMiterLimit): Added.
        (WebCore::GraphicsContext::setAlpha): Added.
        (WebCore::GraphicsContext::setCompositeOperation): Added.
        (WebCore::GraphicsContext::clearRect): Added.
        (WebCore::GraphicsContext::strokeRect): Added.
        (WebCore::GraphicsContext::setLineCap): Added.
        (WebCore::GraphicsContext::setLineJoin): Added.
        (WebCore::GraphicsContext::clip): Added.

        * platform/CompositeOperator.cpp: Removed.
        * platform/CompositeOperator.h: Removed.
        * platform/GraphicsTypes.cpp: Added. Includes CompositeOperator, LineCap, and LineJoin.
        * platform/GraphicsTypes.h: Added.

        * platform/Image.h: Changed include to GraphicsTypes.h from CompositeOperator.h.

        * platform/Path.h: Removed constructors that take a Rect and an array of points. Made
        the Path mutable. Changed the types for contains and boundingRect to be float-based
        instead of int-based. Changed translate to take a FloatSize instead of two integers.
        Added clear, moveTo, addLineTo, addQuadCurveTo, addBezierCurveTo, addArcTo, closeSubpath,
        addArc, addRect, addEllipse, and platformPath functions. Defined a PlatformPath type
        so we don't have to ifdef the header so much.
        * platform/cg/PathCG.cpp:
        (WebCore::Path::Path): Changed class to always have a mutable path.
        (WebCore::Path::operator=): Changed to make a mutable copy.
        (WebCore::Path::contains): Changed to take a FloatPoint instead of IntPoint.
        (WebCore::Path::translate): Changed to use a FloatSize instead of two ints.
        (WebCore::Path::boundingRect): Changed to return a FloatRect.
        (WebCore::Path::moveTo): Added.
        (WebCore::Path::addLineTo): Added.
        (WebCore::Path::addQuadCurveTo): Added.
        (WebCore::Path::addBezierCurveTo): Added.
        (WebCore::Path::addArcTo): Added.
        (WebCore::Path::closeSubpath): Added.
        (WebCore::Path::addArc): Added.
        (WebCore::Path::addRect): Added.
        (WebCore::Path::addEllipse): Added.
        (WebCore::Path::clear): Added.

        * platform/mac/ImageMac.mm:
        (WebCore::fillSolidColorInRect): Changed to take a GraphicsContext instead of
        a CGContext.
        (WebCore::Image::checkForSolidColor): Changed to use the new setCompositeOperation
        in GraphicsContex.
        (WebCore::Image::draw): Changed to use the new PDF image and fillSolidColorInRect
        function that take GraphicsContext instead of CGContext.
        (WebCore::Image::drawTiled): Ditto.

        * platform/mac/PDFDocumentImage.h: Made most functions private. Changed to
        use GraphicsContext and FloatRect instead of CGContext and NSRect. Also
        removed the unused alpha and flipped booleans.
        * platform/mac/PDFDocumentImage.mm:
        (WebCore::PDFDocumentImage::bounds): Update for change in types.
        (WebCore::PDFDocumentImage::adjustCTM): Ditto.
        (WebCore::PDFDocumentImage::setCurrentPage): Ditto.
        (WebCore::PDFDocumentImage::draw): Ditto.

        * platform/win/TemporaryLinkStubs.cpp: Added lots of new stubs.

        * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paint): Changed to get
        printing boolean from document instead graphics context.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren): Ditto.
        (WebCore::RenderBlock::paintObject): Ditto.
        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::paintLines): Ditto.
        * rendering/RenderHTMLCanvas.cpp: (WebCore::RenderHTMLCanvas::paint): Ditto.
        * rendering/RenderImage.cpp: (WebCore::RenderImage::paint): Ditto.
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintButton): Ditto.
        * rendering/render_list.cpp: (WebCore::RenderListMarker::paint): Ditto.
        * rendering/render_replaced.cpp: (WebCore::RenderWidget::paint): Ditto.

2006-04-28  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6769
          REGRESSION: Incomplete repaint when a cell's extra bottom margin grows

        Test: fast/repaint/table-extra-bottom-grow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowRect): Changed to not add the top/left overflow twice and
        allow the normal overflow height to overlap with the bottom extra height.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout): Removed the code that resets the extra heights.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): If the top extra height changed or the
        bottom extra height increased, just repaint the entire cell.

2006-04-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Remove KCanvasContainerQuartz, pushing all logic into KCanvasContainer.
        
        No tests affected.

        * kcanvas/KCanvasContainer.cpp:
        (WebCore::KCanvasContainer::canHaveChildren):
        (WebCore::KCanvasContainer::requiresLayer):
        (WebCore::KCanvasContainer::lineHeight):
        (WebCore::KCanvasContainer::baselinePosition):
        (WebCore::KCanvasContainer::calcMinMaxWidth):
        (WebCore::KCanvasContainer::layout):
        (WebCore::KCanvasContainer::paint):
        (WebCore::KCanvasContainer::setViewport):
        (WebCore::KCanvasContainer::viewport):
        (WebCore::KCanvasContainer::setViewBox):
        (WebCore::KCanvasContainer::viewBox):
        (WebCore::KCanvasContainer::setAlign):
        (WebCore::KCanvasContainer::align):
        (WebCore::KCanvasContainer::viewportTransform):
        (WebCore::KCanvasContainer::getAbsoluteRepaintRect):
        (WebCore::KCanvasContainer::absoluteTransform):
        (WebCore::KCanvasContainer::getAspectRatio):
        * kcanvas/KCanvasContainer.h:
        (WebCore::KCanvasContainer::renderName):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::createPaintServer):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer):
        * ksvg2/svg/SVGGElement.cpp:
        (SVGGElement::createRenderer):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createRenderer):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::createRenderer):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::createRenderer):
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::createRenderer):

2006-04-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Make WebCore accept any */*+xml type as XML.
        http://bugs.webkit.org/show_bug.cgi?id=5998
        <rdar://problem/4031511> XmlHttpRequest doesn't allow responses with Content-Type: application/soap+xml

        Test: http/tests/xmlhttprequest/supported-xml-content-types.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::isXMLMIMEType):

2006-04-27  Eric Seidel  <eseidel@apple.com>

        * WebCore.vcproj/WebCore/WebCore.vcproj: Fix break from last checkin.

2006-04-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Added global constructor autogeneration for the following,
        many of which are required by *.live.com: Node, Element, Range,
        CSSRule, CSSValue, CSSPrimitiveValue, CSSStyleDeclaration, Event,
        MutationEvent, NodeFilter

        It works like so:
        
        - The autogenerator knows about the "Constructor" data type, which
        gets special treatment because it exists purely in the
        bindings. It also knows about the "GenerateConstructor" interface
        attribute, which does just that.

        - The window interface has many Constructor attributes

        - The hash table generator swizzles empty tables to tables with one
        empty bucket, to prevent crashes in Lookup::findEntry. (The old
        generator used to work this way, too.)

        - Window object property lookup gets special treatment to allow
        shadowing of its built-in global constructor properties. We'll
        need to expand this mechanism in the future and make it more
        flexible, but it works for now.
        
        * DerivedSources.make:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_css.cpp:
        (KJS::toJS):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_window.cpp: Removed 'namedFrameGetter' and its use
        because they were bogus; added FIXME describing what they were
        attempting to do.
        (KJS::Window::getValueProperty):
        (KJS::Window::getOverridePropertySlot):
        (KJS::Window::getOwnPropertySlot):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl: Added.
        * css/CSSValue.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/MutationEvent.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/Range.idl:
        * page/DOMWindow.idl:

2006-04-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8607>
        Automate repaint tests

        * manual-tests/backgroundSizeRepaint.html: Removed.
        * manual-tests/border-repaint-glitch.html: Removed.
        * manual-tests/bugzilla-3509.html: Removed.
        * manual-tests/bugzilla-5699.html: Removed.
        * manual-tests/bugzilla-6278.html: Removed.
        * manual-tests/bugzilla-6388.html: Removed.
        * manual-tests/bugzilla-6473.html: Removed.
        * manual-tests/bugzilla-7235.html: Removed.
        * manual-tests/inline-outline-repaint.html: Removed.
        * manual-tests/outline-repaint-glitch.html: Removed.
        * manual-tests/repaint-resized-overflow.html: Removed.
        * manual-tests/table-cell-move.html: Removed.

2006-04-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8624>
        Placeholders aren't always removed during paste
        <rdar://problem/4059807>
        Seed: Mail: pasting quoted content sometimes adds a phantom newline

        * editing/CompositeEditCommand.cpp: Added a FIXME.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Removed two no-op setEndingSelection calls.
        Store away a br at the position where we'll start inserting content in case the 
        br a) is made unnecessary by the insertion (it's collapsed away) b) was acting 
        as a placeholder and should therefore be displaced by inserted content or c) was
        acting as a line break and, as a result of the insertion, is now acting as a 
        placeholder.  
        Don't only store away brs that have the webkit-block-placeholder class on them.
        Any br that does any of the three things just mentioned should be removed.
        The linePlaceholder removal was run after the code that makes sure to interpret 
        incoming brs strictly, and was negating that work in certain cases.
        
        (WebCore::ReplaceSelectionCommand::removeEndBRIfNeeded): Described above.
        * editing/ReplaceSelectionCommand.h:
        * editing/VisiblePosition.cpp:
        (WebCore::isEqualIgnoringAffinity): 
        Added a workaround for 8622.  We want this function to return true even if one of 
        the two visible positions has been incorrectly canonicalized.

2006-04-26  Tim Omernick  <timo@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/4068375> Flash inserted via innerHTML Fails to Show when CSS Display
        Style is Toggled via Javascript

        * html/html_objectimpl.cpp:
        (WebCore::HTMLObjectElement::setComplete):
        Set needWidgetUpdate when finished parsing, even if the object element is not in
        a document.  That way, when the element attaches to a document, it will update its
        widget (creating the plug-in view if necessary).  This is important when the object
        is being inserted via setInnerHTML, since the parsed nodes are not added to the
        document until the whole HTML string is parsed.

2006-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Hyatt.

        - Fixed http://bugs.webkit.org/post_bug.cgi
        REGRESSION (r14048): Google calendar not parsing
        
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Rolling out grandparent NULL check
        because it caused this regression and there's no test case
        justifying it.
        
2006-04-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by hyatt
        
        <http://bugs.webkit.org/show_bug.cgi?id=8459>
        REGRESSION: Content lost during a delete/merge of whitespace:pre text

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::prune): 
        The function would prune a rendered leaf because it assumed that the 
        first node passed to it would be a container.
        The old code ascended using the DOM tree, and would remove the <b> when
        pruning the <div> in <b><div></div>foo</b>.  Now ascends using the render tree.

2006-04-26  Geoffrey Garen  <ggaren@apple.com>

        This time for sure. Fixed Windows build too.
        
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2006-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO.

        Build fix.

        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_domnode.h:

2006-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by OMG DETHBAKIN.

        - Start autogenerating Node. This fixes many missing attributes in our
        DOM by making prototypes hold their relevant constants as properties.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/kjs_dom.cpp:
        (KJS::DOMEventTargetNode::DOMEventTargetNode):
        (KJS::toJS):
        * bindings/js/kjs_dom.h:
        (KJS::DOMEventTargetNode::):
        * bindings/js/kjs_domnode.h: Had to break DOMNode into a separate
        header to avoid circular dependency in header includes. Gave it an
        old-school file name to keep distinguishing beteween old school and
        news school files easy.
        (KJS::DOMNode::impl):
        (KJS::DOMNode::classInfo):
        (KJS::DOMNode::):
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/DocumentType.idl:
        * dom/Entity.idl:
        * dom/Node.idl: Added.
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:

2006-04-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        Committing the project file change jhaygood suggesed in
        http://bugs.webkit.org/show_bug.cgi?id=8044
        WebKit Visual Studio 2005 project shouldn't use the SolutionDir
        
        Instead of his patch, I used the following commands:

        sed -e 's/$(SolutionDir)/$(ProjectDir)\\../g' Image\ Viewer/Image\
        Viewer.vcproj > Image\ Viewer/Image\ Viewer.vcproj_ && mv Image\
        Viewer/Image\ Viewer.vcproj_ Image\ Viewer/Image\ Viewer.vcproj

        sed -e 's/$(SolutionDir)/$(ProjectDir)\\../g'
        WebCore/WebCore.vcproj > WebCore/WebCore.vcproj_ && mv
        WebCore/WebCore.vcproj_ WebCore/WebCore.vcproj

        * Viewer.vcproj:
        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-04-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=8583>
        Moving paste code around and some small fixes
        
        Moved code to make it easier to do the start merge after the fact, 
        with moveParagraph, instead of in the middle of the paste operation.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::shouldMergeStart):
        Moved code to make this decision to its own function.  Moved special case
        checks to the top.  Added m_forceMergeStart to override the special cases 
        because moveParagraph uses ReplaceSelectionCommand and expects a merge.
        
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd): 
        No functional changes, just moved code here.
        (WebCore::ReplaceSelectionCommand::doApply):
        Do the end merge in the opposite direction.  Merging two paragraphs destroys
        the moved one's block level styles, and we prefer to use the styles of the 
        one that was in the document, not the one that's being pasted.
        
        * editing/ReplaceSelectionCommand.h:
        * editing/Selection.h:
        (WebCore::Selection::visibleStart): Added.
        (WebCore::Selection::visibleEnd): Added.
        * editing/htmlediting.cpp:
        (WebCore::enclosingList): Added.
        (WebCore::isMailBlockquote): 
        Don't require a renderer so that this can be used on nodes in fragments.
        
        * editing/htmlediting.h:

2006-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Removed special handling of attributes in the DOM. To match
        WinIE, we used to make all attributes available as properties of
        their elements in the DOM, but that has caused us more
        compatibility woes than it has solved, so, after talking with Darin
        and Maciej, I'm taking it out. (Firefox does not support it.)

        A layout test regression caused by this change led me to do the
        following as well:
        
        - Implemented DOM properties missing on EMBED elements: align, height,
        name, width, src, type. Since align, height, name, and width are
        common to all plugin elements, I factored them and some other common
        functionality out into a new abstract base class, HTMLPlugInElement.

        - Removed extraneous attribute-to-style mappings on EMBED elements:
        valign, border. Why they were there in the first place is a question
        for the ages. Neither FF nor IE supports them.

        * bindings/js/kjs_dom.cpp:
        (KJS::getRuntimeObject):
        * bindings/js/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        (KJS::JSHTMLElement::embedGetter):
        (KJS::JSHTMLElement::embedSetter):
        * bindings/js/kjs_html.h:
        (KJS::JSHTMLElement::):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Element.idl:
        * html/html_objectimpl.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::align):
        (WebCore::HTMLPlugInElement::setAlign):
        (WebCore::HTMLPlugInElement::height):
        (WebCore::HTMLPlugInElement::setHeight):
        (WebCore::HTMLPlugInElement::name):
        (WebCore::HTMLPlugInElement::setName):
        (WebCore::HTMLPlugInElement::width):
        (WebCore::HTMLPlugInElement::setWidth):
        (WebCore::HTMLPlugInElement::mapToEntry):
        (WebCore::HTMLPlugInElement::parseMappedAttribute):
        (WebCore::HTMLPlugInElement::checkDTD):
        (WebCore::HTMLAppletElement::HTMLAppletElement):
        (WebCore::HTMLAppletElement::~HTMLAppletElement):
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        (WebCore::HTMLAppletElement::insertedIntoDocument):
        (WebCore::HTMLAppletElement::removedFromDocument):
        (WebCore::HTMLAppletElement::getInstance):
        (WebCore::HTMLAppletElement::closeRenderer):
        (WebCore::HTMLAppletElement::detach):
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::~HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::getInstance):
        (WebCore::HTMLEmbedElement::mapToEntry):
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::attach):
        (WebCore::HTMLEmbedElement::detach):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::removedFromDocument):
        (WebCore::HTMLEmbedElement::src):
        (WebCore::HTMLEmbedElement::setSrc):
        (WebCore::HTMLEmbedElement::type):
        (WebCore::HTMLEmbedElement::setType):
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        (WebCore::HTMLObjectElement::getInstance):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        (WebCore::HTMLObjectElement::attach):
        (WebCore::HTMLObjectElement::closeRenderer):
        (WebCore::HTMLObjectElement::detach):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        (WebCore::HTMLObjectElement::recalcStyle):
        * html/html_objectimpl.h:
        (WebCore::HTMLPlugInElement::endTagRequirement):
        (WebCore::HTMLAppletElement::tagPriority):
        (WebCore::HTMLEmbedElement::tagPriority):
        (WebCore::HTMLObjectElement::tagPriority):

2006-04-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/4518632> getComputedStyle returns 'auto' 
        for dimensions like 'margin-left'

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): For 
        margin and padding, to match Firefox we now go to the renderer to 
        get the property value instead of calling valueForLength() on the 
        style attribute. valueForLength() will return the string 'auto' if 
        that was what was specified in the CSS, or a percentage if it was 
        specified as a percent. But to match Firefox, we always want to 
        return a pixel value for margin and padding.

2006-04-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin.  Landed by eseidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8452
          mangleme(0x58c22e11): Random crashes

        Test: fast/frames/empty-cols-attribute.html

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toLengthArray): If the string is empty, return 0
        but set len to 1. This gives the same behavior you get if you don't specify
        the attribute at all, matching WinIE and Firefox. Previously, the empty
        string resulted in len being set to 0 (and a memory smasher in
        RenderFrameSet::layout()).
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::layout): Added an assert.

2006-04-26  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed by eseidel.  Landed by eseidel.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::operator<<):
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCComponentTransferFunction::KCComponentTransferFunction):
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::getVectorForChannel):
        (WebCore::genImageFromTable):
        (WebCore::filterForComponentFunc):
        (WebCore::setParametersForComponentFunc):
        (WebCore::getFilterForFunc):
        (WebCore::KCanvasFEComponentTransferQuartz::getFunctionFilter):
        (WebCore::KCanvasFEComponentTransferQuartz::getCIFilter):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::createFilterEffect):
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.h: Added.
        * kcanvas/device/quartz/filters/WKComponentMergeFilter.m: Added.
        (+[WKComponentMergeFilter initialize]):
        (+[WKComponentMergeFilter filterWithName:]):
        (-[WKComponentMergeFilter init]):
        (-[WKComponentMergeFilter outputImage]):
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.h: Added.
        * kcanvas/device/quartz/filters/WKDiscreteTransferFilter.m: Added.
        (+[WKDiscreteTransferFilter initialize]):
        (+[WKDiscreteTransferFilter filterWithName:]):
        (-[WKDiscreteTransferFilter init]):
        (-[WKDiscreteTransferFilter outputImage]):
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.h: Added.
        * kcanvas/device/quartz/filters/WKGammaTransferFilter.m: Added.
        (+[WKGammaTransferFilter initialize]):
        (+[WKGammaTransferFilter filterWithName:]):
        (-[WKGammaTransferFilter init]):
        (-[WKGammaTransferFilter outputImage]):
        * kcanvas/device/quartz/filters/WKIdentityTransferFilter.h: Added.
        * kcanvas/device/quartz/filters/WKIdentityTransferFilter.m: Added.
        (+[WKIdentityTransferFilter initialize]):
        (+[WKIdentityTransferFilter filterWithName:]):
        (-[WKIdentityTransferFilter init]):
        (-[WKIdentityTransferFilter outputImage]):
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.h: Added.
        * kcanvas/device/quartz/filters/WKLinearTransferFilter.m: Added.
        (+[WKLinearTransferFilter initialize]):
        (+[WKLinearTransferFilter filterWithName:]):
        (-[WKLinearTransferFilter init]):
        (-[WKLinearTransferFilter outputImage]):
        * kcanvas/device/quartz/filters/WKTableTransferFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKTableTransferFilter.h: Added.
        * kcanvas/device/quartz/filters/WKTableTransferFilter.m: Added.
        (+[WKTableTransferFilter initialize]):
        (+[WKTableTransferFilter filterWithName:]):
        (-[WKTableTransferFilter init]):
        (-[WKTableTransferFilter outputImage]):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::parseMappedAttribute):
        (SVGComponentTransferFunctionElement::transferFunction):

2006-04-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Make trunk match the branch.  Now nodes are fully removed
        from the tree before calling detach.  There is (thankfully) no
        good way to test this, as no one should depend on this behavior.
        This change was made are part of fixing:
        <rdar://problem/4427024> repro crash on www.formassembly.com in khtml::RenderBlock::addChildToFlow
        <rdar://problem/4233435> CrashTracer: 2698 crashes in Safari at com.apple.WebCore: khtml::RenderBlock::addChildToFlow + 156
        on the branch.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2006-04-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - don't have a fini method, since trying to call it will actually call the subclass method
        and mess up the bridge count.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge finalize]):

2006-04-25  Steve Falkenburg  <sfalkenburg@apple.com>

        Reviewed by eseidel.

        No test case needed

        * platform/win/TemporaryLinkStubs.cpp:
        (KWQFileButton::setFrameGeometry):

2006-04-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix reproducible crash in html parser code.
        http://bugs.webkit.org/show_bug.cgi?id=7137

        Test: fast/parser/remove-current-node-parent.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):

2006-04-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=8575
        New KWQFileButton leaks reported by buildbot

        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton): Add a missing release

2006-04-24  David Hyatt  <hyatt@apple.com>

        Fix for 8336, focus ring redrawing on top of itself.  Make sure
        not to include empty rects when doing the focus ring drawing, since
        that results in a draw with no clip set.

        Reviewed by adele

        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):

2006-04-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Fix for 5th worst unresolved crasher:
        <rdar://problem/4129744> [REGRESSION]CrashTracer: ..400 crashes at com.apple.WebCore: DOM::NodeImpl::createRendererIfNeeded + 44

        Test: fast/dom/remove-style-element.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2006-04-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Speculative fix for our 7th worst crasher.
        Also added ASSERTs to help us better understand the issue.
        <rdar://problem/4153404> CrashTracer: 2412 crashes in Safari at com.apple.WebCore: khtml::RenderStyle::RenderStyle[unified] + 44

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::setInPageCache):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2006-04-24  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4503438> REGRESSION (NativeTextField): Can't insert caret when 
        selection is active in field (Business/Unit)

        * css/html4.css: Added -webkit-user-select:text for input elements.

2006-04-24  Maciej Stachowiak  <mjs@apple.com>

        Build fix:
        
        - move some prematurely moved code back

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge fini]):

2006-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - move more code from WebFrameBridge to WebCoreFrameBridge

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge domain]):
        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
        (-[WebCoreFrameBridge fini]):
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge finalize]):
        (_getPreSmartSet):
        (_getPostSmartSet):
        (-[WebCoreFrameBridge isCharacterSmartReplaceExempt:isPreviousCharacter:]):
        (-[WebCoreFrameBridge _retrieveKeyboardUIModeFromPreferences:]):
        (-[WebCoreFrameBridge keyboardUIMode]):

2006-04-24  Adele Peterson  <adele@apple.com>

        Reviewed by Tim O.

        Fix to send textFieldDidBeginEditing on the first editing change instead of on focus.
        This matches our old behavior.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::dispatchFocusEvent):
        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::subtreeHasChanged):

2006-04-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by Eric.

        Fix for <rdar://problem/4513383> REGRESSION: Crash in 
        WebCore::shouldEmitTabBeforeNode() when iterating through document 
        text

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitTabBeforeNode): Need to nil-check the renderer.

2006-04-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        * bindings/scripts/CodeGeneratorJS.pm: Removed confusing 'JS' prefix
        from string descriptions of DOM prototypes, so the prototype for, e.g.,
        Document serializes as 'Document,' not 'JSDocument.'

2006-04-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Took the larger snippets of C++ in the code generator and broke
        them into HERE documents in the hopes of improving readability.
        
        * bindings/scripts/CodeGeneratorJS.pm: I indented variable names
        level with their corresponding HERE documents to clearly
        "sandwich" the HERE documents between opening and closing EOF
        statements.

2006-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - push WebFileButton and WebStringTruncator code down to WebCore
        http://bugs.webkit.org/show_bug.cgi?id=8552

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreStringTruncator.h: Added.
        * bridge/mac/WebCoreStringTruncator.mm: Added.
        (stringWidth):
        (truncateString):
        (+[WebCoreStringTruncator widthOfString:font:]):
        * bridge/mac/WebCoreViewFactory.h:
        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (-[WebFileChooserButton initWithWidget::]):
        (-[WebCoreFileButton positionButton]):
        (-[WebCoreFileButton initWithWidget:]):
        (-[WebCoreFileButton initWithFrame:]):
        (-[WebCoreFileButton dealloc]):
        (-[WebCoreFileButton isFlipped]):
        (-[WebCoreFileButton drawRect:]):
        (-[WebCoreFileButton updateLabel]):
        (-[WebCoreFileButton setFilename:]):
        (-[WebCoreFileButton filename]):
        (-[WebCoreFileButton setFrameSize:]):
        (-[WebCoreFileButton bestVisualFrameSizeForCharacterCount:]):
        (-[WebCoreFileButton visualFrame]):
        (-[WebCoreFileButton setVisualFrame:]):
        (-[WebCoreFileButton baseline]):
        (-[WebCoreFileButton beginSheet]):
        (-[WebCoreFileButton chooseFilename:]):
        (-[WebCoreFileButton cancel]):
        (-[WebCoreFileButton chooseButtonPressed:]):
        (-[WebCoreFileButton mouseDown:]):
        (-[WebCoreFileButton acceptsFirstResponder]):
        (-[WebCoreFileButton becomeFirstResponder]):
        (-[WebCoreFileButton nextKeyView]):
        (-[WebCoreFileButton previousKeyView]):
        (-[WebCoreFileButton nextValidKeyView]):
        (-[WebCoreFileButton previousValidKeyView]):
        (-[WebCoreFileButton performClick]):
        (-[WebFileChooserButton initWithWidget:]):
        (-[WebFileChooserButton nextValidKeyView]):
        (-[WebFileChooserButton previousValidKeyView]):
        (-[WebFileChooserButton resignFirstResponder]):
        (KWQFileButton::KWQFileButton):
        (KWQFileButton::setFilename):
        (KWQFileButton::click):
        (KWQFileButton::sizeForCharacterWidth):
        (KWQFileButton::frameGeometry):
        (KWQFileButton::setFrameGeometry):
        (KWQFileButton::baselinePosition):
        (KWQFileButton::filenameChanged):

2006-04-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - remove WebCoreCookieAdapter, instead make mac implementation of
        CookieJar use Foundation directly.

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        * platform/mac/WebCoreCookieAdapter.h: Removed.
        * platform/mac/WebCoreCookieAdapter.m: Removed.

2006-04-21  Rob Buis  <buis@kde.org>

        Reviewed by hyatt.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8170:
        SVG CSS property values with extra items do not get treated
        as invalid (they should)

        Fixes the handling of invalid svg css properties similar
        to how invalid html css properties are handled, ie. discard
        the property if there are more values in the value list than
        expected.

        Test: svg/custom/invalid-css.svg

        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2006-04-23  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed by mjs.  Landed by eseidel.

        http://bugs.webkit.org/show_bug.cgi?id=8517
        No test necessary, no functional change.

        * DerivedSources.make: use VPATH more consistently.

2006-04-23  Jon Shier  <jshier@iastate.edu>
        
        Reviewed by ggaren.  Landed by eseidel.
        
        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8511
        onerror JS property does not register listener properly

        Test: fast/dom/onerror-img.html       
 
        * bindings/js/kjs_dom.cpp:  
        (KJS::DOMEventTargetNode::getValueProperty): changed khtmlErrorEvent to errorEvent.
        (KJS::DOMEventTargetNode::putValueProperty): ditto.
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty): ditto.
        (KJS::Window::put):
        * dom/EventNames.h: Removed khtmlError macro.
        
2006-04-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Reproducible crasher with <li value=1234567890 type=A>
        http://bugs.webkit.org/show_bug.cgi?id=8542

        Fixed our alphabetical list generation to match WinIE (not FireFox)
        Previously our alphabetical lists were completely wrong past 26 items.

        Tests:
        * fast/lists/alpha-list-wrap.html
        * fast/lists/li-style-alpha-huge-value-crash.html

        * rendering/render_list.cpp:
        (WebCore::toLetterString):
        (WebCore::toHebrew):
        (WebCore::RenderListMarker::calcMinMaxWidth):

2006-04-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Finished autogeneration of Element

        * bindings/js/kjs_dom.cpp: Removed DOMElement class
        * bindings/js/kjs_dom.h: ditto
        * bindings/scripts/CodeGeneratorJS.pm: added support for special
        attribute lookup that elements do
        * dom/Element.idl: added new attribute, 
        "IncludeAttributesInPropertyLookup," which tells the code generator 
        to include HTML element attributes in property lookup

2006-04-22  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8529
          Extra Qaulification in header
        - fix http://bugs.webkit.org/show_bug.cgi?id=8530
          Missing assert.h include

        * rendering/RenderObject.h: Removed erroneous RenderObject::
        prefix from a member function name.
        * rendering/RenderText.h: Removed erroneous RenderText::
        prefix from a member function name.

        * platform/Arena.cpp: Added <assert.h> to list of includes.
        * platform/KURL.cpp: Ditto.
        * platform/StringImpl.cpp: Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Ditto.
        * platform/image-decoders/png/PNGImageDecoder.cpp: Ditto.

2006-04-22  Darin Adler  <darin@apple.com>

        * doc: Added.

2006-04-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - push down a bunch of WebCoreFrameBridge code to C++ (plus some reformatting)

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isDescendantOfFrame:]):
        (-[WebCoreFrameBridge traverseNextFrameStayWithin:]):
        (-[WebCoreFrameBridge nextFrameWithWrap:]):
        (-[WebCoreFrameBridge previousFrameWithWrap:]):
        (+[WebCoreFrameBridge bridgeForDOMDocument:]):
        (-[WebCoreFrameBridge parent]):
        (-[WebCoreFrameBridge addData:]):
        (-[WebCoreFrameBridge didNotOpenURL:pageCache:]):
        (-[WebCoreFrameBridge restoreDocumentState]):
        (-[WebCoreFrameBridge _stringWithDocumentTypeStringAndMarkupString:]):
        (-[WebCoreFrameBridge nodesFromList:]):
        (-[WebCoreFrameBridge markupStringFromNode:nodes:]):
        (-[WebCoreFrameBridge markupStringFromRange:nodes:]):
        (-[WebCoreFrameBridge rangeByExpandingSelectionWithGranularity:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]):
        (-[WebCoreFrameBridge rangeByAlteringCurrentSelection:verticalDistance:]):
        (-[WebCoreFrameBridge alterCurrentSelection:verticalDistance:]):
        (-[WebCoreFrameBridge replaceMarkedTextWithText:]):
        (-[WebCoreFrameBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge decreaseSelectionListLevel]):
        (-[WebCoreFrameBridge insertLineBreak]):
        (-[WebCoreFrameBridge insertParagraphSeparator]):
        (-[WebCoreFrameBridge insertParagraphSeparatorInQuotedContent]):
        (-[WebCoreFrameBridge insertText:selectInsertedText:]):
        (-[WebCoreFrameBridge deleteSelectionWithSmartDelete:]):
        (-[WebCoreFrameBridge ensureSelectionVisible]):
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:allowShadowContent:]):
        * page/Frame.cpp:
        (WebCore::Frame::nodeInfoAtPoint):
        (WebCore::Frame::hasSelection):
        (WebCore::Frame::documentTypeString):
        * page/Frame.h:
        * page/FrameTree.cpp:
        (WebCore::FrameTree::traverseNextWithWrap):
        (WebCore::FrameTree::traversePreviousWithWrap):
        (WebCore::FrameTree::deepLastChild):
        * page/FrameTree.h:

2006-04-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6141 
        DOMCSSPrimitiveValue is always returning values in pixels when 
        using getComputedStyle:

        getFloatValue() took a unit type as a parameter, ignored it, and 
        returned m_value.num. This patch writes a second version of the 
        function that actually converts m_value.num to the specified unites 
        before returning it. Where a conversion is not required, I removed 
        the unit type from the caller so that it would go directly to the 
        inline version of the function.

        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthFloat): Remove type 
        parameter since a conversion is not needed.
        (WebCore::scaleFactorForConversion): Helper function for 
        conversion.
        (WebCore::CSSPrimitiveValue::getFloatValue): This version of 
        getFloatValue() takes a unit type parameter and converts 
        m_value.num.
        * css/css_valueimpl.h:
        (WebCore::CSSPrimitiveValue::getFloatValue): This version does not 
        take a parameter and just returns m_value.num.
        * css/cssparser.cpp:
        (WebCore::BorderImageParseContext::commitBorderImage): Remove type 
        parameter since a conversion is not needed.
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength): Same.
        (WebCore::CSSStyleSelector::applyProperty): Same.
        (WebCore::CSSStyleSelector::mapBackgroundSize): Same.
        (WebCore::CSSStyleSelector::mapBackgroundXPosition): Same.
        (WebCore::CSSStyleSelector::mapBackgroundYPosition): Same.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Same.
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty): Same.
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::cssPrimitiveToLength): Same.

2006-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=8509
        javascript:document.importNode(null)
        
        * dom/Document.cpp:
        (WebCore::Document::importNode): Throw an error if the node is null.
        This happens when the object provided in the JavaScript call is not
        a node.
        (WebCore::Document::adoptNode): Set the DOM exception code in all error
        cases instead of just a few, because that's what the spec requires.

2006-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=8510
        submit event doesn't bubble - it's supposed to.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Added recognition for the
        onsubmit attribute, so elements can use it
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareSubmit): Changed bubbling attribute
        to 'true'

2006-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by TimO.

        - Fixed: error event does not bubble

        I discovered this bug while working on the "submit event does not
        bubble" bug. The DOM spec says the event should bubble, and that's how
        it works in Firefox.

        The DOM Spec also says that the error event is "valid for
        OBJECT elements, BODY elements, and FRAMESET element." But it doesn't
        say "valid ONLY." Firefox supports it on all elements and web
        developers tend to think it will work for things like <img> and
        <script>, so I went whole hog here.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Make onerror a mapped
        attribute for all elements, so containing elements can register for
        the event.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished): make onerror bubble
        * html/html_headimpl.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute): Remove special
        case for onerror because HTMLElement will take care of it
        (WebCore::HTMLScriptElement::notifyFinished): make onerror bubble
        * html/html_imageimpl.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Remove special
        case for onerror because HTMLElement will take care of it

2006-04-21  Adele Peterson  <adele@apple.com>

        Test for: http://bugs.webkit.org/show_bug.cgi?id=8181
        REGRESSION: After tabbing in page's field, attempting to tab from Google toolbar search to page fails on first try

        * manual-tests/tabbing-input-google.html: Added.

2006-04-21  Kevin M. Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8507
          Compilation fixes for building on gcc 4.0.2, and without precomp headers

        * platform/Cursor.h: Created a fallback case that typedefs PlatformCursor
        to void * if it isn't defined to anything else. (Useful to help get new ports
        initially compiling.)
        
        * bindings/js/kjs_window.cpp:
        * rendering/RenderTextField.cpp:
        * rendering/RenderBox.cpp:
        Add missing headers to resolve issues when compiling without precompiled
        headers.
        
        * rendering/RenderText.h: Declare the InlineTextBox class before 
        friend declaration to resolve compilation issues with gcc 4.0.2.
        
2006-04-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=8213
        REGRESSION: Can't tab out of text field if iframe comes after it

        Test: fast/forms/tabbing-input-iframe.html

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::nextKeyViewInFrame):
          If the next focusable node is a RenderWidget without a view, then continue in the loop.  We used to break out in this case. 
          I also made some formatting changes and reorganized the function to make it easier to read.

2006-04-21  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=8496
        REGRESSION: Dragging to select text around a text field causes the text field to scroll.

        Test: manual-tests/text-field-autoscroll.html

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::handleMouseMoveEvent): Start the frame's autoscroll timer
        even when we're calling over the bridge to handle the autoscroll.
        * page/Frame.cpp: (WebCore::Frame::stopAutoscrollTimer): Clear out pointer to layer.

2006-04-21  Geoffrey Garen  <ggaren@apple.com>

        - And again.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-04-21  Geoffrey Garen  <ggaren@apple.com>

        - Futile attempt to fix Windows build.
        
        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-04-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Added autogeneration of JS bindings for CSSRule, CSSValue,
        Event, and NodeFilter.  

        - Made related prototype objects hold the relevant constants, to
        match Mozilla and the DOM 2 spec. (Previously, only the related
        constructor objects held those constants, in accordance with the
        DOM 3 spec.)

        - Fixed up remaining Windows build issues.

        * DerivedSources.make: Added new autogenerated files
        * WebCore.xcodeproj/project.pbxproj: ditto
        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSRule::classInfo):
        (KJS::DOMCSSRule::getOwnPropertySlot): scope call to classInfo()
        because it's virtual and DOMCSSRule has a derrived class now.
        (KJS::DOMCSSRule::put): ditto
        (KJS::DOMCSSRuleFunc::callAsFunction):
        (KJS::toJS):
        * bindings/js/kjs_css.h:
        * bindings/js/kjs_events.cpp:
        (KJS::toJS):
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        (KJS::OptionConstructorImp::OptionConstructorImp):
        * bindings/js/kjs_traversal.cpp:
        (KJS::toJS):
        * bindings/js/kjs_traversal.h:
        * bindings/js/kjs_window.cpp: 
        (KJS::Window::getValueProperty): added CSSValue global object
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Changed generator to write
        constants to prototype objects (previously only wrote constants to
        constructor objects)
        * css/CSSPrimitiveValue.idl: Removed LegacyParent since CSSValue now
        exists in IDL
        * css/CSSRule.idl: Added.
        * css/CSSValue.idl: Added.
        * css/css_ruleimpl.h:
        (WebCore::CSSRule::):
        * css/css_valueimpl.h:
        * dom/Event.idl: Added.
        * dom/MutationEvent.idl: Removed LegacyParent since Event now exists
        in IDL
        * dom/NodeFilter.idl: Added.
        * dom/UIEvent.idl: Removed LegacyParent since event now exists in IDL
        * dom/dom2_eventsimpl.h:
        (WebCore::Event::):

2006-04-21  Darin Adler  <darin@apple.com>

        - one more attempt to fix Windows build

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect): Update to use Color and match
        the similar function on GraphicsContextMac.

2006-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8495 
        REGRESSION: Sidebar on cnn.com is hosed

        * platform/mac/ImageMac.mm:
        (WebCore::Image::drawTiled): Use the size of the destination rect, 
        not the oneTileRect in the no-pattern case.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended): Initialize 
        scaledWidth and scaledHeight to the appropriate value (was wrong in 
        scroll case), adjust position at appropriate times, and take out 
        no-repeat clause for now since we don't have enough test cases yet 
        to be sure we won't cause massive regressions. 

2006-04-21  Darin Adler  <darin@apple.com>

        - attempt to fix Windows build after my last check-in

        * WebCore.vcproj/Image Viewer/ImageView.cpp: Changed calls to use the
        new IntRect-based API.

        * html/CanvasPattern.cpp: (WebCore::CanvasPattern::CanvasPattern):
        Put appropriate ifdefs around the m_platformImage initializer.

        * page/Frame.cpp: Make Frame::adjustPageHeight Mac-OS-X-only for now
        since it's used for printing and we don't have printing going on any
        other platforms yet.

        * platform/cairo/GraphicsContextCairo.cpp: Take out constructor that
        takes only the "for printing" boolean for now.

        * platform/cairo/ImageCairo.cpp: Include the GraphicsContext.h header.

        * platform/win/TemporaryLinkStubs.cpp: (GraphicsContext::setShadow):
        Fix up this stub and remove the GraphicsContext empty constructor stub.

2006-04-21  Darin Adler  <darin@apple.com>

        - fix build

        * WebCore.xcodeproj/project.pbxproj: Replaced absolute path on my system
        with a build-result-relative path; also removed some source files from the
        list of resources to install!

2006-04-20  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - make <canvas> element and related API behave more like the draft of
          the WhatWG Web Application specification, checking parameter validity
          and raising exceptions
        - changed HTMLCanvasElement bindings to be auto-generated, fixing all
          issues so we can generate bindings for classes drived from HTMLElement
        - change GraphicsContext API to use IntRect/Point/Size in more cases
        - change GraphicsContext so it is closer to truly wrapping a graphics
          context rather than representing the current NSGraphicsContext; there
          are still some things like text and rectangle fills that are tied to
          NSGraphicsContext, but we're most of the way there
        - removed Brush class since it just amounted to a color, using an RGBA32
          instead where we used to use a Brush

        * DerivedSources.make: Added JSHTMLCanvasElement.h.
        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCanvasRenderingContext2DBase.h: Added toJS.
        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        (WebCore::JSCanvasRenderingContext2DBaseProtoFunc::callAsFunction):
        Added exception code handling for strokeRect, drawImage, and createPattern.
        Added version of createPattern that takes a canvas. Use TYPE_MISMATCH_ERR
        instead of JavaScript TypeError when parameter is neither an image or canvas
        element. Adapt for new HTMLCanvasElement binding.
        (WebCore::toJS): Added. Converts context object to JS wrapper.

        * bindings/js/JSHTMLElementWrapperFactory.h: Added.
        * bindings/js/JSHTMLElementWrapperFactory.cpp: Added. Creates a JavaScript
        wrapper for an arbitrary HTML element. Better than putting this all in the
        DOM node class toJS function.

        * bindings/js/JSXMLSerializer.cpp: Tweaked to make it build.
        * bindings/js/kjs_dom.cpp: (KJS::toJS): Changed to call the
        JSHTMLElementWrapperFactory function createJSWrapper, instead
        of always creating a JSHTMLElement.

        * bindings/js/kjs_html.h: Removed canvas-related stuff. Added HTMLElement
        prototype.
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::classInfo): Removed canvas element.
        (KJS::JSHTMLElement::accessors): Ditto.
        (KJS::JSHTMLElementProtoFunc::callAsFunction): Added, to help the auto-binding
        machiner cope with HTMLElement.
        (KJS::HTMLElementFunction::callAsFunction): Removed canvas element.

        * bindings/scripts/CodeGeneratorJS.pm: Added types needed for HTMLCanvasElement.

        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::setDisplaysWithFocusAttributes):
        Changed to create a GraphicsContext with the new constructor that takes
        a CGContextRef.
        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge drawRect:]):
        Changed to create a GraphicsContext with the new constructor that takes
        a NSGraphicsContext.
        * page/Frame.cpp: (WebCore::Frame::adjustPageHeight): Changed to create a
        GraphicsContext with the new constructor that takes a CGContextRef.

        * editing/SelectionController.cpp: (WebCore::SelectionController::paintCaret):
        Eliminated a use of obsolete class Brush.

        * html/CanvasPattern.h:
        * html/CanvasPattern.cpp:
        (WebCore::CanvasPattern::parseRepetitionType): Added. Parses a repetition
        type. Different from the old logic in that it is case-sensitive and rejects
        anything other than null, empty string, or the four repeat types.
        (WebCore::CanvasPattern::CanvasPattern): Added constructor that takes
        a CGImageRef. Changed constructor to take two booleans instead of the repetition
        type string. It's the caller's responsibility to parse the string.
        (WebCore::CanvasPattern::~CanvasPattern): Release the CGImage.
        (WebCore::patternCallback): Handle the CGImage case. Also changed the code
        to create a GraphicsContext as needed and call the image drawing code with that.
        (WebCore::CanvasPattern::createPattern): Handle both the image element case and
        the canvas element case.
        
        * html/CanvasRenderingContext2D.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State): Change line cap, line join,
        and global composite to store enum values instead of strings.
        (WebCore::CanvasRenderingContext2D::setLineWidth): Do nothing if width is NaN
        or <= 0.
        (WebCore::CanvasRenderingContext2D::lineCap): Return a string based on a
        stored enum, rather than returning a stored string.
        (WebCore::CanvasRenderingContext2D::setLineCap): Do nothing if the string is
        not one of the standard line cap types. Also case sensitive and stores enum
        rather than the string.
        (WebCore::CanvasRenderingContext2D::lineJoin): Return a string based on a
        stored enum, rather than returning a stored string.
        (WebCore::CanvasRenderingContext2D::setLineJoin): Do nothing if the string is
        not one of the standard line join types. Also case sensitive and stores enum
        rather than the string.
        (WebCore::CanvasRenderingContext2D::setMiterLimit): Do nothing if limit is NaN
        or <= 0.
        (WebCore::CanvasRenderingContext2D::setGlobalAlpha): Do nothing if alpha is NaN
        or < 0 or > 1.
        (WebCore::CanvasRenderingContext2D::globalCompositeOperation): Return a string
        based on a stored enum, rather than returning a stored string.
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation): Do nothing if
        the string is not one of the standard compositing modes. Also case sensitive and
        stores enum rather than the string.
        (WebCore::CanvasRenderingContext2D::arcTo): Generate INDEX_SIZE_ERR exception
        if radius is NaN or <= 0.
        (WebCore::CanvasRenderingContext2D::arc): Ditto.
        (WebCore::CanvasRenderingContext2D::rect): Generate INDEX_SIZE_ERR exception
        if width or height is NaN or <= 0.
        (WebCore::CanvasRenderingContext2D::clearRect): Ditto.
        (WebCore::CanvasRenderingContext2D::fillRect): Ditto.
        (WebCore::CanvasRenderingContext2D::strokeRect): Ditto, same for line width.
        Changed the case where the line width is not specified to share code with the
        case where it is.
        (WebCore::size): Renamed from imageSize, since C++ overloads based on parameter
        types anyway.
        (WebCore::CanvasRenderingContext2D::drawImage): Generate INDEX_SIZE_ERR exception
        if the source rect is not entirely inside the image rect, or if the width or height
        of either the source or destination rect is NaN or <= 0. Changed image drawing
        code to be platform-independent for the image element case, but not yet for the
        canvas case.
        (WebCore::CanvasRenderingContext2D::drawImageFromRect): Change code to parse the
        composite operation to use the new code shared with Image.
        (WebCore::CanvasRenderingContext2D::createPattern): Added code to parse the
        repetition type separately before creating the pattern. Added an overload for
        canvas elements.
        (WebCore::CanvasRenderingContext2D::drawingContext): Changed to return a
        GraphicsContext*.
        (WebCore::CanvasRenderingContext2D::platformContext): Added. Now does what
        drawingContext used to do.

        * html/CanvasRenderingContext2D.idl: Added exception declarations as needed
        for changes above.

        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Changed m_drawingContext
        to be a GraphicsContext instead of a CGContextRef.
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement): Ditto.
        (WebCore::HTMLCanvasElement::getContext): Removed special cases for null
        and empty string. Only give a 2D graphics context if the string is "2d".
        (WebCore::HTMLCanvasElement::reset): Updated for change to GraphicsContext
        from CGContextRef.
        (WebCore::HTMLCanvasElement::paint): Ditto.
        (WebCore::HTMLCanvasElement::createDrawingContext): Changed to create a
        GraphicsContext* instead of a CGContextRef.
        (WebCore::HTMLCanvasElement::drawingContext): Changed to return a
        GraphicsContext* instead of a CGContextRef.
        (WebCore::HTMLCanvasElement::createPlatformImage): Updated for changes above.

        * html/HTMLCanvasElement.idl: Added.

        * html/HTMLParser.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::canvasCreateErrorCheck): Added. An attempt to implement the
        fallback behavior for canvas elements when JavaScript is off.
        (WebCore::HTMLParser::getNode): Sorted list of functions. Added case for canvas.

        * html/html_imageimpl.h:
        * html/html_imageimpl.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement): Changed m_compositeOperator to be
        an enum instead of a string.
        (WebCore::HTMLImageElement::parseMappedAttribute): Parse the enum here.

        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasResources.cpp: (WebCore::KCanvasMarker::draw): Changed to take a
        GraphicsContext parameter.

        * kcanvas/RenderPath.h: Added GraphicsContext parameter to drawMarkersIfNeeded.

        * kcanvas/RenderPath.cpp: (WebCore::RenderPath::paint):
        * kcanvas/RenderSVGImage.cpp: (WebCore::RenderSVGImage::paint):
        * kcanvas/RenderSVGText.cpp: (WebCore::RenderSVGText::paint):
        Changed to generate and use an appropriate GraphicsContext.

        * kcanvas/device/quartz/KCanvasItemQuartz.h: Added GraphicsContext parameter to
        drawMarkersIfNeeded.
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (WebCore::DrawMarkersData::DrawMarkersData): Added GraphicsContext*.
        (WebCore::drawMarkerWithData): Pass along a GraphicsContext*.
        (WebCore::drawStartAndMidMarkers): Ditto.
        (WebCore::KCanvasItemQuartz::drawMarkersIfNeeded): Pass a long a GraphicsContext*.

        * kcanvas/device/KRenderingDevice.h: Added a pure virtual createGraphicsContext
        to bridge back to a GraphicsContext. Long term that class will replace this one.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::createGraphicsContext): Added.

        * ksvg2/svg/SVGMaskElement.cpp: (WebCore::SVGMaskElement::drawMaskerContent):
        Create and pass a GraphicsContext -- old code used the default constructor for
        GraphicsContext which meant "current context", and that no longer exists.
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile): Ditto.

        * platform/Brush.h: Removed.
        * platform/CompositeOperator.h: Added.
        * platform/CompositeOperator.cpp: Added.

        * platform/Font.h: Changed calls to use IntPoint instead of pairs of ints.
        Also removed the const from all the uses of GraphicsContext*.

        * platform/GraphicsContext.h: Eliminated default constructor and constructor
        that takes only a boolean. Replaced with constructors that take platform
        graphics contexts only. Replaced brush-related calls with fill color calls.
        Replaced use of Brush with use of Color. Changed Image::CompositeOperator to
        just plain CompositeOperator. Changed tuples of ints into IntRect and IntPoint.
        Moved setFocusRingClip and clearFocusRingClip out of ifdefs. Removed unused
        getCompositeOperation and string-based setCompositeOperation. Moved
        currentCGContext and the other setCompositeOperation out of the GraphicsContext
        class and made them global functions. Fixed platformContext so it won't always
        return the CGContextRef of the current NSGraphicsContext. Instead, it will
        return the appropriate CGContextRef for the GraphicsContext. This eliminates
        the need to use void* for the image-drawing functions.

        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState): Replaced Brush with
        an RGBA fill color.
        (WebCore::GraphicsContext::setFillColor): Renamed from setBrush.
        (WebCore::GraphicsContext::fillColor): Renamed from brush.
        (WebCore::GraphicsContext::drawImage): Changed to use IntRect.
        (WebCore::GraphicsContext::drawTiledImage): Moved here from GraphicsContextMac.mm.
        (WebCore::GraphicsContext::drawText): Changed to use IntPoint.
        (WebCore::GraphicsContext::drawHighlightForText): Ditto.
        (WebCore::GraphicsContext::drawLineForText): Ditto.
        (WebCore::GraphicsContext::drawLineForMisspelling): Ditto.

        * platform/Image.h: Removed CompositeOperator and related functions.
        Removed void* context parameters from draw functions.

        * platform/Image.cpp: Removed compositeOperatorFromString.

        * platform/Widget.h: Added a GraphicsContext* return value from lockDrawingFocus
        that you pass back to unlockDrawingFocus (for deletion).

        * platform/mac/FontMac.mm:
        (WebCore::Font::selectionRectForText): Changed parameter to point and removed
        const on GraphicsContext* parameter.
        (WebCore::Font::drawText): Ditto.
        (WebCore::Font::drawHighlightForText): Ditto.
        (WebCore::Font::drawLineForText): Ditto.
        (WebCore::Font::drawLineForMisspelling): Ditto.
        (WebCore::Font::misspellingLineThickness): Removed const.

        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        Added fields to store a CGContextRef and an NSGraphicsContext.
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        Release both the CGContextRef and the NSGraphicsContext.
        (WebCore::GraphicsContext::GraphicsContext): Implement to set up both the
        CGContextRef and the NSGraphicsContext in one case, and only the CGContextRef
        in the other.
        (WebCore::GraphicsContext::savePlatformState): Implement for the CGContext-only
        case.
        (WebCore::GraphicsContext::restorePlatformState): Ditto.
        (WebCore::GraphicsContext::drawRect): Assert that the NS context is present
        and 
        (WebCore::GraphicsContext::setColorFromFillColor): Renamed from
        setColorFromBrush.
        (WebCore::GraphicsContext::setColorFromPen): Added assertion.
        (WebCore::GraphicsContext::drawLine): Added assertion.
        (WebCore::GraphicsContext::drawEllipse): Get CGContext from the platformContext
        function instead of currentCGContext, and changed to use fillColor.
        (WebCore::GraphicsContext::drawArc): Ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::setCompositeOperation): Changed to global function and also changed
        to do the work here -- no need to use WebCoreImageRendererFactory.
        (WebCore::GraphicsContext::drawImage): Move most of this into GraphicsContext.cpp.
        Remove the void* context parameter. Changed to take rects instead of separate coordinates.
        (WebCore::GraphicsContext::fillRect): Changed to take color instead of Brush.
        (WebCore::GraphicsContext::addClip): Added assertion.
        (WebCore::GraphicsContext::addRoundedRectClip): Get CGContextRef from the platformContext
        function instead of currentCGContext.
        (WebCore::GraphicsContext::createRenderingDeviceContext): Ditto.
        (WebCore::GraphicsContext::beginTransparencyLayer): Ditto.
        (WebCore::GraphicsContext::endTransparencyLayer): Ditto.
        (WebCore::GraphicsContext::setShadow): Change to take size instead of x,y. Also get
        CGCOntextRef from the platformContext function instead of currentCGContext.
        (WebCore::GraphicsContext::clearShadow): Get CGContextRef from the platformContext
        function instead of currentCGContext.
        (WebCore::GraphicsContext::platformContext): Added. Returns m_data->m_cgContext.

        * platform/mac/ImageMac.mm:
        (WebCore::fillSolidColorInRect): Updated for change in CompositeOperator type.
        (WebCore::Image::checkForSolidColor): Ditto.
        (WebCore::Image::draw): Removed void* context parameter and replaced it with
        a GraphicsContext* parameter. Renamed from drawInRect.
        (WebCore::Image::drawTiled): Ditto. Renamed from tileInRect and scaleAndTileInRect.

        * platform/mac/PDFDocumentImage.h: Updated for change in CompositeOperator type.
        * platform/mac/PDFDocumentImage.mm: (WebCore::PDFDocumentImage::draw): Ditto.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::lockDrawingFocus): Changed to return a GraphicsContext*.
        (WebCore::Widget::unlockDrawingFocus): Changed to take a GraphicsContext*.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Changed to pass IntPoint.
        (WebCore::InlineTextBox::paint): Changed to pass IntSize.
        (WebCore::InlineTextBox::paintSelection): More of the same.
        (WebCore::InlineTextBox::paintMarkedTextBackground): Ditto.
        (WebCore::InlineTextBox::paintDecoration): Ditto.
        (WebCore::InlineTextBox::paintSpellingMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::paintMarkedTextUnderline): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillHorizontalSelectionGap): Ditto.
        (WebCore::RenderBlock::fillVerticalSelectionGap): Ditto.
        (WebCore::RenderBlock::fillLeftSelectionGap): Ditto.
        (WebCore::RenderBlock::fillRightSelectionGap): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended): Ditto.
        (WebCore::RenderBox::outlineBox): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::setClip): Take out ifdefs. We'll do that inside GraphicsContext instead.
        (WebCore::restoreClip): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorder): More of the same.
        (WebCore::RenderObject::paintBorderImage): Ditto.
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintDecorations): Ditto.
        (WebCore::EllipsisBox::paint): Ditto.
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint): Ditto.

        * rendering/render_frames.cpp: (WebCore::RenderFrameSet::userResize): Set up a graphics
        context by calling lockDrawingFocus. Also changed a color here to be a constant.

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawImage): Update for parameter type changes.
        (WebCore::GraphicsContext::drawScaledAndTiledImage):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        * platform/cairo/ImageCairo.cpp:
        (WebCore::setCompositingOperation):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):

2006-04-20  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        WebCore part of:
        - fix http://bugs.webkit.org/show_bug.cgi?id=8276
          REGRESSION (NativeTextField): Pasting a Finder item into a text field results in
            a file: URL being pasted instead of just the file name
        - fix http://bugs.webkit.org/show_bug.cgi?id=8283
          REGRESSION: File's path doesn't appear after dragging file into input field

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isDragCaretRichlyEditable]): Added.
        * manual-tests/plain-text-paste.html: Added.
        * manual-tests/resources/plain-text-paste: Added.
        * manual-tests/resources/plain-text-paste/1.textClipping: Added.
        * manual-tests/resources/plain-text-paste/2.textClipping: Added.
        * manual-tests/resources/plain-text-paste/3.gif: Added.
        * manual-tests/resources/plain-text-paste/4.txt: Added.
        * manual-tests/resources/plain-text-paste/5.webloc: Added.

2006-04-20  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - WebCore part of http://bugs.webkit.org/show_bug.cgi?id=8505
          eliminate WebCoreGraphics bridge, demonstrate new SystemInterface technique

        * platform/mac/WebCoreGraphicsBridge.h: Removed.
        * platform/mac/WebCoreGraphicsBridge.m: Removed.
        * platform/mac/WebCoreSystemInterface.h: Added.
        * platform/mac/WebCoreSystemInterface.mm: Added.

        * WebCore.exp: Add new SystemInterface globals, remove WebCoreGraphicsBridge.

        * WebCore.xcodeproj/project.pbxproj: Updated for removed and added files.
        Sorted files.

        * bridge/mac/FrameMac.mm: Removed unneeded include of WebCoreGraphicsBridge.h.

        * platform/mac/ClipboardMac.mm: (WebCore::ClipboardMac::setDragImage):
        Moved code from WebGraphicsBridge here, using WebCoreSystemInterface so we can
        call wkSetDragImage.

        * platform/mac/GraphicsContextMac.mm: (WebCore::GraphicsContext::drawFocusRing):
        Moved code from WebGraphicsBridge here, using WebCoreSystemInterface so we can
        call wkDrawFocusRing.

        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::paintTextField):
        Call wkDrawBezeledTextFieldCell from WebCoreSystemInterface instead of using
        WebGraphicsBridge to do the same thing.

2006-04-20  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8273
        REGRESSION: Read only input text field renders at the wrong height when value attribute is not present

        Test: fast/forms/input-readonly-empty.html

        * rendering/RenderBlock.h: Added hasLineIfEmpty.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty): Added.  Checks for rootEditableElement as well as 
         a shadowNode who has an input element as a parent.
        (WebCore::RenderBlock::getBaselineOfLastLineBox): Calls hasLineIfEmpty instead of just checking for the rootEditableElement.
        * rendering/bidi.cpp: (WebCore::RenderBlock::layoutInlineChildren): ditto.

2006-04-20  Darin Adler  <darin@apple.com>

        Reviewed by Timothy.

        Removed TO_NODE_OFFSET and TO_NODE_ADDRESS macros. These can just be done inline with pointer math.

        * platform/DeprecatedString.cpp:
        (allocateNode):
        (freeHandle):

2006-04-19  Adele Peterson  <adele@apple.com>

        Rubber-stamped by Darin.

        Removed optimizations recently added in setInnerHTML and setInnerText.  The setInnerHTML change broke a first-letter style test.
        The setInnerText change caused an empty text node to get added when setting inner text to an empty string.  The bug that this
        change went in with remains fixed.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerHTML):
        (WebCore::HTMLElement::setInnerText):

2006-04-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Haytt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6770
          REGRESSION: Incomplete repaint when block with clipping grows

        * manual-tests/repaint-resized-overflow.html: Added.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::computeRepaintRects): Set the m_repaintOverflowOnResize
        flag to true if our object itself needs layout or if we're an overflow
        and have a normal child that needs layout, in which case if we end up
        resizing it will be because of the child, and that child might have not repainted
        itself correctly during its own layout.
        (WebCore::RenderLayer::updateLayerPositions): Do a full repaint if
        m_repaintOverflowOnResize is set and we resized but didn't move.
        * rendering/RenderLayer.h:

2006-04-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8352
          CSS text-shadow does not repaint completely when changed

        * manual-tests/dynamic-shadow.html: Added.
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::diff): Changed to return Layout when text-shadow
        changes.

2006-04-19  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Added readOnly methods for HTMLInputElement and HTMLTextAreaElement so the DOM bindings can call
        a method with the same name.  This will make it easier to autogenerate the DOM bindings in the future.
 
        * html/HTMLInputElement.h: (WebCore::HTMLInputElement::readOnly): Added. Calls isReadOnlyControl.
        * html/HTMLTextAreaElement.h: (WebCore::HTMLTextAreaElement::readOnly): ditto.
        * bindings/js/kjs_html.cpp:
        (KJS::JSHTMLElement::inputGetter): Calls readOnly instead of isReadOnlyControl.
        (KJS::JSHTMLElement::textAreaGetter): ditto.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement readOnly]): ditto.
        (-[DOMHTMLTextAreaElement readOnly]): Calls readOnly instead of getting the attribute directly.
        (-[DOMHTMLTextAreaElement setReadOnly:]): Calls setReadOnly instead of setting the attribute directly.

2006-04-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=8297
        REGRESSION: Input element extends outside of DIV element at http://www.macdock.com/

        * platform/Font.h: Added runRounding parameter to floatWidth.
        * platform/mac/FontMac.mm: (WebCore::Font::floatWidth): ditto.
        * platform/win/FontWin.cpp: (WebCore::Font::floatWidth): ditto.
        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::calcMinMaxWidth):
          Use new floatWidth parameter to turn off run rounding.

2006-04-19  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Fix for Windows build.

        * rendering/RenderThemeWin.cpp: (WebCore::RenderThemeWin::determineState):
        Use isReadOnlyControl instead of isReadOnly.

 2006-04-19  Adele Peterson  <adele@apple.com>
 
         Reviewed by Beth.
 
         Fix to make readonly text fields have dimmed borders to match AppKit behavior.
 
         Test: fast/forms/input-readonly-dimmed.html
 
         * dom/Node.h: (WebCore::Node::isReadOnlyControl): Changed from const version of isReadOnly.
         * dom/Node.cpp:
         (WebCore::Node::isReadOnlyNode): Changed from isReadOnly.
         (WebCore::Node::setNodeValue): Uses isReadOnlyNode instead of isReadOnly.
         (WebCore::Node::checkSetPrefix): ditto.
         (WebCore::Node::checkAddChild): ditto.
         * dom/Attr.cpp: (WebCore::Attr::setValue): ditto.
         * dom/CharacterData.cpp:
         (WebCore::CharacterData::setData): ditto.
         (WebCore::CharacterData::appendData): ditto.
         (WebCore::CharacterData::checkCharDataOperation): ditto.
         * dom/ContainerNode.cpp: (WebCore::ContainerNode::removeChild): ditto.
         * dom/Element.cpp: (WebCore::Element::setAttribute): ditto.
         * dom/NamedAttrMap.cpp:
         (WebCore::NamedAttrMap::setNamedItem): ditto.
         (WebCore::NamedAttrMap::removeNamedItem): ditto.
         * dom/NamedAttrMap.h: (WebCore::NamedAttrMap::isReadOnlyNode): ditto.
         * dom/NamedNodeMap.h: (WebCore::NamedNodeMap::isReadOnlyNode): ditto.
         * dom/Range.cpp:
         (WebCore::Range::checkDeleteExtract): ditto.
         (WebCore::Range::containedByReadOnly): ditto.
         * dom/Text.cpp: (WebCore::Text::splitText): ditto.
         * dom/dom_xmlimpl.cpp: (WebCore::ProcessingInstruction::setData): ditto.
 
         * bindings/js/kjs_html.cpp:
         (KJS::JSHTMLElement::inputGetter): Uses isReadOnlyControl instead of isReadOnly.
         (KJS::JSHTMLElement::textAreaGetter): ditto.
         * bindings/objc/DOMHTML.mm: (-[DOMHTMLInputElement readOnly]): ditto.
         * rendering/render_form.cpp:
         (WebCore::RenderLineEdit::updateFromElement): ditto.
         (WebCore::RenderTextArea::updateFromElement): ditto.
         * rendering/RenderTextField.cpp:
         (WebCore::RenderTextField::createDivStyle): ditto.
         (WebCore::RenderTextField::updateFromElement): ditto.
 
         * html/HTMLGenericFormElement.cpp: (WebCore::HTMLGenericFormElement::parseMappedAttribute): 
           When readonly attribute changes, update the theme so the control will repaint.
         * html/HTMLGenericFormElement.h: (WebCore::HTMLGenericFormElement::isReadOnlyControl): Renamed from readOnly.
         * html/HTMLInputElement.h: Removed isReadOnly, since isReadOnlyControl now exists on HTMLGenericFormElement.
         * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isReadOnlyControl): Renamed from isReadOnly.
         * rendering/RenderTheme.h: (WebCore::): Added ReadOnlyState to ControlState enum.
         * rendering/RenderThemeMac.h: Removed NSTextFieldCell since it was only being used to store the enabled state.
           Removed setTextFieldState since it was updating the enabled state of the cell, which is only used in one place.
         * rendering/RenderThemeMac.mm:
         (WebCore::RenderThemeMac::RenderThemeMac): No longer initialized the NSTextFieldCell.
         (WebCore::RenderThemeMac::adjustRepaintRect): No longer calls setTextFieldState.
         (WebCore::RenderThemeMac::paintTextField): Uses the enabled state and the readonly state to determine whether to draw
          a dimmed version of the aqua border.
 
2006-04-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8467 Block 
        with percentage background-size doesn't repaint properly when it 
        grows

        * manual-tests/backgroundSizeRepaint.html: Added.
        * manual-tests/resources/apple.jpg: Added.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder): We must 
        return true if we have a percentage background-size.

2006-04-19  David Hyatt  <hyatt@apple.com>

        Fix for a regression in the new text fields.  Don't allow the repaint
        rect created by dynamic line layout changes to spill out of an overflow
        area's clip region.

        (There is no test, since we have no way of testing cases where we repaint
         too much rather than too little.)

        Reviewed by darin

        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2006-04-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Fix for bug 8449, incomplete repaint of table cell that moved.  This
        fix also solves some of the textfield repainting problems (e.g., on
        google.com and lxr.mozilla.org).

        Reviewed by hyatt

        * manual-tests/table-cell-move.html: Added.
        * rendering/RenderCanvas.cpp:
        (WebCore::RenderCanvas::repaintViewRectangle):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2006-04-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Eric, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8469
          CRASH: WebCore::CSSParser::parseDashboardRegions when attr() is passed

        Test: fast/css/dashboard-regions-attr-crash.html

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseDashboardRegions): Added null check for args.

2006-04-18  Rob Buis  <buis@kde.org>

        Reviewed by eseidel & darin.  Landed by eseidel.

        No automated tests possible (from javascript).

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6664:
        Inspector does not highlight SVG elements properly

        Make sure RenderObject::absoluteBoundingBoxRect works for
        svg specific render objects by overriding absoluteRects.
        This fixes highlighting in the Inspector of svg shapes, paths,
        images and text.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::absoluteRects):
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * kcanvas/RenderSVGImage.h:
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        * kcanvas/RenderSVGText.h:

2006-04-17  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Test: svg/custom/tref-update.svg

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6427:
        <tref> element not implemented

        Implementation of <tref> element.

        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/svg/SVGTRefElement.cpp: Added.
        (SVGTRefElement::SVGTRefElement):
        (SVGTRefElement::~SVGTRefElement):
        (SVGTRefElement::parseMappedAttribute):
        (SVGTRefElement::closeRenderer):
        (SVGTRefElement::childShouldCreateRenderer):
        (SVGTRefElement::createRenderer):
        * ksvg2/svg/SVGTRefElement.h: Added.
        (WebCore::SVGTRefElement::rendererIsNeeded):
        * ksvg2/svg/SVGTSpanElement.cpp:
        (SVGTSpanElement::childShouldCreateRenderer):
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer):
        * ksvg2/svg/svgtags.in:

2006-04-18  Darin Adler  <darin@apple.com>

        * rendering/render_form.cpp: (WebCore::RenderSelect::updateFromElement):
        Roll out accidentally-landed change for bug 8398.

2006-04-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for a leak exposed by background-size and detected by the 
        layout tests.

        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValue::cleanup): We must deref pairs.

2006-04-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Eric.

        Build fix for Windows. Just a few typos from background-size patch.

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::tileInRect):

2006-04-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Implementation of CSS3 background-size property. See 
        http://bugs.webkit.org/show_bug.cgi?id=8353 for details.

        * Viewer/ImageView.cpp: Adjust parameters to drawTiledImage()
        * css/CSSComputedStyleDeclaration.cpp: Add background-size
        * css/CSSPropertyNames.in: Same.
        * css/css_valueimpl.h: Add a constructor for Pair that takes the 
        two halves of the pair.
        * css/cssparser.cpp: Parse background-size. Still need to take care 
        of parsing the shorthand.
        * css/cssparser.h: Same.
        * css/cssstyleselector.cpp: Address background-size.
        * css/cssstyleselector.h: Same.
        * platform/GraphicsContext.h: drawTiledImage() now takes the 
        tileSize so that it can appropriately scale.
        * platform/Image.h: Same as above, but for tileInRect()
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::tileInRect): Take care of scaling image in 
        necessary in Cairo.
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawTiledImage): 
        * platform/mac/ImageMac.mm:
        (WebCore::Image::tileInRect): Take care of scaling image if 
        necessary in CG.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackgroundExtended): Compute appropriate 
        scale if background-size is set. If no-repeat is set, just call 
        drawImage() directly.
        * rendering/render_style.cpp: Add background-size to the style.
        (WebCore::m_next):
        (WebCore::BackgroundLayer::BackgroundLayer):
        (WebCore::BackgroundLayer::operator=):
        (WebCore::BackgroundLayer::operator==):
        (WebCore::BackgroundLayer::fillUnsetProperties):
        (WebCore::BackgroundLayer::cullEmptyLayers):
        * rendering/render_style.h: Same.
        (WebCore::BackgroundLayer::backgroundSize):
        (WebCore::BackgroundLayer::isBackgroundSizeSet):
        (WebCore::BackgroundLayer::setBackgroundSize):
        (WebCore::BackgroundLayer::clearBackgroundSize):
        (WebCore::RenderStyle::backgroundSize):
        (WebCore::RenderStyle::initialBackgroundSize):

2006-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraph): The placeholder that's inserted 
        to keep content from collapsing due to pruning was inserted at the position after 
        the moved paragraph.  That's only appropriate when moving the paragraph backward 
        into the previous paragraph.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): The last paragraph of the incoming
        fragment should be merged with the paragraph after the end of the selection being pasted
        into even if the incoming fragment has only one block.   This fixes a bug and gets
        rid of a use of the info gathered during the test insertion.

2006-04-17  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8407
        REGRESSION (NativeTextField): Leading and trailing spaces trimmed from text field value attribute

        Test: fast/forms/input-spaces.html

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::createDivStyle): 
        Use white-space:pre for the inner div to avoid collapsing spaces in the text field.

2006-04-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8437
          iExploder(#293): Crash in StringImpl::hash()

        * manual-tests/applet-param-no-name.html: Added.
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary): Skip param elements with
        empty name.

2006-04-18  Darin Adler  <darin@apple.com>

        - try to fix the Windows build

        * platform/cairo/GraphicsContextCairo.cpp: (WebCore::setColor):
        Update for changes to getRGBA.

2006-04-17  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8440
        iExploder(#3327): Crash in StringImpl::initWithQChar()

        Test: fast/parser/number-sign-in-map-name.html

        * html/html_imageimpl.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute): Fixed handling of names starting with a '#'.

2006-04-17  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for: http://bugs.webkit.org/show_bug.cgi?id=8269
        REGRESSION: disabled text field does not display greyed-out text

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::createDivStyle): 
        For disabled text fields, lighten or darken text color based on background color.
        Tries to get as close as possible to logic in AppKit for old text fields.
        * platform/Color.h: Removed hsv and setHsv since they were just used within Color.cpp.
        * platform/Color.cpp:
        (WebCore::parseHexColor): Cleanup.
        (WebCore::differenceSquared): Added. Returns the difference squared of two colors.
        (WebCore::convertRGBToHSV): Added static function. Replaces hsv and setHSV, and fixes bug in old implementation of the algorithm.
        (WebCore::convertHSVToRGB): ditto.
        (WebCore::Color::light): No longer takes in a factor, since all callers use the same factor.  Uses new conversion functions.
        (WebCore::Color::dark): ditto.
        * rendering/InlineTextBox.cpp: Removed simpleDifferenceBetweenColors.
        (WebCore::correctedTextColor):  Uses differenceSquared instead of simpleDifferenceBetweenColors.

2006-04-17  David Hyatt  <hyatt@apple.com>

        Fix for bug 8270, text highlights outside of textfield when it shouldn't.

        Reviewed by darin

        Added fast/forms/input-double-click-selection-gap-bug.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillInlineSelectionGaps):

2006-04-17  David Hyatt  <hyatt@apple.com>

        Fix for bug 8848, caret off by 1 pixel on numerous pixel tests.

        Reviewed by darin

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect):

2006-04-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        <rdar://problem/4506601> TOT WebCore fails to build ppc64

        Switch many CG calls to use CGFloat for colors and gradients

        * bindings/objc/DOMCSS.mm:
        (-[DOMRGBColor dealloc]): cast _internal to uintptr_t
        (-[DOMRGBColor finalize]): cast _internal to uintptr_t
        (-[DOMRGBColor red]): cast _internal to uintptr_t
        (-[DOMRGBColor green]): cast _internal to uintptr_t
        (-[DOMRGBColor blue]): cast _internal to uintptr_t
        (-[DOMRGBColor alpha]): cast _internal to uintptr_t
        (-[DOMRGBColor _color]): cast _internal to uintptr_t
        * bridge/mac/FrameMac.mm:
        (WebCore::regExpForLabels): use CFIndex as the type returned from indexOfObject:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge baseWritingDirectionForSelectionStart]): workaround for <rdar://problem/4509035>
        * config.h: define CGFloat if it isn't defined already
        * html/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        (WebCore::gradientCallback):
        (WebCore::CanvasGradient::platformShading):
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::applyStrokePattern):
        (WebCore::CanvasRenderingContext2D::applyFillPattern):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::alphaImageForImage):
        (WebCore::KCanvasFEColorMatrixQuartz::getCIFilter):
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (WebCore::applyLuminanceToAlphaFilter):
        (WebCore::applyExpandAlphatoGrayscaleFilter):
        (WebCore::transformImageIntoGrayscaleMask):
        * kcanvas/device/quartz/KCanvasPathQuartz.mm:
        (WebCore::scratchContext):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::cgGradientCallback):
        (WebCore::CGShadingRefForLinearGradient):
        (WebCore::CGShadingRefForRadialGradient):
        (WebCore::KRenderingPaintServerGradientQuartz::updateQuartzGradientStopsCache):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        (WebCore::):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (WebCore::KRenderingPaintServerPatternQuartz::setup):
        * kcanvas/device/quartz/QuartzSupport.mm:
        (WebCore::applyStrokeStyleToContext):
        * kwq/WebCoreAXObject.mm:
        (CreateCGColorIfDifferent):
        * platform/Color.cpp:
        (WebCore::Color::getRGBA): new name, was getRgbaF. getRGBA uses float and has a double overload
        * platform/Color.h:
        * platform/mac/ClipboardMac.h: no need to define NSDragOperation
        * platform/mac/ColorMac.mm:
        (+[WebCoreControlTintObserver WebCore]):
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLine):
        * platform/mac/ImageMac.mm:
        (WebCore::Image::checkForSolidColor):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * platform/mac/TextEncodingMac.cpp:
        (WebCore::TextEncoding::fromUnicode):

2006-04-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8402>
        Fix interchange newline handling and avoid use of test rendering info

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Fixed bugs in handling of interchange newlines at the end of incoming 
        fragments.  Removed the use of !fragment.isBlockFlow since it isn't 
        correct and relies on information gathered during the test insertion, which 
        we're trying to get rid of. 
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::rootEditableElement): Added for convenience.

2006-04-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8408
          Paint the highlight behind selected list markers

        Test: fast/lists/markers-in-selection.html

        * rendering/RenderObject.h: Added selectionColorImageOverlayAlpha constant -
        the maximum opacity of the selection color when painted over images.
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        (WebCore::RenderListMarker::paint): Paint the selection highlight
        if selected: over the marker for image markers, under the marker for all other
        markers.
        (WebCore::RenderListMarker::setSelectionState): Added.
        (WebCore::RenderListMarker::selectionRect): Added.
        (WebCore::RenderListMarker::selectionColor): Added. Ensures that the selection
        color is transparent for image markers.
        * rendering/render_list.h:
        (WebCore::RenderListMarker::selectionState):
        (WebCore::RenderListMarker::canBeSelectionLeaf):
        * rendering/render_replaced.cpp
        (WebCore::RenderReplaced::selectionColor): Changed to use the selectionColorImageOverlayAlpha
        constant.

2006-04-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8420
          iExploder(#12): Assertion failure in RenderContainer::removeChildNode

        Test: fast/forms/button-inner-block-reuse.html

        Buttons have a distinguished anonymous child that holds all their other
        descendants. Descendants ended up in a sibling anonymous block as the
        initial anonymous child was being reused to hold the initial part of an
        inline that got split.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitFlow): Check if the anonymous block's parent
        allows us to reuse it.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::allowsReusingAnonymousChild): Added. Returns true.
        * rendering/render_button.h:
        (WebCore::RenderButton::allowsReusingAnonymousChild): Added. Returns false.

2006-04-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8394
          Editable region does not accept dropped text if there is no selection

        Test: editing/pasteboard/drop-text-without-selection.html

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge documentFragmentWithText:]): Changed to allow
        creating a fragment regardless of the selection.

2006-04-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - WebCore part of fix for http://bugs.webkit.org/show_bug.cgi?id=8324
          REGRESSION: textarea :focus not applied immediately

        * bridge/mac/WebCoreFrameBridge.h:
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButton becomeFirstResponder]): Added call to formControlIsBecomingFirstResponder:.
        (-[KWQPopUpButton resignFirstResponder]): Cleaned up.
        * kwq/KWQListBox.mm: Ditto.
        (-[KWQTableView becomeFirstResponder]):
        (-[KWQTableView resignFirstResponder]):
        * kwq/KWQSlider.mm:
        (-[KWQSlider becomeFirstResponder]): Added call to formControlIsBecomingFirstResponder: and
        cleaned up.
        (-[KWQSlider resignFirstResponder]): Cleaned up.
        * platform/mac/WebCoreTextArea.mm:
        (-[WebCoreTextView becomeFirstResponder]): Added call to formControlIsBecomingFirstResponder:.
        (-[WebCoreTextView resignFirstResponder]): Cleaned up.
        * platform/mac/WebCoreTextField.mm:
        (-[KWQTextFieldController setHasFocus:]): Added call to formControlIsBecomingFirstResponder:.
        * manual-tests/textarea-focus.html: Added.

2006-04-16  Darin Adler  <darin@apple.com>

        Reviewed by Adele and Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8298
          REGRESSION: Crash occurs when attempting to drag selection into
          Depart/Return input fields at http://www.travelocity.com/
        - remove the mutation event listener that's installed all the time,
          since it slows things down a bit

        Calling SelectionController::nodeWillBeRemoved from Document::notifyBeforeNodeRemoval
        fixes the crash, which was happening because the call that was removing the text
        node, removeChildren, does not send a "node removed" mutation event (it sends a
        "subtree modified" mutation event instead). So this change alone fixes the crash.

        But I also changed setInnerText to not blow away the text node each time the value
        is changed, and that makes the test case behave even better -- you don't even lose
        the selection; it works as it did with the NSTextField-based text field.

        * manual-tests/input-empty-on-focus.html: Added.

        * page/Frame.h: Tweaked a few comments and functions related to selection.
        * page/Frame.cpp: (WebCore::Frame::dragCaret): Made non-const.

        * dom/Document.cpp: (WebCore::Document::notifyBeforeNodeRemoval):
        Call nodeWillBeRemoved on the two selection controllers before removing
        a node from the document.

        * editing/SelectionController.h: Tweak formatting. Remove MutationListener
        class and m_mutationListener field.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController): Remove code to set up
        the mutation event listener.
        (WebCore::SelectionController::setSelection): Remove code to maintain the
        mutation event listener.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerHTML): In cases where the container has only a
        single child use replaceChild, and in cases where the HTML being inserted
        also has only a single child and both are text nodes use setData. It's common
        to use setInnerHTML to set something that's just text.
        (WebCore::HTMLElement::setInnerText): Same as above, but simpler since the
        thing we're replacing with is always text.

2006-04-16  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8417
          make-css-file-arrays.pl hangs when run on Linux

        * css/make-css-file-arrays.pl: Remove the "-" parameter from the invocation of cpp,
        which means "send output to stdout". It's optional on Mac OS X, and is causing a
        hang on Linux.
        * rendering/RenderArena.cpp: Added a missing include of <assert.h>.

2006-04-15  Darin Adler  <darin@apple.com>

        - removed references to a couple files that are obsolete
          but were still in the Windows project file

        * WebCore.vcproj/WebCore/WebCore.vcproj: Remove kjs_views.h and .cpp.

2006-04-15  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8405
          REGRESSION: Web Inspector's Style pane is blank

        * bindings/js/kjs_window.cpp:
        (KJS::Window::isSafeScript): Use isEmpty() instead of isNull() for checking
        the domain to determine if the document in a local file. 

2006-04-14  David Hyatt  <hyatt@apple.com>

        CSS vendor-specific property/value cleanup.  Properly qualify background-clip,
        background-origin, border-image and the border-radius properties.  Make sure
        our overflow extensions of marquee and overlay are qualified as well.  Rename
        the -khtml- extension to -webkit.

        Reviewed by beth

        * bindings/js/kjs_css.cpp:
        (KJS::cssPropertyName):
        * bindings/objc/DOMCSS.mm:
        (-[DOMCSSStyleDeclaration _fontSizeDelta]):
        (-[DOMCSSStyleDeclaration _setFontSizeDelta:]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _setAutofilled:]):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::valueForTextAlign):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y:
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/css_base.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/css_valueimpl.cpp:
        (WebCore::):
        * css/css_valueimpl.h:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::parseBackgroundShorthand):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseBackgroundProperty):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseShadow):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/cssstyleselector.h:
        * css/html4.css:
        * css/quirks.css:
        * css/tokenizer.flex:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::blockPlaceholderClassString):
        * editing/JSEditor.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::fixupNodeStyles):
        (WebCore::styleForNode):
        * editing/htmlediting.cpp:
        (WebCore::rebalanceWhitespaceInTextNode):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLAlignment):
        (WebCore::HTMLElement::setContentEditable):
        * html/html_blockimpl.cpp:
        (WebCore::HTMLDivElement::parseMappedAttribute):
        (WebCore::HTMLParagraphElement::parseMappedAttribute):
        (WebCore::HTMLMarqueeElement::parseMappedAttribute):
        * html/html_inlineimpl.cpp:
        (WebCore::HTMLFontElement::parseMappedAttribute):
        * html/html_tableimpl.cpp:
        (WebCore::HTMLTablePartElement::parseMappedAttribute):
        (WebCore::HTMLTableCellElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::canMouseDownStartSelect):
        * page/Frame.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::draggableNode):

2006-04-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Fix win32 build.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * page/FramePrivate.h:

2006-04-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Fix build-warnings in cairo code.
        http://bugs.webkit.org/show_bug.cgi?id=8176

        * platform/cairo/cairo/src/cairo-win32-surface.c:
        (_cairo_win32_print_gdi_error):
        (_cairo_win32_surface_create_for_dc):
        (_composite_alpha_blend):
        (cairo_win32_surface_create):
        * platform/cairo/pixman/src/iccolor.c:
        (pixman_pixel_to_color):

2006-04-14  David Hyatt  <hyatt@apple.com>

        Fix for 8333, make sure newlines in whitespace:pre (and friends) get
        line boxes created for them.  This resolves all the weird selection/navigation
        issues that arise by not creating lines (and thus not having navigable positions
        on those lines).

        This checkin is also removing all of the layout test hacks that have piled
        up, so layout test results are being regenerated completely.

        Reviewed by eric

        * dom/Position.cpp:
        (WebCore::Position::downstream):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraph):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * kwq/RenderTreeAsText.cpp:
        (getTagName):
        (operator<<):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState):
        (WebCore::InlineTextBox::isLineBreak):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::atLineWrap):
        (WebCore::RenderText::caretRect):
        (WebCore::RenderText::height):
        (WebCore::RenderText::inlineBox):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/render_line.h:
        (WebCore::InlineBox::isLineBreak):

2006-04-13  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - moved a few things out of kwq and cleaned up the
          Java-applet-related renderers

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for file location
        and name changes.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * kwq/JavaAppletWidget.h: Moved.
        * kwq/JavaAppletWidget.mm: Moved.
        * kwq/RegularExpression.cpp: Moved.
        * kwq/RegularExpression.h: Moved.
        * kwq/RenderTreeAsText.cpp: Moved.
        * kwq/RenderTreeAsText.h: Moved.
        * rendering/render_applet.cpp: Moved.
        * rendering/render_applet.h: Moved.

        * bridge/JavaAppletWidget.h: Moved here.
        * bridge/mac/JavaAppletWidget.mm: Moved here.
        * platform/RegularExpression.cpp: Moved here.
        * platform/RegularExpression.h: Moved here.
        * rendering/RenderTreeAsText.cpp: Moved here.
        * rendering/RenderTreeAsText.h: Moved here.

        * rendering/RenderApplet.h: Moved here and made changes.
        Removed unused element() function.
        * rendering/RenderApplet.cpp: Moved here and made changes.
        (WebCore::RenderApplet::RenderApplet): Changed parameter type to
        be more precise (HTMLAppletElement).
        (WebCore::RenderApplet::intrinsicWidth): Removed unnecessary type
        cast and simplified.
        (WebCore::RenderApplet::intrinsicHeight): Ditto.
        (WebCore::RenderApplet::createWidgetIfNecessary): Straightened out
        the if statements and changed to use node() instead of element().
        (WebCore::RenderApplet::layout): Removed unneeded check before
        calling createWidgetIfNecessary.

        * rendering/RenderEmptyApplet.h: Moved here and made changes.
        Removed unneeded overrides of intrinsicWidth and intrinsicHeight.
        * rendering/RenderEmptyApplet.cpp: Moved here and made changes.
        (WebCore::RenderEmptyApplet::RenderEmptyApplet): Added code to
        set the intrinsic width and height.

        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::RenderWidget): Initialize m_widget
        with contructor syntax.
        (WebCore::RenderWidget::paint): Changed _tx and _ty to be just
        tx and ty. Rearranged the code so the transparent wash will draw
        even if m_widget is 0.

        * html/html_objectimpl.cpp: Update includes for new file names.

2006-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed <rdar://problem/4478467> document.defaultView should return 
        the window object
        
        Also made part of the window object autogenerated by IDL file.
        
        * DerivedSources.make: Added /page to IDL file search path, added
        JSDOMWindow.h, removed kjs_views.lut.h
        * WebCore.xcodeproj/project.pbxproj: Added missing files, removed
        obsolete files
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * bindings/js/kjs_views.cpp: Removed.
        * bindings/js/kjs_views.h: Removed.
        * bindings/js/kjs_window.cpp: Removed document property -- it now
        belongs to JSDOMWindow. Added toJS and toDOMWindow.
        (KJS::Window::Window):
        (KJS::Window::impl):
        (KJS::Window::getValueProperty):
        (KJS::Window::clear): Added call to setPrototype to ensure
        that the prototype gets cleared during navigation. (Previously
        this wasn't an issue because the window object had no real prototype.)
        (WebCore::toJS):
        (WebCore::toDOMWindow):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/objc/DOMCSS.mm: Added NULL checks for the AbstractView
        (Presumably this is an issue after the window is closed.) Typedef-ed
        AbstractView as DOMWindow. I could have just replaced AbstractView
        with DOMWindow, but I think it's clearer to say, "There's this thing
        called the AbstractView, but really it's just the window."
        (-[DOMDocument getComputedStyle::]):
        (-[DOMDocument getMatchedCSSRules::]):
        * bindings/objc/DOMViews.mm:
        * bindings/objc/DOMViewsInternal.h:
        * bindings/scripts/CodeGeneratorJS.pm: Removed unused
        GetLegacyImplementationIncludes. Added support for DOMWindow and new
        "DoNotCache" attribute. Replaced C macros with text because (1) it
        makes the generated source easier to read and debug and (2) it made 
        it much easier to implement the DoNotCache attribute.
        * bindings/scripts/IDLParser.pm: Return a hash reference instead of
        a hash, because otherwise an interface with more than one attribute
        returns too many arguments to be processed.
        * bridge/mac/FrameMac.mm:
        * dom/AbstractView.cpp: Removed.
        * dom/AbstractView.h: Removed.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::defaultView):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/KeyboardEvent.idl:
        * dom/MouseEvent.idl:
        * dom/Position.cpp:
        * dom/UIEvent.idl:
        * dom/dom2_eventsimpl.h:
        * page/DOMWindow.cpp: Added.
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::frame):
        (WebCore::DOMWindow::disconnectFrame):
        (WebCore::DOMWindow::document):
        (WebCore::DOMWindow::getComputedStyle):
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DOMWindow.h: Added.
        * page/DOMWindow.idl: Added.
        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Disconnect the new DOMWindow object in
        addition to the Window object. Maybe we can unify this in the future.
        (WebCore::Frame::tree):
        (WebCore::Frame::domWindow):
        * page/Frame.h:
        * page/FramePrivate.h:

2006-04-13  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7602
        Only use fixupChar for entities

        * html/HTMLTokenizer.cpp: Only use fixUpChar() when handling entities.
        (WebCore::HTMLTokenizer::parseSpecial):
        (WebCore::HTMLTokenizer::parseText):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        * platform/StreamingTextDecoder.cpp:
        (WebCore::StreamingTextDecoder::convert): Remove the special case for Latin-1, because it is already handled 
        via effectiveEncoding().
        * platform/StreamingTextDecoder.h: Remove convertLatin1().

2006-04-13  Darin Adler  <darin@apple.com>

        * platform/mac/GraphicsContextMac.mm: Fix one no-SVG compile problem by adding
        a "using namespace std".

2006-04-12  Darin Adler  <darin@apple.com>

        Rubber-stamped by Anders.

        - fix Windows build

        * WebCore.vcproj/Image\ Viewer/Image\ Viewer.vcproj: Add loader directory.

        - use std::min/max exclusively intead of kMin/Max
        - eliminate KWQDef.h since all it had left in it was kMin/Max

        * WebCore.vcproj/WebCore/WebCore.vcproj: Remove KWQDef.h.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * kwq/KWQDef.h: Removed.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        (WebCore::CSSStyleSelector::fontSizeForKeyword):
        * dom/Document.cpp:
        (WebCore::Document::minimumLayoutDelay):
        (WebCore::Document::addMarker):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):
        * dom/xml_tokenizer.cpp:
        (WebCore::OffsetBuffer::readOutBytes):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::CharacterIterator::string):
        (WebCore::findPlainText):
        * editing/htmlediting.cpp:
        (WebCore::rangeCompliantEquivalent):
        * editing/markup.cpp:
        (WebCore::renderedText):
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::enlargeBuffer):
        (WebCore::HTMLTokenizer::enlargeScriptBuffer):
        * html/html_imageimpl.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * html/html_tableimpl.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQListBox.mm:
        (QListBox::sizeForNumberOfLines):
        * kwq/KWQSlider.mm:
        (QSlider::setValue):
        * loader/Cache.cpp:
        (WebCore::Cache::setSize):
        * page/Frame.cpp:
        (WebCore::Frame::forceLayoutWithPageWidthRange):
        * platform/DeprecatedPtrListImpl.h:
        * platform/DeprecatedString.cpp:
        (ucstrcmp):
        * platform/DeprecatedString.h:
        * platform/DeprecatedValueListImpl.h:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::addRoundedRectClip):
        * platform/mac/WebCoreTextArea.mm:
        (-[WebCoreTextView _trackResizeFromMouseDown:]):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintSpellingMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowRect):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::nearestFloatBottom):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::calcMinMaxWidth):
        (WebCore::RenderBlock::calcInlineMinMaxWidth):
        (WebCore::RenderBlock::calcBlocminMaxWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcBorderBoxWidth):
        (WebCore::RenderBox::calcBorderBoxHeight):
        (WebCore::RenderBox::calcContentBoxWidth):
        (WebCore::RenderBox::calcContentBoxHeight):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedHeight):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        * rendering/RenderCanvas.cpp:
        (WebCore::RenderCanvas::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcMinMaxWidth):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        (WebCore::RenderFlow::lowestPosition):
        (WebCore::RenderFlow::rightmostPosition):
        (WebCore::RenderFlow::leftmostPosition):
        (WebCore::RenderFlow::paintOutlineForLine):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::absoluteBoundingBox):
        (WebCore::Marquee::marqueeSpeed):
        (WebCore::Marquee::computePosition):
        (WebCore::Marquee::timerFired):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::caretRect):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::RenderText::minXPos):
        (WebCore::RenderText::width):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkLinesForOverflow):
        * rendering/render_form.cpp:
        (WebCore::RenderLineEdit::setSelectionStart):
        (WebCore::RenderLineEdit::setSelectionEnd):
        (WebCore::RenderLineEdit::setSelectionRange):
        (WebCore::RenderFieldset::layoutLegend):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderSelect::layout):
        (WebCore::RenderTextArea::calcMinMaxWidth):
        (WebCore::RenderSlider::updateFromElement):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        * rendering/render_line.h:
        (WebCore::RootInlineBox::selectionHeight):
        * rendering/render_list.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/table_layout.cpp:
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        Use min/max instead of kMin/kMax.

2006-04-12  Darin Adler  <darin@apple.com>

        Rubber-stamped by Anders.

        - get ready for some more de-KWQ-ing done by the renaming script in two ways
            1) stop using forwarding headers for things within WebCore
            2) remove a bit of unused stuff

        * loader/CachedImage.h:
        * loader/CachedImage.cpp:
        * loader/DocLoader.cpp:
        * loader/DocLoader.h:
        * page/Frame.cpp:
        * xml/XSLTProcessor.cpp:
        Removed unused showAnimations functions and data. We can add back later if we need it.
        And if we do, we won't use a typedef from KHTMLSettings.

        * ForwardingHeaders/java: Removed.
        * ForwardingHeaders/java/kjavaappletwidget.h: Removed.
        * ForwardingHeaders/khtml_settings.h: Removed.
        * ForwardingHeaders/kio: Removed.
        * ForwardingHeaders/kio/global.h: Removed.
        * ForwardingHeaders/ksslkeygen.h: Removed.
        * ForwardingHeaders/q3ptrlist.h: Removed.
        * ForwardingHeaders/q3valuelist.h: Removed.
        * ForwardingHeaders/qcombobox.h: Removed.
        * ForwardingHeaders/qfontmetrics.h: Removed.
        * ForwardingHeaders/qlineedit.h: Removed.
        * ForwardingHeaders/qmatrix.h: Removed.
        * ForwardingHeaders/qptrlist.h: Removed.
        * ForwardingHeaders/qptrqueue.h: Removed.
        * ForwardingHeaders/qregexp.h: Removed.
        * ForwardingHeaders/qscrollbar.h: Removed.
        * ForwardingHeaders/qtextedit.h: Removed.
        * ForwardingHeaders/qtextstream.h: Removed.
        * ForwardingHeaders/qvaluelist.h: Removed.
        * ForwardingHeaders/qwmatrix.h: Removed.

        * WebCore+SVG/DOMList.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_window.cpp:
        * css/css_stylesheetimpl.h:
        * css/css_valueimpl.cpp:
        * css/css_valueimpl.h:
        * css/cssstyleselector.cpp:
        * dom/CharacterData.cpp:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/EventTargetNode.cpp:
        * dom/Node.cpp:
        * editing/BreakBlockquoteCommand.h:
        * editing/htmlediting.cpp:
        * html/FormDataList.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLTokenizer.h:
        * html/html_objectimpl.cpp:
        * kcanvas/KCanvasFilters.cpp:
        * kcanvas/KCanvasMatrix.cpp:
        * kcanvas/KCanvasMatrix.h:
        * kcanvas/KCanvasPath.cpp:
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/RenderForeignObject.h:
        * kcanvas/RenderPath.h:
        * kcanvas/RenderSVGImage.h:
        * kcanvas/RenderSVGText.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        * ksvg2/svg/SVGLengthList.cpp:
        * ksvg2/svg/SVGMatrix.h:
        * ksvg2/svg/SVGNumberList.cpp:
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGStringList.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/svgpathparser.cpp:
        * kwq/KWQKHTMLSettings.h:
        * loader/Cache.h:
        * loader/CachedObject.h:
        * loader/Decoder.cpp:
        * loader/FormData.h:
        * loader/loader.h:
        * page/Frame.h:
        * page/FramePrivate.h:
        * platform/Font.cpp:
        * platform/SegmentedString.h:
        * platform/mac/FontMac.mm:
        * platform/mac/WebCoreTextField.mm:
        * rendering/RenderBlock.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/bidi.h:
        * rendering/break_lines.cpp:
        * rendering/render_applet.cpp:
        * rendering/render_form.cpp:
        * rendering/render_form.h:
        * rendering/render_frames.cpp:
        * rendering/render_style.h:
        * xml/xmlhttprequest.cpp:
        Updated includes.

        * WebCore.xcodeproj/project.pbxproj: Resorted a couple things.

2006-04-12  Adele Peterson  <adele@apple.com>

        Reviewed by Darin and Tim O.

        WebCore part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=8061
        REGRESSION: New text fields need to send callbacks used by autocomplete

        Fix for:
        http://bugs.webkit.org/show_bug.cgi?id=8156
        FrameMac::submitForm is busted after Vector changes

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]): Use boundingBox method so this no longer relies on an NSTextField.  
        The old code is no longer needed because this method was used by autocomplete, and that was not enabled for password or search fields.
        (-[DOMHTMLInputElement _replaceCharactersInRange:withString:selectingFromIndex:]): New implementation that uses setValue and setSelectionRange
        instead of NSTextField specific code.
        (-[DOMHTMLInputElement _selectedRange]): Creates range by calling selectionStart and selectionEnd on the input element.
        (-[DOMHTMLInputElement _setAutofilled:]): Provides a way for the autofill code to set a flag on the input element so
         it knows when its value is set by autofill.  This is how we change the background color.
        * bindings/objc/DOMPrivate.h: Removed _displayedValue, _setDisplayedValue, _setBackgroundColor since these are no
         longer needed for the new text field implementation, and aren't used for remaining NSView-style password and search fields.
         Added _setAutofilled method.
        * bridge/mac/FrameMac.h: Added virtual clearRecordedFormValues and recordFormValue.  These were moved into Frame.cpp recently, which broke
        how Safari asked to add form values to the keychain.

        * bridge/mac/FrameMac.mm:
        (WebCore::createNSDictionary): Added. Converts a hashmap to an NSDictionary for m_formValuesAboutToBeSubmitted.  This is needed to fix the submit form bug.
        (WebCore::selectorForKeyEvent): Added.  This helper function converts key events into selectors that the autocomplete code needs to know about.
        (WebCore::FrameMac::FrameMac):
        (WebCore::FrameMac::submitForm): Convert saved form and formValues into DOMElement and NSMutableDictionary.
        (WebCore::FrameMac::textFieldDidBeginEditing): Added so the input element can send this notification over the bridge.
        (WebCore::FrameMac::textFieldDidEndEditing): ditto.
        (WebCore::FrameMac::textDidChangeInTextField): ditto.
        (WebCore::FrameMac::doTextFieldCommandFromEvent): ditto. Also calls selectorForKeyEvent.
        (WebCore::FrameMac::textWillBeDeletedInTextField): ditto.
        * page/Frame.cpp:
        (WebCore::Frame::textFieldDidBeginEditing): ditto.
        (WebCore::Frame::textFieldDidEndEditing): ditto.
        (WebCore::Frame::textDidChangeInTextField): ditto.
        (WebCore::Frame::doTextFieldCommandFromEvent): ditto.
        (WebCore::Frame::textWillBeDeletedInTextField): ditto.
        * page/Frame.h: ditto.
        * platform/PlatformString.h: (WebCore::String::replace): Added to use an existing version of StringImpl::replace.

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::setSelectionRange): Setting the selection here should close the typing command.
        (WebCore::RenderTextField::subtreeHasChanged): Calls textDidChangeInTextField.

        * dom/Document.cpp: (WebCore::Document::setFocusNode): Calls dispatchFocusEvent and dispatchBlurEvent instead of directly dispatching the events.  This gives the node a chance to do other work before dispatching the event.

        * dom/EventTargetNode.cpp:
        (WebCore:: EventTargetNode::dispatchFocusEvent): Added.
        (WebCore:: EventTargetNode::dispatchBlurEvent): Added.
        * dom/EventTargetNode.h:

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::init): initializes m_autofilled.
        (WebCore::HTMLInputElement::dispatchFocusEvent): Calls textFieldDidBeginEditing and then calls up to the base class
        (WebCore::HTMLInputElement::dispatchBlurEvent): Calls textFieldDidEndEditing and then calls up to the base class
        (WebCore::HTMLInputElement::defaultEventHandler): For keypress events, calls doTextFieldCommandFromEvent so the form delegate will
        have a chance to say whether or not it is going to handle the event.
       (WebCore::HTMLInputElement::isKeyboardFocusable): Uses isNonWidgetTextField instead of checking the inputType.
        (WebCore::HTMLInputElement::isMouseFocusable): ditto.
        (WebCore::HTMLInputElement::focus): ditto.
        (WebCore::HTMLInputElement::constrainValue): Uses isTextField instead of checking inputType.
        * html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::submit): ditto.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isTextField): Added. Checks for TEXT, PASSWORD, and SEARCH
        (WebCore::HTMLInputElement::isNonWidgetTextField): Added.  Checks for all converted controls.
        (WebCore::HTMLInputElement::autofilled): Added.
        (WebCore::HTMLInputElement::setAutofilled): Added.
        * html/HTMLTextFieldInnerElement.cpp: (WebCore::HTMLTextFieldInnerElement::defaultEventHandler): Uses isNonWidgetTextField instead of checking the inputType.

        * editing/DeleteSelectionCommand.cpp: (WebCore::DeleteSelectionCommand::doApply):
         If the deletion is occuring in a text field, call textWillBeDeletedInTextField so the frame can
         call across the bridge to notify the form delegate.

        * css/css_base.cpp: (WebCore::CSSSelector::extractPseudoType): Added autofill string for "-khtml-autofill".
        * css/css_base.h: (WebCore::CSSSelector::): Added PseudoAutofill to enum.
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector): Added case for PseudoAutofill that checks the input element's autofilled flag.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Changed  -webkit-focus-ring-color to -khtml-focus-ring-color for consistency.
        * css/html4.css: Added background-color and background-image for input:-khtml-autofill style.
         Changed -webkit-focus-ring-color to -khtml-focus-ring-color for consistency.
        * css/CSSValueKeywords.in: ditto.
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): ditto.
        (WebCore::CSSParser::parseShadow): ditto.

2006-04-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
         Reviewed by hyatt
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=4855
           List item's bullets fail to redraw correctly after their style is set with JavaScript
 
         * manual-tests/list-marker-repaint.html: Added.
         * rendering/RenderBlock.cpp:
         (WebCore::RenderBlock::layoutBlock): Call positionListMarker() after laying out
         the children.
         (WebCore::RenderBlock::calcInlineMinMaxWidth): Call calcWidth() on the child
         if we are going to use its marginLeft() or marginRight(), which is if they are
         given as a percentage or if the child is a list marker.
         * rendering/RenderBlock.h:
         (WebCore::RenderBlock::positionListMarker): Added this virtual function which
         RenderListItem implements and which is called from layoutBlock().
         * rendering/RenderFlow.cpp:
         (WebCore::RenderFlow::addFocusRingRects): Avoid adding focus rings around outside list
         markers. Previously it did not matter since the markers had zero width.
         * rendering/bidi.cpp:
         (WebCore::RenderBlock::findNextLineBreak): Outside list markers should not contribute
         to the line width, even now that they have width.
         * rendering/render_line.cpp:
         (WebCore::InlineFlowBox::placeBoxesHorizontally): Skip outside list markers.
         * rendering/render_list.cpp:
         (WebCore::RenderListItem::positionListMarker): Added.
         (WebCore::RenderListMarker::paint): Removed code that was used to right-align outside
         text markers, since that is achieved by margins now.
         (WebCore::RenderListMarker::calcMinMaxWidth): Changed the marker height to be the font height.
         Made the width of outside list markers non-zero and equal to the width of inside markers.
         Changed the width to include only the marker and not any padding. Increased the width of bullets
         by 2 to contain spillage due to antialiasing.
         (WebCore::RenderListMarker::calcWidth): Calculate horizontal margins. Padding that was
         previously included in the width is now part of the margins. 
         (WebCore::RenderListMarker::getRelativeMarkerRect): Adjusted for the changes to width and
         margins.
         * rendering/render_list.h:

2006-04-12  Darin Adler  <darin@apple.com>

        Rubber-stamped by Hyatt.

        - moved some more files out of KWQ to more-permanent homes

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for new locations.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * kwq/BlockExceptions.h: Removed.
        * kwq/BlockExceptions.mm: Removed.
        * kwq/ClipboardMac.h: Removed.
        * kwq/ClipboardMac.mm: Removed.
        * kwq/DeprecatedPtrList.h: Removed.
        * kwq/DeprecatedPtrListImpl.cpp: Removed.
        * kwq/DeprecatedPtrListImpl.h: Removed.
        * kwq/DeprecatedValueList.h: Removed.
        * kwq/DeprecatedValueListImpl.cpp: Removed.
        * kwq/DeprecatedValueListImpl.h: Removed.
        * kwq/WebCoreTextArea.h: Removed.
        * kwq/WebCoreTextArea.mm: Removed.
        * kwq/WebCoreTextField.h: Removed.
        * kwq/WebCoreTextField.mm: Removed.
        * platform/DeprecatedPtrList.h: Added.
        * platform/DeprecatedPtrListImpl.cpp: Added.
        * platform/DeprecatedPtrListImpl.h: Added.
        * platform/DeprecatedValueList.h: Added.
        * platform/DeprecatedValueListImpl.cpp: Added.
        * platform/DeprecatedValueListImpl.h: Added.
        * platform/mac/BlockExceptions.h: Added.
        * platform/mac/BlockExceptions.mm: Added.
        * platform/mac/ClipboardMac.h: Added.
        * platform/mac/ClipboardMac.mm: Added.
        * platform/mac/WebCoreTextArea.h: Added.
        * platform/mac/WebCoreTextArea.mm: Added.
        * platform/mac/WebCoreTextField.h: Added.
        * platform/mac/WebCoreTextField.mm: Added.

2006-04-12  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4386640> AX: AXPreviousSentenceStartTextMarkerForTextMarker does not respect paragraph boundary
        <rdar://problem/4414575> AX: Dictionary popup cannot find some words on Dictionary.app

        AXPreviousSentenceStartTextMarkerForTextMarker failed to stop at the beginning a block because
        SimplifiedBackwardsTextIterator::handleNonTextNode() emitted a space when exiting the block.
        Fixed by emitting a newline instead.
        
        Word boundary failed to stop at the beginning of a block because no character at all was emitted
        when leaving the block, because the exitNode was checking specific html tags to decide whether the
        node is block, but the node was xml.  Fixed by using the node's renderer, if present.
        
        (see related changes in WebKit)
        
        Tests added:
        * editing/selection/extend-by-sentence-001.html: Added.
        * fast/dom/inner-text-001.html: Added.
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]):
        Add sentence navigation/selection.
        
        * editing/Selection.cpp:
        (WebCore::Selection::validate):
        Add sentence navigation/selection.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        (WebCore::SelectionController::modifyMovingRightForward):
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        (WebCore::SelectionController::modifyMovingLeftBackward):
        (WebCore::SelectionController::modify):
        Add sentence navigation/selection.

        * editing/TextGranularity.h:
        (WebCore::):
        Add SentenceGranularity and SentenceBoundary.

        * editing/TextIterator.cpp:
        (WebCore::isTableCell):
        (WebCore::shouldEmitTabBeforeNode):
        (WebCore::shouldEmitNewlineForNode):
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        (WebCore::shouldEmitExtraNewlineForNode):
        New utility functions that prefer renderers over html tag names.

        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        Use new utility functions.
        
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        Use new utility functions.  Also emit linefeed instead of space,
        so sentence parsing works across block boundaries.
        
        (WebCore::SimplifiedBackwardsTextIterator::exitNode):
        Use new utility functions.

        (WebCore::SimplifiedBackwardsTextIterator::emitNewline):
        Renamed from emitNewlineForBROrText because it is not always for BR or text.
        
        * editing/TextIterator.h:
        Renamed emitNewlineForBROrText to emitNewline.
        
        * editing/visible_units.cpp:
        * editing/visible_units.h:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::previousSentencePosition):
        (WebCore::nextSentencePosition):
        Add sentence navigation/selection.

2006-04-12  Darin Adler  <darin@apple.com>

        Rubber-stamped by Hyatt.

        - moved Decoder and FormData classes into loader directory
          (Decoder, because it's part of the loading process.
           FormData, because it's used as a parameter when specifying
           what to load. Arguably either could be in page instead.)
        - moved Length.h from css to renderer, cause that's where Hyatt
          says it belongs

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for new locations.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * khtml: Removed.
        * loader/Decoder.cpp: Added.
        * loader/Decoder.h: Added.
        * loader/FormData.cpp: Added.
        * loader/FormData.h: Added.

        * css/Length.h: Removed.
        * rendering/Length.h: Added.

        * bridge/mac/WebCoreEncodings.mm:
        * dom/Document.h:
        * kwq/KWQFormData.mm:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXSLStyleSheet.cpp:
        * page/ResourceRequest.h:
        * platform/TransferJobInternal.h:
        * xml/xmlhttprequest.cpp:
        Updated includes.

2006-04-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin

        - fix http://bugs.webkit.org/show_bug.cgi?id=8337
          Incomplete repaint of inlines' outline during editing

        * manual-tests/inline-outline-repaint.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Add the maximal outline width to the
        inlines' repaint rect.

2006-04-12  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8335>
        Implement execCommand(InsertHorizontalRule)

        * editing/JSEditor.cpp:

2006-04-12  Darin Adler  <darin@apple.com>

        Rubber-stamped by Hyatt.

        - moved xsl files into xml directory, removed xbl files (for now)

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for new locations.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * khtml/xbl: Removed.
        * khtml/xsl: Removed.
        * xml/XSLStyleSheet.cpp: Added.
        * xml/XSLStyleSheet.h: Added.
        * xml/XSLTProcessor.cpp: Added.
        * xml/XSLTProcessor.h: Added.

2006-04-12  David Hyatt  <hyatt@apple.com>

        Fix for 5283, make sure overflow doesn't paint on top of positioned elements.

        Reviewed by beth

        * kwq/RenderTreeAsText.cpp:
        (writeLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::dirtyOverflowList):
        (WebCore::RenderLayer::updateOverflowList):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::shouldBeOverflowOnly):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::isOverflowOnly):
        (WebCore::RenderLayer::overflowList):

2006-04-12  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Turn SVG support back on.
        I accidentally checked in this file with SVG off last night.

2006-04-12  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/TransferJobInternal.h: Declare HANDLE.
        * platform/image-decoders/gif/GIFImageReader.h: Include GIFImageDecoder.h.
        * rendering/RenderThemeWin.h: Declare HANDLE and HMODULE.

2006-04-12  Darin Adler  <darin@apple.com>

        - another attempt to get things building

        * bindings/js/kjs_proxy.cpp: Add "kjs_events.h" include, needed when not
        building SVG (so for Windows too).
        * editing/TextIterator.h: Add back include of Vector.h.

2006-04-11  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * html/HTMLCollection.h: Add back include of Vector.h.
        * page/Frame.h: Ditto.
        * platform/Timer.h: Ditto.

        - more changes for no-SVG (not working yet though)

        * editing/CompositeEditCommand.h: Added css_valueimpl.h include.

2006-04-11  Darin Adler  <darin@apple.com>

        - try to fix no-SVG build

        * kwq/RenderTreeAsText.cpp: Added back an include only needed for non-SVG.
        * rendering/RenderObject.h: Ditto.

2006-04-11  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * ForwardingHeaders/kxmlcore/HashForward.h: Removed.
        * dom/xml_tokenizer.h: Include another header instead of HashForward.h.
        * loader/Cache.h: Ditto.
        * page/Page.h: Ditto.
        * platform/TransferJob.h: Ditto.

2006-04-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Fixes more instances of:
        <rdar://problem/3950559>
        CrashTracer: 2116 crashes in Mail at com.apple.WebCore: khtml::CompositeEditCommand::insertNodeAfter + 32

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Do paragraph merging using moveParagraphs.

2006-04-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Some setup for work on paste performance.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraph): 
        Moved code from mergeParagraphs so that it can be used in ReplaceSelectionCommand.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::init): Put the code that chooses m_deepPosition into initDeepPosition.
        (WebCore::VisiblePosition::initDeepPosition): 
        Fixed a bug: don't fall through to the code that's only for positions inside unrendered space between blocks when
        downstream() is a candidate.  Added a comment about why the fall through code is necessary.
        * editing/VisiblePosition.h:

2006-04-11  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.
        
        - fixed <rdar://problem/4509328> highlight all matches hangs when searching for tab character on www.google.com (and others)
        
        For reasons not yet completely understood, searching for a tab character on some pages (Google, Amazon) finds a match
        with a non-collapsed range but then claims that the end visible position of the match is the original start visible 
        position of the search range. This was causing the highlightAllMatches code to loop forever. Fixed the loop by 
        checking for the non-advancing search range explicitly. I'm going to track down a reduction of the bogus 
        search-for-tab issue, and write that up as a separate bug (that bug is not a regression; you can "find" a tab on 
        google in Tiger also).

        * page/Frame.cpp:
        (WebCore::Frame::highlightAllMatchesForString):
        break the loop if the search range hasn't advanced

2006-04-10  Darin Adler  <darin@apple.com>

        Rubber-stamped by John Sullivan (except for pbxproj change).

        - updated to use the new Forward.h and HashForward.h headers
        - moved the showTree debugging functions out of the WebCore
          namespace so they are easier to call from gdb, and renamed
          the showTree member functions so they don't get in the way;
          now you can do "call showTree(x)" in gdb and it just works
        - removed a lot of unneeded includes

        * WebCore.xcodeproj/project.pbxproj: Fixed a lot of paths that
        were not relative to the enclosing group.

        * ForwardingHeaders/kxmlcore/Forward.h: Added.
        * ForwardingHeaders/kxmlcore/HashForward.h: Added.
        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        * bindings/js/JSXMLHttpRequest.cpp:
        * bindings/js/JSXMLHttpRequest.h:
        * bindings/js/JSXSLTProcessor.h:
        * bindings/js/kjs_binding.h:
        * bindings/js/kjs_dom.cpp:
        * bindings/js/kjs_dom.h:
        * bindings/js/kjs_events.cpp:
        * bindings/js/kjs_events.h:
        * bindings/js/kjs_html.cpp:
        * bindings/js/kjs_navigator.cpp:
        * bindings/js/kjs_navigator.h:
        * bindings/js/kjs_proxy.cpp:
        * bindings/js/kjs_traversal.h:
        * bindings/js/kjs_window.cpp:
        * bindings/js/kjs_window.h:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMCore.h:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/objc/DOMInternal.mm:
        * bindings/objc/DOMUtility.mm:
        * bindings/objc/DOMViews.mm:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.mm:
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * bridge/mac/WebCoreFrameNamespaces.mm:
        * bridge/mac/WebCoreJavaScript.mm:
        * bridge/win/PageWin.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/css_base.h:
        * css/css_ruleimpl.h:
        * css/css_valueimpl.cpp:
        * css/cssparser.cpp:
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        * css/cssstyleselector.h:
        * dom/AbstractView.h:
        * dom/AtomicStringList.h:
        * dom/Attribute.cpp:
        * dom/Attribute.h:
        * dom/Comment.cpp:
        * dom/ContainerNode.cpp:
        * dom/DOMImplementation.cpp:
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Element.h:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dump):
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        (WebCore::eventDispatchForbidden):
        * dom/EventTargetNode.h:
        (WebCore::EventTargetNode::postDispatchEventHandler):
        * dom/NamedAttrMap.h:
        * dom/Node.cpp:
        (WebCore::Node::showNode):
        (WebCore::Node::showTree):
        (WebCore::Node::showTreeAndMark):
        (showTree):
        * dom/Node.h:
        * dom/NodeList.cpp:
        * dom/NodeList.h:
        * dom/Position.cpp:
        (showTree):
        * dom/Position.h:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * dom/dom2_eventsimpl.cpp:
        * dom/dom2_eventsimpl.h:
        * dom/dom2_traversalimpl.h:
        * dom/dom_xmlimpl.cpp:
        * dom/xml_tokenizer.cpp:
        * dom/xml_tokenizer.h:
        * editing/AppendNodeCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/CreateLinkCommand.cpp:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        * editing/EditCommand.cpp:
        * editing/EditCommand.h:
        * editing/HTMLInterchange.cpp:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/JSEditor.cpp:
        * editing/JoinTextNodesCommand.cpp:
        * editing/MergeIdenticalElementsCommand.cpp:
        * editing/ModifySelectionListLevelCommand.cpp:
        * editing/MoveSelectionCommand.cpp:
        * editing/RebalanceWhitespaceCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/ReplaceSelectionCommand.h:
        * editing/Selection.cpp:
        (WebCore::Selection::formatForDebugger):
        (WebCore::Selection::showTree):
        (showTree):
        * editing/Selection.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::formatForDebugger):
        (WebCore::SelectionController::showTree):
        (showTree):
        * editing/SelectionController.h:
        * editing/TextIterator.cpp:
        * editing/TextIterator.h:
        * editing/TypingCommand.cpp:
        * editing/TypingCommand.h:
        * editing/UnlinkCommand.cpp:
        * editing/VisiblePosition.cpp:
        (WebCore::isEqualIgnoringAffinity):
        (WebCore::VisiblePosition::formatForDebugger):
        (WebCore::VisiblePosition::showTree):
        (showTree):
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::VisiblePosition):
        (WebCore::operator==):
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/htmlediting.h:
        * editing/markup.cpp:
        * editing/markup.h:
        (WebCore::):
        * editing/visible_units.cpp:
        * html/CanvasGradient.cpp:
        * html/CanvasRenderingContext2D.h:
        * html/CanvasStyle.cpp:
        * html/CanvasStyle.h:
        * html/FormDataList.cpp:
        * html/FormDataList.h:
        * html/HTMLCollection.cpp:
        * html/HTMLCollection.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/HTMLElement.cpp:
        * html/HTMLElementFactory.cpp:
        * html/HTMLElementFactory.h:
        * html/HTMLFormCollection.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLParser.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * html/html_baseimpl.cpp:
        * html/html_headimpl.h:
        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasPath.h:
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderPath.h:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * khtml/misc/decoder.cpp:
        * khtml/misc/decoder.h:
        * khtml/xsl/XSLStyleSheet.cpp:
        * khtml/xsl/XSLTProcessor.cpp:
        * khtml/xsl/XSLTProcessor.h:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/ecma/GlobalObject.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimateColorElement.h:
        * ksvg2/svg/SVGAnimatedColor.h:
        * ksvg2/svg/SVGAnimatedLengthList.h:
        * ksvg2/svg/SVGAnimatedNumberList.h:
        * ksvg2/svg/SVGAnimatedString.h:
        * ksvg2/svg/SVGAnimatedTransformList.h:
        * ksvg2/svg/SVGAnimationElement.h:
        * ksvg2/svg/SVGColor.h:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGHelper.h:
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGPaint.h:
        * ksvg2/svg/SVGPathSeg.h:
        * ksvg2/svg/SVGPatternElement.h:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGStringList.h:
        * ksvg2/svg/SVGTransform.h:
        * kwq/AccessibilityObjectCache.mm:
        * kwq/ClipboardMac.mm:
        * kwq/JavaAppletWidget.mm:
        * kwq/KWQComboBox.mm:
        * kwq/KWQEditCommand.mm:
        * kwq/KWQFileButton.mm:
        * kwq/KWQKHTMLSettings.h:
        * kwq/KWQKSSLKeyGen.mm:
        * kwq/KWQLoader.mm:
        * kwq/KWQPageState.mm:
        * kwq/KWQTextEdit.mm:
        * kwq/RegularExpression.h:
        * kwq/RenderTreeAsText.cpp:
        * kwq/RenderTreeAsText.h:
        * kwq/WebCoreAXObject.mm:
        * loader/Cache.cpp:
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedObject.h:
        * loader/CachedScript.cpp:
        * loader/CachedXBLDocument.cpp:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTree.cpp:
        * page/FrameTree.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/Page.cpp:
        * page/Page.h:
        * page/Plugin.h:
        (WebCore::Plugin::Plugin):
        (WebCore::Plugin::view):
        * platform/Color.cpp:
        * platform/FloatRect.h:
        * platform/Font.cpp:
        * platform/Font.h:
        * platform/FontFamily.cpp:
        * platform/GraphicsContext.cpp:
        * platform/Image.cpp:
        * platform/Image.h:
        * platform/IntRect.h:
        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/SegmentedString.h:
        * platform/Shared.h:
        * platform/StreamingTextDecoder.cpp:
        * platform/StringImpl.cpp:
        * platform/StringImpl.h:
        * platform/TextEncoding.h:
        * platform/Timer.cpp:
        * platform/Timer.h:
        * platform/TransferJob.cpp:
        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/cairo/ImageCairo.cpp:
        * platform/cairo/ImageSourceCairo.cpp:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/mac/FontFamilyMac.mm:
        * platform/mac/FontMac.mm:
        * platform/mac/ImageMac.mm:
        * platform/mac/TextEncodingMac.cpp:
        * platform/mac/TransferJobMac.mm:
        * platform/win/FontPlatformDataWin.cpp:
        * platform/win/TransferJobWin.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderCanvas.cpp:
        * rendering/RenderCanvas.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlow.cpp:
        * rendering/RenderFlow.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (showTree):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextField.cpp:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeWin.cpp:
        * rendering/bidi.cpp:
        * rendering/render_form.h:
        * rendering/render_line.cpp:
        (showTree):
        * rendering/render_line.h:
        * rendering/render_list.cpp:
        * rendering/render_replaced.cpp:
        * rendering/render_replaced.h:
        * rendering/render_style.cpp:
        * rendering/render_style.h:
        * xml/xmlhttprequest.h:

2006-04-10  Darin Adler  <darin@apple.com>

        - try to fix the Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Fix mistaken bad editing of
        AdditionalIncludeDirectories.

2006-04-10  David Hyatt  <hyatt@apple.com>

        Make focus ring painting respect clips set by WebCore (e.g., overflow).

        Reviewed by darin

        * platform/GraphicsContext.h:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setFocusRingClip):
        (WebCore::GraphicsContext::clearFocusRingClip):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/mac/WebCoreGraphicsBridge.h:
        * platform/mac/WebCoreGraphicsBridge.m:
        (-[WebCoreGraphicsBridge drawFocusRingWithPath:radius:color:clipRect:]):
        * rendering/RenderLayer.cpp:
        (WebCore::setClip):
        (WebCore::restoreClip):

2006-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - death to khtml/ecma, long live bindings/js

        * khtml/ecma: Removed. Moved all files to bindings/js.

        * bindings/js/JSDOMParser.cpp: Added.
        * bindings/js/JSDOMParser.h: Added.
        * bindings/js/JSXMLHttpRequest.cpp: Added.
        * bindings/js/JSXMLHttpRequest.h: Added.
        * bindings/js/JSXMLSerializer.cpp: Added.
        * bindings/js/JSXMLSerializer.h: Added.
        * bindings/js/JSXSLTProcessor.cpp: Added.
        * bindings/js/JSXSLTProcessor.h: Added.
        * bindings/js/kjs_binding.cpp: Added.
        * bindings/js/kjs_binding.h: Added.
        * bindings/js/kjs_css.cpp: Added.
        * bindings/js/kjs_css.h: Added.
        * bindings/js/kjs_dom.cpp: Added.
        * bindings/js/kjs_dom.h: Added.
        * bindings/js/kjs_events.cpp: Added.
        * bindings/js/kjs_events.h: Added.
        * bindings/js/kjs_html.cpp: Added.
        * bindings/js/kjs_html.h: Added.
        * bindings/js/kjs_navigator.cpp: Added.
        * bindings/js/kjs_navigator.h: Added.
        * bindings/js/kjs_proxy.cpp: Added.
        * bindings/js/kjs_proxy.h: Added.
        * bindings/js/kjs_traversal.cpp: Added.
        * bindings/js/kjs_traversal.h: Added.
        * bindings/js/kjs_views.cpp: Added.
        * bindings/js/kjs_views.h: Added.
        * bindings/js/kjs_window.cpp: Added.
        * bindings/js/kjs_window.h: Added.

        * DerivedSources.make: Removed khtml/ecma from directory list.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Moved files from
        khtml/ecma to bindings/js.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2006-04-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - try to fix the Windows build

        * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::reset):
        Put code to release m_drawingContext into an __APPLE__ ifdef.

        * platform/win/TemporaryLinkStubs.cpp:

2006-04-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Eric, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8295
          Dictionary pop-up panel targets the wrong word in a scrolled IFRAME

        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerForPosition:]): Removed the addition of scroll
        offsets, which is redundant for scrolled views, then changed the first view
        to be the document's scrolled view instead of its scroll view (all subsequent views were
        already scrolled views).
        * manual-tests/dictionary-scrolled-iframe.html: Added.

2006-04-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7877
        XMLHttpRequest ignores username/password passed to open()

        Test: http/tests/xmlhttprequest/basic-auth.html

        * platform/KURL.cpp:
        (KURL::setUser): Enable a code path that handles non-empty user name -
        it was already present, but commented out and protected with an assertion.
        (KURL::setPass): Ditto.

2006-04-09  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4884
          Canvas element breaks when RenderObject creation is deferred by external CSS

        Test: fast/canvas/canvas-before-css.html

        This patch makes us match the canvas documentation in Hixie's Web Applications
        draft as far as when the canvas is created and recreated and how it's sized.
        It also gets rid of the compositeOperation attribute of the canvas element.
        We can add that back if we need it. Anders points out that this specifically
        changes behavior for canvas elements where the size is set in CSS and not with
        width and height attributes. The CSS size now determines how big a box the canvas
        is rendered into, but has no effect on the size of the canvas's buffer.

        * html/CanvasRenderingContext2D.h: Added overloads of drawImage that take
        HTMLCanvasElement, which is no longer derived from HTMLImageElement.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::imageSize): Renamed from imageOrCanvasSize. Now used for images only,
        because canvas is no longer derived from image.
        (WebCore::CanvasRenderingContext2D::drawImage): Split the implementation of this
        for image sources from the implementation for canvas sources.
        (WebCore::CanvasRenderingContext2D::willDraw): Changed to call a new willDraw
        function on the canvas element.
        (WebCore::CanvasRenderingContext2D::drawingContext): Changed to call drawingContext
        on the canvas element rather than the renderer.

        * html/HTMLCanvasElement.h: Changed HTMLCanvasElement to derive from HTMLElement
        instead of HTMLImageElement. Added width, height, setWidth, setHeight, willDraw,
        paint, drawingContext, createDrawingContext, and reset functions. Added m_size,
        m_createdDrawingContext, m_data, and m_drawingContext data members. Removed
        mapToEntry, attach, detach, and isURLAttribute functins.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Added initializers for new m_size,
        m_createdDrawingContext, m_data, and m_drawingContext data members.
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement): Free m_data and m_drawingContext.
        (WebCore::HTMLCanvasElement::parseMappedAttribute): Got rid of special case for
        srcAttr, which is no longer needed since we aren't deriving from HTMLImageElement.
        Added code that triggers a reset when either width or height is set.
        (WebCore::HTMLCanvasElement::createRenderer): Added code to set the intrinsic
        width and height of the renderer to the size of the element.
        (WebCore::HTMLCanvasElement::setHeight): Added. Sets the height attribute.
        (WebCore::HTMLCanvasElement::setWidth): Added. Sets the width attribute.
        (WebCore::HTMLCanvasElement::willDraw): Added. Tells the renderer to repaint.
        Also has FIXME mentioning we could dirty only the part that has changed in the future.
        (WebCore::HTMLCanvasElement::reset): Added. Sets the size of the canvas and discards
        the old buffer, which is an indirect way of resetting the buffer to transparent black.
        (WebCore::HTMLCanvasElement::paint): Added. Draws the canvas image into the graphics
        context that's passed in.
        (WebCore::HTMLCanvasElement::createDrawingContext): Added. Allocates a buffer for
        the bits, then creates a bitmap context for drawing into the buffer.
        (WebCore::HTMLCanvasElement::drawingContext): Added. Calls createDrawingContext if
        needed, then returns the current drawing context.
        (WebCore::HTMLCanvasElement::createPlatformImage): Changed to always call CGContextFlush
        and to create the image from the context in this class.

        * rendering/RenderHTMLCanvas.h: Remove almost all of the contents of this file.
        Removed ~RenderHTMLCanvas, setNeedsImageUpdate, element, updateDrawnImage, drawingContext,
        createDrawingContext, and drawnImage functions and _drawingContext, _drawingContextData,
        _drawnImage, and _needsImageUpdate booleans. Changed RenderHTMLCanvas to derive from
        RenderReplaced instead of RenderImage.

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas): Changed to only initialize RenderReplaced.
        (WebCore::RenderHTMLCanvas::renderName): Moved this in here, since there's no good reason
        to have this virtual function inlined.
        (WebCore::RenderHTMLCanvas::paint): Changed implementation to use HTMLCanvasElement::paint
        instead ofcalling CGContextDrawImage directly.
        (WebCore::RenderHTMLCanvas::layout): Removed the code that detects changes in width and
        causes the drawing context to be recreated; instead, if the width and height changes we
        scale when we paint the canvas.

        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        (WebCore::JSCanvasRenderingContext2DBaseProtoFunc::callAsFunction):
        Separated out handling for <canvas> vs. <img> elements in drawRect, since
        HTMLCanvasElement is no longer derived from HTMLImageElement.

2006-04-09  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6027:
        Dirty rect invalidation issues in mozilla sample

        Make sure the paths calculate the new bounding box and not
        use the cached bbox.

        No automated test case possible.

        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::setPath):

2006-04-09  Rob Buis  <buis@kde.org>

        Reviewed by darin.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6930:
        % width/height on nested <svg> tags do not work

        Set the context correctly for inner <svg>, so calculation of
        width/height for inner <svg> elements is done against the
        viewport element.

        Test: svg/custom/inner-percent.svg

        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::width):
        (WebCore::SVGSVGElement::height):

2006-04-08  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        No automated test case possible.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7531:
        hang in SVGPolygonElementImpl::toPathData in polygon test case

        Make sure the points list is cleared, just like the path
        list is cleared first before (re)parsing.

        * ksvg2/svg/SVGPolyElement.cpp:
        (SVGPolyElement::parseMappedAttribute):

2006-04-08  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7622
          REGRESSION: New text fields should compute maxlength considering composed character sequences

        Test: fast/forms/input-text-maxlength.html
        Test: fast/forms/input-text-paste-maxlength.html

        * html/HTMLInputElement.h: Removed all friend classes (not needed any more). Renamed
        typeEnum to InputType. Made init() function private. Tweaked parameter names and formatting
        in many function declarations. Made canHaveSelection, selectionStart, and selectionEnd
        const. Made data members except for m_name private instead of protected. Added private
        functions constrainValue and recheckValue. Removed unused isEditable function.

        * html/HTMLInputElement.cpp:
        (WebCore::numGraphemeClusters): Added.
        (WebCore::numCharactersInGraphemeClusters): Added.
        (WebCore::HTMLInputElement::isKeyboardFocusable): Use inputType() instead of using m_type
        directly.
        (WebCore::HTMLInputElement::isMouseFocusable): Ditto.
        (WebCore::HTMLInputElement::focus): Ditto.
        (WebCore::HTMLInputElement::setInputType): Added code to call constrainValue or recheckValue
        so we will enforce maxLen if changing from a type that doesn't have maxLen to one that does.
        (WebCore::HTMLInputElement::type): More-standard formatting for switch statement. Put
        cases into alphabetical order.
        (WebCore::HTMLInputElement::state): Changed switch statement to include all case values and
        not include a default case to take advantage of gcc's missing case warning.
        (WebCore::HTMLInputElement::restoreState): Ditto.
        (WebCore::HTMLInputElement::canHaveSelection): Ditto.
        (WebCore::HTMLInputElement::selectionStart): Ditto.
        (WebCore::HTMLInputElement::selectionEnd): Ditto.
        (WebCore::HTMLInputElement::setSelectionStart): Ditto.
        (WebCore::HTMLInputElement::setSelectionEnd): Ditto.
        (WebCore::HTMLInputElement::select): Ditto.
        (WebCore::HTMLInputElement::setSelectionRange): Ditto.
        (WebCore::HTMLInputElement::click): Ditto.
        (WebCore::HTMLInputElement::accessKeyAction): Ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute): Use inputType() instead of using m_type
        directly. Added call to recheckValue when parsing a new value for the maxlength attribute.
        (WebCore::HTMLInputElement::rendererIsNeeded): Changed switch statement to include all case
        values and not include a default case to take advantage of gcc's missing case warning.
        (WebCore::HTMLInputElement::createRenderer): Ditto.
        (WebCore::HTMLInputElement::attach): Remove code to condition the value attribute when done
        parsing. This is now all handled by constrainValue and recheckValue as needed.
        (WebCore::HTMLInputElement::isSuccessfulSubmitButton): Use inputType() instead of using
        m_type directly.
        (WebCore::HTMLInputElement::appendFormData): Ditto. Rearranged code a little.
        (WebCore::HTMLInputElement::setChecked): Ditto.
        (WebCore::HTMLInputElement::setIndeterminate): Ditto.
        (WebCore::HTMLInputElement::value): Ditto. Call constrainValue when reading the value out
        of the value attribute.
        (WebCore::HTMLInputElement::valueWithDefault): Use inputType() instead of using
        m_type directly. Changed switch statement to include all case values and not include a
        default case to take advantage of gcc's missing case warning.
        (WebCore::HTMLInputElement::setValue): Ditto. Call constrainValue when storing a value.
        (WebCore::HTMLInputElement::setValueFromRenderer): Added an assertion.
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): Use inputType() instead of
        using m_type directly.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Ditto.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): Ditto. Changed code to truncate inserted
        text in a BeforeTextInsertedEvent to use the new constrainValue function and also the
        numGraphemeClusters function, so it's based on grapheme clusters instead of characters and
        shares code.
        (WebCore::HTMLInputElement::constrainValue): Added.
        (WebCore::HTMLInputElement::recheckValue): Added.

        * html/HTMLIsIndexElement.cpp: (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        Removed unneeded code to set m_type to TEXT, which is already what it gets set to by
        the base class's constructor.

        * html/HTMLGenericFormElement.h: Removed unused isEditable function.
        * html/HTMLGenericFormElement.cpp: Ditto.
        * html/HTMLTextAreaElement.h: Ditto.
        * html/HTMLTextAreaElement.cpp: Ditto.

        * platform/StringImpl.cpp: (WebCore::StringImpl::truncate): Changed > to >= so that
        truncating to the size of the string does nothing, efficiently.

        * rendering/RenderText.h: Added declaration of characterBreakIterator.
        * rendering/RenderText.cpp:
        (WebCore::characterBreakIterator): Made this public so it can be used in other files.
        Maybe we should also move it to another source file later. Also renamed to remove the
        "get" from the title.
        (WebCore::RenderText::previousOffset): Updated for name change.
        (WebCore::RenderText::nextOffset): Updated for name change.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::updateFromElement):
        Removed code to implement maxlength checking. That's handled entirely in the DOM now.
        Also moved down the code to get the value into a string so that it's done only in the
        case where the string is used.

        * rendering/render_form.cpp: (WebCore::RenderFileButton::valueChanged): Use setValueFromRenderer
        instead of setting the value directly in the input element. We changed this for all the other
        types a while ago, and it works just as well for the input element.

        * dom/BeforeTextInsertedEvent.h: Added setText function. Previously, clients changed the text
        by modifying the text object in place, but going forward we'd like to avoid that sort of thing.
 
        * editing/ReplaceSelectionCommand.cpp: (WebCore::ReplacementFragment::ReplacementFragment):
        Changed code to assume clients will change the text in the event rather than mutating the
        text object itself. This is compatible with possible future changes to String to be copy
        on write.
        * editing/TypingCommand.cpp: (WebCore::TypingCommand::insertText): Ditto.

2006-04-07  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - test for http://bugs.webkit.org/show_bug.cgi?id=8134
          REGRESSION: dragging down from the middle of a text field does not select to end of field

        * editing/Selection.cpp:
        (WebCore::comparePositions): Added. Takes shadow content into account.
        (WebCore::Selection::validate): Changed to call comparePositions instead of calling
        Range::compareBoundaryPoints directly. Also removed unneeded code to redundantly set
        m_start and m_end to null and did a bit of reformatting.

        - some tiny efficiency improvements to the tokenizer -- no measurable speedup, but removes
          a little bit of unneeded code

        * html/HTMLTokenizer.cpp: (WebCore::HTMLTokenizer::parseTag): Changed all the places
        that do "unsigned short x = *c" to "unsigned short x = c->unicode()" when c is a QChar,
        otherwise we do an unnecessary conversion to char (which requires a branch to see if
        the c fits in a char).

2006-04-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        Rolled the fix for 8250 back in and fixed a bug:
        The local variables for the first and last nodes in the fragment
        need to be reset when the fragment is changed for plaintext-only mode
        or a change from the beforetextinserted event handler.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):

2006-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fixed REGRESSION: offsetParent on element with no offset parent crashes

        * dom/Element.cpp:
        (WebCore::Element::offsetParent): Add missing null check.

2006-04-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        maxlength truncation in text fields didn't work if the fragment was a
        single text node.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):

2006-04-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=8250>
        REGRESSION: Interchange newlines aren't passed with the khtmlBeforeTextInsertedEvent

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        Interchange content removal happened before khtmlBeforeTextInsertedEvent was sent.

2006-04-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <http://bugs.webkit.org/show_bug.cgi?id=8219>
        REGRESSION: Two extra newlines added when pasting a single styled line into a plaintext-only region

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        Converting the fragment to plaintext introduced an extraneous newline because
        the range passed to plainText ended after the paragraph containing the fragment
        built from the markup that TextEdit put on the paste board.  TextIterator will
        emit a newline when it exits a paragraph.
        Two extra newlines were added because the '\n' in the plaintext string turns
        into an interchange newline, which isn't removed because of 8250, and the
        interchange newline looks like inline content that requires the insertion of
        a paragraph separator during paste.
        Fixed by creating a range using VisiblePositions at the start and the end of 
        the node that holds the fragment during paste's test rendering.

2006-04-06  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=8145>
        REGRESSION: Pasting text from TextEdit with a bold word into text field results in crash

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply): 
        Assert that the node will be placed somewhere that's contenteditable.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto
        * editing/JSEditor.cpp: 
        Enabled insertHTML for plaintext-only regions since it's useful for debugging rich 
        content pastes into the new text fields.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        1) After the first paragraph of the fragment has been merged with the first part of the
        paragraph where the paste occured, if the next node to be inserted is inline, we put it 
        in a new paragraph because it was at the start of a paragraph in the fragment.  The change
        is to insert a paragraph separator if insertionPos.next() is null or outside of the current 
        editable region.
        2) Before the paste begins, a paragraph separator is inserted in order to avoid 
        nesting blocks from the fragment to be pasted inside the block where the paste will 
        occur.  I made two fixes to the code that decides whether or not to insert the 
        paragraph separator and added testcases for each.  Added a fixme because it appears that
        this code is also used to ensure that the aforementioned insertionPos will be at the end of 
        a paragraph.  This code should only be about preventing nesting.

2006-04-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - Convert Element JS bindings to be almost completely autogenerated
        http://bugs.webkit.org/show_bug.cgi?id=8227

        * dom/Element.idl: Declare full interface in IDL.
        * dom/Element.h:
        (WebCore::Element::tagQName): Renamed from tagName, so the real DOM
        method can be called tagName.
        (WebCore::Element::tagName): inline alias for nodeName.
        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits): Moved logic from JS bindings to
        core DOM.
        (WebCore::Element::scrollByLines): ditto
        (WebCore::Element::scrollByPages): ditto
        (WebCore::Element::offsetLeft): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::offsetTop): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::offsetWidth): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::offsetHeight): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::offsetParent): ditto
        (WebCore::Element::clientWidth): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::clientHeight): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::scrollLeft): ditto
        (WebCore::Element::scrollTop): ditto
        (WebCore::Element::setScrollLeft): ditto
        (WebCore::Element::setScrollTop): ditto
        (WebCore::Element::scrollWidth): ditto, plus make unrendered elements return 0 not undefined
        (WebCore::Element::scrollHeight): ditto, plus make unrendered elements return 0 not undefined

        * bindings/scripts/CodeGeneratorJS.pm: Added support for
        ConvertUndefinedToTrue, for benefit of scroll methods where
        omitted arguments should be treated as true.  However, maybe
        explicit overloading in the IDL would be a better long-term
        approach for optional arguments.

        * khtml/ecma/kjs_binding.cpp:
        (KJS::valueToStringWithNullCheck): fixed formatting
        (KJS::valueToBooleanTreatUndefinedAsTrue): added for binding of scrollIntoView
        (isn't this lame?)
        * khtml/ecma/kjs_binding.h:
        (KJS::toJS): fixed formatting, added new stuff
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMElement::getValueProperty): removed most of contents
        (KJS::DOMElement::putValueProperty): ditto
        (KJS::DOMElementProtoFunc::callAsFunction): ditto

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): updated for rename
        of tagName to tagQName
        (WebCore::CSSStyleSelector::checkOneSelector): ditto
        * dom/Document.cpp:
        (WebCore::Document::importNode): ditto
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle): ditto
        (WebCore::areIdenticalElements): ditto
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::inEitherTagList): ditto
        (WebCore::HTMLElement::inInlineTagList): ditto
        (WebCore::HTMLElement::inBlockTagList): ditto

2006-04-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8203 
        REGRESSION: "Invite a friend" text field in GMail page spills out 
        of table

        RenderReplaced::calcMinMaxWidth() sets m_minWidth to 0 when the 
        width is a percent, so this patch copies that behavior into 
        RenderTextField::calcMinMaxWidth().

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::calcMinMaxWidth):

2006-04-06  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add JSDocument.cpp.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8111
          REGRESSION (NativeTextField): first click in form field on weather.com leaves focus
          but no caret

        Test: fast/forms/input-text-self-emptying-click.html

        * page/MouseEventWithHitTestResults.h: Removed url, target, m_url and m_target,
        replacing them with isOverLink and m_isOverLink. Replaced innerNode with targetNode,
        and added logic to handle the case where the target node is removed from the document
        but the element the target node was in is still inside the document.
        * page/MouseEventWithHitTestResults.cpp: Added.

        * WebCore.xcodeproj/project.pbxproj: Added MouseEventWithHitTestResults.cpp.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * kwq/RenderTreeAsText.cpp: (nodePosition): Added a call to shadowParentNode so we
        correctly dump positions within shadow trees. This was needed to give a good result
        from my new test for this bug.

        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent): Update to pass fewer parameters to the
        constructor for MouseEventWithHitTestResults. Now takes isOverLink boolean, and no
        longer takes href and target parameters.

        * page/Frame.cpp:
        (WebCore::Frame::handleMousePressEventDoubleClick): Use new name targetNode, instead
        of old name innerNode.
        (WebCore::Frame::handleMousePressEventTripleClick): Ditto.
        (WebCore::Frame::handleMousePressEventSingleClick): Ditto. Also change code to check
        if over a link to use !isOverLink instead of url.isNull.
        (WebCore::Frame::handleMousePressEvent): Ditto. Also remove unused "url" local variable.
        (WebCore::Frame::handleMouseMoveEvent): Ditto.
        (WebCore::Frame::handleMouseReleaseEvent): Ditto.
        (WebCore::Frame::passWidgetMouseDownEventToWidget): Ditto.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::handleMousePressEvent): Use new name targetNode, instead of old
        name innerNode.
        (WebCore::FrameMac::handleMouseMoveEvent): Ditto.
        (WebCore::FrameMac::passSubframeEventToSubframe): Ditto.
        (WebCore::FrameMac::sendContextMenuEvent): Ditto.

        * page/FrameView.cpp:
        (WebCore::subframeForEvent): Use new name targetNode, instead of old name innerNode.
        (WebCore::FrameView::handleMousePressEvent): Ditto.
        (WebCore::FrameView::handleMouseDoubleClickEvent): Ditto.
        (WebCore::selectCursor): Ditto. Also change code to check if over a link to use
        isOverLink instead of !url.isNull.
        (WebCore::FrameView::handleMouseMoveEvent): Ditto.
        (WebCore::FrameView::handleMouseReleaseEvent): Ditto.
        (WebCore::FrameView::updateDragAndDrop): Ditto.

2006-04-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8184
          REGRESSION (r13655): Layer outline not clipped where it should be

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Reverted this part of the fix for bug 7943.
        The outlineRect should not be inflated.

2006-04-05  Rob Buis  <buis@kde.org>

        Reviewed by Eric, landed by Maciej.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7627:
        SVG from the W3C SVG 1.1 test suite (cubic01.svg) renders as all black

        Fix this svg stylesheet to use strict-mode, as this makes sure
        class selecting is done correctly.

        * ksvg2/svg/SVGStyleElement.cpp:
        (SVGStyleElement::childrenChanged):

2006-04-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs

        I forgot to convert one of the implicit remove/inserts to an explicit remove/insert,
        so we were hitting the assert I just added to InsertNodeBeforeCommand that checked for
        implicit removes.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2006-04-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - autogenerate bindings for all of the methods and properties of Document
        http://bugs.webkit.org/show_bug.cgi?id=8163

        - also removed document.actualEncoding since it is not in any spec
        or implemented by any other browser
        
        * DerivedSources.make: add JSDocument.h to results
        * WebCore.xcodeproj/project.pbxproj: Added new files to project
        * bindings/scripts/CodeGeneratorJS.pm: Support for new stuff needed by Document.
        * dom/Document.cpp:
        (WebCore::Document::readyState): moved impl here from JS bindings
        (WebCore::Document::inputEncoding): ditto
        (WebCore::Document::defaultCharset): ditto
        (WebCore::Document::setCharset): ditto
        * dom/Document.h:
        (WebCore::Document::charset): added, synonym for inputEncoding.
        (WebCore::Document::characterSet): ditto
        * dom/Document.idl: Added. Full interface for the Document object.
        * khtml/ecma/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction): JSDocument, not DOMDocument
        * khtml/ecma/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorProtoFunc::callAsFunction): ditto
        * khtml/ecma/kjs_binding.cpp:
        (KJS::jsStringOrFalse): Added this convenience for the method on Document
        that bizzarely returns false on failure and a string otherwise.
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_css.cpp:
        (KJS::toJS): renamed for consistency
        * khtml/ecma/kjs_css.h:
        * khtml/ecma/kjs_dom.cpp:
        - removed all traces of DOMDocument
        (KJS::toJS): JSDocument, not DOMDocument
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_html.cpp:
        (KJS::):
        (KJS::JSHTMLDocument::JSHTMLDocument): inherit from JSDocument
        (KJS::JSHTMLDocument::getOwnPropertySlot): ditto
        (KJS::JSHTMLDocument::put): ditto
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::toJS): added overloads
        (KJS::toNodeFilter): handle JS functions as well as impl NodeFilter objects
        * khtml/ecma/kjs_traversal.h:
        * platform/AtomicString.h:
        (WebCore::AtomicString::AtomicString): Allow implicit conversion from String.

2006-04-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8198>
        Hitting an assert on undo paste
        
        ReplaceSelectionCommand was doing a combination of undoable and non-undoable 
        removes from the ReplacementFragment.  On Undo Paste, the undoable removes 
        couldn't be undone because the tree was in a different state than it was
        at the time of the remove.  This patch makes all the removes from the fragment 
        non-undoable.  We could make them all undoable, but I can't think of any reason 
        why we'd want the fragment to be reconstructed on an Undo Paste.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        Assert that the node to append isn't already in a tree, since if it is, it will 
        be removed in a non-undoable way.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): 
        Nodes were being moved from the fragment to the document with undoable inserts.  
        Undoable inserts implicitly remove the node (in a non-undoable way) from its 
        old location if it is already in a tree.  I now explicitly remove the nodes 
        from the fragment before inserting them into the document to make it clear that 
        they are being removed in a non-non-undoable way.  I also changed the one undoable 
        remove from the fragment to a non-undoable remove.
        * editing/ReplaceSelectionCommand.h: 
        Made ReplacementFragment's non-undoable removeNode public.

2006-04-05  Darin Adler  <darin@apple.com>

        - fixed the build

        * WebCore.xcodeproj/project.pbxproj: Oops! Resolved merge conflict.

2006-04-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=8049
          StringImpl hash traits deleted value creates an init routine for WebCore
          <rdar://problem/4442248> REGRESSION: WebCore has init routines (8049)

        * platform/StringHash.h: Added. Moved hash functions and such for
        WebCore::String and friends into this file so we don't have to include
        the hash traits header everywhere. Changed hashing for WebCore::StringImpl
        and WebCore::String so that they use a raw pointer for the underlying
        storage type, taking advantage of the new feature added in JavaScriptCore.

        * platform/AtomicString.h: Moved StrHash specialization to StringHash.h.
        * platform/PlatformString.h: Moved StrHash specialization to StringHash.h.
        * platform/StringImpl.h: Moved StrHash, CaseInsensitiveHash, and HashTraits
        to StringHash.h. Left DefaultHash behind so that you can't get the wrong
        hash function by accident if you forget to include "StringHash.h".

        * platform/StringImpl.cpp: Added include of StringHash.h and removed
        RefPtr<StringImpl> HashTraits<RefPtr<StringImpl> >::_deleted, which is
        the object with a global initializer causing all the trouble!

        * kwq/AccessibilityObjectCache.h: Changed hash function to be IntHash
        instead of PtrHash.

        * dom/StyledElement.cpp: Changed MappedAttributeKeyTraits to inherit from
        the generic traits in KXMLCore so we get a StorageType. Also cleaned up a
        tiny bit by adding default values to the MappedAttributeKey constructor.

        * platform/CharsetNames.cpp: Changed hash traits here to be a new
        TextEncodingIDHashTraits struct rather than defining new default traits
        for the integer type since more integer types have default traits in
        HashTraits.h now. Also added a specialization so this class will share
        the underlying implementation (since InvalidEncoding happens to be -1).

        * bridge/mac/FrameMac.h:
        * dom/Document.h:
        * dom/xml_tokenizer.h:
        * khtml/xsl/XSLTProcessor.h:
        * kwq/JavaAppletWidget.h:
        * page/FramePrivate.h:
        * page/Page.cpp:
        * platform/AtomicString.cpp:
        * platform/TransferJob.h:
        * rendering/render_applet.h:
        Added include of StringHash.h.

        * WebCore.xcodeproj/project.pbxproj: Added StringHash.h. Remove unneeded
        CREATE_HASH_TABLE variable in build settings. Re-sorted some file lists.
        Added quotes to the CREATE_HASH_TABLE initialization in the rule that
        builds generated files. Removed various unneeded build settings for that
        target as well.

        * ForwardingHeaders/kxmlcore/HashTraits.h: Added.

        - other minor cleanup

        * bridge/mac/FrameMac.mm: Sorted includes.
        * dom/Node.cpp: Removed bogus symbol after #endif.

        * khtml/xsl/XSLTProcessor.cpp: Sorted includes. Removed redundant using
        namespace WebCore.
        * loader/Cache.cpp: Ditto.

2006-04-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4502311> text-transform:capitalize needs to 
        treat nbsp as a regular space when ICU changes

        There will be future changes in ICU to match the Unicode 4.1 
        standard which no longer recognizes &nbsp as a word separator. We 
        need to work around this with text-transform:capitalize because 
        words after non-breaking spaces still need to be capitalized.

        No layout tests added because existing layout tests cover this.

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::capitalize): If the character is a non-
        breaking space, add a regular space to our temporary buffer, 
        otherwise, just copy the character in.

2006-04-05  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8110
          Define navigator.vendorSub (bcms.gov.uk doesn't allow access to login page)

        Test: fast/dom/navigator-vendorSub.html

        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty): Return an empty string for vendorSub property.
        * khtml/ecma/kjs_navigator.h:

2006-04-04  Darin Adler  <darin@apple.com>

        Reviewed by Justin (editing parts) and Adele (the rest).

        - fix http://bugs.webkit.org/show_bug.cgi?id=8182
          some text-field-related layout tests are failing

        The smart paste code was getting confused and adding extra spaces.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Use isStartOfParagraph instead of
        isStartOfLine.
        (WebCore::ReplaceSelectionCommand::removeLinePlaceholderIfNeeded): Ditto.

        * editing/InsertParagraphSeparatorCommand.cpp: (WebCore::enclosingEmptyListItem):
        Change to call isStart/EndOfParagraph instead of Line.

        * editing/InsertTextCommand.cpp: (WebCore::InsertTextCommand::input):
        Add a comment about how isStartOfLine is almost certainly wrong here.

        - clean up some loose ends in the Frame class from the recent renaming

        * page/Frame.h: Removed declarations of deleteMe1, deleteMe2, and
        handleMouseMoveEventPart2.
        * page/Frame.cpp: (WebCore::Frame::handleMouseMoveEvent): Removed
        handleMouseMoveEventPart2 by renaming it to handleMouseMoveEvent and removing
        handleMouseMoveEvent itself.

        - invoke the makefile directly, removing the generate-derived-sources script

        * WebCore.vcproj/WebCore/build-generated-files.sh: Call make directly.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * generate-derived-sources: Removed.

2006-04-04  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8158
        REGRESSION: Clicking past RTL text in a new text field puts the caret on the wrong side of the text

        Tests:
        editing/selection/caret-rtl.html
        editing/selection/caret-rtl-2.html

        * rendering/RenderText.cpp: (WebCore::RenderText::positionForCoordinates):
        When calculating the position for the beginning or end of an InlineTextBox,
        we now use offsetForPosition instead of just using m_start and m_len, because
        offsetForPosition will take rtl text into account.  I also made some formatting
        changes.

2006-04-04  David Hyatt  <hyatt@apple.com>

        Fix for bug 8065, inline blocks incorrectly loses spaces between them.

        Reviewed by beth

        * dom/Text.cpp:
        (WebCore::Text::rendererIsNeeded):

2006-04-04  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for:
        http://bugs.webkit.org/show_bug.cgi?id=8092
        REGRESSION (NativeTextField): table contents misaligned in Netflix queue

        http://bugs.webkit.org/show_bug.cgi?id=8141
        REGRESSION: Native text field fails to wrap inside table

        http://bugs.webkit.org/show_bug.cgi?id=8072
        REGRESSION: text fields at connect.apple.com spill out of the containing box

        Test: fast/forms/input-table.html

        Rewrote calcMinMaxWidth for text fields so it considers width, 
        min-width, and max-width settings as well as the size attribute.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::calcMinMaxWidth):

2006-04-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        This is a followup to my fix for <rdar://problem/4493218>
        
        This patch re-names computeIntLength() and computeShortLength() to 
        be computeLengthInt() and computeLengthShort(), respectively, to 
        match the pre-existing computeLengthFloat(). This patch also adds 
        the slightly confusing-ly named computeLengthIntForLength() which 
        uses the max and min values of a 28-bit integer as bounds for 
        overflow. This function is necessary because Length objects expect 
        28-bit integers. 

        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        * css/css_valueimpl.h:
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):

2006-04-04  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        The Debug and Release frameworks are now built with install paths relative to the build products directory.
        This removes the need for other projects to build with -framework WebCore and -framework JavaScriptCore. 

        * WebCore.xcodeproj/project.pbxproj:

2006-04-04  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=6608>
        REGRESSION: Line disappears when deleting
        
        Rewrote moveNodesAfterNode to address these problems:
        It moved nodes without preserving their style. 
        It traversed over siblings looking for a br to know when
        to stop merging.  If the br was burried inside a span, it 
        wouldn't find it.  If the text is whitespace:pre, it wouldn't
        stop.
        In theory it would crash if the "enclosingInlineElements" of the start of the
        selection to delete and the end of the selection to delete were the
        same.  We think that this will fix these:
        <rdar://problems/3950559&4498113>
        CrashTracer: 2116 crashes in Mail at com.apple.WebCore: khtml::CompositeEditCommand::insertNodeAfter + 32
        CrashTracer: 1569 crashes in Mail at com.apple.WebCore: khtml::DeleteSelectionCommand::moveNodesAfterNode + 340
        But we haven't been able to construct a reproducible case.
        
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNodeAndPruneAncestors): Moved from ReplaceSelectionCommand.
        (WebCore::CompositeEditCommand::prune): Ditto.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::):
        * editing/markup.cpp:
        (WebCore::createMarkup): 
        Was crashing when passed a collapsed range.  I early return an empty string instead.

2006-04-04  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele Peterson.
        
        - WebCore part of <rdar://problem/4498418> "Autosaved" searchterms are saved during private browsing

        * bridge/mac/WebCoreSettings.h:
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setPrivateBrowsingEnabled:]):
        (-[WebCoreSettings privateBrowsingEnabled]):
        Teach WebCoreSettings about private browsing (WebKit knew, but WebCore didn't)
        
        * kwq/KWQKHTMLSettings.h:
        (KHTMLSettings::privateBrowsingEnabled):
        (KHTMLSettings::setPrivateBrowsingEnabled):
        Teach KHTMLSettings about private browsing
        
        * kwq/KWQLineEdit.mm:
        Fix wrong class in a category method declaration; the compiler didn't seem to mind.
        
        * kwq/WebCoreTextField.mm:
        (-[KWQSearchFieldCell _addStringToRecentSearches:]):
        Override this method to bail out if private browsing is enabled.

2006-04-04  Trey Matteson  <trey@usa.net>

        Reviewed by Hyatt.

        http://bugs.webkit.org/show_bug.cgi?id=7951
        REGRESSION: Safari crashes when printing a google map w/directions

        Tests: none, because I believe it only happens when printing, due to the relayouts

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSectionsIfNeeded): Add new utility to let the cells
        ensure the sections' grid data is up to date.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::calcMinMaxWidth):  Call above method.

2006-04-03  Justin Haygood <jhaygood@spsu.edu>

        Reviewed by eseidel.  Landed by eseidel.
        
        - WIN32: maximumScroll() is the maximum scroll delta, not the maximum scroll position. Update to use
          the real maximum scroll position.
        http://bugs.webkit.org/show_bug.cgi?id=8160

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateScrollBars):

2006-04-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Work-around spaces-in-pathnames issue in gnumake on win32.
        http://bugs.webkit.org/show_bug.cgi?id=8173

        * WebCore.vcproj/WebCore/build-generated-files.sh:

2006-04-03  Darin Adler  <darin@apple.com>

        - tried to fix build again

        * WebCore.xcodeproj/project.pbxproj: Removed JSStyleSheet files.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

2006-04-03  Darin Adler  <darin@apple.com>

        - fixed properties on a bunch of files
          (removed allow-tabs and svn:executable from many)

        * css/css_base.cpp:
        * html/html_headimpl.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * kwq/DeprecatedPtrListImpl.cpp:
        * kwq/DeprecatedValueListImpl.cpp:
        * loader/CachedScript.h:
        * platform/ArrayImpl.cpp:
        * platform/StringImpl.cpp:
        * rendering/DataRef.h:
        * rendering/RenderContainer.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/bidi.h:
        * rendering/render_list.cpp:
        * rendering/render_style.cpp:
        * rendering/table_layout.h:
        Converted tabs to spaces.

2006-04-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7118
          Property values with extra items do not get treated as invalid (they should)

        Tests: fast/css/invalidation-errors.html
               fast/css/invalidation-errors-2.html
               fast/css/invalidation-errors-3.html

        * css/CSSGrammar.y: Rollback the properties added by parseValue() when it returns false.
        * css/cssparser.h: Moved shorthand counting to ShorthandScope, a new class in cssparser.cpp.
        * css/cssparser.cpp:
        (WebCore::CSSParser::rollbackLastProperties): Added.
        (WebCore::CSSParser::parseValue): Return false if there are too many properties in the list.
        (WebCore::CSSParser::parseBackgroundShorthand): Use ShorthandScope.
        (WebCore::CSSParser::parseShorthand): Ditto.
        (WebCore::CSSParser::parse4Values): Ditto.

2006-04-03  Darin Adler  <darin@apple.com>

        - changed StyleSheet back to hand-generated since the generated toJS
          function was not making the right type of wrapper for CSS style sheets
          (fixes failing layout tests)

        * DerivedSources.make: Removed JSStyleSheet.h.
        * css/StyleSheet.idl: Removed.
        * khtml/ecma/kjs_css.cpp: Added DOMStyleSheet back in.
        * khtml/ecma/kjs_css.h: Ditto.

2006-04-03  Darin Adler  <darin@apple.com>

        - fixed Macintosh build

        * WebCore.xcodeproj/project.pbxproj: Fixed paths of some files that were absolute
        paths from my machine.

2006-04-03  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add three new generated files as source files.

2006-04-03  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - get RTL right for bug http://bugs.webkit.org/show_bug.cgi?id=8106
          REGRESSION (NativeTextField): New text fields don't scroll to the beginning when losing focus

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::forwardEvent):
        Scroll to the right if RTL.

2006-04-03  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=8147
          convert derived sources script to a Makefile

        * DerivedSources.make: Added.
        * css/CSSPrimitiveValue.idl: Added.
        * css/Counter.idl: Added.
        * css/StyleSheet.idl: Added.

        * WebCore.xcodeproj/project.pbxproj: Added new generated files, IDLs, and the makefile.
        * bindings/scripts/CodeGeneratorJS.pm:

        * generate-derived-sources: Added license header. Removed most of the script, except for
        a single invocation of make.

        * khtml/ecma/kjs_css.h: Removed DOMStyleSheet, DOMCSSPrimitiveValue,
        CSSPrimitiveValueConstructor, and DOMCounter.
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleSheet::DOMCSSStyleSheet): Changed to use JSStyleSheet as the base class.
        (KJS::DOMCSSStyleSheet::getOwnPropertySlot): Ditto.
        (KJS::DOMCSSValueProtoFunc::callAsFunction): Added.
        (KJS::toJS): Changed to use JSCSSPrimitiveValue.
        (KJS::DOMRGBColor::getValueProperty): Changed to call toJS instead of making a
        DOMCSSPrimitiveValue directly.

2006-04-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=8117>
        REGRESSION (NativeTextField): Drag and drop text within a text input field modifies page
        
        The frame's selection is only set after all sub-commands have been 
        performed.  When we send the khtmlBeforeTextInsertedEvent to the root 
        editable element we were using frame->selection(), which may no longer 
        be in the document.
        
        Had to move the construction of the ReplacementFragment to when the
        replace operation is applied, because endingSelection isn't the 
        endingSelection of the last operation when the replace operation
        is constructed.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

2006-04-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4495644> crash when mousing over links at 
        nationalrealestateinvestors.com in 
        WebCore::RenderBlock::findNextLineBreak

        This is a fix for a repro crasher where a rootLineBox had a stale 
        pointer to a render object.

        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::dirtyLinesFromChangedChild): Only break from 
        the function because of selfNeedsLayout() if we are not an inline 
        flow, because if we are, we will not re-layout before bad things 
        can happen.

2006-04-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Removing idl files and some scripts from the WebCore target to prevent
        them from being copied into the Resources.

        * WebCore.xcodeproj/project.pbxproj:

2006-04-03  Dave Hyatt  <hyatt@apple.com>

        Implement basic theme support on Win32.  Still much to do, but
        the backgrounds of buttons, textfields, checkboxes and radio
        controls now draw correctly.  Still work to do for the Classic look
        and to get the foreground defaults of the controls correct.

        Reviewed by anders

        * dom/Node.h:
        (WebCore::Node::isReadOnly):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isReadOnly):
        * platform/win/IntRectWin.cpp:
        (WebCore::IntRect::operator RECT):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::stateChanged):
        (WebCore::RenderTheme::isReadOnly):
        (WebCore::RenderTheme::isHovered):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsHover):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled):
        * rendering/RenderThemeWin.cpp:
        (WebCore::m_textFieldTheme):
        (WebCore::RenderThemeWin::~RenderThemeWin):
        (WebCore::RenderThemeWin::close):
        (WebCore::RenderThemeWin::supportsFocus):
        (WebCore::RenderThemeWin::determineState):
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::setCheckboxSize):
        (WebCore::RenderThemeWin::setRadioSize):
        (WebCore::RenderThemeWin::paintTextField):
        * rendering/RenderThemeWin.h:
        (WebCore::ThemeData::m_state):
        (WebCore::RenderThemeWin::supportsHover):
        (WebCore::RenderThemeWin::paintCheckbox):
        (WebCore::RenderThemeWin::paintRadio):

2006-04-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Beth.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8085
          REGRESSION: Main menu positioned incorrectly on eia.org and fedex.com/us

        Test: fast/dom/Element/offsetTop-table-cell.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetTop): Skip table rows when adding up
        the offsets, since a table cell's yPos() is relative to the table
        section, not the row.

2006-04-03  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/repaint/layer-outline.html fast/repaint/layer-outline-horizontal.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7943
          Layer outline does not repaint

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Use the outlineRect for the
        outline phase and do it only if the outlineRect isn't empty.
        (WebCore::RenderLayer::calculateRects): Actually add the outline width to the
        outline rect.

2006-04-03  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8104
        REGRESSION (NativeTextField): New text fields should not allow pasting newlines

        Test: fast/forms/input-truncate-newline.html

        * html/HTMLInputElement.cpp:
        (WebCore::minPosition): Added helper function.
        (WebCore::HTMLInputElement::defaultEventHandler): Searches for /r or /n and 
         truncates the text to be inserted to the earliest newline.

2006-04-03  Alexey Proskuryakov  <ap@nypop.com>

        Fixed a comment (forgot to save the file before the previous commit).

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open):

2006-04-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8099
          REGRESSION: XMLHttpRequest lowercase post requests broken

        Test: http/tests/xmlhttprequest/methods-lower-case.html

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::open): Uppercase some HTTP method names, to match a Firefox quirk.
        (WebCore::XMLHttpRequest::send): Account for the above change.

2006-04-02  Graham Dennis  <Graham.Dennis@gmail.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8032
          REGRESSION: Focus ring not completely redrawn after a Delete changes its size

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): When an element changes size, the
        delta rectangles that need to be invalidated must be inflated by the outline size to ensure
        that the previous outline is erased, and the space where the new outline is to be drawn is
        also invalidated. This behaviour is identical to the behaviour of borders that was fixed in
        bug 6301.
        * manual-tests/outline-repaint-glitch.html: Added. Manual testcase.
        This is just an outline version of border-repaint-glitch.html

2006-04-02  Trey Matteson  <trey@usa.net>

        Reviewed by Maciej.

        Support for fixing http://bugs.webkit.org/show_bug.cgi?id=8121
        REGRESSION: 404s are not displayed

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge currentForm]): Nuke redundant nil check.
        (-[WebCoreFrameBridge frameElement]): Tweak to not rely on our document, which
        gives a correct result even at the start of our loading process.
        * bindings/objc/DOM.mm:
        (-[DOMDocument _ownerElement]): Nuke redundant nil check.

2006-04-02  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8079
        REGRESSION: Redraw from page cache does not show visited links

        * page/Frame.cpp: (WebCore::Frame::reparseConfiguration): Added back
        updateStyleSelector call that was removed as part of the patch for bug 7907.

2006-04-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - fixed <rdar://problem/4198619> REGRESSION: tabbing through links fails after hitting text field w/ sys's "tab to all controls" off
        - fixed <rdar://problem/4463760> REGRESSION: Can't tab from old text field (like password fields) to new text field (6811)
        (http://bugs.webkit.org/show_bug.cgi?id=6811)
        - fixed tab and shift tab don't select the right things
        http://bugs.webkit.org/show_bug.cgi?id=5685

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::nextKeyViewInFrame):
        * bridge/mac/WebCoreFrameBridge.h:

2006-04-02  Darin Adler  <darin@apple.com>

        - add a few stubs to get Windows closer to building

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::focusRingColor):
        (WebCore::setFocusRingColorChangeFunction):
        (Frame::setNeedsReapplyStyles):

2006-04-02  Darin Adler  <darin@apple.com>

        - fix the build

        * WebCore.xcodeproj/project.pbxproj: Removed a bunch of files that should not have been
        mentioned at all, and a bunch of others that should be in the project but not in the target.

2006-04-02  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8123
          focus ring on new text field doesn't look like the old one

        - fix http://bugs.webkit.org/show_bug.cgi?id=7685
          Focus ring color should change to match graphite when system theme is graphite

        - some cleanup to how we parse user agent style sheets

        * css/CSSValueKeywords.in: Added -webkit-focus-ring-color.

        * css/cssstyleselector.cpp:
        (WebCore::parseUASheet): Parse an array of chars instead of UTF-16.
        Cuts the size of the style sheet in half.
        (WebCore::CSSStyleSelector::applyProperty): Allow negative value for
        outline-offset. Changed shadow parsing to use getColorFromPrimitiveValue
        instead of repeating the same logic.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Added a case
        for the focus ring color.
        * rendering/render_style.h: (WebCore::RenderStyle::setOutlineOffset):
        Changed to allow negative values.

        * css/html4.css: Removed a lot of excess spaces. Changed color of focus
        to -webkit-focus-ring-color. Changed width of focus to 5px.
        Added an outline-offset for <input type=text> of -2px.

        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue): Added focus ring color as an outline color all
        the time, and as any other color when not in strict mode. I'm confused about what's
        best for this whole strict mode policy, and I may need advice on Hyatt to perfect
        this one later.
        (WebCore::CSSParser::parseColorFromValue): Removed code to pin r, g, and b because
        the functions in platform already take care of that. Kept the pinning of a, though
        because that's done in floating point before converting to an integer.
        (WebCore::CSSParser::parseShadow): Allow focus ring color when not in strict mode.

        * bridge/mac/FrameMac.h: Eliminated the virtual detachFromView function.
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::FrameMac): Eliminated code to maintain the frame instances list.
        (WebCore::FrameMac::~FrameMac): Ditto.
        (WebCore::Frame::setNeedsReapplyStyles): Added.

        * bridge/mac/WebCoreSettings.mm: (-[WebCoreSettings _updateAllViews]):
        * platform/mac/WebCoreTextRendererFactory.mm:
        (-[WebCoreTextRendererFactory clearCaches]):
        Changed to call the new Page::setNeedsReapplyStylesForSettingsChange instead of using the
        obsolete Frame::instances.

        * page/Frame.h: Removed instances, mutableInstances, and detachFromView.
        * page/Frame.cpp: Ditto.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::~FrameTree): Call setView(0) instead of detachFromView().
        (WebCore::FrameTree::removeChild): Ditto.

        * page/Page.h:
        * page/Page.cpp:
        (WebCore::Page::init): Added a set of pages instead of a page count. Also
        register a function for when the focus ring color changes the first time this
        is called.
        (WebCore::Page::~Page): Call setView(0) instead of detachFromView. Also update
        to manager the set of pages.
        (WebCore::Page::setNeedsReapplyStyles): Call setNeedsReapplyStyles on all frames.
        (WebCore::Page::setNeedsReapplyStylesForSettingsChange): Call setNeedsReapplyStyles
        on all frames with the passed-in settings.

        * css/make-css-file-arrays.pl: Changed to run the C preprocessor on the
        input files and to generate an array of char instead of unsigned short.

        * platform/PlatformString.h: Added a constructor that takes a char* and
        a length.
        * platform/String.cpp: (WebCore::String::String): Ditto.

        * WebCore.xcodeproj/project.pbxproj: Just some tweaks; adding in a few files like
        the user agent style sheets.

        * platform/Color.h: Removed all use of DeprecatedString. Cleaned up a bit.
        Added focusRingColor and setFocusRingColorChangeFunction.
        * platform/Color.cpp:
        (WebCore::makeRGB): Rewrote using max and min.
        (WebCore::makeRGBA): Ditto.
        (WebCore::parseHexColor): Cleaned up a bit; changed partway to String instead of
        DeprecatedString.
        (WebCore::Color::Color): Changed to use String and to call setNamedColor to save code.
        (WebCore::Color::setNamedColor): Changed to use String in the interface.

        * platform/mac/ColorMac.mm:
        (WebCore::observeTheme): Added. Function used to start up the observer.
        (WebCore::setFocusRingColorChangeFunction): Added. Used to get a call back so we can
        update all the views when the color changes (including recomputing style to get the
        color change in).
        (WebCore::setFocusRingColorChangeFunction): Added. Returns one of the two focus
        ring colors. Both of these match what AppKit uses -- neither matches what we used
        to have in the html4.css file.
        (+[WebCoreControlTintObserver controlTintDidChange]): Added. Used to update when
        the appearance is changed from blue to graphite and back. We keep a global so we
        don't have to call over to AppKit every time; that's probably overkill but we need
        the obsever for the color change function anyway.

2006-04-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/inline-block/overflow-clip.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8118
          REGRESSION (r13595): Inline block's clipped overflow increases table row height

        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically): Don't look at interior overflow
        when calculating the contribution to the inline's vertical overflows.

2006-04-02  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Make WebCore safe against KJS::Node in JavaScriptCore private headers.

        * editing/ReplaceSelectionCommand.h:
        * khtml/ecma/JSXMLSerializer.cpp:
        (KJS::XMLSerializerProtoFunc::callAsFunction):
        * khtml/ecma/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorProtoFunc::callAsFunction):
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::forgetDOMNodeForDocument):
        (KJS::ScriptInterpreter::putDOMNodeForDocument):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::DOMNode):
        (KJS::DOMNode::mark):
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNode::putValueProperty):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        (KJS::toNode):
        (KJS::DOMEventTargetNode::DOMEventTargetNode):
        (KJS::DOMDocumentProtoFunc::callAsFunction):
        (KJS::DOMElement::putValueProperty):
        (KJS::DOMElementProtoFunc::callAsFunction):
        (KJS::checkNodeSecurity):
        (KJS::toJS):
        (KJS::getRuntimeObject):
        (KJS::DOMNamedNodesCollection::DOMNamedNodesCollection):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSLazyEventListener::JSLazyEventListener):
        (KJS::ClipboardProtoFunc::callAsFunction):
        * khtml/ecma/kjs_html.cpp:
        (KJS::JSHTMLDocument::namedItemGetter):
        (KJS::JSHTMLElement::framesetNameGetter):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::JSHTMLElement::pushEventHandlerScope):
        (KJS::JSHTMLCollection::callAsFunction):
        (KJS::JSHTMLCollection::getNamedItems):
        (KJS::JSHTMLSelectCollection::put):
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::JSNodeFilterCondition::acceptNode):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::put):
        * kwq/KWQPageState.mm:
        (-[KWQPageState WebCore::]):

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - removed a bunch of unneeded ForwardingHeaders and WebCore+SVG headers

        * ForwardingHeaders/kcanvas: Removed.
        * ForwardingHeaders/kcanvas/KCanvas.h: Removed.
        * ForwardingHeaders/kdom: Removed.
        * ForwardingHeaders/kdom/DOMString.h: Removed.
        * ForwardingHeaders/kdom/Helper.h: Removed.
        * ForwardingHeaders/kdom/KDOMSettings.h: Removed.
        * ForwardingHeaders/kdom/Namespace.h: Removed.
        * ForwardingHeaders/kdom/cache: Removed.
        * ForwardingHeaders/kdom/cache/KDOMCachedImage.h: Removed.
        * ForwardingHeaders/kdom/cache/KDOMCachedObject.h: Removed.
        * ForwardingHeaders/kdom/cache/KDOMCachedObjectClient.h: Removed.
        * ForwardingHeaders/kdom/cache/KDOMCachedScript.h: Removed.
        * ForwardingHeaders/kdom/cache/KDOMLoader.h: Removed.
        * ForwardingHeaders/kdom/core: Removed.
        * ForwardingHeaders/kdom/core/DOMConfiguration.h: Removed.
        * ForwardingHeaders/kdom/core/DOMException.h: Removed.
        * ForwardingHeaders/kdom/core/DOMList.h: Removed.
        * ForwardingHeaders/kdom/core/DOMString.h: Removed.
        * ForwardingHeaders/kdom/core/NamedAttrMap.h: Removed.
        * ForwardingHeaders/kdom/core/ProcessingInstruction.h: Removed.
        * ForwardingHeaders/kdom/core/domattrs.h: Removed.
        * ForwardingHeaders/kdom/ecma: Removed.
        * ForwardingHeaders/kdom/ecma/GlobalObject.h: Removed.
        * ForwardingHeaders/kdom/events: Removed.
        * ForwardingHeaders/kdom/events/Event.h: Removed.
        * ForwardingHeaders/kdom/events/EventListener.h: Removed.
        * ForwardingHeaders/kdom/events/EventTarget.h: Removed.
        * ForwardingHeaders/kdom/events/KeyboardEvent.h: Removed.
        * ForwardingHeaders/kdom/events/MouseEvent.h: Removed.
        * ForwardingHeaders/kdom/events/UIEvent.h: Removed.
        * ForwardingHeaders/kdom/events/kdomevents.h: Removed.
        * ForwardingHeaders/kdom/kdom.h: Removed.
        * ForwardingHeaders/kdom/parser: Removed.
        * ForwardingHeaders/kdom/parser/KDOMParser.h: Removed.
        * ForwardingHeaders/ksvg2: Removed.
        * ForwardingHeaders/ksvg2/KSVGPart.h: Removed.
        * ForwardingHeaders/ksvg2/KSVGView.h: Removed.
        * ForwardingHeaders/ksvg2/css: Removed.
        * ForwardingHeaders/ksvg2/css/CSSPropertyNames.h: Removed.
        * ForwardingHeaders/ksvg2/css/CSSValueKeywords.h: Removed.
        * WebCore+SVG/KDOMHeaders.h: Removed.
        * WebCore+SVG/Namespace.h: Removed.
        * WebCore+SVG/kdom.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Removed headers.

        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/RenderPath.cpp:
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/events/SVGZoomEvent.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGCursorElement.h:
        * ksvg2/svg/SVGDOMImplementation.cpp:
        * ksvg2/svg/SVGDocument.cpp:
        * ksvg2/svg/SVGDocument.h:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFEImageElement.h:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLangSpace.cpp:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGList.h:
        * ksvg2/svg/SVGLocatable.cpp:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMarkerElement.h:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGPolygonElement.cpp:
        * ksvg2/svg/SVGPolylineElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStyleElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledLocatableElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGTextElement.cpp:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGViewElement.cpp:
        Updated includes.

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8089
          REGRESSION: Caret position is off in native text field with text-align:right

        - fix http://bugs.webkit.org/show_bug.cgi?id=8082
          REGRESSION: Empty RTL text fields place the caret on the left side

        Need a way to make a test for this. No obvious way at the moment.

        * rendering/RenderFlow.cpp: (WebCore::RenderFlow::caretRect):
        Consider border, padding, and the width of the caret properly in the
        calculation of the caret's X position.

        * rendering/RenderBox.cpp: (WebCore::RenderBox::caretRect):
        Fixed some similar issues and rewrote this function for clarity.
        However, I suspect this function was and remains broken and is almost
        never called.

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8106
          REGRESSION (NativeTextField): New text fields don't scroll to the beginning when losing focus

        Test: fast/forms/input-text-scroll-left-on-blur.html

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): Pass blur events
        through to the RenderTextField, as well as mouse, drag, and wheel events.
        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::forwardEvent): Scroll all the way to
        the left on a blur.

        - unrelated small changes

        * html/HTMLTextFieldInnerElement.cpp: Removed excess includes.
        (WebCore::HTMLTextFieldInnerElement::defaultEventHandler): Tweaked comments a bit.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView): Removed unneeded this-> before function call.
        (WebCore::Element::scrollIntoViewIfNeeded): Ditto.

        * page/FrameView.cpp: (WebCore::FrameView::dispatchMouseEvent): Removed obsolete comment.

2006-03-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        <rdar://problem/4497684> REGRESSION(NativeTextField): After undoing pasted text in a field, the field changes to only a few pixels in height (8096)

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): merge into start block when pasting into
        an empty editable subtree.

2006-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8063
          REGRESSION: double clicking in new text fields won't select whole words

        Test: fast/forms/input-text-double-click.html

        * editing/visible_units.cpp: (WebCore::nextBoundary): Set the end of the range by
        calling selectNodeContents rather than by calling setEndAfter. The problem with
        setEndAfter is that it doesn't do anything when the parent of the node is 0, and
        also it's not really what we want, since the boundary node is one with editable
        contents -- we want to stay inside the boundary node.

        * editing/Selection.cpp: (WebCore::Selection::validate): Fix a tiny formatting glitch
        I noticed at the same time.

2006-03-31  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.
        
        - fixed <rdar://problem/4372842> 10.4.4 Regression: control-clicking on a misspelled word 
        doesn't select it or offer corrections (first click only)

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::sendContextMenuEvent):
        Rolled in this one-line change that Hyatt wrote ages ago.

2006-03-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8108
        REGRESSION (r13590-r13593): Floating table's cells don't paint 
        their background

        This is a regression from my painting patch yesterday. Just a silly 
        error I didn't catch.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint): Change the phase of our new 
        PaintInfo, not our old one.

2006-03-31  Tim Omernick  <timo@apple.com>

        Reviewed by Adele.

        <http://bugs.webkit.org/show_bug.cgi?id=7858>
        <rdar://problem/4483359> REGRESSION: New text field doesn't recognize the read only attribute
        
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle):
        Set user modify based on the form element's readOnly().
        (WebCore::RenderTextField::updateFromElement):
        ditto

2006-03-31  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Omernick.

        Updating shadowAncestorNode so it doesn't check for rootEditableElement.  Now we just walk
        up the tree to look for a shadowNode, and then we find the shadowParent.

        * dom/Node.cpp: (WebCore::Node::shadowAncestorNode):
        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::setSelectionRange):
         Updated assertion to check for shadowAncestorNode instead of rootEditableElement.

2006-03-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by John Sullivan.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=8101
          REGSRESSION: Fix for bug 7031 causes 30 layout tests to fail

        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically): Change top and bottom positions
        only if childAffectsTopBottomPos is true.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines): Redo a part of the patch for bug 7031 that
        wasn't committed with the rest of the patch.

2006-03-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by Beth.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=8081
        REGRESSION: Drop-down menu has gap at top

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteVerticalValues): When calculating 
        the hypothetical vertical position in normal flow, skip table rows 
        in the ancestor chain, since a table cell's Y position is relative 
        to the table section, not the row.

2006-03-31  Dave Hyatt <hyatt@apple.com>

        Fix the border drawing for themes on Win32.

        Reviewed by adele

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly):
        * rendering/RenderTheme.h:

2006-03-31  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        * khtml/ecma/kjs_binding.cpp: Added names for VALIDATION_ERR and
        TYPE_MISMATCH_ERR; new DOM Level 3 errors that need to be listed in
        the mapping from error code to error name.

        * dom/Element.idl: Removed comment from bad old days where we had to
        touch these files to make them rebuild.

2006-03-30  Maciej Stachowiak  <mjs@apple.com>

        - fixed Windows build breakage from previous change

        * platform/ScrollView.h:
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawLineForText):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::scrollOffset):
        (WebCore::ScrollView::scrollBy):

2006-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - various Point / Size related cleanup
        
        First, I clarified the semantics of some operations to keep a
        better distinction between IntPoint and IntSize:
        
        * platform/IntPoint.h:
        (WebCore::IntPoint::move): new convenience to move a point by separate
        x and y deltas.
        (WebCore::operator+=): You can't add a point to a point, you can only add
        a size to a point.
        (WebCore::operator+): ditto
        (WebCore::operator-): point - point = size; point - size = point
        (WebCore::operator-=): only allow subtracting a size for the mutating version
        * platform/IntRect.h:
        (WebCore::IntRect::move): tweaked to use IntPoint::move, also, move by an IntSize,
        not an IntPoint.
        * platform/IntSize.h:
        (WebCore::IntSize::shrunkTo): analog to expandedTo
        (WebCore::IntSize::clampNegativeToZero): a handy helper
        (WebCore::operator-): Added unary minus operator

        Made the same changes for FloatPoint:
        
        * platform/FloatPoint.h:
        (WebCore::FloatPoint::move):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator+):
        (WebCore::operator-):
        * platform/FloatRect.h:
        (WebCore::FloatRect::move):
        * platform/FloatSize.h:
        (WebCore::operator-):

        Then I changed a bunch of stuff to pass around IntPoint instead of separate x and y
        coordinates. The main one was:
        
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollOffset): new method, return an IntSize
        (WebCore::ScrollView::contentsToViewport): take and return an IntPoint
        (WebCore::ScrollView::viewportToContents): take and return an IntPoint
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents): handle things in terms of scrollOffset,
        not scrollPoint
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::updateScrollBars):

        The rest is mainly updates for these changes.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::dragHysteresisExceeded):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::mouseDown):
        (WebCore::FrameMac::shouldDragAutoNode):
        (WebCore::FrameMac::sendContextMenuEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isPointInsideSelection:]):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        * khtml/ecma/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * page/Frame.cpp:
        (WebCore::Frame::shouldDragAutoNode):
        (WebCore::Frame::isPointInsideSelection):
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventDoubleClick):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEventPart2):
        (WebCore::Frame::handleMouseReleaseEvent):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::prepareMouseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::draggableNode):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::positionForPoint):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):

2006-03-30  Maciej Stachowiak  <mjs@apple.com>

        - fixed windows build

        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::unlockDrawingFocus):

2006-03-31  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        A bit more code cleanup.

        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):
        * kwq/WebCoreTextField.mm:
        (-[KWQTextFieldController textView:shouldHandleEvent:]):
        (-[KWQSecureTextField selectText:]):
        * page/Frame.cpp:
        (WebCore::Frame::submitForm):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize):

2006-03-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::wheelEvent):
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::sendContextMenuEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:allowShadowContent:]):
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::prepareMouseEvent):
        * dom/Document.h:
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject doAXTextMarkerForPosition:]):
        (-[WebCoreAXObject accessibilityHitTest:]):
        * manual-tests/frame-hover.html: Added.
        * manual-tests/resources/hover-subframe-1.html: Added.
        * manual-tests/resources/hover-subframe-2.html: Added.
        * page/Frame.cpp:
        (WebCore::Frame::isPointInsideSelection):
        * page/FrameView.cpp:
        (WebCore::FrameView::prepareMouseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * platform/IntRect.h:
        (WebCore::IntRect::contains):
        * rendering/RenderLayer.cpp:
        (WebCore::isSubframeCanvas):
        (WebCore::frameVisibleRect):
        (WebCore::RenderLayer::hitTest):
        (WebCore::shouldApplyImplicitCapture):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayer.h:

2006-03-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Tests: fast/repaint/flexible-box-overflow.html fast/repaint/flexible-box-overflow-horizontal.html

        Reviewed by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=8056
          Flexible boxes do not repaint their top, left and children's overflows

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): Update top overflow when
        determining vertical positions. Update horizontal overflows after horizontal
        positions are determined.
        (WebCore::RenderFlexibleBox::layoutVerticalBox):  Update left overflow when
        determining horizontal positions. Update vertical overflows after vertical
        positions are determined.
        (WebCore::RenderFlexibleBox::allowedChildFlex):

2006-03-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Tests: fast/repaint/text-shadow.html fast/repaint/text-shadow-horizontal.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7301
          Text shadow does not repaint correctly

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Paint the text box if it is within the maximum
        possible horizontal shadow overflow of the damage rect.
        * rendering/InlineTextBox.h: Removed unused function checkVerticalPoint().
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines): Use the vertical overflows instead of the
        selection vertical bounds.
        (WebCore::RenderFlow::hitTestLines):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Include overflow due to text shadow
        in leftPosition and rightPosition and keep track of the maximum horizontal shadow
        on the inline.
        (WebCore::InlineFlowBox::verticallyAlignBoxes):
        (WebCore::InlineFlowBox::placeBoxesVertically): Include overflow due to shadow and
        inline-blocks' overflow in topPosition and bottomPosition but not in the selection
        vertical bounds.
        (WebCore::RootInlineBox::selectionTop):
        * rendering/render_line.h:
        (WebCore::InlineFlowBox:::InlineRunBox):
        (WebCore::InlineFlowBox::setVerticalSelectionPositions):
        (WebCore::InlineFlowBox::maxHorizontalShadow):
        (WebCore::RootInlineBox::setVerticalSelectionPositions):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::selectionHeight):

2006-03-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4472371> REGRESSION(417.9-TOT): Focus ring 
        around link in overflow:auto div isn't clipped to div

        Focus rings around the children off overflow:auto divs were not 
        being appropriately clipped because they were being painted with 
        the div's outlineRect, when they should be painted separately. This 
        patch adds two new PaintPhases -- PaintPhaseSelfOutline and 
        PaintPhaseChildOutlines -- to address this problem.

        This patch also changes the name of PaintAction back to PaintPhase. 
        Because Hyatt said so.

        * kcanvas/KCanvasResources.cpp:
        (WebCore::KCanvasMarker::draw):
        * kcanvas/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasContainerQuartz::paint):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        * rendering/RenderCanvas.cpp:
        (WebCore::RenderCanvas::paint):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::paintLines):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::maximalOutlineSize):
        * rendering/RenderObject.h:
        (WebCore::):
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        * rendering/render_button.cpp:
        (WebCore::RenderButton::paintObject):
        * rendering/render_line.cpp:
        (WebCore::InlineBox::paint):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        (WebCore::RootInlineBox::paintEllipsisBox):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderWidget::paint):

2006-03-30  Tim Omernick  <timo@apple.com>

        Manual test case for the Java aspect of <rdar://problem/4212626> REGRESSION: LIVECONNECT:
        JavaScript type for Java Strings is function, not object

        * manual-tests/java-string-object-type.html: Added.
        * manual-tests/resources/StringTypeTest.class: Added.
        * manual-tests/resources/StringTypeTest.java: Added.

2006-03-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix text form controls, and add basic submit support!

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::submitForm):
        * bridge/win/FrameWin.h:
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::incomingReferrer):
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::start):

2006-03-30  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=8083
        REGRESSION: Repro crash when dragging to select over a new text field

        * editing/Selection.cpp: (WebCore::Selection::adjustForEditableContent):
        When searching for non-editable content, if the end of the selection is in a 
        shadow tree, then we need to jump out of that first.

2006-03-30  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        http://bugs.webkit.org/show_bug.cgi?id=6989
        REGRESSION: Plain-text mode needed for contenteditable area used in new text field

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isSelectionEditable]):
        (-[WebCoreFrameBridge isSelectionRichlyEditable]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSValueKeywords.in:
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseValue):
        * dom/Node.cpp:
        (WebCore::Node::isContentRichlyEditable):
        * dom/Node.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        * editing/JSEditor.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/Selection.h:
        (WebCore::Selection::rootEditableElement):
        (WebCore::Selection::isContentEditable):
        (WebCore::Selection::isContentRichlyEditable):
        * editing/SelectionController.h:
        (WebCore::SelectionController::rootEditableElement):
        (WebCore::SelectionController::isContentEditable):
        (WebCore::SelectionController::isContentRichlyEditable):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::contentEditable):
        (WebCore::HTMLElement::setContentEditable):
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle):
        * rendering/render_style.h:
        (WebCore::):
        
2006-03-30  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/4444693> REGRESSION: Deleting empty lines causes quoted text to mistakenly get "unquoted"

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        Formatting.
        (WebCore::DeleteSelectionCommand::moveNodesAfterNode):
        Generalize check that preserves nesting when deleting to the beginning of an ancestor block.

        * editing/deleting/delete-block-merge-contents-022.html: Added.
        * editing/deleting/delete-block-merge-contents-023.html: Added.
        * editing/deleting/delete-block-merge-contents-024.html: Added.

2006-03-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - Test for http://bugs.webkit.org/show_bug.cgi?id=8076
          REGRESSION: native text fields are reversed on "visual Hebrew" pages

        * fast/forms/visual-hebrew-text-field-expected.checksum: Added.
        * fast/forms/visual-hebrew-text-field-expected.png: Added.
        * fast/forms/visual-hebrew-text-field-expected.txt: Added.
        * fast/forms/visual-hebrew-text-field.html: Added.

2006-03-30  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8051
          Empty forms are submitted incorrectly

        Test: fast/forms/empty-get.html

        * platform/KURL.cpp:
        (KURL::setQuery): Add a question mark for empty query strings, too.

2006-03-30  Dave Hyatt <hyatt@apple.com>

        Roll out the fix to 7102 and reopen it to get Spinneret working
        again.

        Reviewed by justin

        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::receivedFirstData):
        (WebCore::Frame::begin):

2006-03-30  Dave Hyatt <hyatt@apple.com>

        Land support for JPEG image decoding on Win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoder::supportsAlpha):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::close):
        (WebCore::JPEGImageReader::skipBytes):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageReader::info):
        (WebCore::JPEGImageReader::samples):
        (WebCore::JPEGImageReader::decoder):
        (WebCore::error_exit):
        (WebCore::init_source):
        (WebCore::skip_input_data):
        (WebCore::fill_input_buffer):
        (WebCore::term_source):
        (WebCore::JPEGImageDecoder::decode):
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::jpegComplete):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::supportsAlpha):
        (WebCore::JPEGImageDecoder::setSize):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2006-03-29  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=8067>
        REGRESSION: selectionRect includes next/previous replaced elements
        Also fixes: <rdar://problems/4402375&4474871&4492934>
        
        In the case where a selection starts at the end or ends at the start
        of o, o->selectionState() != SelectionNone, but o isn't really selected.  
        Constraining the selection with upstream and downstream eliminates these
        types of endpoints, but constraining endpoints that occur at the 
        start or end of a paragraph creates positions inside containers - some 
        of which the selection painting code isn't equipped to handle.

        * dom/Document.cpp:
        (WebCore::Document::updateSelection):
        * rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::selectionRect):
        (WebCore::RenderReplaced::setSelectionState):
        (WebCore::RenderWidget::setSelectionState):

2006-03-29  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=6986
        Switch to use new text field implementation for <input type="text">

        * css/html4.css: Added default style info for new text fields.
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle): Added an extra 1px of padding on the left & right to match Win IE & the latest Mozilla.
        (WebCore::RenderTextField::updateFromElement): Removed some outdated comments.  Cleaned up the way we add text nodes to the div.
        (WebCore::RenderTextField::setSelectionStart): Tweaked selection code to better match Mozilla behavior.
        (WebCore::RenderTextField::setSelectionEnd): ditto.
        (WebCore::RenderTextField::select): Cleaned this up by having it call setSelectionRange.
        (WebCore::RenderTextField::setSelectionRange): Calls updateLayout now in case this is called in an onload handler, and no other layout has occurred.
        (WebCore::RenderTextField::calcMinMaxWidth): Use floatWidth to calculate the width of the "0" character.
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isControlStyled): If the text field's specified border is different from 
         the default border, then treat the control as styled, so the engine knows to turn off the aqua appearance.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField): return false so the engine knows not to try to draw the border.
        (WebCore::RenderThemeMac::adjustTextFieldStyle): text field style info has been moved to html4.css. 
         We also add intrinsic margins here if the font size is large enough.
        * html/HTMLTextFieldInnerElement.cpp: (WebCore::HTMLTextFieldInnerElement::defaultEventHandler):
         No longer check for appearance. All text fields with m_type == TEXT will use the new implementation.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable): ditto.
        (WebCore::HTMLInputElement::focus): ditto.
        (WebCore::HTMLInputElement::selectionStart): ditto.
        (WebCore::HTMLInputElement::selectionEnd): ditto.
        (WebCore::HTMLInputElement::setSelectionStart): ditto.
        (WebCore::HTMLInputElement::setSelectionEnd): ditto.
        (WebCore::HTMLInputElement::select): ditto.
        (WebCore::HTMLInputElement::setSelectionRange): ditto.
        (WebCore::HTMLInputElement::createRenderer): ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): ditto.
        (WebCore::HTMLInputElement::isMouseFocusable): Added.  Old text fields relied on the widget to provide a focus policy.  
         A text field that is focusable should be mouse focusable, and shouldn't need to ask the base class.
        * html/HTMLInputElement.h: Added isMouseFocusable.
        * html/HTMLGenericFormElement.cpp: (WebCore::HTMLGenericFormElement::isMouseFocusable):
         Removed specific text field code since that is now done in HTMLInputElement::isMouseFocusable.
        * dom/Document.cpp: (WebCore::Document::clearSelectionIfNeeded): Check that the new selection is does not have a shadowAncestorNode that is focused.

2006-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8026
          A particular animated SVG crashes in filter code
          <rdar://problem/4494775> A particular animated SVG crashes in filter code

        - fix some code that is not handling references correctly for GC

        Test: svg/custom/empty-merge.svg

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::KCanvasFilterQuartz): Use KWQRetainNSRelease to
        properly retain a reference to an Objective-C object in a C++ class.
        (WebCore::KCanvasFilterQuartz::~KCanvasFilterQuartz): Use KWQRelease instead of
        release.
        (WebCore::KCanvasFilterQuartz::prepareFilter): Use KWQRetain instead of retain.
        (WebCore::KCanvasFilterQuartz::applyFilter): Use KWQRelease instead of release.
        (WebCore::KCanvasFilterQuartz::imageForName): Use objectForKey: instead of
        valueForKey: on the dictionary to sidestep a bug in valueForKey: on empty strings
        and because what we're doing with a dictionary here has nothing to do with
        key value encoding.

        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceContextQuartz::~KRenderingDeviceContextQuartz):
        Use KWQRelease instead of release.
        (WebCore::KRenderingDeviceContextQuartz::nsGraphicsContext): Use KWQRetain
        instead of retain to properly retain a reference to an Objective-C object
        in a C++ class.

        * platform/mac/ImageMac.mm:
        (WebCore::Image::invalidateNativeData): Use CFRelease instead of release.
        (WebCore::Image::getNSImage): Use KWQRetainNSRelease to properly retain
        a reference to an Objective-C object in a C++ class.

2006-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - WebCore side of fix for <rdar://problem/4308243> 8F36 Regression: 
        crash in malloc_consolidate if you use a .PAC file

        (1) To ensure thread-safe deallocation, set the "unsafe to destroy on 
        non-main threads" bit in the DOMObject constructor.

        (2) Made all binding objects inherit from DOMObject, because the
        WebCore data structures they wrap are not thread-safe. "DOMObject" is
        a slightly awkward name for things like the Window object, but the 
        DOM spec is considering adding a Window object, and creating a whole
        new base class for this purpose seemed like overkill.

        * khtml/ecma/JSDOMParser.h:
        * khtml/ecma/JSXMLHttpRequest.h:
        * khtml/ecma/JSXMLSerializer.cpp:
        (KJS::XMLSerializerConstructorImp::XMLSerializerConstructorImp):
        * khtml/ecma/JSXMLSerializer.h:
        * khtml/ecma/JSXSLTProcessor.h:
        * khtml/ecma/kjs_binding.h:
        (KJS::DOMObject::DOMObject): Unset the "safe to collect on non-main
        threads bit" to ensure thread-safe deallocation.
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::Navigator):
        (KJS::PluginBase::PluginBase):
        * khtml/ecma/kjs_navigator.h:
        * khtml/ecma/kjs_proxy.cpp:
        * khtml/ecma/kjs_window.cpp:
        (KJS::History::History):
        (KJS::FrameArray::FrameArray):
        (KJS::Screen::Screen):
        (KJS::Window::Window):
        (KJS::BarInfo::BarInfo):
        * khtml/ecma/kjs_window.h:

2006-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed <rdar://problem/4477126> TOT REGRESSION: with release
        build, maps.google.com zoom slider always zooms fully out

        There were 2 problems: (1) A syntax error in the UIEvent IDL file
        prevented some things from showing up in the bindings; (2)
        MouseEvent had a duplicate isSimulated property that shadowed
        MouseRelatedEvent's isSimulated property, and MouseEvent failed to
        initialize MouseRelatedEvent's isSimulated property.

        * dom/UIEvent.idl:
        * dom/dom2_eventsimpl.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseEvent::MouseEvent):
        * dom/dom2_eventsimpl.h:

2006-03-29  Tim Omernick  <timo@apple.com>

        Reviewed by Darin.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        If the input type is dynamically changed, reevaluate whether the element maintains its state
        (this decision is based on the input's type).  Fixes an assertion error when leaving a page
        with a text field that had been dynamically changed to a password field.

2006-03-29  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=8055
          Fix most CSS grammar conflicts.

        Gets the number of shift/reduce and reduce/reduce conflicts down from 37+4 to 7+0.

        I have fixed the reduce/reduce conflicts, then noticed that two of the fixes
        were already made in KDE tree (the other two are different because declaration
        blocks are described in quite different ways). Shift/reduce fixes are just
        merged from KDE, r332845 by Michael Matz.

        * css/CSSGrammar.y:

2006-03-29  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7157
          An asterisk in a CSS property name breaks CSS handling 
          (Many layout problems at letras.terra.com.br)

        Test: fast/css/error-in-last-decl.html

        * css/CSSGrammar.y: Added a rule for the case when the last CSS rule 
          has a syntax error, and doesn't end with a semicolon.

2006-03-29  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - another cut at fixing the buildbot

        * generate-derived-sources: Fix if statement that was always following
        the Windows case. I believe this is the main problem.

        * WebCore.xcodeproj/project.pbxproj: Added CharsetData.h and added CharsetData.cpp
        to the target.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Similar changes.

        * platform/CharsetData.h: Added.
        * platform/CharsetNames.cpp: Moved the actual character set data out into a
        separate source file instead of include a .cpp file.

        * platform/make-charset-table.pl: Changed to generate a file that can stand alone.

2006-03-29  Darin Adler  <darin@apple.com>

        - an attempt to fix the buildbot

        * platform/mac/mac-encodings.txt: Touched this file so the character encodings
        files will be regenerated.

2006-03-29  Darin Adler  <darin@apple.com>

        - a quick cut at fixing the windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added a few recently-added files.

2006-03-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fixed  <rdar://problem/4454976> repro crash in -[NSTextView(NSSharing) setSelectedRanges:affinity:stillSelecting:] when navigating
        
        Also fixed other issues with contains. The problem that caused the bug was:
        - contains should return true for the element itself, unlike isAncestor
        
        Other problems I fixed:
        - contains shouldn't be present on non-Element nodes
        - contains should return false when passed a non-Element node
        - contains should return false when passed a non-Node

        * bindings/scripts/CodeGeneratorJS.pm: Handle Element as a parameter.
        * dom/Element.cpp:
        (WebCore::Element::contains): Added new implementation.
        * dom/Element.h: Added prototype for contains.
        * dom/Element.idl: Added IDL declaration for contains.
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNodeProtoFunc::callAsFunction): Added old wrong contains().

2006-03-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej

        Fix for <rdar://problem/4493218> repro crash in 
        khtml::RenderBlock::repaintFloatingDescendants with giant 
        cellspacing value

        Some callers of CSSPrimitiveValue::computeLength() expect an int, 
        and others a short. This patch splits computeLength() into 
        computeIntLength() and computeShortLength() so that the appropriate 
        bounds can be checked. 

        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValue::computeIntLength): Return 0 if not 
        within int bounds.
        (WebCore::CSSPrimitiveValue::computeShortLength): Return 0 if not 
        within short bounds.
        * css/css_valueimpl.h:
        * css/cssstyleselector.cpp:
        (WebCore::convertToLength): Switch to appropriate computeLength() 
        call.
        (WebCore::CSSStyleSelector::applyProperty): Same.
        (WebCore::CSSStyleSelector::mapBackgroundXPosition): Same.
        (WebCore::CSSStyleSelector::mapBackgroundYPosition): Same.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintFloatingDescendants): Nil check 
        m_floatingObjects and add an assertion. This is not necessary for 
        the fix, it is just because we are not sure that it is safe not to 
        nil-check, and we want to prevent potential problems in release 
        builds, and catch them with the assertion in debug builds.
        (WebCore::RenderBlock::addOverhangingFloats): Same as above.

2006-03-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4616
          Setting nodeValue on a textnode with collapsed whitespace only has no visual effect

        Test: fast/dom/space-to-text.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Create a renderer if it's needed, but missing.
        (WebCore::CharacterData::appendData): Ditto.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.

2006-03-28  Tim Omernick  <timo@apple.com>

        Reviewed by Maciej.

        <rdar://problem/4454976> repro crash in -[NSTextView(NSSharing) setSelectedRanges:affinity:stillSelecting:] when navigating
        to another page while selecting inside textarea inside iframe

        * kwq/WebCoreTextArea.mm:
        (-[WebCoreTextArea mouseDown:]):
        Guard super's -mouseDown: with calls to Widget::beforeMouseDown() and Widget::afterMouseDown().
        Other widgets do this to protect against being removed from the page and deallocated while handling
        mouse down events.
        (-[WebCoreTextView mouseDown:]):
        ditto

        * manual-tests/textarea-iframe-navigation.html: Added.
        * manual-tests/textarea-iframe-navigation2.html: Added.
        Manual test case for this fix.

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        <rdar://problem/4402170> CrashTracer: 499 crashes in Safari at com.apple.WebCore: DOM::DocumentImpl::open + 16

        * dom/Document.cpp:
        (WebCore::Document::write): Fix unreproducible infinite recursion.

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove global initializers.

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * ksvg2/svg/SVGAngle.cpp:
        * ksvg2/svg/SVGColor.cpp:
        * ksvg2/svg/SVGLength.cpp:

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Switch UIEvent, MouseEvent and KeyboardEvent over to
        be new auto-generated bindings.
        http://bugs.webkit.org/show_bug.cgi?id=7928

        Updated test: fast/dom/prototype-chain.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMEvents.mm:
        (-[DOMEvent ::]):
        (-[DOMMouseEvent initMouseEvent:::::::::::::::]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        * dom/KeyboardEvent.idl: Added.
        * dom/MouseEvent.idl: Added.
        * dom/UIEvent.idl: Added.
        * dom/WheelEvent.idl:
        * dom/dom2_eventsimpl.cpp:
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        * dom/dom2_eventsimpl.h:
        (WebCore::MouseEvent::relatedTarget):
        (WebCore::MouseEvent::clipboard):
        * generate-derived-sources:
        * khtml/ecma/kjs_dom.cpp:
        (KJS::toEventTargetNode):
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_events.cpp:
        (KJS::toJS):
        * khtml/ecma/kjs_events.h:

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - replace getDocument with document in a few places that Geoff missed

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Attr.cpp:
        (WebCore::Attr::createTextChild):
        (WebCore::Attr::setValue):
        (WebCore::Attr::cloneNode):
        * dom/Attribute.cpp:
        (WebCore::Attribute::createAttrIfNeeded):
        * dom/Element.cpp:
        (WebCore::Element::cloneNode):
        (WebCore::inHTMLDocument):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeMap):
        (WebCore::Element::createStyleForRenderer):
        (WebCore::Element::createRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::dispatchAttrRemovalEvent):
        (WebCore::Element::dispatchAttrAdditionEvent):
        (WebCore::Element::updateId):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::focus):
        (WebCore::Element::blur):
        * dom/NamedAttrMap.cpp:
        (WebCore::inHTMLDocument):
        (WebCore::NamedAttrMap::setNamedItem):
        * dom/NamedMappedAttrMap.cpp:
        (WebCore::NamedMappedAttrMap::parseClassAttribute):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::parseMappedAttribute):
        (WebCore::StyledElement::createMappedDecl):

        - added missing include that seems to be breaking the Windows build

        * platform/String.cpp: Include <stdarg.h>.

2006-03-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth.

        - Global replace of getDocument() with document(). Darin suggested this
        in his review of my EventTargetNode patch. It matches the style of
        methods like ownerDocument().

        - Changed getDocument() to document(); changed data member document to
        m_document; changed stack variable document to doc.

        * bindings/objc/DOM.mm:
        (-[DOMNode ownerDocument]):
        (-[DOMNode KJS::Bindings::]):
        (-[DOMElement _getURLAttribute:]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement titleDisplayString]):
        (-[DOMHTMLInputElement altDisplayString]):
        (-[DOMHTMLAnchorElement blur]):
        (-[DOMHTMLAnchorElement focus]):
        (-[DOMHTMLImageElement altDisplayString]):
        (-[DOMHTMLAppletElement altDisplayString]):
        (-[DOMHTMLAreaElement altDisplayString]):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString):
        * bridge/mac/FrameViewMac.mm:
        (WebCore::FrameView::updateDashboardRegions):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge initSubframeWithRenderer:]):
        (-[WebCoreFrameBridge setSelectedDOMRange:affinity:closeTyping:]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/css_base.cpp:
        (WebCore::StyleBase::baseURL):
        * css/css_stylesheetimpl.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::createStyleForElement):
        (WebCore::CSSStyleSelector::createPseudoStyleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSStyleSelector::checkOneSelector):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundImage):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * dom/AbstractView.cpp:
        (WebCore::AbstractView::AbstractView):
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::cloneNode):
        (WebCore::CDATASection::createNew):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/Comment.cpp:
        (WebCore::Comment::cloneNode):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::addChild):
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::createDocumentFragment):
        (WebCore::Document::adoptNode):
        (WebCore::Document::createElementNS):
        (WebCore::Document::nodeAbsIndex):
        (WebCore::Document::setFocusNode):
        (WebCore::Document::topDocument):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::cloneNode):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::~EventTargetNode):
        (WebCore::EventTargetNode::insertedIntoDocument):
        (WebCore::EventTargetNode::removedFromDocument):
        (WebCore::EventTargetNode::addEventListener):
        (WebCore::EventTargetNode::removeEventListener):
        (WebCore::EventTargetNode::dispatchGenericEvent):
        (WebCore::EventTargetNode::dispatchEvent):
        (WebCore::EventTargetNode::dispatchSubtreeModifiedEvent):
        (WebCore::EventTargetNode::dispatchWindowEvent):
        (WebCore::EventTargetNode::dispatchUIEvent):
        (WebCore::EventTargetNode::dispatchKeyEvent):
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        (WebCore::EventTargetNode::removeHTMLEventListener):
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setChanged):
        (WebCore::Node::checkSetPrefix):
        (WebCore::Node::checkAddChild):
        (WebCore::Node::attach):
        (WebCore::Node::detach):
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::rendererIsNeeded):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::ownerDocument):
        (WebCore::Node::setTextContent):
        * dom/Node.h:
        (WebCore::Node::document):
        (WebCore::Node::inDocument):
        * dom/NodeList.cpp:
        (WebCore::NodeList::itemById):
        * dom/Position.cpp:
        (WebCore::Position::documentElement):
        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer):
        (WebCore::Range::setStart):
        (WebCore::Range::setEnd):
        (WebCore::Range::compareBoundaryPoints):
        (WebCore::Range::insertNode):
        (WebCore::Range::text):
        (WebCore::Range::setStartAfter):
        (WebCore::Range::setEndBefore):
        (WebCore::Range::setEndAfter):
        (WebCore::Range::surroundContents):
        (WebCore::Range::setStartBefore):
        (WebCore::rangeOfContents):
        * dom/Text.cpp:
        (WebCore::Text::cloneNode):
        (WebCore::Text::createNew):
        * dom/dom2_eventsimpl.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget):
        * dom/dom2_traversalimpl.cpp:
        (WebCore::NodeIterator::NodeIterator):
        * dom/dom_elementimpl.cpp:
        (WebCore::Attribute::createAttrIfNeeded):
        (WebCore::Attr::createTextChild):
        (WebCore::Attr::setValue):
        (WebCore::Attr::cloneNode):
        (WebCore::Element::cloneNode):
        (WebCore::inHTMLDocument):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setAttributeMap):
        (WebCore::Element::createStyleForRenderer):
        (WebCore::Element::createRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::dispatchAttrRemovalEvent):
        (WebCore::Element::dispatchAttrAdditionEvent):
        (WebCore::Element::updateId):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::focus):
        (WebCore::Element::blur):
        (WebCore::NamedAttrMap::setNamedItem):
        (WebCore::NamedMappedAttrMap::parseClassAttribute):
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::parseMappedAttribute):
        (WebCore::StyledElement::createMappedDecl):
        * dom/dom_xmlimpl.cpp:
        (WebCore::EntityReference::cloneNode):
        (WebCore::ProcessingInstruction::cloneNode):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::setStyleSheet):
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::fixupNodeStyles):
        (WebCore::styleForNode):
        * editing/Selection.cpp:
        (WebCore::Selection::toRange):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::~SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        (WebCore::SelectionController::frame):
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::needsCaretRepaint):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::range):
        (WebCore::SimplifiedBackwardsTextIterator::range):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::init):
        (WebCore::makeRange):
        * editing/markup.cpp:
        (WebCore::startMarkup):
        (WebCore::shouldSelfClose):
        (WebCore::markup):
        (WebCore::createMarkup):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::inSameDocument):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::resetCollectionInfo):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName):
        (WebCore::HTMLElement::cloneNode):
        (WebCore::HTMLElement::innerText):
        (WebCore::HTMLElement::createContextualFragment):
        (WebCore::HTMLElement::setInnerText):
        (WebCore::HTMLElement::setOuterText):
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::contentEditable):
        (WebCore::HTMLElement::toString):
        (WebCore::HTMLElement::childAllowed):
        (WebCore::HTMLElement::setHTMLEventListener):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formWouldHaveSecureSubmission):
        (WebCore::HTMLFormElement::attach):
        (WebCore::HTMLFormElement::insertedIntoDocument):
        (WebCore::HTMLFormElement::removedFromDocument):
        (WebCore::HTMLFormElement::formData):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::parseMappedAttribute):
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::removeFormElement):
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::attach):
        (WebCore::HTMLGenericFormElement::insertedIntoTree):
        (WebCore::HTMLGenericFormElement::isKeyboardFocusable):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        (WebCore::HTMLInputElement::focus):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::attach):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::src):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::appendFormData):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::formElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::setText):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::~HTMLSelectElement):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::~HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        * html/html_baseimpl.cpp:
        (WebCore::HTMLBodyElement::createLinkDecl):
        (WebCore::HTMLBodyElement::mapToEntry):
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        (WebCore::HTMLBodyElement::insertedIntoDocument):
        (WebCore::HTMLFrameElement::isURLAllowed):
        (WebCore::HTMLFrameElement::openURL):
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::close):
        (WebCore::HTMLFrameElement::contentFrame):
        (WebCore::HTMLFrameElement::frameWidth):
        (WebCore::HTMLFrameElement::frameHeight):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):
        (WebCore::HTMLIFrameElement::insertedIntoDocument):
        (WebCore::HTMLIFrameElement::removedFromDocument):
        (WebCore::HTMLIFrameElement::attach):
        (WebCore::HTMLIFrameElement::src):
        * html/html_blockimpl.cpp:
        (WebCore::HTMLParagraphElement::checkDTD):
        * html/html_headimpl.cpp:
        (WebCore::HTMLBaseElement::removedFromDocument):
        (WebCore::HTMLBaseElement::process):
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setStyleSheet):
        (WebCore::HTMLLinkElement::sheetLoaded):
        (WebCore::HTMLLinkElement::href):
        (WebCore::HTMLMetaElement::process):
        (WebCore::HTMLScriptElement::childrenChanged):
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::insertedIntoDocument):
        (WebCore::HTMLScriptElement::evaluateScript):
        (WebCore::HTMLScriptElement::setText):
        (WebCore::HTMLScriptElement::src):
        (WebCore::HTMLStyleElement::insertedIntoDocument):
        (WebCore::HTMLStyleElement::removedFromDocument):
        (WebCore::HTMLStyleElement::childrenChanged):
        (WebCore::HTMLStyleElement::sheetLoaded):
        (WebCore::HTMLTitleElement::insertedIntoDocument):
        (WebCore::HTMLTitleElement::removedFromDocument):
        (WebCore::HTMLTitleElement::childrenChanged):
        (WebCore::HTMLTitleElement::setText):
        * html/html_imageimpl.cpp:
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::notifyFinished):
        (WebCore::HTMLImageElement::parseMappedAttribute):
        (WebCore::HTMLImageElement::insertedIntoDocument):
        (WebCore::HTMLImageElement::removedFromDocument):
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::src):
        (WebCore::HTMLMapElement::~HTMLMapElement):
        (WebCore::HTMLMapElement::parseMappedAttribute):
        (WebCore::HTMLAreaElement::href):
        * html/html_inlineimpl.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::href):
        (WebCore::HTMLAnchorElement::blur):
        (WebCore::HTMLAnchorElement::focus):
        * html/html_objectimpl.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute):
        (WebCore::HTMLAppletElement::insertedIntoDocument):
        (WebCore::HTMLAppletElement::removedFromDocument):
        (WebCore::HTMLAppletElement::createRenderer):
        (WebCore::HTMLAppletElement::getAppletInstance):
        (WebCore::HTMLEmbedElement::getEmbedInstance):
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::removedFromDocument):
        (WebCore::HTMLObjectElement::getObjectInstance):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        (WebCore::HTMLObjectElement::updateDocNamedItem):
        (WebCore::HTMLParamElement::parseMappedAttribute):
        * html/html_tableimpl.cpp:
        (WebCore::HTMLTableElement::createTHead):
        (WebCore::HTMLTableElement::createTFoot):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::insertRow):
        (WebCore::HTMLTableElement::addChild):
        (WebCore::HTMLTableElement::mapToEntry):
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::HTMLTableElement::additionalAttributeStyleDecl):
        (WebCore::HTMLTableElement::getSharedCellDecl):
        (WebCore::HTMLTablePartElement::mapToEntry):
        (WebCore::HTMLTablePartElement::parseMappedAttribute):
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableRowElement::insertCell):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::~DOMNode):
        (KJS::DOMNode::mark):
        (KJS::DOMElement::getValueProperty):
        (KJS::DOMElementProtoFunc::callAsFunction):
        (KJS::checkNodeSecurity):
        (KJS::toJS):
        * khtml/ecma/kjs_html.cpp:
        (KJS::JSHTMLElement::implementsCall):
        (KJS::JSHTMLElement::bodyGetter):
        (KJS::JSHTMLElement::anchorGetter):
        (KJS::JSHTMLElement::getValueProperty):
        (KJS::JSHTMLElement::bodySetter):
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::JSNodeFilterCondition::acceptNode):
        * khtml/ecma/kjs_views.cpp:
        (KJS::DOMAbstractViewProtoFunc::callAsFunction):
        * khtml/xbl/xbl_binding.cpp:
        (XBL::XBLBindingChain::failed):
        (XBL::m_nextBinding):
        (XBL::XBLBinding::setXBLDocument):
        * khtml/xbl/xbl_protobinding.cpp:
        (XBL::XBLPrototypeBinding::document):
        * khtml/xsl/XSLStyleSheet.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        * khtml/xsl/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        (WebCore::xmlDocPtrFromNode):
        (WebCore::XSLTProcessor::transformToString):
        * ksvg2/svg/SVGAElement.cpp:
        (SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAnimateColorElement.cpp:
        (SVGAnimateColorElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateElement.cpp:
        (SVGAnimateElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (SVGAnimateTransformElement::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::closeRenderer):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::addSVGEventListener):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGHelper.cpp:
        (SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::addSVGWindowEventListner):
        * ksvg2/svg/SVGSetElement.cpp:
        (SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGStyleElement.cpp:
        (SVGStyleElement::childrenChanged):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::canvas):
        * ksvg2/svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::closeRenderer):
        (WebCore::SVGTitleElement::insertedIntoDocument):
        (WebCore::SVGTitleElement::removedFromDocument):
        (WebCore::SVGTitleElement::childrenChanged):
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::closeRenderer):
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityPerformAction:]):
        (-[WebCoreAXObject accessibilityAttributeValue:]):
        * page/Frame.cpp:
        (WebCore::parentFromOwnerRenderer):
        (WebCore::Frame::frameForNode):
        (WebCore::Frame::clearDocumentFocus):
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchMouseEvent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setStyle):
        * rendering/RenderCanvas.cpp:
        (WebCore::RenderCanvas::RenderCanvas):
        (WebCore::RenderCanvas::paintBoxDecorations):
        (WebCore::RenderCanvas::repaintViewRectangle):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::isRoot):
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::document):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isFocused):
        * rendering/render_applet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::RenderWidget):
        (WebCore::RenderWidget::focusIn):
        (WebCore::RenderWidget::focusOut):

2006-03-28  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - added a build step that checks for init routines

        * WebCore.xcodeproj/project.pbxproj: Deleted now-unused custom build rule that
        was replaced by the generate-derived-sources script a while back. Added a custom
        build phase that invokes the check-for-global-initializers script.

2006-03-28  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Maciej.

        Moved the derived sources script to an agregate target. Fixes internal builds.

        * WebCore.xcodeproj/project.pbxproj:
        * generate-derived-sources: was missing a use of $CREATE_HASH_TABLE

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.
        
        Build fix.

        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::error):

2006-03-28  Michael Emmel  <mike.emmel@gmail.com>

        Reviewed, tweaked, landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8023
          Attribute.h missing class predeclaration

        * dom/Attribute.h: Add declarations for classes so that the friend
        declaration is not the only one. There's an issue with either an earlier
        or later version of gcc, which is why we see this only on certain platforms.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::~Attr):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedAttrMap::clearAttributes):
        (WebCore::NamedAttrMap::addAttribute):
        (WebCore::NamedAttrMap::removeAttribute):
        Change places where practical to use attr() instead of m_impl in the vain
        hope of removing the need for the friend declarations.

2006-03-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Replace more DeprecatedString with String.
        Add String::sprintf() and String::number()
        http://bugs.webkit.org/show_bug.cgi?id=8009

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLTextAreaElement setCols:]):
        (-[DOMHTMLTextAreaElement setRows:]):
        (-[DOMHTMLOListElement setStart:]):
        (-[DOMHTMLPreElement setWidth:]):
        (-[DOMHTMLImageElement setHeight:]):
        (-[DOMHTMLImageElement setHspace:]):
        (-[DOMHTMLImageElement setVspace:]):
        (-[DOMHTMLImageElement setWidth:]):
        (-[DOMHTMLObjectElement setHspace:]):
        (-[DOMHTMLObjectElement setTabIndex:]):
        (-[DOMHTMLObjectElement setVspace:]):
        (-[DOMHTMLAppletElement setHspace:]):
        (-[DOMHTMLAppletElement setVspace:]):
        (-[DOMHTMLAreaElement setTabIndex:]):
        (-[DOMHTMLTableColElement setSpan:]):
        (-[DOMHTMLTableCellElement setColSpan:]):
        (-[DOMHTMLTableCellElement setRowSpan:]):
        (-[DOMHTMLEmbedElement setHeight:]):
        (-[DOMHTMLEmbedElement setWidth:]):
        * bindings/objc/DOMInternal.mm:
        (String::String):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::numberAsString):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/css_valueimpl.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSPrimitiveValue::cssText):
        * dom/Position.cpp:
        (WebCore::Position::formatForDebugger):
        * dom/Range.cpp:
        (WebCore::Range::formatForDebugger):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor):
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::error):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::findMatchingState):
        (WebCore::HTMLGenericFormElement::setTabIndex):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setMaxLength):
        (WebCore::HTMLInputElement::setSize):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSize):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setCols):
        (WebCore::HTMLTextAreaElement::setRows):
        * html/html_baseimpl.cpp:
        (WebCore::HTMLBodyElement::insertedIntoDocument):
        * html/html_blockimpl.cpp:
        (WebCore::HTMLHRElement::parseMappedAttribute):
        (WebCore::HTMLPreElement::setWidth):
        * html/html_imageimpl.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::setBorder):
        (WebCore::HTMLImageElement::setHeight):
        (WebCore::HTMLImageElement::setHspace):
        (WebCore::HTMLImageElement::setVspace):
        (WebCore::HTMLImageElement::setWidth):
        (WebCore::HTMLAreaElement::setTabIndex):
        * html/html_inlineimpl.cpp:
        (WebCore::HTMLAnchorElement::setTabIndex):
        * html/html_listimpl.cpp:
        (WebCore::HTMLOListElement::setStart):
        (WebCore::HTMLLIElement::setValue):
        * html/html_objectimpl.cpp:
        (WebCore::HTMLObjectElement::setTabIndex):
        * html/html_tableimpl.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        (WebCore::HTMLTableCellElement::setColSpan):
        (WebCore::HTMLTableCellElement::setRowSpan):
        (WebCore::HTMLTableColElement::setSpan):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        (KJS::Location::getValueProperty):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/svg/SVGAngle.cpp:
        (SVGAngle::setValueAsString):
        (SVGAngle::valueAsString):
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGLength.cpp:
        (SVGLength::setValueAsString):
        (SVGLength::valueAsString):
        * ksvg2/svg/SVGLength.h:
        * ksvg2/svg/SVGPathSeg.h:
        (WebCore::SVGPathSeg::pathSegTypeAsLetter):
        (WebCore::SVGPathSeg::toString):
        * ksvg2/svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArcAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegArcAbs::toString):
        (WebCore::SVGPathSegArcRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegArcRel::toString):
        * ksvg2/svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::pathSegTypeAsLetter):
        (WebCore::SVGPathSegClosePath::toString):
        * ksvg2/svg/SVGPathSegCurvetoCubic.h:
        (WebCore::SVGPathSegCurvetoCubicAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicAbs::toString):
        (WebCore::SVGPathSegCurvetoCubicRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::toString):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::toString):
        (WebCore::SVGPathSegCurvetoQuadraticRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticRel::toString):
        * ksvg2/svg/SVGPathSegCurvetoQuadraticSmooth.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::toString):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::toString):
        * ksvg2/svg/SVGPathSegLineto.h:
        (WebCore::SVGPathSegLinetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoAbs::toString):
        (WebCore::SVGPathSegLinetoRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoRel::toString):
        * ksvg2/svg/SVGPathSegLinetoHorizontal.h:
        (WebCore::SVGPathSegLinetoHorizontalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoHorizontalAbs::toString):
        (WebCore::SVGPathSegLinetoHorizontalRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoHorizontalRel::toString):
        * ksvg2/svg/SVGPathSegLinetoVertical.h:
        (WebCore::SVGPathSegLinetoVerticalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoVerticalAbs::toString):
        (WebCore::SVGPathSegLinetoVerticalRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoVerticalRel::toString):
        * ksvg2/svg/SVGPathSegMoveto.h:
        (WebCore::SVGPathSegMovetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegMovetoAbs::toString):
        (WebCore::SVGPathSegMovetoRel::pathSegTypeAsLetter):
        (WebCore::SVGPathSegMovetoRel::toString):
        * ksvg2/svg/SVGPolyElement.cpp:
        (SVGPolyElement::notifyAttributeChange):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::closeRenderer):
        * platform/AtomicString.h:
        (WebCore::AtomicString::toInt):
        * platform/Color.cpp:
        (WebCore::Color::name):
        * platform/Color.h:
        * platform/PlatformString.h:
        * platform/String.cpp:
        (WebCore::String::sprintf):
        (WebCore::String::number):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::initWithChar):
        (WebCore::StringImpl::initWithQChar):
        (WebCore::StringImpl::containsOnlyWhitespace):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * rendering/render_form.cpp:
        (WebCore::RenderSlider::updateFromElement):
        (WebCore::RenderSlider::valueChanged):

2006-03-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://bugs.webkit.org/attachment.cgi?id=7322>
        REGRESSION: Select All does not highlight table if it's last in the document
        
        * rendering/RenderCanvas.cpp:
        (WebCore::rendererAfterPosition): 
        Added, returns the render object that a pre-order traversal over a range 
        of render objects ending at the input position should stop at.
        (WebCore::RenderCanvas::selectionRect): 
        Stop at rendererAfterPosition(m_selectionEnd, m_selectionEndPos), moved code 
        for traversal to nextInPreOrder. Also, the travesal doesn't need to fetch the
        next object before doing work, since the work it does will never change what 
        the next object in the traversal will be.
        (WebCore::RenderCanvas::setSelection): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::nextInPreOrder): Renamed from nextRenderer, cleaned up the logic a little.
        (WebCore::RenderObject::nextInPreOrderAfterChildren): Added.
        (WebCore::RenderObject::previousInPreOrder): Renamed from previousRenderer.
        (WebCore::RenderObject::childAt): Added.
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2006-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Justin.
        
        - fixed <rdar://problem/4483851> REGRESSION: parse mode gets set to strict after going back from non-HTML content (7102)

        Reshuffled things to arrange for m_doc to be cleared somewhat earlier than before.
        
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::receivedFirstData):
        (WebCore::Frame::begin):
        (WebCore::Frame::endIfNotLoading): 
        * manual-tests/accidental-strict-mode.html: Added. I don't think an
        automated test is possible.

2006-03-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Convert a couple DeprecatedPtrList<T> to Vector<T*> and HashSet<T*>

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::regExpForLabels):
        (WebCore::FrameMac::addPluginRootObject):
        (WebCore::FrameMac::cleanupPluginRootObjects):
        * loader/Cache.cpp:
        (WebCore::Cache::init):
        (WebCore::Cache::clear):
        (WebCore::Cache::remove):
        * loader/Cache.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::~DocLoader):

2006-03-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Give StringImpl a little privacy.
        http://bugs.webkit.org/show_bug.cgi?id=8022

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::length):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::replaceData):
        (WebCore::CharacterData::checkCharDataOperation):
        (WebCore::CharacterData::rendererIsNeeded):
        * dom/Range.cpp:
        (WebCore::Range::compareBoundaryPoints):
        * dom/Text.cpp:
        (WebCore::Text::splitText):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processToken):
        * platform/AtomicString.cpp:
        (WebCore::operator==):
        * platform/String.cpp:
        (WebCore::String::operator[]):
        (WebCore::String::length):
        (WebCore::String::percentage):
        (WebCore::String::unicode):
        (WebCore::String::deprecatedString):
        (WebCore::String::isEmpty):
        * platform/StringImpl.cpp:
        (WebCore::equal):
        (WebCore::equalIgnoringCase):
        * platform/StringImpl.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::RenderText::width):

2006-03-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Beth.

        - fixed <rdar://problem/4279765> REGRESSION: "More..." links on flickr groups pages have hover issues (flickr.com)

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::floatRect): Rewrote in terms of rects, and made it consider child floatRects
        as well as their overflowRects.
        * platform/IntRect.h:
        (WebCore::unionRect): useful helper
        * platform/FloatRect.h:
        (WebCore::unionRect): added same for FloatRect just because

2006-03-27  Darin Adler  <darin@apple.com>

        Based on a patch by Michael Emmel <mike.emmel@gmail.com>.

        - fix http://bugs.webkit.org/show_bug.cgi?id=8012
          TransferJob.cpp includes non-existent "String.h" (capital S)

        * platform/TransferJob.cpp: Remove unneeded include of "String.h".

2006-03-27  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        <rdar://problem/4427002> REGRESSION: VoiceOver doesn't read heading level text in Safari (Range selectNodeContents broken)

        Better fix than previous checkin, since maxDeepOffset is really an editing hack.

        * editing/selection/selectNodeContents-textNode.html: Added.

        * dom/Range.cpp:
        (WebCore::Range::selectNodeContents):
        Use maxOffset if offsetInCharacters, otherwise use childNodeCount.

2006-03-27  Darin Adler  <darin@apple.com>

        Based on a patch by Michael Emmel <mike.emmel@gmail.com>.

        - fix compilation for Linux
          http://bugs.webkit.org/show_bug.cgi?id=8013

        * rendering/render_style.h: Add declaration of CSSStyleSelector. Also tweaked
        formatting a bit and removed some extraneous WebCore:: prefixes.

2006-03-27  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler and Tim Omernick
        
        - fixed <rdar://problem/4406505> REGRESSION: (japanese text) Clauses is unexpectedly 
        confirmed while typing on Safari.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _displayedValue]):
        Avoid calling stringValue on the focused NSTextField. This will soon be obsolete, but
        for now it fixes this regression.

2006-03-27  Alexander Kellett  <lypanov@kde.org>

        Reviewed by darin

        Implement the IE extension insertAdjacentElement
        http://bugs.webkit.org/show_bug.cgi?id=6520

        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Element.cpp:
        (WebCore::ElementImpl::insertAdjacentElement):
        * dom/Element.h:
        * dom/Element.idl:

2006-03-27  David Harrison  <harrison@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/4427002> REGRESSION: VoiceOver doesn't read heading level text in Safari (Range selectNodeContents broken)

        Range::selectNodeContents() was erroneously using childNodeCount, which is always 0 for text
        nodes.  Turns out that [WebCoreAXObject textUnderElement] is the only code that ends up calling
        selectNodeContents on a text node.

        Test cases added: None.  Manual AX testing is way too awkward, and automated testing
        is not possible.  See following bug...
            <rdar://problem/4256882> Need automated testing support for accessibility APIs

        * dom/Range.cpp:
        (WebCore::Range::selectNodeContents):
        Use maxDeepOffset instead of childNodeCount, so that text node content is selected.

2006-03-27  Graham Dennis  <Graham.Dennis@gmail.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=7868>
        REGRESSION: Extraneous focus ring drawn at the end of the page
        
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addFocusRingRect): Don't add a focus ring for an empty rect.

2006-03-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fixed <rdar://problem/4489745> REGRESSION: Safari crashes at to display http://www.lgphilips-lcd.com/

        * manual-tests/empty-script-crash.html: Added.

2006-03-27  Maciej Stachowiak  <mjs@apple.com>

        Build fix:
        
        - reverted fix for <rdar://problem/4362396> capturing listeners do not fire on the target node
        It turns out that the behavior we had was standards-compliant and
        Moz will be changing to match.
        
        Also added a note so this doesn't get reverted again.

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent):

2006-03-26  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darn
        
        <http://bugs.webkit.org/show_bug.cgi?id=7974>
        Add EditActions and WebUndoActions for CreateLink and Unlink

        * bridge/mac/WebCoreFrameBridge.h:
        * editing/CreateLinkCommand.h:
        (WebCore::CreateLinkCommand::editingAction):
        * editing/EditAction.h:
        * editing/UnlinkCommand.h:
        (WebCore::UnlinkCommand::editingAction):

2006-03-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix win32 build.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * editing/CompositeEditCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * generate-derived-sources:

2006-03-26  Eric Seidel  <eseidel@apple.com>

        * dom/Element.cpp: fix include case, fixing build.

2006-03-25  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin.  Landed by eseidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7916
          Box repaint rect does not include the left overflow

        * manual-tests/left-overflow-repaint.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowRect): Changed m_overflowWidth and m_overflowHeight
        to overflowWidth() and overflowHeight() since RenderTable overrides the latter.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::getAbsoluteRepaintRect): Include top and left overflows.
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect): Removed redundant code.
        * rendering/RenderTableCell.cpp: Removed subclass implementation of
        getAbsoluteRepaintRect().
        * rendering/RenderTableCell.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Include left overflow in repaint rect.

2006-03-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Build fix.

        * bindings/scripts/CodeGeneratorJS.pm: include Element.h

2006-03-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Split dom_elementimpl.* into multiple files (one per class).
        http://bugs.webkit.org/show_bug.cgi?id=7978

        * ForwardingHeaders/kdom/core/Attr.h: Removed.
        * ForwardingHeaders/kdom/core/Element.h: Removed.
        * ForwardingHeaders/kdom/core/XMLElement.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMHTML.mm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/AbstractView.cpp:
        * dom/Attr.cpp: Added.
        * dom/Attr.h: Added.
        * dom/Attribute.cpp: Added.
        * dom/Attribute.h: Added.
        * dom/CSSMappedAttributeDeclaration.cpp: Added.
        * dom/CSSMappedAttributeDeclaration.h: Added.
        * dom/DOMImplementation.cpp:
        * dom/Document.h:
        * dom/DocumentType.cpp:
        * dom/Element.cpp: Added.
        (WebCore::Element::Element):
        (WebCore::Element::~Element):
        * dom/Element.h: Added.
        * dom/EventNames.cpp:
        * dom/EventTargetNode.cpp:
        * dom/MappedAttribute.cpp: Added.
        * dom/MappedAttribute.h: Added.
        * dom/MappedAttributeEntry.h: Added.
        (WebCore::):
        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::NameNodeList):
        (WebCore::NameNodeList::item):
        (WebCore::NameNodeList::nodeMatches):
        * dom/NamedAttrMap.cpp: Added.
        * dom/NamedAttrMap.h: Added.
        * dom/NamedMappedAttrMap.cpp: Added.
        (WebCore::NamedMappedAttrMap::NamedMappedAttrMap):
        * dom/NamedMappedAttrMap.h: Added.
        * dom/Node.cpp:
        * dom/NodeList.cpp:
        * dom/Position.cpp:
        * dom/StyledElement.cpp: Added.
        * dom/StyledElement.h: Added.
        * dom/dom_elementimpl.cpp: Removed.
        * dom/dom_elementimpl.h: Removed.
        * editing/BreakBlockquoteCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/MergeIdenticalElementsCommand.cpp:
        * editing/ModifySelectionListLevelCommand.cpp:
        * editing/MoveSelectionCommand.cpp:
        * editing/RemoveCSSPropertyCommand.cpp:
        * editing/RemoveNodeAttributeCommand.cpp:
        * editing/Selection.cpp:
        * editing/SelectionController.cpp:
        * editing/SetNodeAttributeCommand.cpp:
        * editing/SplitElementCommand.cpp:
        * editing/SplitTextNodeContainingElementCommand.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisiblePosition.cpp:
        * editing/visible_units.cpp:
        * html/HTMLElement.h:
        * html/HTMLTokenizer.h:
        * html/html_baseimpl.cpp:
        * kcanvas/RenderSVGImage.cpp:
        * khtml/ecma/kjs_views.cpp:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * khtml/xbl/xbl_binding_manager.cpp:
        * khtml/xbl/xbl_tokenizer.cpp:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/svg/SVGAElement.cpp:
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        * ksvg2/svg/SVGAnimationElement.cpp:
        * ksvg2/svg/SVGCircleElement.cpp:
        * ksvg2/svg/SVGClipPathElement.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        * ksvg2/svg/SVGCursorElement.cpp:
        * ksvg2/svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        * ksvg2/svg/SVGFECompositeElement.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        * ksvg2/svg/SVGFEImageElement.cpp:
        * ksvg2/svg/SVGFELightElement.cpp:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        * ksvg2/svg/SVGFETileElement.cpp:
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        * ksvg2/svg/SVGFilterElement.cpp:
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * ksvg2/svg/SVGFitToViewBox.cpp:
        * ksvg2/svg/SVGGradientElement.cpp:
        * ksvg2/svg/SVGImageElement.cpp:
        * ksvg2/svg/SVGLangSpace.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        * ksvg2/svg/SVGMarkerElement.cpp:
        * ksvg2/svg/SVGMaskElement.cpp:
        * ksvg2/svg/SVGPathElement.cpp:
        * ksvg2/svg/SVGPatternElement.cpp:
        * ksvg2/svg/SVGPolyElement.cpp:
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        * ksvg2/svg/SVGRectElement.cpp:
        * ksvg2/svg/SVGSVGElement.cpp:
        * ksvg2/svg/SVGScriptElement.cpp:
        * ksvg2/svg/SVGStopElement.cpp:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGTests.cpp:
        * ksvg2/svg/SVGTextContentElement.cpp:
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGURIReference.cpp:
        * ksvg2/svg/SVGUseElement.cpp:
        * ksvg2/svg/SVGViewElement.cpp:
        * ksvg2/svg/SVGZoomAndPan.cpp:
        * kwq/WebCoreTextArea.mm:
        * platform/Widget.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderCanvas.cpp:
        * rendering/RenderContainer.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTextField.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/bidi.cpp:
        * rendering/render_replaced.cpp:

2006-03-25  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix RenderStyle creation to avoid floating RenderStyle objects.
        This also fixes a bug, were SVG to ever start sharing RenderStyles
        between elements, code would have crashed as there were improperly
        paired style->deref() statements in SVG code.
        http://bugs.webkit.org/show_bug.cgi?id=7976

        No test possible (no functionality change).

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::createStyleForElement):
        (WebCore::CSSStyleSelector::createPseudoStyleForElement):
        * css/cssstyleselector.h:
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::createStyleForRenderer):
        * dom/Node.h:
        * dom/dom_elementimpl.cpp:
        (WebCore::Element::createStyleForRenderer):
        (WebCore::Element::recalcStyle):
        * dom/dom_elementimpl.h:
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::rebuildStops):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        (WebCore::RenderObject::RenderObject):
        (WebCore::selectStartNode):
        (WebCore::RenderObject::draggableNode):
        (WebCore::RenderObject::getPseudoStyle):

2006-03-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Shave .2% on PLT by removing bogus strcmp.
        http://bugs.webkit.org/show_bug.cgi?id=7938

        Test: fast/parser/tag-with-exclamation-point.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): remove bogus strcmp

2006-03-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=7683>
        TinyMCE: execCommand("Unlink") unimplemented
        
        Added code to push partially selected anchor elements down before 
        creating or removing links to create fully selected chunks that can be removed.
        Changed __create_link_command_h__ to CreateLinkCommand_h
        Gave styled element application/removal its own ApplyStyleCommand constructor.
        Still need to add new EditActions (7974).
        
        * WebCore.xcodeproj/project.pbxproj:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyStyle):
        (WebCore::CompositeEditCommand::applyStyledElement):
        (WebCore::CompositeEditCommand::removeStyledElement):
        (WebCore::enclosingAnchorElement):
        (WebCore::CompositeEditCommand::pushAnchorElementDown):
        (WebCore::CompositeEditCommand::pushPartiallySelectedAnchorElementsDown):
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):
        * editing/CreateLinkCommand.h:
        * editing/JSEditor.cpp:
        * editing/Selection.cpp:
        (WebCore::Selection::selectionFromContentsOfNode):
        * editing/Selection.h:
        * editing/UnlinkCommand.cpp: Added.
        (WebCore::UnlinkCommand::UnlinkCommand):
        (WebCore::UnlinkCommand::doApply):
        * editing/UnlinkCommand.h: Added.
        * page/Frame.cpp:
        (WebCore::Frame::selectContentsOfNode):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::applyStyle):
        (WebCore::Frame::applyParagraphStyle):

2006-03-24  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=7955>
        REGRESSION: Content with an interchange newline lost when pasted at the end of the document
        
        There's no safe place in the document to keep the fragment while pasting, so I avoid
        isProbablyBlock by saving whether or not something was blockFlow during the test 
        insertion.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::~ReplacementFragment):
        (WebCore::ReplacementFragment::firstChild):
        (WebCore::ReplacementFragment::lastChild):
        (WebCore::ReplacementFragment::mergeStartNode):
        (WebCore::ReplacementFragment::enclosingBlock):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::restoreTestRenderingNodesToFragment):
        (WebCore::ReplacementFragment::isBlockFlow):
        (WebCore::ReplaceSelectionCommand::fixupNodeStyles):
        (WebCore::styleForNode):
        (WebCore::ReplacementFragment::saveRenderingInfo):
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::renderedBlocks):
        (WebCore::ReplacementFragment::removeStyleNodes):
        (WebCore::RenderingInfo::RenderingInfo):
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::RenderingInfo::isBlockFlow):
        (WebCore::ReplacementFragment::renderingInfo):
        (WebCore::ReplacementFragment::nodes):
        
2006-03-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        * generate-derived-sources: fix clean builds on mac.
        
2006-03-24  Darin Adler  <darin@apple.com>

        Reviewed by Dave Harrison.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7942
          nightlies after r13387 break js createcontextualfragment

        Test: fast/dom/Range/create-contextual-fragment.html

        * dom/Range.idl: Add createContextualFragment.

2006-03-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix win32 build.
        Unify mac/win dependency handling.
        Fix class vs. struct linker problem for win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Add DerivedSources
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * bridge/win/BrowserExtensionWin.h:
        * bridge/win/FrameWin.h:
        * generate-derived-sources:
        * kwq/AccessibilityObjectCache.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createGraphicsContextPrivate):
        (WebCore::GraphicsContext::destroyGraphicsContextPrivate):
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        * platform/mac/GraphicsContextMac.mm:
        * platform/win/TemporaryLinkStubs.cpp:
        (QLineEdit::selectedText):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::setTypedIconURL):

2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix <rdar://problem/4484787> KWQAccObject dangles under GC

        * kwq/AccessibilityObjectCache.h: Moved AccessibilityObjectCache into the WebCore
        namespace. Renamed accObject to get, removed setAccObject, renamed removeAccObject
        to remove, removed getAccObjectID, renamed removeAXObjectID to removeAXID, change
        from CF dictionaries to HashMap and HashSet.
        * kwq/AccessibilityObjectCache.mm:
        (WebCore::AccessibilityObjectCache::~AccessibilityObjectCache): Detach all objects
        and call CFRelease on all of them.
        (WebCore::AccessibilityObjectCache::get): Call CFRetain on objects before putting
        them in the HashMap, rather than assuming that retain == CFRetain. This is what
        fixes the GC issue.
        (WebCore::AccessibilityObjectCache::remove): Detach and call CFRelease when removing.
        (WebCore::AccessibilityObjectCache::getAXID): Change to use a single global variable
        for the AXIDs, which makes it so we won't reuse the same AXID as much as we did before.
        (WebCore::AccessibilityObjectCache::removeAXID): Updated to use HashSet.
        (WebCore::AccessibilityObjectCache::textMarkerForVisiblePosition): Updated for other changes.
        (WebCore::AccessibilityObjectCache::visiblePositionForTextMarker): Ditto.
        (WebCore::AccessibilityObjectCache::childrenChanged): Ditto.
        (WebCore::AccessibilityObjectCache::postNotificationToTopWebArea): Ditto.
        (WebCore::AccessibilityObjectCache::postNotification): Ditto.

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge accessibilityTree]):
        Change to use functions by new names.

        * dom/Document.h: AccessibilityObjectCache is now in the WebCore namespace.
        getAccObjectCache and ownerElement are const member functions, and m_accCache
        is a mutable data member.
        * dom/Document.cpp:
        (WebCore::Document::getAccObjectCache): Make const.
        (WebCore::Document::ownerElement): Make const.

        * kwq/WebCoreAXObject.h: Changed WebCoreAXID to WebCore::AXID.
        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject anchorElement]): Update for function name change.
        (-[WebCoreAXObject firstChild]): Ditto.
        (-[WebCoreAXObject lastChild]): Ditto.
        (-[WebCoreAXObject previousSibling]): Ditto.
        (-[WebCoreAXObject nextSibling]): Ditto.
        (-[WebCoreAXObject parentObject]): Ditto.
        (-[WebCoreAXObject accessibilityAttributeValue:]): Ditto.
        (-[WebCoreAXObject doAXUIElementForTextMarker:]): Ditto.
        (AXLinkElementForNode): Ditto.
        (AXAttributedStringAppendReplaced): Ditto.
        (-[WebCoreAXObject accessibilityHitTest:]): Ditto.
        (-[WebCoreAXObject _accessibilityParentForSubview:]): Ditto.
        (-[WebCoreAXObject accessibilityFocusedUIElement]): Ditto.
        (-[WebCoreAXObject axObjectID]): Change field name to m_id.
        (-[WebCoreAXObject setAXObjectID:]): Ditto.
        (-[WebCoreAXObject removeAXObjectID]): Ditto.

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode): Remove ifdefs.
        (WebCore::RenderContainer::appendChildNode): Ditto.
        (WebCore::RenderContainer::insertChildNode): Ditto.
        * rendering/RenderObject.cpp: (WebCore::RenderObject::remove): Ditto.

2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7726
          REGRESSION: orbitz calendar fails (JavaScript function serialization/parsing)

        Test: fast/js/function-names.html

        * dom/Document.h: Add function name parameter to createHTMLEventListener.
        * dom/Document.cpp:
        (WebCore::Document::createHTMLEventListener): Pass function name when calling
        createHTMLEventHandler.
        (WebCore::Document::setHTMLWindowEventListener): Pass attribute name as function name
        when calling createHTMLEventListener.

        * html/HTMLElement.cpp: (WebCore::HTMLElement::setHTMLEventListener): Pass attribute
        name as function name when calling createHTMLEventListener.

        * khtml/ecma/kjs_events.h: Add a function name parameter to JSLazyEventListener.
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSLazyEventListener::JSLazyEventListener): Take and store a function name.
        (KJS::JSLazyEventListener::parseCode): Pass function name when constructing the function.

        * khtml/ecma/kjs_proxy.h: Add a function name parameter to createHTMLEventHandler and
        createSVGEventHandler.
        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxy::createHTMLEventHandler): Pass function name when creating
        a JSLazyEventListener.
        (WebCore::KJSProxy::createSVGEventHandler): Ditto.

        * ksvg2/events/JSSVGLazyEventListener.h: Add a function name parameter to
        JSSVGLazyEventListener.
        * ksvg2/events/JSSVGLazyEventListener.cpp:
        (WebCore::JSSVGLazyEventListener::JSSVGLazyEventListener): Pass the function name
        on to the base class constructor.

        * ksvg2/misc/SVGDocumentExtensions.h: Add function name parameter to createSVGEventListener.
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::createSVGEventListener): Pass function name when
        calling createSVGEventHandler.

        * ksvg2/svg/SVGElement.cpp: (WebCore::SVGElement::addSVGEventListener):
        * ksvg2/svg/SVGSVGElement.cpp: (WebCore::SVGSVGElement::addSVGWindowEventListner):
        Pass attribute name as function name when calling createSVGEventListener.

        * WebCore.xcodeproj/project.pbxproj: Moved generation script to the top.

2006-03-23  Tim Omernick  <timo@apple.com>

        Reviewed by Darin.

        <http://bugs.webkit.org/show_bug.cgi?id=7691>
        REGRESSION: imdb.com search button looks wrong because "Submit" is drawn

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueWithDefault):
        Only use the default button title if no title was specified; previously we'd use the default
        button title if the specified title was empty, which is not what Firefox does.
        
2006-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix <rdar://problem/4335038> REGRESSION: when max-height is none, height value is ignored

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty):
        For max-height of none, set it to Length(undefinedLength, Fixed), which
        is the correct value (same as the default). Also did some formatting fixes
        to the height section.

2006-03-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6431 
        REGRESSION: style change where :hover changes only an :after style 
        doesn't work

        * dom/Node.cpp:
        (WebCore::Node::diff): Need to call diff() on the before and after 
        styles if we have them.

2006-03-23  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7935
        <rdar://problem/4489010>
        Infinite recursion in table code when button or new text fields get display:table-row

        Test:
        fast/forms/button-table-styles.html

        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::adjustStyle):
        The theme should disallow table display styles form elements. 

2006-03-23  Darin Adler  <darin@apple.com>

        * generate-derived-sources: Tweaked formatting a tiny bit and removed a stray
        touch that was left in here.

2006-03-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        REGRESSION: Dashed borders paint with the wrong phase
        http://bugs.webkit.org/show_bug.cgi?id=7879

        Test: Already covered by css1/box_properties/border_style.html

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLine):

2006-03-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        * generate-derived-sources: Suppress warning.

2006-03-22  Maciej Stachowiak  <mjs@apple.com>

        * generate-derived-sources: Added svn:executable property.

2006-03-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        Handle dependencies for derived sources properly.

        - Made a new generate-derived-sources script that does all the dependency checking
        and source generation.
        - Put this script in a subtarget instead of a phase.
        - Made derived sources go in the build root, not a source root.
        - Added derived sources to the project.
        - Removed files whose sole purpose was to include and compile derived sources,
        just compile those directly now.
        - Tweaked the IDL code generator so it can handle one IDL at a time, to make
        it easier to get the dependencies right.
        
        * generate-derived-sources: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMCore.cpp: Removed.
        * bindings/js/JSDOMEvents.cpp: Removed.
        * bindings/js/JSDOMHTML.cpp: Removed.
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/generate-bindings.pl:
        * css/UserAgentStyleSheets.cpp: Removed.
        * dom/Range.cpp:
        (WebCore::Range::~Range):
        * dom/Range.h:
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMStyleSheet::DOMStyleSheet):
        (KJS::DOMStyleSheetList::DOMStyleSheetList):
        (KJS::DOMCSSRuleList::DOMCSSRuleList):
        (KJS::DOMCSSRule::DOMCSSRule):
        * khtml/ecma/kjs_css.h:

2006-03-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=7904>
        Avoid a layout after test insertion and remove isProbablyBlock

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::~ReplacementFragment):
        (WebCore::ReplacementFragment::firstChild):
        (WebCore::ReplacementFragment::lastChild):
        (WebCore::ReplacementFragment::mergeStartNode):
        (WebCore::ReplacementFragment::enclosingBlock):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplacementFragment::computeAndStoreNodeStyles):
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::renderedBlocks):
        (WebCore::ReplacementFragment::removeStyleNodes):
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplacementFragment::root):

2006-03-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix attribute mutation events to not fire for "style" attributes.
        We lazily update style attributes, so sending mutation events for them makes no sense anymore.
        <rdar://problem/4474910> repro assertion failure @ apple.com/store: !eventDispatchForbidden()

        Test: fast/events/delayed-style-mutation-event-crash.html

        * dom/dom_elementimpl.cpp:
        (WebCore::Element::dispatchAttrRemovalEvent): add assert
        (WebCore::Element::dispatchAttrAdditionEvent): add assert
        (WebCore::NamedAttrMap::addAttribute):

2006-03-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove more DeprecatedString usage.
        http://bugs.webkit.org/show_bug.cgi?id=7882

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::attributedString):
        (WebCore::FrameMac::fontForSelection):
        (WebCore::FrameMac::tokenizerProcessedData):
        (WebCore::FrameMac::registerCommandForUndoOrRedo):
        (WebCore::FrameMac::markMisspellings):
        (WebCore::FrameMac::respondToChangedSelection):
        (WebCore::FrameMac::dashboardRegionsDictionary):
        (WebCore::FrameMac::dragSourceMovedTo):
        * css/CSSGrammar.y:
        * css/css_valueimpl.h:
        * css/cssparser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::parseShorthand):
        (WebCore::CSSParser::parseContent):
        (WebCore::skipCommaInDashboardRegion):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseColorFromValue):
        (WebCore::yyerror):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/cssparser.h:
        (WebCore::deprecatedString):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDocument::getValueProperty):
        * ksvg2/css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::parseMappedAttribute):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::newLine):
        * rendering/RenderCanvas.cpp:
        (WebCore::RenderCanvas::absolutePosition):
        (WebCore::RenderCanvas::paint):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderObject.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::bidiReorderLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/render_form.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/render_style.h:
        (WebCore::RenderStyle::setDashboardRegion):
        * rendering/table_layout.cpp:
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::insertSpanCell):
        (WebCore::AutoTableLayout::layout):
        (WebCore::AutoTableLayout::calcPercentages):

2006-03-22  Tim Omernick  <timo@apple.com>

        Reviewed by Kevin Decker.

        Part of <rdar://problem/4351664> REGRESSION (420+): extra URL in b/f list - navigating back to previous page fails at apple.com/retail/)
        This also fixes <rdar://problem/4477821> REGRESSION (10.4.5-TOT): meta tag specifying refresh is being added to history.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        Removed redirectionTimerFired().  This was added as attempt to fix <http://bugs.webkit.org/show_bug.cgi?id=7058>.  The
        aim was to cause Safari and WebKit to update their loading status after a redirect.  Unfortunately, the fix had a bad side
        effect.  Calling -reportClientRedirectCancelled: on a successful redirect causes WebKit to forget that the redirect was supposed
        to lock history (i.e. reuse the current back/forward entry for the new page).  The end result was that intermediate "quick" redirects
        were creating back/forward entries when they should not have been.  See 4351664.  That fix was almost correct, in that we do need to
        notify the frame load delegate when a redirect ends, either because it succeeded or because it was cancelled.  However, this is the
        wrong place to do it.  WebCore's redirect notification logic did not need to change to fix 7058.  The never-ending spinning indicators
        problem was actually caused by a bug at the WebKit level.

        * manual-tests/redirectHistory: Added.
        * manual-tests/redirectHistory/redir-1.html: Added.
        * manual-tests/redirectHistory/redir-2.html: Added.
        * manual-tests/redirectHistory/redir-3.html: Added.
        Manual test case.  I couldn't figure out how to create a layout test for this, because it involves navigation through history and
        it was unclear how/when to tell DumpRenderTree to dump its output.

2006-03-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Replace more DeprecatedString with String.
        http://bugs.webkit.org/show_bug.cgi?id=7907

        * WebCore+SVG/kdom.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]):
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::setTypedIconURL):
        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::searchForLabelsBeforeElement):
        (WebCore::nsArray):
        (WebCore::FrameMac::createPlugin):
        (WebCore::FrameMac::bindingRootObject):
        (WebCore::FrameMac::windowScriptObject):
        (WebCore::FrameMac::windowScriptNPObject):
        (WebCore::FrameMac::partClearedInBegin):
        (WebCore::FrameMac::openURLFromPageCache):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
        (-[WebCoreFrameBridge scrollToAnchor:]):
        (-[WebCoreFrameBridge URLWithAttributeString:]):
        (-[WebCoreFrameBridge highlightAllMatchesForString:caseSensitive:]):
        * bridge/mac/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame evaluateWebScript:]):
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings _updateAllViews]):
        (-[WebCoreSettings setStandardFontFamily:]):
        (-[WebCoreSettings setMinimumFontSize:]):
        (-[WebCoreSettings setMinimumLogicalFontSize:]):
        (-[WebCoreSettings setDefaultFontSize:]):
        (-[WebCoreSettings setDefaultFixedFontSize:]):
        (-[WebCoreSettings setUserStyleSheetLocation:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y:
        * css/css_stylesheetimpl.cpp:
        (WebCore::MediaList::setMediaText):
        * css/css_valueimpl.cpp:
        (WebCore::quoteStringIfNeeded):
        * css/cssparser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/cssstyleselector.h:
        * dom/Document.cpp:
        (WebCore::Document::resetActiveLinkColor):
        (WebCore::Document::nextState):
        (WebCore::Document::setUserStyleSheet):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        (WebCore::Document::userStyleSheet):
        (WebCore::Document::setPrintStyleSheet):
        (WebCore::Document::printStyleSheet):
        * editing/markup.cpp:
        (WebCore::createMarkup):
        (WebCore::createFragmentFromMarkup):
        (WebCore::createFragmentFromText):
        * editing/markup.h:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElement::openURL):
        (WebCore::HTMLFrameElement::attach):
        * html/html_headimpl.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setStyleSheet):
        * html/html_headimpl.h:
        * html/html_imageimpl.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/html_imageimpl.h:
        (WebCore::HTMLImageElement::compositeOperator):
        * html/html_objectimpl.cpp:
        (WebCore::HTMLAppletElement::createRenderer):
        * ksvg2/svg/SVGStringList.cpp:
        (SVGStringList::reset):
        * kwq/AccessibilityObjectCache.h:
        * kwq/AccessibilityObjectCache.mm:
        (AccessibilityObjectCache::textMarkerForVisiblePosition):
        (AccessibilityObjectCache::postNotificationToTopWebArea):
        (AccessibilityObjectCache::postNotification):
        * kwq/ClipboardMac.mm:
        (WebCore::cocoaTypeFromMIMEType):
        * kwq/KWQKHTMLSettings.h:
        (KHTMLSettings::userStyleSheetLocation):
        (KHTMLSettings::setUserStyleSheetLocation):
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::selectedText):
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::ref):
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::setStyleSheet):
        (WebCore::Frame::jScriptEnabled):
        (WebCore::Frame::javaEnabled):
        (WebCore::Frame::pluginsEnabled):
        (WebCore::Frame::receivedFirstData):
        (WebCore::Frame::begin):
        (WebCore::Frame::setUserStyleSheet):
        (WebCore::Frame::requestObject):
        (WebCore::Frame::loadPlugin):
        (WebCore::Frame::referrer):
        (WebCore::Frame::lastModified):
        (WebCore::Frame::reparseConfiguration):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::appliedEditing):
        (WebCore::Frame::unappliedEditing):
        (WebCore::Frame::reappliedEditing):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * platform/AtomicString.h:
        (WebCore::AtomicString::AtomicString):
        * platform/DeprecatedString.cpp:
        (DeprecatedString::replace):
        * platform/GraphicsContext.h:
        * platform/Image.h:
        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/PlatformString.h:
        (WebCore::String::String):
        (WebCore::String::replace):
        * platform/String.cpp:
        (WebCore::operator+):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::remove):
        (WebCore::parseLength):
        (WebCore::StringImpl::replace):
        * platform/StringImpl.h:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::setCompositeOperation):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paint):
        * rendering/render_form.cpp:
        (WebCore::RenderSelect::updateFromElement):
        * rendering/render_frames.cpp:
        (WebCore::isURLAllowed):
        (WebCore::mapClassIdToServiceType):
        (WebCore::RenderPartObject::updateWidget):
        * rendering/render_style.h:
        (WebCore::RenderStyle::setDashboardRegion):
        * xml/xmlhttprequest.cpp:
        (WebCore::getCharset):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::overrideMIMEType):

2006-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt

        Fix for <rdar://problem/4471984> repro crash CSS position for html/
        table=relative causes crash when hiding table

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): If an object is 
        positioned, relatively positioned, or transparent, it should always 
        have auto indexing. Auto z-index for the root should always be 0.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::removeChild): This is not part of the bug 
        fix; just using a local variable that was created for the stacking 
        context instead of recalculating it.

2006-03-22  David Hyatt  <hyatt@apple.com>

        Fix for residual style problem where form elements lose their connection
        to a degenerate table form because of a residual style fixup.  This is
        Radar bug #4330765.

        Reviewed by eric

        * khtml/html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        * khtml/html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::setPreserveFormConnectionAcrossRemove):
        (WebCore::HTMLFormElement::preserveFormConnectionAcrossRemove):
        * khtml/html/HTMLGenericFormElement.cpp:
        (WebCore::HTMLGenericFormElement::removedFromTree):
        * khtml/html/htmlparser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks):

2006-03-22  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7747
          REGRESSION: Background tab/window auto-refresh in GMail will take focus.

        * manual-tests/named-window-blank-target.html: Added.
        * manual-tests/resources/named-window-blank-target-step2.html: Added.
        * manual-tests/resources/named-window-blank-target-step3.html: Added.
        * manual-tests/resources/named-window-blank-target-step4.html: Added.
        * page/FrameTree.cpp:
        (WebCore::FrameTree::find): If the given name is empty, just return our frame,
        even if it has a name.

2006-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7143
          <rdar://problem/4483856> REGRESSION (417.8-TOT): onclick handler cannot call a function named OnClick (7143)

        Test: fast/dom/Element/onclick-case.html

        We discussed this with Maciej. In the long run we may need to remove the "all attributes
        show up as properties in JavaScript" feature entirely. Gecko does not do it, and it's
        not really the same thing IE does either.

        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMElement::attributeGetter): Use getAttributeNS so we're case sensitive.
        (KJS::DOMElement::getOwnPropertySlot): Ditto.

2006-03-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        <rdar://problem/4486417> REGRESSION: Mail linked against TOT WebKit crashes when composing a message

        No test possible.

        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings init]): call AtomicString::init()

2006-03-21  Darin Adler  <darin@apple.com>

        - fix buildbot (and everyone else)

        * bindings/js/JSDOMCore.cpp: Touch, because Adele's change adds a virtual function,
        and Xcode doesn't know this needs recompiling.
        * bindings/js/JSDOMEvents.cpp: Ditto.
        * bindings/js/JSDOMHTML.cpp: Ditto.

2006-03-21  Justin Haygood and Bjoern Graf  <jhaygood@spsu.edu> <bjoern.graf@gmail.com>

        Reviewed by Eric and Darin.

        - get Windows building again

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::userAgent):
        * bridge/win/FrameWin.h:
        * platform/GraphicsContext.h:
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::supportsType):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::mimeTypeForFileName):
        (FrameWin::objectContentType):
        (FrameWin::createPlugin):
        (FrameWin::overrideMediaType):
        (FrameWin::passSubframeEventToSubframe):
        (FrameWin::createFrame):
        (FrameWin::incomingReferrer):

2006-03-21  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7884
          REGRESSION: Selecting a custom style sheet crashes 20/3 nightly

        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::setStyleSheet): This was calling the function
        that sets the stylesheet URL, passing it the actual stylesheet.
        (WebCore::Frame::begin):
        (WebCore::Frame::setUserStyleSheetLocation): Renamed the version of
        setUserStyleSheet() that takes a URL to this.
        (WebCore::Frame::reparseConfiguration):
        * page/Frame.h:

2006-03-21  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fix for
        http://bugs.webkit.org/show_bug.cgi?id=6813
        elementAtPoint needs to return input element when clicking on new text field
        http://bugs.webkit.org/show_bug.cgi?id=7799
        New text fields don't respect the disabled attribute

        - Tests:
        fast/forms/input-appearance-disabled.html
        fast/forms/input-appearance-elementFromPoint.html
        fast/forms/input-appearance-preventDefault.html

        * bridge/mac/WebCoreFrameBridge.h: Added allowShadowContent parameter to getInnerNonSharedNode so new elementAtPoint method in WebKit can call this.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getInnerNonSharedNode:innerNode:URLElement:atPoint:allowShadowContent:]): Passes allowShadowContent parameter to nodeInfoAtPoint.
        (-[WebCoreFrameBridge _visiblePositionForPoint:]): Updated to call nodeInfoAtPoint allowing shadow content.
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:allowShadowContent:]): Added allowShadowContent parameter.

        * dom/Node.h:
        (WebCore::Node::isShadowNode): Added.
        (WebCore::Node::shadowParentNode): Added.
        * dom/Node.cpp: (WebCore::Node::shadowAncestorNode): Added.  If an ancestor is a shadow node, return its shadow parent node.
        * html/HTMLTextFieldInnerElement.h: (WebCore::HTMLTextFieldInnerElement::isShadowNode): Added.

        * dom/Document.cpp: (WebCore::Document::elementFromPoint): Gets the shadowAncestorNode (so we get the input element, and not the inner div).
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable): If text fields are focusable, then they should be keyboard focusable.  This works for the
        old text fields because HTMLGenericFormElement::isKeyboardFocusable does the right thing for RenderWidgets.  That's not needed for the new form
        elements.
        (WebCore::HTMLInputElement::defaultEventHandler): let the renderer forward drag, mouse, and wheel events.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateDragAndDrop): Send drag events to the shadowAncestorNode.
        (WebCore::FrameView::dispatchMouseEvent): Send mouse events to the shadowAncestorNode.
        (WebCore::FrameView::handleWheelEvent): Send wheel events to the shadowAncestorNode.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::forwardEvent): forwards events to the inner div element.
        * rendering/RenderTextField.h: Added forwardEvent method.

        * kwq/WebCoreAXObject.mm:
        (-[WebCoreAXObject accessibilityHitTest:]): Gets the  shadowAncestorNode (so we get the input element, and not the inner div).
        (-[WebCoreAXObject role]): Gets the right role for text fields, since we no longer get that from AppKit.
        (-[WebCoreAXObject roleDescription]): Gets the right description for text fields.

2006-03-21  Darin Adler  <darin@apple.com>

        Reviewed by Tim O.

        - fixed <rdar://problem/4251515> REGRESSION: listing tag broken in TOT

        Test: fast/html/listing.html

        * html/HTMLNames.h: Add listing tag.

        * bindings/objc/DOM.mm: (+[DOMNode _nodeWith:]):
        * bridge/mac/FrameMac.mm: (WebCore::FrameMac::attributedString):
        * css/html4.css:
        * editing/ReplaceSelectionCommand.cpp: (WebCore::isProbablyBlock):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode):
        * editing/markup.cpp:
        (WebCore::startMarkup):
        (WebCore::createMarkup):
        * html/HTMLElement.cpp: (WebCore::blockTagList):
        * html/HTMLElementFactory.cpp:
        (WebCore::addTag):
        (WebCore::createFunctionMap):
        (WebCore::HTMLElementFactory::createHTMLElement):
        * html/HTMLParser.cpp: (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLTokenizer.cpp: (WebCore::HTMLTokenizer::parseTag):
        * khtml/ecma/kjs_html.cpp:
        (KJS::JSHTMLElement::classInfo):
        (KJS::JSHTMLElement::accessors):
        Add listing tags everywhere pre tags are listed.

2006-03-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fix horrible build fallout from my attr fix

        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        * bindings/js/JSDOMCore.cpp:
        * bindings/js/JSDOMEvents.cpp:
        * bindings/js/JSDOMHTML.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:

2006-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7223 
        Reproducible crash when tabbing to a frame that has not been loaded

        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::nextKeyViewInFrame): When a renderer doesn't 
        have a widget, skip it in the focus loop.

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix a unsafe static cast causing intermittent crashes.
        <rdar://problem/4411663> crash at KXMLCore::RefPtr<WebCore::DOMStringImpl>::get() const + 20 (RefPtr.h:45)

        Test: fast/dom/NodeList/item-by-id-with-no-document.html

        * dom/NodeList.cpp:
        (WebCore::NodeList::itemById): fix unsafe static cast.

2006-03-20  Maciej Stachowiak  <mjs@apple.com>

        - touch this file in hopes of fixing build

        * bindings/js/JSDOMCore.cpp:

2006-03-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.
        
        - fixed <rdar://problem/4446749> 10.4.4: safari crash in DOM::NamedAttrMapImpl::setNamedItem

        * bindings/scripts/CodeGeneratorJS.pm: Add a framework for typechecking method
        arguments. For now only use it for parameters of type Attr.
        * dom/Element.idl: Arbitrary change to make it regenerate.
        * dom/dom_elementimpl.cpp:
        (WebCore::Element::setAttributeNode): ASSERT that attr is not null
        * khtml/ecma/kjs_dom.cpp:
        (KJS::toAttr): add bool ok parameter
        * khtml/ecma/kjs_dom.h:

2006-03-20  Eric Seidel  <eseidel@apple.com>

        * ksvg2/css/SVGCSSParser.h: Removed unused file.

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix tokenizer crash when document.open() is called from an external script:
        <rdar://problem/4483882> REGRESSION (417.8-TOT): crash at yourmovies.com.au in WebCore::HTMLTokenizer::reset() + 92 (7818)

        * dom/Document.cpp:
        (WebCore::Document::open): Check to make sure the current tokenizer isn't executing a script
        * dom/xml_tokenizer.h:
        (WebCore::Tokenizer::executingScript): Add a way for others to know if scripts are executing.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution): Wire into existing m_executingScript member var.
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::executingScript):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::prepareFilter): Unrelated code cleanup.

2006-03-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <rdar://problem/3997958> 
        REGRESSION (Mail): Mail takes half of forever to paste >1500 lines - replaceSelectionWithNode

        * dom/Position.cpp:
        (WebCore::Position::upstream): Avoid calling previous() when we know that 
        it will 1) end the search and 2) be expensive to compute.
        (WebCore::Position::downstream): Removed some dead code.
        (WebCore::Position::inRenderedText): Return false for offsets inside composed characters.
        * dom/Position.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::init): If there are two visually equivalent candidates, we choose
        the one that occurs first in document order.  Using upstream() to find the one that occurs first is
        much faster than the old code.

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele & ggaren.

        Added new cachePluginDataIfNecessary function to update
        plugins and mimes arrays.  Made sure to call this in
        constructor as well as refresh.  The crash was caused by
        a refresh rendering a "plugins" object invalid.
        Changed existing test case to depend on this new correct behavior.
        
        <rdar://problem/4480571> Safari crashed at exit at KXMLCore::deleteAllValues + 24

        * khtml/ecma/kjs_navigator.cpp:
        (KJS::PluginBase::cachePluginDataIfNecessary):
        (KJS::PluginBase::PluginBase):
        (KJS::PluginBase::~PluginBase):
        (KJS::PluginBase::refresh):

2006-03-20  Adele Peterson  <adele@apple.com>

        Reviewed by Justin.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::visiblePositionForIndex):
        When calculating the VisiblePosition for the first position in the text field, it
        makes more sense for the position to have a downstream affinity.

2006-03-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        <rdar://problem/4362396> REGRESSION: (417-420) stopPropagation is not working for click event listener (onclick works fine)

        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchGenericEvent): make sure to fire capturing listeners
        as well as bubbling ones on the target.

2006-03-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4458568> WebCore should not disclose https referrers

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canLoadURL:fromReferrer:hideReferrer:]):
        Don't send https URLs as referrers to non-secure http sites.

2006-03-20  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - http://bugs.webkit.org/show_bug.cgi?id=7867
          get rid of macro hacks for DOM, KDOM, KSVG, khtml, DOMString, QString

        * config.h: Remove the defines for DOM, KDOM, KSVG, khtml, DOMString, QString,
        and qstring().

        * WebCore.xcodeproj/project.pbxproj: Pass in WebCore instead of KSVG as the
        namespace for SVG names.
        * ksvg2/scripts/make_names.pl: Made a couple changes to trick the SVG names into
        recompiling, since they are in a different namespace now.

        * ForwardingHeaders/kjs/identifier.h: Added.

        * dom/PlatformWheelEvent.idl: Removed.
        * dom/WheelEvent.idl: Added. This file was renamed by accident.

        * bindings/js/JSDOMCore.cpp:
        * bindings/js/JSDOMEvents.cpp:
        * bindings/js/JSDOMHTML.cpp:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationEvent.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        * html/CanvasGradient.idl:
        * html/CanvasPattern.idl:
        * html/CanvasRenderingContext2D.idl:
        Touched, to get CodeGeneratorJS.pm changes to take effect.
 
        * css/CSSGrammar.y:
        * css/css_valueimpl.cpp: (WebCore::propertyID):
        Changed calls to get CSS property values to use an explicit SVG:: namespace,
        to match what the script writes out.

        * khtml/ecma/kjs_binding.h: Added forward declaration of WebCore::String.

        * ksvg2/scripts/cssmakeget rid of macro hacks for DOM, KDOM, KSVG, khtml, DOMString, QString
          props: Made this compile with warnings and strict turned on.
        Really just a trick to get properties to recompile, which turned out to be unneeded.
        * ksvg2/scripts/cssmakevalues: Ditto.

        * ksvg2/svg/SVGAElement.cpp:
        (SVGAElement::parseMappedAttribute):
        (SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (SVGAnimateTransformElement::parseMappedAttribute):
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::parseMappedAttribute):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::parseMappedAttribute):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::parseMappedAttribute):
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        (SVGExternalResourcesRequired::parseMappedAttribute):
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (SVGFEBlendElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (SVGFEComponentTransferElement::parseMappedAttribute):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (SVGFEDisplacementMapElement::stringToChannel):
        (SVGFEDisplacementMapElement::parseMappedAttribute):
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.cpp:
        (SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        (SVGFEMergeNodeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::parseMappedAttribute):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETileElement.cpp:
        (SVGFETileElement::parseMappedAttribute):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (SVGFETurbulenceElement::parseMappedAttribute):
        * ksvg2/svg/SVGFilterElement.cpp:
        (SVGFilterElement::parseMappedAttribute):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::parseMappedAttribute):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseMappedAttribute):
        * ksvg2/svg/SVGPolyElement.cpp:
        (SVGPolyElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::parseMappedAttribute):
        * ksvg2/svg/SVGTests.cpp:
        (WebCore::SVGTests::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGViewElement.cpp:
        (SVGViewElement::parseMappedAttribute):
        * ksvg2/svg/SVGZoomAndPan.cpp:
        (SVGZoomAndPan::parseMappedAttribute):
        Changed code that converts an AtomicString to a String to do it in a
        more-efficient fashion that works even with all the new conversions.

        * page/Frame.cpp:
        (WebCore::getString): Removed unneeded .deprecatedString().
        (WebCore::Frame::begin): Removed the only use of QSTRING_NULL.

        * platform/AtomicString.h: Added conversion to and from KJS::Identifier
        and KJS::UString.
        * platform/AtomicString.cpp:
        (WebCore::AtomicString::add): Added overloads for Identifier and UString.
        (WebCore::AtomicString::operator Identifier): Added.
        (WebCore::AtomicString::operator UString): Added.

        * platform/DeprecatedString.h: Added conversion to and from KJS::Identifier
        and KJS::UString.
        * platform/DeprecatedString.cpp:
        (DeprecatedString::DeprecatedString): Added overloads for Identifier and UString.
        (DeprecatedString::operator Identifier): Added.
        (DeprecatedString::operator UString): Added.

        * platform/PlatformString.h: Added conversion to and from KJS::Identifier
        and KJS::UString.
        * platform/String.cpp:
        (WebCore::String::String): Added overloads for Identifier and UString.
        (WebCore::String::operator Identifier): Added.
        (WebCore::String::operator UString): Added.

        * platform/StringImpl.h: Added constructors that take KJS::Identifier
        and KJS::UString
        * platform/StringImpl.cpp:
        (WebCore::getWordBreakIterator): Changed a use of UChar to say ::UChar
        instead because of ambiguity with KJS::UChar.
        (WebCore::StringImpl::StringImpl): Added overloads for Identifier and String.

        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        (WebCore::JSCanvasRenderingContext2DBaseProtoFunc::callAsFunction):
        (WebCore::toHTMLCanvasStyle):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue):
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * khtml/ecma/JSDOMParser.cpp:
        (KJS::DOMParserProtoFunc::callAsFunction):
        * khtml/ecma/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction):
        * khtml/ecma/JSXSLTProcessor.cpp:
        (KJS::XSLTProcessorProtoFunc::callAsFunction):
        * khtml/ecma/kjs_binding.cpp:
        (KJS::valueToStringWithNullCheck):
        * khtml/ecma/kjs_css.cpp:
        (KJS::cssPropertyName):
        (KJS::DOMCSSStyleDeclaration::put):
        (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
        (KJS::DOMStyleSheetList::nameGetter):
        (KJS::DOMStyleSheetList::getOwnPropertySlot):
        (KJS::DOMMediaList::put):
        (KJS::KJS::DOMMediaListProtoFunc::callAsFunction):
        (KJS::DOMCSSStyleSheetProtoFunc::callAsFunction):
        (KJS::DOMCSSRule::putValueProperty):
        (KJS::DOMCSSRuleFunc::callAsFunction):
        (KJS::DOMCSSValue::put):
        (KJS::DOMCSSPrimitiveValueProtoFunc::callAsFunction):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::putValueProperty):
        (KJS::DOMNode::toString):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        (KJS::DOMEventTargetNodeProtoFunc::callAsFunction):
        (KJS::DOMNodeList::nameGetter):
        (KJS::DOMNodeList::getOwnPropertySlot):
        (KJS::DOMDocument::putValueProperty):
        (KJS::DOMDocumentProtoFunc::callAsFunction):
        (KJS::DOMElement::attributeGetter):
        (KJS::DOMElement::getOwnPropertySlot):
        (KJS::DOMNamedNodeMap::nameGetter):
        (KJS::DOMNamedNodeMap::getOwnPropertySlot):
        (KJS::DOMNamedNodeMapProtoFunc::callAsFunction):
        (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        (KJS::DOMEvent::getValueProperty):
        (KJS::DOMEventProtoFunc::callAsFunction):
        (KJS::DOMUIEventProtoFunc::callAsFunction):
        (KJS::DOMMouseEventProtoFunc::callAsFunction):
        (KJS::DOMKeyboardEventProtoFunc::callAsFunction):
        (KJS::Clipboard::putValueProperty):
        (KJS::ClipboardProtoFunc::callAsFunction):
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocFunction::callAsFunction):
        (KJS::JSHTMLDocument::namedItemGetter):
        (KJS::JSHTMLDocument::getOwnPropertySlot):
        (KJS::JSHTMLDocument::putValueProperty):
        (KJS::JSHTMLElement::framesetNameGetter):
        (KJS::JSHTMLElement::getOwnPropertySlot):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::JSHTMLElement::putValueProperty):
        (KJS::JSHTMLCollection::callAsFunction):
        (KJS::JSHTMLCollection::getNamedItems):
        (KJS::HTMLCollectionProtoFunc::callAsFunction):
        (KJS::OptionConstructorImp::construct):
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Plugins::nameGetter):
        (KJS::Plugins::getOwnPropertySlot):
        (KJS::MimeTypes::nameGetter):
        (KJS::MimeTypes::getOwnPropertySlot):
        (KJS::Plugin::nameGetter):
        (KJS::Plugin::getOwnPropertySlot):
        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxy::evaluate):
        * khtml/ecma/kjs_range.cpp:
        (KJS::DOMRangeProtoFunc::callAsFunction):
        * khtml/ecma/kjs_views.cpp:
        (KJS::DOMAbstractViewProtoFunc::callAsFunction):
        * khtml/ecma/kjs_window.cpp:
        (KJS::parseModalDialogFeatures):
        (KJS::showModalDialog):
        (KJS::Window::childFrameGetter):
        (KJS::Window::namedFrameGetter):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::WindowFunc::callAsFunction):
        (KJS::ScheduledAction::execute):
        (KJS::Window::installTimeout):
        (KJS::FrameArray::nameGetter):
        (KJS::FrameArray::getOwnPropertySlot):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):
        (KJS::SelectionFunc::callAsFunction):
        Removed explicit calls to domString(), sometimes replacing with explicit calls to the
        String() constructor. Other similar changes for AtomicString and DeprecatedString use.

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove many, many uses of DeprecatedString.
        Fix various style issues throughout the touched code.

        * bindings/objc/DOM.mm:
        (-[DOMRange _text]):
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameMac.h:
        (WebCore::FrameMac::bridge):
        (WebCore::FrameMac::markedTextRange):
        (WebCore::Mac):
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::openURLRequest):
        (WebCore::FrameMac::searchForLabelsAboveCell):
        (WebCore::FrameMac::searchForLabelsBeforeElement):
        (WebCore::FrameMac::matchLabelsAgainstElement):
        (WebCore::FrameMac::findString):
        (WebCore::FrameMac::submitForm):
        (WebCore::FrameMac::urlSelected):
        (WebCore::FrameMac::objectContentType):
        (WebCore::FrameMac::createPlugin):
        (WebCore::FrameMac::createFrame):
        (WebCore::FrameMac::setTitle):
        (WebCore::FrameMac::setStatusBarText):
        (WebCore::FrameMac::advanceToNextMisspelling):
        (WebCore::FrameMac::userAgent):
        (WebCore::FrameMac::mimeTypeForFileName):
        (WebCore::FrameMac::openURLFromPageCache):
        (WebCore::FrameMac::incomingReferrer):
        (WebCore::FrameMac::attributedString):
        (WebCore::FrameMac::overrideMediaType):
        (WebCore::FrameMac::shouldClose):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge _documentTypeString]):
        (-[WebCoreFrameBridge selectedString]):
        (-[WebCoreFrameBridge stringForRange:]):
        (-[WebCoreFrameBridge advanceToNextMisspelling]):
        (-[WebCoreFrameBridge advanceToNextMisspellingStartingJustBeforeSelection]):
        (-[WebCoreFrameBridge domain]):
        * bridge/mac/WebCoreSettings.mm:
        (-[WebCoreSettings setStandardFontFamily:]):
        (-[WebCoreSettings setFixedFontFamily:]):
        (-[WebCoreSettings setSerifFontFamily:]):
        (-[WebCoreSettings setSansSerifFontFamily:]):
        (-[WebCoreSettings setCursiveFontFamily:]):
        (-[WebCoreSettings setFantasyFontFamily:]):
        (-[WebCoreSettings setUserStyleSheetLocation:]):
        (-[WebCoreSettings setDefaultTextEncoding:]):
        * css/css_valueimpl.cpp:
        (WebCore::quoteStringIfNeeded):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::setEncodedURL):
        (WebCore::cleanpath):
        (WebCore::checkPseudoState):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::convertToLength):
        (WebCore::colorForCSSValue):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/cssstyleselector.h:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::toString):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        (WebCore::Document::baseTarget):
        (WebCore::Document::setBaseTarget):
        * dom/dom_elementimpl.cpp:
        (WebCore::Element::openTagStartToString):
        * dom/xml_tokenizer.cpp:
        (WebCore::handleElementAttributes):
        (WebCore::XMLTokenizer::startElementNs):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::type):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleNonTextNode):
        (WebCore::TextIterator::exitNode):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        (WebCore::CharacterIterator::advance):
        (WebCore::WordAwareIterator::advance):
        (WebCore::WordAwareIterator::length):
        (WebCore::WordAwareIterator::characters):
        (WebCore::CircularSearchBuffer::CircularSearchBuffer):
        (WebCore::CircularSearchBuffer::append):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::findPlainText):
        * editing/TextIterator.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formData):
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxy::initScriptIfNeeded):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Location::getValueProperty):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        (WebCore::KSVGPainterFactory::strokePaintServer):
        * ksvg2/svg/SVGAngle.cpp:
        (SVGAngle::calculate):
        (SVGAngle::setValueAsString):
        (SVGAngle::valueAsString):
        (SVGAngle::convertToSpecifiedUnits):
        (SVGAngle::shortestArcBisector):
        * ksvg2/svg/SVGAngle.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (SVGAnimationElement::targetElement):
        (SVGAnimationElement::parseMappedAttribute):
        (SVGAnimationElement::parseClockValue):
        (SVGAnimationElement::targetAttribute):
        (SVGAnimationElement::setTargetAttribute):
        (SVGAnimationElement::detectAnimationMode):
        (SVGAnimationElement::calculateCurrentValueItem):
        (SVGAnimationElement::calculateRelativeTimePercentage):
        * ksvg2/svg/SVGColor.cpp:
        (SVGColor::setRGBColor):
        * ksvg2/svg/SVGDOMImplementation.cpp:
        (svgFeatureSet):
        (SVGDOMImplementation::self):
        (SVGDOMImplementation::hasFeature):
        (SVGDOMImplementation::createDocumentType):
        (SVGDOMImplementation::createDocument):
        * ksvg2/svg/SVGDOMImplementation.h:
        * ksvg2/svg/SVGPaint.cpp:
        (SVGPaint::cssText):
        * ksvg2/svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::toString):
        * ksvg2/svg/SVGPreserveAspectRatio.cpp:
        (SVGPreserveAspectRatio::parsePreserveAspectRatio):
        (SVGPreserveAspectRatio::getCTM):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyleElement.cpp:
        (SVGStyleElement::childrenChanged):
        * ksvg2/svg/SVGURIReference.cpp:
        (SVGURIReference::getTarget):
        * kwq/ClipboardMac.mm:
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::setEffectAllowed):
        (WebCore::cocoaOpFromIEOp):
        (WebCore::IEOpFromCocoaOp):
        (WebCore::ClipboardMac::sourceOperation):
        (WebCore::ClipboardMac::destinationOperation):
        * kwq/KWQCString.cpp:
        (DeprecatedCString::append):
        * kwq/KWQKHTMLSettings.h:
        (KHTMLSettings::stdFontName):
        (KHTMLSettings::fixedFontName):
        (KHTMLSettings::serifFontName):
        (KHTMLSettings::sansSerifFontName):
        (KHTMLSettings::cursiveFontName):
        (KHTMLSettings::fantasyFontName):
        (KHTMLSettings::minFontSize):
        (KHTMLSettings::minLogicalFontSize):
        (KHTMLSettings::mediumFontSize):
        (KHTMLSettings::mediumFixedFontSize):
        (KHTMLSettings::autoLoadImages):
        (KHTMLSettings::isJavaScriptEnabled):
        (KHTMLSettings::JavaScriptCanOpenWindowsAutomatically):
        (KHTMLSettings::isJavaEnabled):
        (KHTMLSettings::isPluginsEnabled):
        (KHTMLSettings::encoding):
        (KHTMLSettings::userStyleSheet):
        (KHTMLSettings::shouldPrintBackgrounds):
        (KHTMLSettings::textAreasAreResizable):
        (KHTMLSettings::setStdFontName):
        (KHTMLSettings::setFixedFontName):
        (KHTMLSettings::setSerifFontName):
        (KHTMLSettings::setSansSerifFontName):
        (KHTMLSettings::setCursiveFontName):
        (KHTMLSettings::setFantasyFontName):
        (KHTMLSettings::setMinFontSize):
        (KHTMLSettings::setMinLogicalFontSize):
        (KHTMLSettings::setMediumFontSize):
        (KHTMLSettings::setMediumFixedFontSize):
        (KHTMLSettings::setAutoLoadImages):
        (KHTMLSettings::setIsJavaScriptEnabled):
        (KHTMLSettings::setIsJavaEnabled):
        (KHTMLSettings::setArePluginsEnabled):
        (KHTMLSettings::setJavaScriptCanOpenWindowsAutomatically):
        (KHTMLSettings::setEncoding):
        (KHTMLSettings::setUserStyleSheet):
        (KHTMLSettings::setShouldPrintBackgrounds):
        (KHTMLSettings::setTextAreasAreResizable):
        * kwq/KWQLoader.mm:
        (KWQServeSynchronousRequest):
        * kwq/KWQTextStream.cpp:
        (QTextStream::QTextStream):
        (QTextStream::operator<<):
        (QTextStream::precision):
        * kwq/KWQTextStream.h:
        * kwq/RenderTreeAsText.cpp:
        (operator<<):
        (quoteAndEscapeNonPrintables):
        (writeTextRun):
        (write):
        (writeSelection):
        * loader/Cache.cpp:
        (WebCore::Cache::init):
        (WebCore::Cache::requestImage):
        (WebCore::Cache::requestStyleSheet):
        (WebCore::Cache::preloadStyleSheet):
        (WebCore::Cache::requestScript):
        (WebCore::Cache::preloadScript):
        (WebCore::Cache::requestXSLStyleSheet):
        (WebCore::Cache::requestXBLDocument):
        (WebCore::Cache::remove):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::error):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::error):
        * loader/CachedImage.h:
        * loader/CachedObject.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::checkNotify):
        (WebCore::CachedScript::error):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.cpp:
        (WebCore::CachedXBLDocument::error):
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::error):
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::DocLoader):
        (WebCore::DocLoader::~DocLoader):
        (WebCore::DocLoader::needReload):
        (WebCore::DocLoader::requestImage):
        (WebCore::DocLoader::requestStyleSheet):
        (WebCore::DocLoader::requestScript):
        (WebCore::DocLoader::requestXSLStyleSheet):
        (WebCore::DocLoader::requestXBLDocument):
        (WebCore::DocLoader::setAutoloadImages):
        (WebCore::DocLoader::setShowAnimations):
        (WebCore::DocLoader::removeCachedObject):
        * loader/loader.cpp:
        (WebCore::Loader::receivedAllData):
        (WebCore::Loader::receivedResponse):
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::setStyleSheet):
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::setMetaRefreshEnabled):
        (WebCore::Frame::setAutoloadImages):
        (WebCore::Frame::autoloadImages):
        (WebCore::Frame::clear):
        (WebCore::Frame::receivedFirstData):
        (WebCore::Frame::begin):
        (WebCore::Frame::write):
        (WebCore::Frame::baseTarget):
        (WebCore::Frame::completeURL):
        (WebCore::Frame::scheduleRedirection):
        (WebCore::Frame::scheduleLocationChange):
        (WebCore::Frame::scheduleHistoryNavigation):
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::redirectionTimerFired):
        (WebCore::Frame::encoding):
        (WebCore::Frame::gotoAnchor):
        (WebCore::Frame::setStandardFont):
        (WebCore::Frame::setFixedFont):
        (WebCore::Frame::selectedText):
        (WebCore::Frame::selection):
        (WebCore::Frame::dragCaret):
        (WebCore::Frame::setSelection):
        (WebCore::Frame::setDragCaret):
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::requestObject):
        (WebCore::Frame::shouldUsePlugin):
        (WebCore::Frame::loadPlugin):
        (WebCore::Frame::loadSubframe):
        (WebCore::Frame::submitForm):
        (WebCore::Frame::lastModified):
        (WebCore::Frame::reparseConfiguration):
        (WebCore::Frame::shouldChangeSelection):
        (WebCore::Frame::appliedEditing):
        (WebCore::Frame::unappliedEditing):
        (WebCore::Frame::reappliedEditing):
        (WebCore::Frame::executeScript):
        (WebCore::updateState):
        (WebCore::Frame::isCharacterSmartReplaceExempt):
        (WebCore::Frame::openURL):
        (WebCore::Frame::didNotOpenURL):
        (WebCore::Frame::setEncoding):
        (WebCore::Frame::saveInterpreterBuiltins):
        (WebCore::Frame::restoreInterpreterBuiltins):
        (WebCore::Frame::mutableInstances):
        (WebCore::Frame::setPolicyBaseURL):
        (WebCore::Frame::addMetaData):
        (WebCore::Frame::scrollToAnchor):
        (WebCore::Frame::setMediaType):
        (WebCore::Frame::highlightAllMatchesForString):
        (WebCore::Frame::tree):
        * page/Frame.h:
        (WebCore::Frame::instances):
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::init):
        (WebCore::FrameView::setMarginWidth):
        (WebCore::FrameView::setMarginHeight):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::setMediaType):
        (WebCore::FrameView::mediaType):
        (WebCore::FrameView::setResizingFrameSet):
        (WebCore::FrameView::setIgnoreWheelEvents):
        * page/FrameView.h:
        (WebCore::FrameView::frameWidth):
        (WebCore::FrameView::marginWidth):
        (WebCore::FrameView::marginHeight):
        (WebCore::FrameView::ref):
        (WebCore::FrameView::deref):
        * page/ResourceRequest.h:
        (WebCore::ResourceRequest::contentType):
        (WebCore::ResourceRequest::setContentType):
        * platform/FontFamily.h:
        * platform/Image.h:
        * platform/KURL.cpp:
        (KURL::KURL):
        (KURL::parse):
        (urlcmp):
        (KURL::encode_string):
        (encodeHostname):
        * platform/KURL.h:
        * platform/PlatformString.h:
        (WebCore::String::left):
        (WebCore::String::right):
        * platform/String.cpp:
        (WebCore::String::toInt):
        * platform/StringImpl.cpp:
        (WebCore::StringImpl::toInt):
        * platform/TransferJob.cpp:
        (WebCore::TransferJob::queryMetaData):
        (WebCore::TransferJob::addMetaData):
        * platform/TransferJob.h:
        * platform/mac/ImageMac.mm:
        (WebCore::Image::supportsType):
        * platform/mac/TransferJobMac.mm:
        (WebCore::TransferJob::start):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::information):
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::updateFromElement):
        * xml/xmlhttprequest.cpp:
        (WebCore::getMIMEType):
        (WebCore::getCharset):
        (WebCore::XMLHttpRequest::getReadyState):
        (WebCore::XMLHttpRequest::getResponseText):
        (WebCore::XMLHttpRequest::getResponseXML):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::changeState):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::overrideMIMEType):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::responseIsXML):
        (WebCore::XMLHttpRequest::getStatus):
        (WebCore::XMLHttpRequest::getStatusText):
        (WebCore::XMLHttpRequest::processSyncLoadResults):
        (WebCore::XMLHttpRequest::receivedAllData):
        (WebCore::XMLHttpRequest::receivedRedirect):
        (WebCore::XMLHttpRequest::receivedData):
        (WebCore::XMLHttpRequest::cancelRequests):
        (WebCore::XMLHttpRequest::detachRequests):
        * xml/xmlhttprequest.h:

2006-03-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=3439
         mouseover effects can get stuck sometimes due to missing events
        - http://bugs.webkit.org/show_bug.cgi?id=7701
         mouseout sent to the wrong element when layout changes simultaneously
        
        Implemented saving the previous node under the mouse, so that we don't need to 
        recalculate it, which is slow and even not really possible. This has fixed a number 
        of issues with mouse event dispatching when the content changes.
        The code still needs refactoring and cleanup, see bug 3439 for comments.

        Tests (both files perform multiple checks):
        - fast/events/mouseover-mouseout.html
        - fast/events/mouseover-mouseout2.html

        * page/Frame.h: Added a Frame parameter to passSubframeEventToSubframe(),
        used for mouseMoved events.
        * bridge/mac/FrameMac.h: Ditto.
        * bridge/mac/FrameMac.mm: 
        (WebCore::FrameMac::passSubframeEventToSubframe): Use the passed subframe to target 
        NSMouseMoved events.
        * page/FrameView.h: Added a prepareMouseEvent() helper that does viewportToContents translation.
        * page/FrameView.cpp: Added data members for storing the previous node and subframe 
        under the mouse to FrameViewPrivate. Removed the now unused prevMouseX/prevMouseY.
        (WebCore::FrameViewPrivate::reset): Reset the new data members.
        (WebCore::subframeForEvent): A temporary place for the code that extracts a subframe
        pointer from MouseEventWithHitTestResults, moved from FrameMac::passSubframeEventToSubframe().
        (WebCore::FrameView::prepareMouseEvent): The new helper.
        (WebCore::FrameView::handleMousePressEvent): Use the new helper.
        (WebCore::FrameView::handleMouseDoubleClickEvent): Ditto.
        (WebCore::FrameView::handleMouseReleaseEvent): Ditto.
        (WebCore::FrameView::updateDragAndDrop): Ditto.
        (WebCore::FrameView::hoverTimerFired): Ditto.
        (WebCore::FrameView::dispatchMouseEvent): Store and use the oldUnder node, don't store 
        or use prevMouseX/Y.
        (WebCore::FrameView::handleMouseMoveEvent): Rewrote dispatching events to subframes using 
        a stored oldSubframe reference. Protect "this" from being removed while in this function.

2006-03-20  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=7875
          autogenerate bindings for Range

        * dom/Range.idl: Added.
        * khtml/ecma/kjs_range.cpp: Removed.
        * khtml/ecma/kjs_range.h: Removed.

        * WebCore.vcproj/WebCore/build-generated-files.sh: Removed code to generate
        kjs_range.lut.h.

        * WebCore.xcodeproj/project.pbxproj: Added Range.idl source file.
        Removed kjs_range.h and kjs_range.cpp source files. Sorted the "dom" group.
        Removed rule to generate kjs_range.lut.h.

        * bindings/js/JSDOMCore.cpp: Added include of JSRange.cpp.

        * bindings/scripts/CodeGeneratorJS.pm: Added DocumentFragment, Range, CompareHow,
        and short to the types this script can handle. Added code to generate toRange
        functions and the like. Added separate code to handle exceptions for getters
        vs. setters for attributes. Changed return values for the "bad ID" case to 0
        -- there's no need to generate the extra code to return jsUndefined() in such
        cases, which should be unreachable. Changed exception handling to use setDOMException
        directly instead of DOMExceptionTranslator; DOMExceptionTranslator was a trick
        to make it easier to convert existing bindings and shouldn't be used going
        forward. Fixed names of constructors to use the JavaScript class name (the
        interface name), not the name of the C++ implementation class. Fixed generation
        of code for functions that have no parameters but do raise exceptions.

        * bindings/scripts/IDLParser.pm: Added parsing for separate getter and setter
        exceptions in attributes. The syntax is not real IDL, but real IDL doesn't support
        declaring exceptions on attributes at all. We'll probably want to revisit our
        syntax for this some day.

        * bindings/scripts/IDLStructure.pm: Removed unused exceptionName field from
        domAttribute, and replaced raisesExceptions field with getterExceptions and
        setterExceptions. Added regular expressions for parsing getter/setter syntax.
        We'll probably have to redo this whole thing parse in a better way at some
        point -- the regular expressions allow any invalid syntax in between them.

        * dom/Attr.idl: Change exception declaration for setting the value attribute
        to use setter-specific exception syntax.
        * dom/CharacterData.idl: Change exception declaration for setting the data
        attribute to use setter-specific exception syntax.
        * dom/ProcessingInstruction.idl: Change exception declaration for setting the
        data attribute to use setter-specific exception syntax.

        * khtml/ecma/kjs_dom.cpp: Include JSRange.h instead of kjs_range.h.
        * khtml/ecma/kjs_window.cpp: Include JSRange.h instead of kjs_range.h.
        (KJS::Window::getValueProperty): Use JSRange::getConstructor instead of
        getRangeConstructor.

2006-03-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix win32 compile.

        * Viewer/ImageView.cpp:
        * platform/GraphicsContext.cpp:
        (WebCore::WebCore::GraphicsContext::createGraphicsContextPrivate):
        (WebCore::WebCore::GraphicsContext::destroyGraphicsContextPrivate):
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::fillRectSourceOver):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawLineForText):

2006-03-19  Darin Adler  <darin@apple.com>

        Rubber stamped by Eric.

        - moved khtml/html files all into html directory

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for new paths.
        * WebCore.vcproj/WebCore/build-generated-files.sh: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * khtml/html: Removed.

        * html/DocTypeStrings.gperf: Moved.
        * html/FormDataList.cpp: Ditto.
        * html/FormDataList.h: Ditto.
        * html/HTMLBaseFontElement.cpp: Ditto.
        * html/HTMLBaseFontElement.h: Ditto.
        * html/HTMLButtonElement.cpp: Ditto.
        * html/HTMLButtonElement.h: Ditto.
        * html/HTMLCanvasElement.cpp: Ditto.
        * html/HTMLCanvasElement.h: Ditto.
        * html/HTMLCollection.cpp: Ditto.
        * html/HTMLCollection.h: Ditto.
        * html/HTMLDocument.cpp: Ditto.
        * html/HTMLDocument.h: Ditto.
        * html/HTMLElement.cpp: Ditto.
        * html/HTMLElement.h: Ditto.
        * html/HTMLElementFactory.cpp: Ditto.
        * html/HTMLElementFactory.h: Ditto.
        * html/HTMLEntityNames.gperf: Ditto.
        * html/HTMLFieldSetElement.cpp: Ditto.
        * html/HTMLFieldSetElement.h: Ditto.
        * html/HTMLFormCollection.cpp: Ditto.
        * html/HTMLFormCollection.h: Ditto.
        * html/HTMLFormElement.cpp: Ditto.
        * html/HTMLFormElement.h: Ditto.
        * html/HTMLGenericFormElement.cpp: Ditto.
        * html/HTMLGenericFormElement.h: Ditto.
        * html/HTMLInputElement.cpp: Ditto.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLIsIndexElement.cpp: Ditto.
        * html/HTMLIsIndexElement.h: Ditto.
        * html/HTMLKeygenElement.cpp: Ditto.
        * html/HTMLKeygenElement.h: Ditto.
        * html/HTMLLabelElement.cpp: Ditto.
        * html/HTMLLabelElement.h: Ditto.
        * html/HTMLLegendElement.cpp: Ditto.
        * html/HTMLLegendElement.h: Ditto.
        * html/HTMLNameCollection.cpp: Ditto.
        * html/HTMLNameCollection.h: Ditto.
        * html/HTMLNames.cpp: Ditto.
        * html/HTMLNames.h: Ditto.
        * html/HTMLOptGroupElement.cpp: Ditto.
        * html/HTMLOptGroupElement.h: Ditto.
        * html/HTMLOptionElement.cpp: Ditto.
        * html/HTMLOptionElement.h: Ditto.
        * html/HTMLOptionsCollection.cpp: Ditto.
        * html/HTMLOptionsCollection.h: Ditto.
        * html/HTMLParser.cpp: Ditto.
        * html/HTMLParser.h: Ditto.
        * html/HTMLSelectElement.cpp: Ditto.
        * html/HTMLSelectElement.h: Ditto.
        * html/HTMLTextAreaElement.cpp: Ditto.
        * html/HTMLTextAreaElement.h: Ditto.
        * html/HTMLTextFieldInnerElement.cpp: Ditto.
        * html/HTMLTextFieldInnerElement.h: Ditto.
        * html/HTMLTokenizer.cpp: Ditto.
        * html/HTMLTokenizer.h: Ditto.
        * html/html_baseimpl.cpp: Ditto.
        * html/html_baseimpl.h: Ditto.
        * html/html_blockimpl.cpp: Ditto.
        * html/html_blockimpl.h: Ditto.
        * html/html_headimpl.cpp: Ditto.
        * html/html_headimpl.h: Ditto.
        * html/html_imageimpl.cpp: Ditto.
        * html/html_imageimpl.h: Ditto.
        * html/html_inlineimpl.cpp: Ditto.
        * html/html_inlineimpl.h: Ditto.
        * html/html_listimpl.cpp: Ditto.
        * html/html_listimpl.h: Ditto.
        * html/html_objectimpl.cpp: Ditto.
        * html/html_objectimpl.h: Ditto.
        * html/html_tableimpl.cpp: Ditto.
        * html/html_tableimpl.h: Ditto.

        * bindings/objc/DOM.mm:
        * bridge/mac/WebCoreEncodings.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/CSSGrammar.y:
        * css/cssstyleselector.cpp:
        * dom/Document.cpp:
        * dom/EventTargetNode.cpp:
        * dom/NameNodeList.cpp:
        * dom/Node.cpp:
        * dom/Position.cpp:
        * dom/dom_elementimpl.cpp:
        * dom/xml_tokenizer.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/JSEditor.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/TextIterator.cpp:
        * editing/VisiblePosition.cpp:
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * editing/visible_units.cpp:
        * html/CanvasRenderingContext2D.cpp:
        * kcanvas/KCanvasTreeDebug.cpp:
        * khtml/ecma/JSDOMParser.cpp:
        * khtml/ecma/kjs_css.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_events.cpp:
        * khtml/misc/decoder.cpp:
        * khtml/xsl/XSLStyleSheet.cpp:
        * khtml/xsl/XSLTProcessor.cpp:
        * ksvg2/misc/SVGImageLoader.h:
        * ksvg2/svg/SVGElement.cpp:
        * ksvg2/svg/SVGSVGElement.cpp:
        * kwq/WebCoreAXObject.mm:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderFlow.cpp:
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTextField.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/render_applet.cpp:
        * rendering/render_button.cpp:
        * rendering/render_frames.cpp:
        * rendering/render_list.cpp:
        Updated includes.

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Move Form code from MacFrame to Frame.
        Move GraphicsContext code from GraphicsContextMac to GraphicsContext.
        Use IntRect, FloatRect in more places throughout the code.
        http://bugs.webkit.org/show_bug.cgi?id=7824

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame):
        (WebCore::MacFrame::searchForLabelsAboveCell):
        (WebCore::MacFrame::searchForLabelsBeforeElement):
        (WebCore::dictionaryFromHashMap):
        (WebCore::MacFrame::submitForm):
        (WebCore::MacFrame::setView):
        (WebCore::MacFrame::currentEventIsMouseDownInWidget):
        (WebCore::MacFrame::currentEventIsKeyboardOptionTab):
        (WebCore::MacFrame::handleKeyboardOptionTabInView):
        (WebCore::MacFrame::tabsToAllControls):
        (WebCore::MacFrame::shouldDragAutoNode):
        (WebCore::MacFrame::selectionImage):
        (WebCore::MacFrame::snapshotDragImage):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge nextKeyView]):
        (-[WebCoreFrameBridge previousKeyView]):
        (-[WebCoreFrameBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge previousKeyViewInsideWebFrameViews]):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::clearRecordedFormValues):
        (WebCore::Frame::recordFormValue):
        (WebCore::Frame::didNotOpenURL):
        (WebCore::scanForForm):
        (WebCore::Frame::paint):
        (WebCore::Frame::prepareForUserAction):
        * page/Frame.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        (WebCore::GraphicsContextPrivate::~GraphicsContextPrivate):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::font):
        (WebCore::GraphicsContext::setFont):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::setPen):
        (WebCore::GraphicsContext::setBrush):
        (WebCore::GraphicsContext::brush):
        (WebCore::GraphicsContext::setUsesInactiveTextBackgroundColor):
        (WebCore::GraphicsContext::usesInactiveTextBackgroundColor):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::printing):
        (WebCore::GraphicsContext::drawImageAtPoint):
        (WebCore::GraphicsContext::drawImageInRect):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::initFocusRing):
        (WebCore::GraphicsContext::clearFocusRing):
        (WebCore::GraphicsContext::addFocusRingRect):
        (WebCore::GraphicsContext::focusRingWidth):
        (WebCore::GraphicsContext::focusRingOffset):
        (WebCore::GraphicsContext::focusRingRects):
        * platform/GraphicsContext.h:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::fillRectSourceOver):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::setColorFromBrush):
        (WebCore::GraphicsContext::setColorFromPen):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawFloatImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawScaledAndTiledImage):
        (WebCore::GraphicsContext::selectedTextBackgroundColor):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::addClip):
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::drawFocusRing):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::outlineBox):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::drawBorder):
        (WebCore::RenderObject::paintBorderImage):

2006-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7854
          CanvasGradient leaks

        * html/CanvasGradient.cpp: (WebCore::CanvasGradient::platformShading):
        Don't make the CG shading object keep a reference to the DOM gradient object.
        I got confused because in the case of a CanvasPattern, the pattern does need
        to keep a reference to the DOM pattern object, but the object lifetime is
        handled differently here. The CG shading object is used right away, not set
        in a graphics context.

2006-03-19  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - attempt to fix the buildbot by handling DOMImplementation another way

        * WebCore.xcodeproj/project.pbxproj: Added DOMImplementationFront.h/cpp.

        * bindings/objc/DOMImplementationFront.cpp: Added.
        * bindings/objc/DOMImplementationFront.h: Added.

        * bindings/objc/DOMInternal.h: Use DOMImplementationFront, not DOMImplementation.
        * bindings/objc/DOM.mm:
        (-[DOMImplementation dealloc]): Ditto.
        (-[DOMImplementation finalize]): Ditto.
        (-[DOMImplementation _initWithDOMImplementation:]): Ditto.
        (+[DOMImplementation _DOMImplementationWith:]): Ditto.
        (-[DOMImplementation _DOMImplementation]): Ditto.
        (-[DOMDocument implementation]): Call implementationFront from the
        DOMImplementationFront header instead of using the real implementation
        function on the Document.

2006-03-19  Darin Adler  <darin@apple.com>

        - global rename, done by script

        * <lots of files>: Renamed XXXImpl to XXX, and a number of other renames.
        See WebKitTools/Scripts/do-webcore-rename version 13392 for details.

2006-03-19  Darin Adler  <darin@apple.com>

        - roll out fix for http://bugs.webkit.org/show_bug.cgi?id=6314
          Unclosed <style> element in <head> makes page completely blank

        This fix was breaking major sites -- details in the bug report.

        * khtml/html/htmltokenizer.cpp: (WebCore::HTMLTokenizer::parseTag):
        Removed the bug fix, added a FIXME about the <title> code that has
        the same problem.

2006-03-18  David Carson  <dacarson@gmail.com>

        Test: fast/canvas/patternfill-repeat.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7830
          <canvas> createPattern 'repeat' options fail

        * CanvasPattern.cpp (CanvasPattern::createPattern)
        Change stepping so that repeat-x, repeat-y, and no-repeat repeat 
        outside the view area by using large values for repeat interval.

2006-03-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/dom/Element/class-attribute-whitespace.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7761
          Tabs in class attribute not treated as whitespace

        * dom/dom_elementimpl.cpp:
        (WebCore::isClassWhitespace): Helper function to check if a character
        in the class attribute should be treated as whitespace. Added \r and \t.
        (WebCore::NamedMappedAttrMapImpl::parseClassAttribute): Instead of creating
        a QStringList and iterating it, do everything in one pass over the string.

2006-03-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/block/float/vertical-move-relayout.html

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6795
          Slow image load causes render problem

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Call markAllDescendantsWithFloatsForLayout
        when the child's vertical position changes.

2006-03-18  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=6314
        Unclosed <style> element in <head> makes page completely blank

        Test: fast/js/exception-linenums-in-html-3.html
        Test: fast/js/missing-style-end-tag-js.html
        Test: fast/tokenizer/missing-style-end-tag-1.html
        Test: fast/tokenizer/missing-style-end-tag-2.html

        * khtml/html/htmlparser.cpp:
        (WebCore::HTMLParser::handleError): Add check for missing </style> tag and handle
        this condition if identified.
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): If parseSpecial() consumes the rest of the
        document looking for a </style> tag, reset the state of the tokenizer and
        retokenize with no special handling for <style>.  The parser will handle the
        missing </style> tag in HTMLParser::handleError().

2006-03-18  Rob Buis  <buis@kde.org>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=5351:
        SVG: Safari ignores <title> elements

        Make SVGTitleElementImpl act the same as HTMLTitleElementImpl,
        in the process setting the title on the right triggers.

        * ksvg2/svg/SVGTitleElementImpl.cpp:
        (SVGTitleElementImpl::SVGTitleElementImpl):
        (SVGTitleElementImpl::title):
        (SVGTitleElementImpl::closeRenderer):
        (SVGTitleElementImpl::insertedIntoDocument):
        (SVGTitleElementImpl::removedFromDocument):
        (SVGTitleElementImpl::childrenChanged):
        * ksvg2/svg/SVGTitleElementImpl.h:

2006-03-18  Darin Adler  <darin@apple.com>

        - another try at fixing Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added EventTargetNodeImpl.h and .cpp.

2006-03-18  Darin Adler  <darin@apple.com>

        - another try at fixing Windows build

        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::keyPress): Added EventTargetNodeCast.

2006-03-18  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * bridge/win/FrameWin.h: Remove KURL parameter.
        * bridge/win/FrameWin.cpp: (WebCore::FrameWin::urlSelected): Ditto.
        * platform/win/TemporaryLinkStubs.cpp: (BrowserExtensionWin::canRunModal): Ditto.

2006-03-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix leaks caused by the fix for Bugzilla bug 3560

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::destroyLeftoverChildren): Text renderers with
        first-letter pseudo style are children of an existing first-letter inline
        that has been updated, and should be destroyed.

2006-03-18  David Hyatt  <hyatt@apple.com>

        Fix for bug 7841, tables, table rows, and table row groups should
        all support overflow:hidden.

        Reviewed by eric

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::getOverflowClipRect):
        * rendering/RenderTable.h:
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::requiresLayer):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::setStyle):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::paintLayer):

2006-03-17  Alice Liu  <alice.liu@apple.com>

        Reviewed by Hyatt.

        - fixed http://bugs.webkit.org/show_bug.cgi?id=6999
          "Dynamically added link-tag disables the use of change styles 
           dynamically"

        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::process):
        - dynamically added link-tags for stylesheets were messing up the
          counting of pending stylesheets.  If a head link element 
          specifies a new stylesheet but the previously specified 
          stylesheet is still loading, tell the document that stylesheets 
          are loaded so that there are no remaining requests for it to be 
          loaded.

2006-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed some crashes in event dispatch and settled the question of 
        when getDocument() can return NULL, removing superfluous NULL checks.

        I promise to check in a test case soon, but I need to land this before
        the global rename happens, and I left the test file on my other machine.

        Here's what I did:

        (1) Removed NULL checks for getDocument() in cases where we know it
        should not return NULL (which turned out to be all but one). Replaced 
        with ASSERT inside getDocument(). Tested to ensure there was no 
        regression @ albertsons.com.

        (2) Added the EventTargetNode class, which represents Nodes that
        implement the DOM EventTarget interface. Discussed this design with
        Maciej and Hyatt. The previous dsign -- assuming that all Nodes were 
        EventTargets -- made it possible to crash WebKit by, for example, 
        dispatching a mouse event to a documentType node that was not 
        associated with a document.

        (3) Reflected (2) into the JS bindings and touched JSDOMCore.cpp to 
        force a re-build.

        (4) Using classInfo checking, strengthened type constraints on 
        JavaScript method dispatch so that you can't finagle JavaScript into, 
        for example, invoking a document-dependent method belonging to a
        node type that's guaranteed to have a document on a node type that may
        not have one. 

        (5) Pushed some IE-specific JS bindings that depend on a node having a 
        document down from DOMNode to DOMElement. (An element always has a 
        document.) Tested that Firefox's behavior matched. Confirmed with MSDN.

        (6) Updated Objc bindigns to throw an exception if you try to use
        the event interface on a node that doesn't support it. Discussed this
        design with Maciej and TimH.

        (7) Consolidated repeated documentElement-finding code in the Position 
        class into the Position::documentElement() method. Did the same for
        repeated top-level document finding and DocumentImpl::topDocument().
        
        * WebCore+SVG/KDOMHeaders.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMCore.cpp:
        * bindings/objc/DOM.mm:
        (-[DOMNode addEventListener:::]):
        (-[DOMNode removeEventListener:::]):
        (-[DOMNode dispatchEvent:]):
        (-[DOMNode KJS::Bindings::]):
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::keyEvent):
        (WebCore::MacFrame::dispatchCPPEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setSelectedDOMRange:affinity:closeTyping:]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        * css/css_base.cpp:
        (WebCore::StyleBaseImpl::baseURL):
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/css_valueimpl.cpp:
        (WebCore::CSSMutableStyleDeclarationImpl::removeProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::setProperty):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/CharacterDataImpl.cpp:
        (WebCore::CharacterDataImpl::CharacterDataImpl):
        (WebCore::CharacterDataImpl::rendererIsNeeded):
        (WebCore::CharacterDataImpl::dump):
        * dom/CharacterDataImpl.h:
        * dom/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::ContainerNodeImpl):
        (WebCore::ContainerNodeImpl::removeChild):
        (WebCore::ContainerNodeImpl::attach):
        (WebCore::ContainerNodeImpl::detach):
        (WebCore::ContainerNodeImpl::insertedIntoDocument):
        (WebCore::ContainerNodeImpl::removedFromDocument):
        (WebCore::ContainerNodeImpl::insertedIntoTree):
        (WebCore::ContainerNodeImpl::removedFromTree):
        (WebCore::ContainerNodeImpl::setFocus):
        (WebCore::ContainerNodeImpl::setActive):
        (WebCore::ContainerNodeImpl::setHovered):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNodeImpl.h:
        * dom/DOMImplementationImpl.cpp:
        (WebCore::DOMImplementationImpl::createDocument):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::removeAllEventListenersFromAllNodes):
        (WebCore::DocumentImpl::removeAllDisconnectedNodeEventListeners):
        (WebCore::DocumentImpl::getAccObjectCache):
        (WebCore::DocumentImpl::setFocusNode):
        (WebCore::DocumentImpl::topDocument):
        * dom/Element.idl:
        * dom/EventTargetNodeImpl.cpp: Added.
        (WebCore::EventTargetNodeImpl::EventTargetNodeImpl):
        (WebCore::EventTargetNodeImpl::~EventTargetNodeImpl):
        (WebCore::EventTargetNodeImpl::insertedIntoDocument):
        (WebCore::EventTargetNodeImpl::removedFromDocument):
        (WebCore::EventTargetNodeImpl::addEventListener):
        (WebCore::EventTargetNodeImpl::removeEventListener):
        (WebCore::EventTargetNodeImpl::removeAllEventListeners):
        (WebCore::EventTargetNodeImpl::handleLocalEvents):
        (WebCore::EventTargetNodeImpl::dispatchGenericEvent):
        (WebCore::EventTargetNodeImpl::dispatchEvent):
        (WebCore::EventTargetNodeImpl::dispatchSubtreeModifiedEvent):
        (WebCore::EventTargetNodeImpl::dispatchWindowEvent):
        (WebCore::EventTargetNodeImpl::dispatchUIEvent):
        (WebCore::EventTargetNodeImpl::dispatchKeyEvent):
        (WebCore::EventTargetNodeImpl::dispatchMouseEvent):
        (WebCore::EventTargetNodeImpl::dispatchSimulatedMouseEvent):
        (WebCore::EventTargetNodeImpl::dispatchWheelEvent):
        (WebCore::EventTargetNodeImpl::dispatchHTMLEvent):
        (WebCore::EventTargetNodeImpl::removeHTMLEventListener):
        (WebCore::EventTargetNodeImpl::setHTMLEventListener):
        (WebCore::EventTargetNodeImpl::getHTMLEventListener):
        (WebCore::EventTargetNodeImpl::disabled):
        (WebCore::EventTargetNodeImpl::defaultEventHandler):
        (WebCore::EventTargetNodeImpl::dump):
        * dom/EventTargetNodeImpl.h: Added.
        (WebCore::EventTargetNodeImpl::isEventTargetNode):
        (WebCore::EventTargetNodeImpl::preDispatchEventHandler):
        (WebCore::EventTargetNodeImpl::postDispatchEventHandler):
        (WebCore::EventTarget):
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        (WebCore::eventDispatchForbidden):
        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::NodeImpl):
        (WebCore::NodeImpl::~NodeImpl):
        (WebCore::NodeImpl::dump):
        (WebCore::NodeImpl::detach):
        (WebCore::NodeImpl::insertedIntoDocument):
        (WebCore::NodeImpl::removedFromDocument):
        * dom/NodeImpl.h:
        (WebCore::NodeImpl::isEventTargetNode):
        (WebCore::NodeImpl::isLink):
        (WebCore::NodeImpl::getDocument):
        (WebCore::NodeImpl::inDocument):
        * dom/dom2_eventsimpl.cpp:
        (WebCore::MouseRelatedEventImpl::receivedTarget):
        * dom/dom2_rangeimpl.cpp:
        (WebCore::RangeImpl::commonAncestorContainer):
        * dom/dom_elementimpl.cpp:
        (WebCore::inHTMLDocument):
        (WebCore::ElementImpl::focus):
        (WebCore::ElementImpl::blur):
        (WebCore::StyledElementImpl::parseMappedAttribute):
        * dom/dom_position.cpp:
        (WebCore::Position::documentElement):
        * dom/dom_position.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::computeAndStoreNodeDesiredStyle):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::needsCaretRepaint):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::mark):
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNode::putValueProperty):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        (KJS::DOMEventTargetNode::DOMEventTargetNode):
        (KJS::DOMEventTargetNode::getOwnPropertySlot):
        (KJS::DOMEventTargetNode::getValueProperty):
        (KJS::DOMEventTargetNode::put):
        (KJS::DOMEventTargetNode::putValueProperty):
        (KJS::DOMEventTargetNode::setListener):
        (KJS::DOMEventTargetNode::getListener):
        (KJS::DOMEventTargetNode::pushEventHandlerScope):
        (KJS::DOMEventTargetNodeProtoFunc::callAsFunction):
        (KJS::):
        (KJS::DOMDocument::DOMDocument):
        (KJS::DOMDocument::getOwnPropertySlot):
        (KJS::DOMDocument::put):
        (KJS::DOMDocument::putValueProperty):
        (KJS::DOMDocumentProtoFunc::callAsFunction):
        (KJS::DOMElement::DOMElement):
        (KJS::DOMElement::getValueProperty):
        (KJS::DOMElement::put):
        (KJS::DOMElement::putValueProperty):
        (KJS::DOMElement::getOwnPropertySlot):
        (KJS::DOMElementProtoFunc::callAsFunction):
        (KJS::checkNodeSecurity):
        * khtml/ecma/kjs_dom.h:
        (KJS::DOMNode::):
        (KJS::DOMEventTargetNode::):
        (KJS::DOMElement::):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):
        (KJS::getNodeEventListener):
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::bodyGetter):
        (KJS::HTMLElement::anchorGetter):
        (KJS::HTMLElement::getValueProperty):
        (KJS::HTMLElement::bodySetter):
        * khtml/ecma/kjs_views.cpp:
        (KJS::DOMAbstractViewProtoFunc::callAsFunction):
        * khtml/html/HTMLFormElementImpl.cpp:
        (WebCore::HTMLFormElementImpl::registerFormElement):
        (WebCore::HTMLFormElementImpl::removeFormElement):
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        (WebCore::HTMLGenericFormElementImpl::insertedIntoTree):
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::~HTMLInputElementImpl):
        (WebCore::HTMLInputElementImpl::focus):
        * khtml/html/HTMLOptionElementImpl.cpp:
        (WebCore::HTMLOptionElementImpl::text):
        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::~HTMLSelectElementImpl):
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        (WebCore::HTMLTextAreaElementImpl::~HTMLTextAreaElementImpl):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLBodyElementImpl::insertedIntoDocument):
        (WebCore::HTMLFrameElementImpl::isURLAllowed):
        (WebCore::HTMLFrameElementImpl::openURL):
        (WebCore::HTMLFrameElementImpl::frameWidth):
        (WebCore::HTMLFrameElementImpl::frameHeight):
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageLoader::~HTMLImageLoader):
        (WebCore::HTMLImageLoader::updateFromElement):
        (WebCore::HTMLImageLoader::notifyFinished):
        (WebCore::HTMLImageElementImpl::width):
        (WebCore::HTMLImageElementImpl::height):
        (WebCore::HTMLMapElementImpl::~HTMLMapElementImpl):
        * khtml/html/html_inlineimpl.cpp:
        (WebCore::HTMLAnchorElementImpl::defaultEventHandler):
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished):
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp:
        (SVGAnimateColorElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimateElementImpl.cpp:
        (SVGAnimateElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElementImpl.cpp:
        (SVGAnimateTransformElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        (SVGAnimationElementImpl::closeRenderer):
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        (WebCore::SVGDocumentImpl::dispatchRecursiveEvent):
        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGImageElementImpl.cpp:
        * ksvg2/svg/SVGSetElementImpl.cpp:
        (SVGSetElementImpl::handleTimerEvent):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject mouseButtonListener]):
        (-[KWQAccObject accessibilityPerformAction:]):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView dispatchHTMLEvent:]):
        * page/Frame.cpp:
        (WebCore::dispatchKHTMLEditableContentChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::dispatchMouseEvent):
        (WebCore::FrameView::viewportWheelEvent):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::shouldSelect):
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::sendConsumedMouseUp):

2006-03-17  David Hyatt  <hyatt@apple.com>

        Fix for 7837, make opacity work with table rows.  Make transparent backgrounds
        stack properly in cells (so that the layers behind can show through like they
        should).

        Reviewed by beth

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::requiresLayer):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::transparentAncestor):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::requiresLayer):
        * rendering/render_object.h:
        (WebCore::RenderObject::isTransparent):
        (WebCore::RenderObject::opacity):

2006-03-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - clean up ResourceRequest to be closer to a proper request interface

        * page/ResourceRequest.h: folded URL into ResourceRequest, other cleanup
        (WebCore::ResourceRequest::ResourceRequest): Add new explicit constructor
        that takes a KURL.
        (WebCore::ResourceRequest::url): getter for KURL
        (WebCore::ResourceRequest::setURL): corresponding setter
        (WebCore::ResourceRequest::referrer): new getter for referrer, instead
        of storing it in m_metaData (it was the only remaining real use of it)
        (WebCore::ResourceRequest::setReferrer): corresponding setter
        * bridge/BrowserExtension.h: 
        - removed unused openURLRequest and openURLNotify methods
        - folded KURL parameter into ResourceRequest
        * bridge/mac/BrowserExtensionMac.h: remove KURL args from methods that
        also take a ResourceRequest
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow): adjust for ResourceRequest
        changes.
        * bridge/mac/MacFrame.h: remove KURL args from methods that also take a
        ResourceRequest
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::openURLRequest): adjust for ResourceRequest changes
        (WebCore::MacFrame::submitForm): ditto
        (WebCore::MacFrame::urlSelected): ditto
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge openURL:reload:contentType:refresh:lastModified:pageCache:]): 
        adjust for ResourceRequest changes
        * bridge/win/BrowserExtensionWin.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow): adjust for ResourceRequest changes
        (KJS::WindowFunc::callAsFunction): ditto
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL): adjust for ResourceRequest changes
        (WebCore::Frame::receivedFirstData): ditto
        (WebCore::Frame::begin): ditto
        (WebCore::Frame::completeURL): ditto
        (WebCore::Frame::changeLocation): ditto
        (WebCore::Frame::urlSelected): ditto
        (WebCore::Frame::requestFrame): ditto
        (WebCore::Frame::submitForm): ditto
        * page/Frame.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::createNewWindow): ditto

2006-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Tim H.

        Make default backgrounds for new text fields white
        instead of transparent.  This will move to html4.css
        when we flip the switch.

        Test added:
        * fast/forms/input-appearance-default-bkcolor.html

        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::adjustTextFieldStyle):

2006-03-17  David Hyatt  <hyatt@apple.com>

        Make table sections and table captions support opacity.

        Reviewed by darin

        Covered by some of the new Mozilla table tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):

2006-03-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, landed by Beth.

        fix http://bugs.webkit.org/show_bug.cgi?id=3560
        page with use of first-letter crashes reproducibly in 
        RenderObject::renderArena()

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Pass the first-leter 
        renderer to the remaining text fragment.
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::destroyLeftoverChildren): Do not destroy 
        first-letter renderers since they are destroyed by their remaining 
        text now.
        * rendering/RenderTextFragment.cpp:
        (khtml::RenderTextFragment::RenderTextFragment):
        (khtml::RenderTextFragment::destroy): Destroy the first-letter 
        renderer.
        * rendering/RenderTextFragment.h:
        (khtml::RenderTextFragment::firstLetter):

2006-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Eric.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7798 
        New text fields are much wider than they should be for a specified size

        I changed the character we use to calculate the width from "w" back to "0", 
        which matches our old behavior.  The original change was intentional, to try
        to better match other browsers, but "w" is a little too wide.  For now, lets
        go back to the old behavior.

        I also set the minWidth = maxWidth.  We were trying to match a WinIE quirk,
        but that caused some odd behavior with growth of the text field in table cells.

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::calcMinMaxWidth):

2006-03-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        Fix win32 build.
        Add PageWin class.
        Add previously forgotten KeyEventWin class.
        Pass MouseEvent() instead of 0 in a couple places to make compiler happy.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/BrowserExtensionWin.h:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::urlSelected):
        (WebCore::FrameWin::keyPress):
        * bridge/win/FrameWin.h:
        * bridge/win/PageWin.cpp: Added.
        (WebCore::rootWindowForFrame):
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateDragAndDrop):
        (WebCore::FrameView::hoverTimerFired):
        * page/Page.h:
        (WebCore::Page::mainFrame):
        * platform/win/KeyEventWin.cpp: Added.
        (WebCore::KeyEvent::KeyEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::findNextWordFromIndex):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::scheduleClose):
        (BrowserExtensionWin::createNewWindow):
        (WebCore::findWordBoundary):
        (FrameWin::registerCommandForUndo):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::respondToChangedContents):

2006-03-17  David Hyatt  <hyatt@apple.com>

        Fix pixel test regression in fast/table/overflowHidden.html.  There was
        a borderTopExtra error made in the new boundingBox code for layers that
        caused the bottom half of cells with opacity set to be clipped out.

        Reviewed by andersca

        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::absoluteBoundingBox):

2006-03-17  David Hyatt  <hyatt@apple.com>

        Give table rows and sections accurate dimensions.  Fix absolutePosition
        to work for table cells properly.  Add an absolutePositionForContent method
        to make sure callers that want to deal with the content of a cell handle
        the cell's extra space correctly.

        Reviewed by darin

        Existing layout tests cover this change.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge copyRenderNode:copier:]):
        * dom/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::getUpperLeftCorner):
        (WebCore::ContainerNodeImpl::getLowerRightCorner):
        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::getRect):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout):
        (WebCore::SelectionController::caretRect):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::defaultEventHandler):
        * kwq/KWQRenderTreeDebug.cpp:
        (operator<<):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRects):
        (WebCore::RenderBlock::positionForCoordinates):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::positionForCoordinates):
        (WebCore::RenderContainer::lineBoxRects):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeAbsoluteRepaintRect):
        (WebCore::RenderTableCell::absolutePosition):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::getAbsoluteRepaintRect):
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::recalcCells):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::lineBoxRects):
        (WebCore::RenderText::positionForCoordinates):
        (WebCore::RenderText::caretRect):
        (WebCore::RenderText::posOfChar):
        (WebCore::RenderText::selectionRect):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::caretRect):
        * rendering/render_br.cpp:
        (WebCore::RenderBR::caretRect):
        * rendering/render_canvas.h:
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::caretRect):
        * rendering/render_frames.cpp:
        (WebCore::RenderPart::updateWidgetPosition):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::absoluteRects):
        (WebCore::RenderObject::absoluteBoundingBoxRect):
        (WebCore::RenderObject::absolutePosition):
        * rendering/render_object.h:
        (WebCore::RenderObject::absolutePositionForContent):
        (WebCore::RenderObject::offsetHeight):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):

2006-03-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        WebCore part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=7797 
        Can't set background color on new text fields

        Bezeled NSTextFieldCells always draw a background, so instead we'll use a new 
        WebKitSystemInterface function to just draw the border of the cell.

        Since the theme is drawing the border and the engine is drawing the background 
        (which is different from the other form controls), we have to make sure we let the 
        theme paint the border after the engine paints the background.

        * platform/mac/WebCoreGraphicsBridge.h:
        * platform/mac/WebCoreGraphicsBridge.m:
        (-[WebCoreGraphicsBridge drawBezeledTextFieldCell:enabled:]):
        * rendering/render_box.cpp: (WebCore::RenderBox::paintBoxDecorations):
        * rendering/render_theme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorder):
        (WebCore::RenderTheme::shouldPaintBorder):
        * rendering/render_theme.h:
        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::setTextFieldCellState):

2006-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - removed KWQWindowWidget
        - changed most event handling to use references instead of pointers
        - chagned PageMac to no longer be a subclass of Page

        Yes, I know there's no detail in this ChangeLog entry.
        No, I don't plan to make a habit of doing things this way.
        Yes, this will probably break the Windows build again.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/FrameViewMac.mm:
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame):
        (WebCore::MacFrame::~MacFrame):
        (WebCore::MacFrame::wheelEvent):
        (WebCore::MacFrame::keyEvent):
        (WebCore::MacFrame::khtmlMousePressEvent):
        (WebCore::MacFrame::khtmlMouseMoveEvent):
        (WebCore::MacFrame::khtmlMouseReleaseEvent):
        (WebCore::MacFrame::mouseDown):
        (WebCore::MacFrame::mouseDragged):
        (WebCore::MacFrame::mouseUp):
        (WebCore::MacFrame::mouseMoved):
        (WebCore::MacFrame::sendContextMenuEvent):
        (WebCore::MacFrame::setBridge):
        (WebCore::MacFrame::dragSourceMovedTo):
        (WebCore::MacFrame::dragSourceEndedAt):
        (WebCore::MacFrame::dispatchDragSrcEvent):
        * bridge/mac/PageMac.h: Removed.
        * bridge/mac/PageMac.mm: Added.
        (WebCore::Page::Page):
        (WebCore::Page::windowRect):
        (WebCore::Page::setWindowRect):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge page]):
        (-[WebCoreFrameBridge initializeSettings:]):
        (globalPoint):
        (createMouseEventFromDraggingInfo):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreFrameBridge concludeDragForDraggingInfo:]):
        (-[WebCoreFrameBridge dragSourceMovedTo:]):
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):
        * bridge/mac/WebCoreFrameNamespaces.mm:
        (WebCore::):
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge init]):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::prepareMouseEvent):
        (WebCore::DocumentImpl::defaultEventHandler):
        * dom/DocumentImpl.h:
        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchMouseEvent):
        (WebCore::NodeImpl::dispatchKeyEvent):
        (WebCore::NodeImpl::dispatchWheelEvent):
        * dom/NodeImpl.h:
        * dom/dom2_eventsimpl.cpp:
        (WebCore::KeyboardEventImpl::KeyboardEventImpl):
        * dom/dom2_eventsimpl.h:
        (WebCore::KeyboardEventImpl::keyEvent):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::WindowFunc::callAsFunction):
        * khtml/html/html_inlineimpl.cpp:
        (WebCore::HTMLAnchorElementImpl::defaultEventHandler):
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * ksvg2/svg/SVGDocumentImpl.h:
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventDoubleClick):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::khtmlMousePressEvent):
        (WebCore::Frame::handleMouseMoveEventSelection):
        (WebCore::Frame::khtmlMouseMoveEvent):
        (WebCore::Frame::khtmlMouseReleaseEvent):
        (WebCore::Frame::khtmlMouseDoubleClickEvent):
        (WebCore::Frame::passWidgetMouseDownEventToWidget):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportMousePressEvent):
        (WebCore::FrameView::viewportMouseDoubleClickEvent):
        (WebCore::FrameView::viewportMouseMoveEvent):
        (WebCore::FrameView::viewportMouseReleaseEvent):
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::updateDragAndDrop):
        (WebCore::FrameView::cancelDragAndDrop):
        (WebCore::FrameView::performDragAndDrop):
        (WebCore::FrameView::dispatchMouseEvent):
        (WebCore::FrameView::viewportWheelEvent):
        * page/FrameView.h:
        * page/MouseEventWithHitTestResults.h:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        (WebCore::MouseEventWithHitTestResults::event):
        * page/Page.cpp:
        (WebCore::Page::init):
        * page/Page.h:
        (WebCore::Page::bridge):
        * platform/KeyEvent.h:
        (WebCore::KeyEvent::isAutoRepeat):
        * platform/MouseEvent.h:
        (WebCore::MouseEvent::MouseEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::KeyEvent::KeyEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::isFrameView):
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::clicked):

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add additional hackish Font, focusring and caret code.
        http://bugs.webkit.org/show_bug.cgi?id=7803

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * bindings/js/JSCanvasRenderingContext2DBase.cpp:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::keyPress):
        * bridge/win/FrameWin.h:
        * html/CanvasRenderingContext2D.h:
        * platform/IntSize.h:
        * platform/KeyEvent.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawArc):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/win/FontWin.cpp:
        (WebCore::hackishExtentForString):
        (WebCore::Font::floatWidth):
        (WebCore::convertRange):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::checkSelectionPoint):
        (WebCore::Font::drawLineForText):
        (WebCore::Font::misspellingLineThickness):
        * platform/win/IntSizeWin.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator SIZE):
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::visibleContentRect):
        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::disableFlushDrawing):
        (GraphicsContext::GraphicsContext):
        (QListBox::setSelected):
        (QListBox::sizeForNumberOfLines):
        (QListBox::isSelected):
        (QListBox::appendItem):
        (QListBox::doneAppendingItems):
        (FrameWin::locationbarVisible):
        (FrameWin::canUndo):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::issueTransposeCommand):
        (RenderCanvasImage::setNeedsImageUpdate):
        (FrameWin::shouldChangeSelection):
        (FrameWin::respondToChangedSelection):
        (FrameWin::clearRecordedFormValues):
        (FrameWin::recordFormValue):
        (BrowserExtensionWin::getHistoryLength):
        (Widget::setIsSelected):
        (GraphicsContext::selectedTextBackgroundColor):
        (GraphicsContext::addRoundedRectClip):
        (QScrollBar::QScrollBar):
        (QScrollBar::~QScrollBar):
        (QScrollBar::setSteps):
        (QScrollBar::scroll):
        (QScrollBar::setValue):
        (QScrollBar::setKnobProportion):
        (QListBox::QListBox):
        (QListBox::~QListBox):
        (QListBox::setSelectionMode):
        (QListBox::setFont):
        * rendering/render_canvasimage.h:

2006-03-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - renamed URLArgs to ResourceRequest, split it into its own header
        - moved methods to get and set ResourceRequest to Frame

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::openURLRequest):
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::openURLRequest):
        (WebCore::MacFrame::submitForm):
        (WebCore::MacFrame::urlSelected):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::WindowFunc::callAsFunction):
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::receivedFirstData):
        (WebCore::Frame::setResourceRequest):
        (WebCore::Frame::resourceRequest):
        (WebCore::Frame::begin):
        (WebCore::Frame::changeLocation):
        (WebCore::Frame::urlSelected):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::submitForm):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::contentType):
        (WebCore::ResourceRequest::setContentType):
        (WebCore::ResourceRequest::doPost):
        (WebCore::ResourceRequest::setDoPost):
        (WebCore::ResourceRequest::lockHistory):
        (WebCore::ResourceRequest::setLockHistory):
        (WebCore::ResourceRequest::metaData):

2006-03-16  Darin Adler  <darin@apple.com>

        - need to touch one more file to fix the build
          (Darn the lack of dependencies for autogenerated bindings!)

        * dom/Element.idl: Touch. (Really this time.)

2006-03-16  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Pushed focus ring handling down into GraphicsContext.cpp

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::mouseDown):
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::initFocusRing):
        (WebCore::GraphicsContext::clearFocusRing):
        (WebCore::GraphicsContext::addFocusRingRect):
        * platform/GraphicsContext.h:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        (WebCore::GraphicsContextPrivate::~GraphicsContextPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawFocusRing):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::addFocusRingRects):

2006-03-15  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7749
          canvas should be in DOM, not implemented in the JS bindings

        * WebCore.xcodeproj/project.pbxproj: Added new files.
        Changed bindings-generation code to work on the new html directory
        as well as the dom one.

        * bindings/js/JSCanvasRenderingContext2DBase.cpp: Added.
        * bindings/js/JSCanvasRenderingContext2DBase.h: Added.
        * bindings/js/JSDOMHTML.cpp: Added.
        * html: Added.
        * html/CanvasGradient.cpp: Added.
        * html/CanvasGradient.h: Added.
        * html/CanvasGradient.idl: Added.
        * html/CanvasPattern.cpp: Added.
        * html/CanvasPattern.h: Added.
        * html/CanvasPattern.idl: Added.
        * html/CanvasRenderingContext2D.cpp: Added.
        * html/CanvasRenderingContext2D.h: Added.
        * html/CanvasRenderingContext2D.idl: Added.
        * html/CanvasStyle.cpp: Added.
        * html/CanvasStyle.h: Added.

        * bindings/js/JSDOMCore.cpp: Touched so that it will recompile.
        * bindings/js/JSDOMEvents.cpp: Ditto.
        * dom/Attr.idl: Ditto.
        * dom/DOMImplementation.idl: Ditto.
        * dom/DocumentType.idl: Ditto.
        * dom/MutationEvent.idl: Ditto.
        * dom/ProcessingInstruction.idl: Ditto.
        * dom/Text.idl: Ditto.

        * khtml/ecma/kjs_binding.h: (KJS::toJS): Added. Template so that you can call
        toJS on a PassRefPtr as well as on a raw pointer.

        * bindings/scripts/CodeGeneratorJS.pm: Fixed handling of a class that has only
        a legacy parent, no conventional parents. Added JSCanvasRenderingContext2DBase
        as a legacy parent, and html as a legacy module. Added CanvasRenderingContext2D,
        CanvasGradient, and CanvasPattern to the "waht to include". Added a special
        case for strings beginning with Canvas to not add an "Impl" suffix. Made the
        generated impl() function be a const member function. Made m_mimpl be private
        instead of protected. Generate a toJS function for each class. Added flaot as
        a type. Generate String, not DOMString. Made the HashTable const.

        * bindings/scripts/IDLParser.pm: Fix a couple small things. I had started to
        try to make a missing semicolon trigger an error, but ended up giving up on
        that for now.

        * khtml/html/html_canvasimpl.h:
        * khtml/html/html_canvasimpl.cpp:
        (WebCore::HTMLCanvasElementImpl::HTMLCanvasElementImpl): Set m_2DContext to 0.
        (WebCore::HTMLCanvasElementImpl::~HTMLCanvasElementImpl): Call detachCanvas
        on m_2DContext, if any.
        (WebCore::HTMLCanvasElementImpl::detach): Call reset on m_2DContext, if any.
        (WebCore::HTMLCanvasElementImpl::getContext): Added.
        (WebCore::HTMLCanvasElementImpl::size): Added.
        (WebCore::HTMLCanvasElementImpl::createPlatformImage): Added.

        * platform/Image.h:
        * platform/Image.cpp: (WebCore::Image::compositeOperatorFromString):
        Changed to take a String instead of a const char*.

        * khtml/html/html_imageimpl.h:
        * khtml/html/html_imageimpl.cpp: (WebCore::HTMLMapElementImpl::areas):
        Tweaked formatting. Changed to use PassRefPtr.

        * bindings/objc/DOMInternal.mm: (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * khtml/ecma/JSXMLHttpRequest.cpp: (KJS::JSXMLHttpRequest::getValueProperty):
        * khtml/ecma/XSLTProcessor.cpp: (KJS::XSLTProcessorProtoFunc::callAsFunction):
        * khtml/ecma/domparser.cpp: (KJS::DOMParserProtoFunc::callAsFunction):
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::getValueProperty):
        (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
        (KJS::toJS):
        (KJS::DOMStyleSheet::getValueProperty):
        (KJS::DOMStyleSheetList::indexGetter):
        (KJS::DOMStyleSheetList::nameGetter):
        (KJS::DOMStyleSheetListFunc::callAsFunction):
        (KJS::DOMCSSStyleSheet::getValueProperty):
        (KJS::DOMCSSRuleList::indexGetter):
        (KJS::DOMCSSRuleListFunc::callAsFunction):
        (KJS::DOMCSSRule::getValueProperty):
        (KJS::DOMCSSPrimitiveValueProtoFunc::callAsFunction):
        (KJS::DOMCSSValueList::indexGetter):
        (KJS::DOMCSSValueListFunc::callAsFunction):
        (KJS::DOMRect::getValueProperty):
        * khtml/ecma/kjs_css.h:
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        (KJS::DOMNodeList::indexGetter):
        (KJS::DOMNodeList::nameGetter):
        (KJS::DOMNodeList::callAsFunction):
        (KJS::DOMNodeListFunc::callAsFunction):
        (KJS::DOMDocument::getValueProperty):
        (KJS::DOMDocumentProtoFunc::callAsFunction):
        (KJS::DOMNamedNodeMap::indexGetter):
        (KJS::DOMNamedNodeMap::nameGetter):
        (KJS::DOMNamedNodeMapProtoFunc::callAsFunction):
        (KJS::toJS):
        (KJS::DOMNamedNodesCollection::indexGetter):
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        (KJS::JSLazyEventListener::parseCode):
        (KJS::DOMEvent::getValueProperty):
        (KJS::toJS):
        (KJS::DOMUIEvent::getValueProperty):
        (KJS::DOMMouseEvent::getValueProperty):
        * khtml/ecma/kjs_events.h:
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocFunction::callAsFunction):
        (KJS::HTMLDocument::namedItemGetter):
        (KJS::HTMLDocument::getValueProperty):
        (KJS::HTMLDocument::put):
        (KJS::HTMLDocument::putValueProperty):
        (KJS::HTMLElement::classInfo):
        (KJS::HTMLElement::formIndexGetter):
        (KJS::HTMLElement::selectIndexGetter):
        (KJS::HTMLElement::implementsCall):
        (KJS::HTMLElement::callAsFunction):
        (KJS::HTMLElement::linkGetter):
        (KJS::HTMLElement::isIndexGetter):
        (KJS::HTMLElement::styleGetter):
        (KJS::HTMLElement::selectGetter):
        (KJS::HTMLElement::optionGetter):
        (KJS::HTMLElement::inputGetter):
        (KJS::HTMLElement::textAreaGetter):
        (KJS::HTMLElement::buttonGetter):
        (KJS::HTMLElement::labelGetter):
        (KJS::HTMLElement::fieldSetGetter):
        (KJS::HTMLElement::legendGetter):
        (KJS::HTMLElement::objectGetter):
        (KJS::HTMLElement::tableGetter):
        (KJS::HTMLElement::frameGetter):
        (KJS::HTMLElement::iFrameGetter):
        (KJS::HTMLElement::getValueProperty):
        (KJS::HTMLElement::toString):
        (KJS::HTMLElement::pushEventHandlerScope):
        (KJS::toJS):
        (KJS::HTMLElementFunction::callAsFunction):
        (KJS::HTMLElement::put):
        (KJS::HTMLCollection::indexGetter):
        (KJS::HTMLCollection::callAsFunction):
        (KJS::HTMLCollection::getNamedItems):
        (KJS::HTMLCollectionProtoFunc::callAsFunction):
        (KJS::HTMLSelectCollection::put):
        (KJS::OptionConstructorImp::construct):
        (KJS::ImageConstructorImp::construct):
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_proxy.cpp: (WebCore::KJSProxyImpl::evaluate):
        * khtml/ecma/kjs_range.cpp:
        (KJS::DOMRange::getValueProperty):
        (KJS::DOMRangeProtoFunc::callAsFunction):
        (KJS::toJS):
        * khtml/ecma/kjs_range.h:
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::DOMNodeIterator::getValueProperty):
        (KJS::DOMNodeIteratorProtoFunc::callAsFunction):
        (KJS::toJS):
        (KJS::DOMTreeWalker::getValueProperty):
        (KJS::DOMTreeWalkerProtoFunc::callAsFunction):
        (KJS::JSNodeFilterCondition::acceptNode):
        * khtml/ecma/kjs_traversal.h:
        * khtml/ecma/kjs_views.cpp:
        (KJS::DOMAbstractView::getValueProperty):
        (KJS::DOMAbstractViewProtoFunc::callAsFunction):
        (KJS::toJS):
        * khtml/ecma/kjs_views.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::namedItemGetter):
        (KJS::Selection::getValueProperty):
        (KJS::SelectionFunc::callAsFunction):
        Rename uses and definitions of all the various converstions to JavaScript
        wrappers to the new common overloaded name: "toJS".

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Push more of MacFrame down into Frame.
        Add visibleContentRect method to ScrollView.

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::imageFromRect):
        (WebCore::MacFrame::setDisplaysWithFocusAttributes):
        (WebCore::MacFrame::bodyBackgroundColor):
        * bridge/mac/WebCoreFrameBridge.mm:
        * page/Frame.cpp:
        (WebCore::Frame::visibleSelectionRect):
        (WebCore::Frame::setDisplaysWithFocusAttributes):
        * page/Frame.h:
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::scrollXOffset):
        (WebCore::ScrollView::scrollYOffset):
        (WebCore::ScrollView::inWindow):

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove unused code and clean-up style.

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::advanceToNextMisspelling):
        (WebCore::MacFrame::wheelEvent):
        (WebCore::MacFrame::nextKeyViewInFrame):
        (WebCore::MacFrame::nextKeyViewInFrameHierarchy):
        (WebCore::MacFrame::nextKeyView):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchMouseEvent):

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        http://bugs.webkit.org/show_bug.cgi?id=7790
        addEventListener does not work with "dblclick" event.
        Renamed khtmlDblclickEvent to dblclickEvent to fix.

        Test: fast/events/dblclick-addEventListener.html

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::mouseUp):
        (WebCore::MacFrame::mouseMoved):
        (WebCore::MacFrame::shouldDragAutoNode):
        (WebCore::MacFrame::sendContextMenuEvent):
        * dom/EventNames.h:
        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchMouseEvent):
        * dom/NodeImpl.h:
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::wasRunByUserGesture):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNode::putValueProperty):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::parseMappedAttribute):
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchMouseEvent):
        * page/FrameView.h:

2006-03-16  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4395
         REGRESSION: document.open doesn't clear the document

        Test: fast/dom/Document/document-reopen.html
        Test: fast/dom/Document/doc-open-while-parsing.html

        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::open): Only ignore open() while the frame is still loading the main resource.
        * page/Frame.cpp:
        (WebCore::Frame::isComplete): Added const specifier.
        (WebCore::Frame::isLoadingMainResource): New function.
        * page/Frame.h:

2006-03-15  Adele Peterson  <adele@apple.com>

        Reviewed by Eric.

        - Fixes win32 build.

        * page/Frame.cpp: (WebCore::Frame::autoscrollTimerFired): Calls isMouseButtonDown instead of CG function.
        * platform/MouseEvent.h: Added isMouseButtonDown
        * platform/mac/MouseEventMac.mm: (WebCore::MouseEvent::isMouseButtonDown): Calls CG function to get state of mouse button.
        * platform/win/TemporaryLinkStubs.cpp: (MouseEvent::isMouseButtonDown): Added stub.

2006-03-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by geoff.

        * platform/KeyEvent.h: Fix #define from QEvent_H to KeyEvent_H

2006-03-15  David Hyatt  <hyatt@apple.com>

        Fix the box-sizing layout test by stopping integer overflowing from
        occurring in the flexbox code.

        Reviewed by beth

        * rendering/render_flexbox.cpp:
        (khtml::RenderFlexibleBox::allowedChildFlex):

2006-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Eric

        Fix for some leaks and intermittent broken pipes in the layout 
        tests after check-in for http://bugs.webkit.org/
        show_bug.cgi?id=4171.  

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::capitalize): Call deleteQCharVector() for 
        stringWithPrevious and make sure we don't walk off the end of 
        stringWithPrevious when copying to capitalizedString.

2006-03-15  Adele Peterson  <adele@apple.com>

       Reviewed by Maciej.

       Followup fix for previous checkin.
       http://bugs.webkit.org/show_bug.cgi?id=7114
       <rdar://problem/3695120> dragging to scroll doesn't work with overflow:auto/scroll/overlay areas 

       Many of the bugs related to the Radar bug have to do with autoscrolling in the RSS View.  
       This fix walks the layer tree to find the first scrollable layer, so that autoscrolling will 
       also work with nested layers, like those in the RSS View.

       * bridge/mac/MacFrame.mm: (WebCore::MacFrame::khtmlMouseMoveEvent):

2006-03-15  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7114
        Dragging to scroll doesn't work for overflow areas

        No test case.  There doesn't appear to be a way to trigger the autoscroll with the EventSender.

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::khtmlMouseMoveEvent):  If we have a layer that can scroll, let the layer handle its autoscroll.  
         Otherwise, call over the bridge to let AppKit scroll the view.
        (WebCore::MacFrame::khtmlMouseReleaseEvent): Stops the autoscroll timer.
        * page/Frame.cpp:
        (WebCore::Frame::khtmlMouseReleaseEvent): Stops the autoscroll timer.
        (WebCore::Frame::handleAutoscroll): Added. Saves the layer, and starts the timer.
        (WebCore::Frame::autoscrollTimerFired): Added. Calls autoscroll() on the layer.
        (WebCore::Frame::startAutoscrollTimer): Added.
        (WebCore::Frame::stopAutoscrollTimer): Added.
        * page/Frame.h: Added new autoscroll methods.
        * page/FramePrivate.h: (WebCore::FramePrivate::FramePrivate): Initialize m_autoscrollTimer and m_autoscrollLayer.
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::autoscroll): Calculates how much the layer should scroll, and actually scrolls.
        (WebCore::RenderLayer::shouldAutoscroll): If the layer has overflow then it should be able to scroll.  
         Except for overflow:hidden areas that aren't editable.  
         In the future, we may want to have a css property that indicates an overflow:hidden style that should also scroll.
        * rendering/render_layer.h: Added new autoscroll methods.

2006-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://bugs.webkit.org/show_bug.cgi?id=7578>
        TinyMCE: Implement execCommand CreateLink
        
        Used ApplyStyleCommand so that creating a link from
        a selection doesn't change document structure.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::doApply):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyStyle):
        * editing/CreateLinkCommand.cpp: Added.
        (WebCore::CreateLinkCommand::CreateLinkCommand):
        (WebCore::CreateLinkCommand::doApply):
        * editing/CreateLinkCommand.h: Added.
        * editing/jsediting.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::applyStyle):
        (WebCore::Frame::applyParagraphStyle):

2006-03-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej

        Fix for http://bugs.webkit.org/show_bug.cgi?id=4171
        This patch changes the word-break algorithm used to apply text-
        transform:capitalize to use a UBreakIterator. This fixes some 
        existing edge cases we have in our text-transform:capitalize 
        support and generally makes our results more consistent.

        * platform/StringImpl.cpp:
        (WebCore::getWordBreakIterator): Returns a UBreakIterator for a 
        given string of a given length.
        (WebCore::StringImpl::capitalize): Now uses the UBreakIterator to 
        step between words and requires the previous character as input.
        * platform/StringImpl.h: Change the declaration of capitalize() to 
        take the previous character as a parameter. 
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText): Find the previous character and 
        send it to StringImpl::capitalize()

2006-03-14  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <http://bugs.webkit.org/show_bug.cgi?id=7770>
        Should only dispatch the khtmlTextInsertedEvent for high level editing operations

        Dispatching this event for low level editing operations 
        isn't necessary and causes a big performance regression. 
        Also renamed the event because it's dispatched for changes
        other than just text insertion.

        * dom/EventNames.h: 
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::unapply):
        (WebCore::EditCommand::reapply):
        * khtml/html/HTMLTextFieldInnerElementImpl.cpp:
        (WebCore::HTMLTextFieldInnerElementImpl::defaultEventHandler):
        * page/Frame.cpp:
        (WebCore::dispatchKHTMLEditableContentChanged):
        (WebCore::Frame::appliedEditing):
        (WebCore::Frame::unappliedEditing):
        (WebCore::Frame::reappliedEditing):

2006-03-14  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix <rdar://problem/4478121> -[WebCoreFrameBridge finalize] crashes under GC

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge finalize]):
        Don't call setBridge(nil).

2006-03-14  Darin Adler  <darin@apple.com>

        - oops, didn't mean to check this in

        * dom/dom_elementimpl.cpp: (WebCore::StyledElementImpl::parseMappedAttribute):
        Reverted nil-document check that I didn't mean to remove.

2006-03-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6796
        This fix prevents infinite recursion when a block with overflow: 
        auto can't decide if it needs scrollbars or not. This fix puts a 
        guard in place in updateScrollInforAfterLayout that only allows you 
        to re-layout if you are not currently laying out.  

        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::RenderLayer): Initialize 
        m_inOverflowRelayout to false. Fixed spacing too.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Place guard 
        around layout calls in overflow:auto case.
        * rendering/render_layer.h: Add m_inOverflowRelayout.

2006-03-14  Darin Adler  <darin@apple.com>

        Reviewed by Geoff and Eric.

        - fix <http://bugs.webkit.org/show_bug.cgi?id=7765>, <rdar://problem/4474884>
          hasAttribute always returns false for uppercase attribute names like "STYLE"
        - re-add missing JavaScript binding for getAttributeNS
        - fixed handling of null namespace parameters in getAttributeNS and friends

        Test: fast/dom/Element/attribute-uppercase.html

        To match Gecko's behavior, the magic "lowercasing" of all attribute names
        is only done when calling DOM Level 1 functions that lack an NS suffix.
        The functions with an NS suffix are case sensitive, even in HTML documents.

        * dom/NamedNodeMapImpl.h: Changed getNamedItem and removeNamedItem to be pure virtual
        functions instead of calling through to getNamedItemNS and removeNamedItemNS.

        * dom/dom_elementimpl.h: Eliminated inline versions of non-NS functions that called
        the NS functions. They can't work that way any more since the lowercasing behavior
        is different.
        * dom/dom_elementimpl.cpp:
        (WebCore::ElementImpl::getAttribute): Added. Lowercases the name if the document
        is an HTML document, and then calls through to the qualified name version. Removed
        the null check since getDocument is guaranteed to never return 0 now that nodes
        hold a reference to their document.
        (WebCore::ElementImpl::getAttributeNS): Removed the lowercasing code.
        (WebCore::ElementImpl::setAttribute): More of the same.
        (WebCore::ElementImpl::setAttributeNS): Ditto.
        (WebCore::ElementImpl::removeAttribute): Ditto.
        (WebCore::ElementImpl::removeAttributeNS): Ditto.
        (WebCore::ElementImpl::getAttributeNode): Ditto.
        (WebCore::ElementImpl::getAttributeNodeNS): Ditto.
        (WebCore::ElementImpl::hasAttribute): Ditto.
        (WebCore::ElementImpl::hasAttributeNS): Ditto.
        (WebCore::NamedAttrMapImpl::getNamedItem): Ditto.
        (WebCore::NamedAttrMapImpl::getNamedItemNS): Ditto.
        (WebCore::NamedAttrMapImpl::removeNamedItem): Ditto.
        (WebCore::NamedAttrMapImpl::removeNamedItemNS): Ditto.
        (WebCore::StyledElementImpl::parseMappedAttribute): Removed another unneeded null
        check like the one mentioned above.

        * dom/Element.idl: Set ConvertNullToNullString for all the namespaceURI
        parameters, since we don't want null to turn into "null". Added a semicolon
        to the end of the hasAttributeNS line -- was causing the next declaration to
        be eaten up (so getAttributeNS was completely broken).

        * khtml/ecma/kjs_dom.cpp: (KJS::DOMNamedNodeMapProtoFunc::callAsFunction):
        Call valueToStringWithNullCheck to do the equivalent of ConvertNullToNullString
        for both getNamedItemNS and removeNamedItemNS.

        * bindings/js/JSDOMCore.cpp: Touched so that the changes above will take effect.

2006-03-14  David Hyatt  <hyatt@apple.com>

        Fix for bug 7259, opacity performs badly.

        Reviewed by mjs

        Adding some tests in fast/opacity.

        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::requiresLayer):
        * rendering/render_layer.cpp:
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::absoluteBoundingBox):
        * rendering/render_layer.h:
        (WebCore::RenderLayer::root):

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix Gif crasher.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::do_lzw): Initialize array after new.

2006-03-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Make MouseEvents aware of current scroll position.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):

2006-03-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix mouse events to be window-relative.

        * platform/win/MouseEventWin.cpp:
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        (WebCore::MouseEvent::MouseEvent):

2006-03-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Close DeviceContext leaks in Font code.
        Also add moveCursor stub to make maps.google.com not crash.

        * platform/win/FontWin.cpp:
        (WebCore::getFontData):
        (WebCore::Font::floatWidth):
        (WebCore::Font::drawText):
        * platform/win/TemporaryLinkStubs.cpp:
        (Cursor::Cursor):
        (WebCore::moveCursor):

2006-03-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren & TimH.

        <rdar://problem/4473288> XSL file containing <xsl:include href="../Styles/EscapeString.xsl" /> fails to load file
        XML_DTD_NODE objects in the tree were causing loadChildSheets to 
        fail to preload child stylesheets, this patch causes us to 
        correctly ignore all nodes besides the first XML_ELEMENT_NODE at 
        the root level when searching the tree for xsl:include statements 
        to pre-load.

        Test: fast/xsl/xslt-second-level-import.xml

        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::loadChildSheets):

2006-03-10  Rob Buis  <buis@kde.org>

        Reviewed by darin.  Landed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7666:
        dasharray on rounded rectangles is broken

        Make sure the rounded rectangle is drawn clockwise, as outlined
        in the specification.

        Test: svg/custom/dashArrayOrigin.svg

        * kcanvas/KCanvasCreator.cpp:
        (WebCore::KCanvasCreator::createRoundedRectangle):

2006-03-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5923
          REGRESSION: scrolling on Google maps continues after the mouse is 
          released outside the window

        Test: fast/events/drag-outside-window.html

        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::containsPoint): Always return true for the root
        object to ensure that mouse events occurring outside the window target
        the document.

2006-03-12  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7735
        REGRESSION: crash on importing bookmarks

        No test - only reproducible when Safari imports the bookmarks.

        * dom/EventNames.cpp:
        (WebCore::EventNames::init): Initialize AtomicString before using it.
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init): Ditto.
        * khtml/html/htmlnames.cpp:
        (WebCore::HTMLNames::init): Ditto.
        * ksvg2/scripts/make_names.pl: Ditto.

2006-03-12  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin, landed by ap.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7724
        Minor refactoring to HTMLParser::handleError() to remove duplicate code

        Test: fast/invalid/missing-address-end-tag.html
        Test: fast/invalid/missing-dl-end-tag.html
        Test: fast/invalid/missing-dt-end-tag.html
        Test: fast/invalid/missing-font-end-tag.html

        * khtml/html/htmlparser.cpp:
        (WebCore::HTMLParser::handleError): Refactored code.

2006-03-10  Darin Adler  <darin@apple.com>

        - fix Windows build

        * bridge/win/FrameWin.h: Removed declaration of generateFrameName.

2006-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - removed some unused stuff from Frame and MacFrame

        * page/Frame.h: Removed autoloadImages (the setter), enableMetaRefresh,
        setCharset, backgroundURL, findTextBegin, findTextNext, preloadStyleSheet,
        preloadScript, restored, onURL, selectionChanged, htmlError, openFile,
        updateActions, openURLInFrame, overURL, checkLinkSecurity, and cacheId.
        * page/FramePrivate.h: Removed m_restored, m_frameNameId, m_strSelectedURL,
        m_strSelectedURLTarget, m_bDnd, m_bClearing, m_bSecurityInQuestion,
        m_focusNodeRestored, m_focusNodeNumber, and m_newJSInterpreterExists.
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL): Removed use of m_restored, code to set
        m_bClearing.
        (WebCore::Frame::clear): Removed code to set m_bClearing and m_frameNameId.
        (WebCore::Frame::khtmlMousePressEvent): Removed code to set m_strSelectedURL
        and m_strSelectedURLTarget.

        * bridge/mac/MacFrame.h: Removed scheduleHistoryNavigation and
        requestedURLString.
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::openURLFromPageCache): Removed use of m_restored.
        Removed unused requestedURLString.

        * bridge/mac/WebCoreFrameBridge.h: Removed requestedURLString.

2006-03-10  Darin Adler  <darin@apple.com>

        - fix Windows build

        * page/FrameTree.cpp: Add include of <stdarg.h>.

2006-03-10  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3308
          Pop-up blocking blocks window.open for already open windows

        - fix http://bugs.webkit.org/show_bug.cgi?id=7422
          Setting a frame name to the same value resets it to a generated one

        - refactor frame-name-related functions into the FrameTree object

        * WebCore.xcodeproj/project.pbxproj: Update for rename.
        * bridge/mac/MacFrame.h: Remove generateFrameName.
        * bridge/mac/MacFrame.mm: Ditto.
        * bridge/mac/PageMac.h: Added a declaration for WebCorePageBridge.

        * bridge/mac/WebCoreFrameBridge.h: Remove _frameNamespace, generateFrameName,
        setFrameNamespace, frameNamespace.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge childFrameNamed:]): Change to call the new child
        function on the FrameTree.
        (-[WebCoreFrameBridge findFrameNamed:]): Change to call the new find
        function on the FrameTree.
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:]): Change since the
        contentPart function has been renamed to contentFrame.

        * bridge/mac/WebCoreFrameNamespaces.h: Removed everything except for the
        one method still used on the WebKit side, framesInNamespace:.
        * bridge/mac/WebCoreFrameNamespaces.m: Renamed.
        * bridge/mac/WebCoreFrameNamespaces.mm: Added. Reimplemented the
        framesInNamespace method to use the namespace in WebCore::Page.

        * bridge/mac/WebCorePageBridge.h: Added setGroupName and groupName.
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge setGroupName:]): Added. Calls through to Page.
        (-[WebCorePageBridge groupName]): Ditto.

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::namedItemGetter): Changed to call contentFrame by its new name.
        (KJS::HTMLElement::frameGetter): Ditto.
        (KJS::HTMLElement::iFrameGetter): Ditto.

        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty): Changed to call FrameTree::childCount
        instead of Frame::frames.
        (KJS::Window::childFrameGetter): Changed to call FrameTree::child
        instead of Frame::childFrameNamed.
        (KJS::Window::namedFrameGetter): Changed to call FrameTree::find
        instead of Frame::findFrame.
        (KJS::Window::indexGetter): Changed to call FrameTree::child
        instead of Frame::frames.
        (KJS::Window::getOwnPropertySlot): Changed to call FrameTree::child,
        FrameTree::find, and FrameTree::childCount instead of Frame::childFrameNamed,
        and Frame::findFrame, and Frame::frames.
        (KJS::WindowFunc::callAsFunction): Call FrameTree::find to check if the window
        is already open when considering whether to block a pop-up.
        (KJS::FrameArray::getValueProperty): Changed to call FrameTree::childCount
        instead of Frame::frames.
        (KJS::FrameArray::indexGetter): Changed to call FrameTree::child
        instead of Frame::frames.
        (KJS::FrameArray::nameGetter): Changed to call FrameTree::child
        instead of Frame::findFrame.
        (KJS::FrameArray::getOwnPropertySlot): Changed to call FrameTree::child,
        and FrameTree::childCount instead of Frame::findFrame and Frame::frames.

        * khtml/html/html_baseimpl.h:
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::isURLAllowed): Changed to call Page::frameCount
        instead of Frame::topLevelFrameCount.
        (WebCore::HTMLFrameElementImpl::openURL): Changed to call FrameTree::child
        instead of Frame::findFrame.
        (WebCore::HTMLFrameElementImpl::attach): Changed to call Page::incrementFrameCount
        instead of Frame::incrementFrameCount. Changed to call FrameTree::uniqueChildName
        instead of Frame::requestFrameName.
        (WebCore::HTMLFrameElementImpl::close): Changed to call Page::decrementFrameCount
        instead of Frame::decrementFrameCount. Changed to call FrameTree::child
        instead of Frame::findFrame.
        (WebCore::HTMLFrameElementImpl::contentFrame): Renamed from contentPart. Also
        changed to call FrameTree::child instead of Frame::findFrame.
        (WebCore::HTMLFrameElementImpl::contentDocument): Updated for name change of
        contentFrame from contentPart.
        (WebCore::HTMLIFrameElementImpl::attach): Changed to call Page::incrementFrameCount
        instead of Frame::incrementFrameCount. Changed to call FrameTree::uniqueChildName
        instead of Frame::requestFrameName.

        * rendering/render_frames.cpp: (WebCore::isURLAllowed): Changed to call Page::frameCount
        instead of Frame::topLevelFrameCount.

        * page/Frame.h: Removed frameNames, frames, childFrameNamed, findFrame, currentFrame,
        frameExists, incrementFrameCount, decrementFrameCount, topLevelFrameCount,
        generateFrameName, and requestFrameName functions.
        * page/Frame.cpp: (WebCore::Frame::requestFrame): Changed to use FrameTree::child
        instead of Frame::childFrameNamed.

        * page/FrameTree.h: Changed name to an atomic string. Changed childCount to unsigned.
        Added isDescendantOf, traverseNext, child, find, uniqueChildName.
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName): Changed to call uniqueChildName to handle name
        duplication logic.
        (WebCore::FrameTree::uniqueChildName): Added. Checks for duplication and generates
        an appropriate frame name if there is a duplicate.
        (WebCore::FrameTree::child): Added.
        (WebCore::FrameTree::find): Added.
        (WebCore::FrameTree::isDescendantOf): Added.
        (WebCore::FrameTree::traverseNext): Added.

        * page/Page.h: Added setGroupName, groupName, frameNamespace, incrementFrameCount,
        decrementFrameCount, and frameCount.
        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_frameCount to 0.
        (WebCore::Page::~Page): Call setGroupName to remove the page from any group it's in.
        (WebCore::Page::setGroupName): Added.
        (WebCore::Page::frameNamespace): Added.

        * platform/win/TemporaryLinkStubs.cpp: Removed FrameWin::generateFrameName.

2006-03-10  Justin Garcia  <justin.garcia@apple.com>
        
        Reviewed by darin, harrison
        
        ~3x speedup pasting plain text from the console

        * dom/dom_position.cpp:
        (WebCore::Position::next): 
        (WebCore::Position::atEnd): 

2006-03-10  David Hyatt <hyatt@apple.com>

        More refactoring.  Split the FontData into cross-platform and
        platform-specific components.

        Reviewed by eric

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/FontData.h: Added.
        (WebCore::FontData:::m_platformData):
        (WebCore::FontData::platformData):
        (WebCore::FontData::setMetrics):
        (WebCore::FontData::ascent):
        (WebCore::FontData::descent):
        (WebCore::FontData::xHeight):
        (WebCore::FontData::lineSpacing):
        * platform/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::scaledFont):
        * platform/win/FontPlatformDataWin.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/win/FontWin.cpp:
        (WebCore::Font::floatWidth):
        (WebCore::Font::drawText):

2006-03-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fix win32 networking to properly use async load API

        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJobWndProc):
        (WebCore::TransferJob::start):

2006-03-10  Eric Seidel  <eseidel@apple.com>

        Fix build.

        * platform/win/FontWin.cpp:
        (WebCore::getFontData):
        * platform/win/TemporaryLinkStubs.cpp:

2006-03-10  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        - fix for <rdar://problem/4469419> 
        REGRESSION: RadioButtons are not checked in Safari when name attribute comes after checked attribute

        Test: fast/forms/radio-attr-order.html

        * khtml/html/HTMLInputElementImpl.cpp: (WebCore::HTMLInputElementImpl::parseMappedAttribute):
        When the name attribute gets parsed for radio buttons, if its supposed to be checked by default, call setChecked.
        Also, when the name changes on a checked button, we don't need to check that 
        there's a form before removing it as the checked button for that group.  
        That was an old check from when we required a form to keep track of checked buttons.

2006-03-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add real ScrollViewWin implementation (fixes redraw bugs, adds ScrollBar support.)

        * platform/ScrollView.h:
        * platform/Widget.h:
        * platform/win/FontWin.cpp:
        (WebCore::getCairoFont): Fix crasher.
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate):
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::~ScrollView):
        (WebCore::ScrollView::updateContents):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::setContentsPos):
        (WebCore::ScrollView::resizeContents):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::ScrollView::scrollXOffset):
        (WebCore::ScrollView::scrollYOffset):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::ScrollView::suppressScrollBars):
        (WebCore::ScrollView::setHScrollBarMode):
        (WebCore::ScrollView::setVScrollBarMode):
        (WebCore::ScrollView::setScrollBarsMode):
        (WebCore::ScrollView::setStaticBackground):
        (WebCore::ScrollView::updateScrollInfo):
        (WebCore::ScrollView::updateScrollBars):
        * platform/win/TemporaryLinkStubs.cpp:
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::setIconURL):
        (ScrollView::scrollPointRecursively):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::windowHandle): mark as const

2006-03-10  David Hyatt  <hyatt@apple.com>

        Rename the m_renderer variable to m_dataSet now that the class name
        has changed.

        Reviewed by adele

        * platform/Font.cpp:
        (WebCore::m_wordSpacing):
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::update):
        * platform/Font.h:
        * platform/FontDataSet.h:
        * platform/mac/FontMac.mm:
        (WebCore::Font::getWebCoreFont):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawLineForText):
        (WebCore::Font::drawLineForMisspelling):
        (WebCore::Font::misspellingLineThickness):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        * platform/win/FontWin.cpp:
        (WebCore::FontData::FontData):
        (WebCore::FontData::~FontData):
        (WebCore::getFontData):
        (WebCore::FontDataSet::primaryFont):
        (WebCore::Font::floatWidth):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::xHeight):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::drawText):

2006-03-10  David Hyatt  <hyatt@apple.com>

        Rename FontRenderer to FontDataSet.

        Reviewed by adele

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Font.cpp:
        (WebCore::Font::update):
        * platform/Font.h:
        * platform/FontDataSet.h: Added.
        * platform/FontRenderer.h: Removed.
        * platform/mac/FontMac.mm:
        (WebCore::FontDataSet::~FontDataSet):
        (WebCore::FontDataSet::getWebCoreFont):
        (WebCore::FontDataSet::getRenderer):
        (WebCore::FontDataSet::determinePitch):
        (WebCore::FontDataSet::invalidate):
        * platform/win/FontWin.cpp:
        (WebCore::getCairoFont):
        (WebCore::FontDataSet::~FontDataSet):
        (WebCore::FontDataSet::determinePitch):
        (WebCore::FontDataSet::invalidate):
        (WebCore::FontDataSet::primaryCairoFont):

2006-03-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by adele
        
        <http://bugs.webkit.org/show_bug.cgi?id=7692>
        Should use an iterator in CompositeEditCommand::doUnapply()
        
        ~30% speedup of a big undo

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::doUnapply):
        (WebCore::CompositeEditCommand::doReapply):

2006-03-09  Adele Peterson  <adele@apple.com>

        Reviewed by Tim O.

        Removed unnecessary alerts in TextIterator advance methods.  
        We want to be able to use advance() even if the iterator is already at the end.

        * editing/visible_text.cpp:
        (khtml::TextIterator::advance): remove assert since TextIterator will just do nothing if its already at the end.
        (khtml::CharacterIterator::advance): ditto.
        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::visiblePositionForIndex):
        Since the asserts in the iterator are removed, we don't have to check for it.atEnd() before calling advance.

2006-03-09  David Hyatt <hyatt@apple.com>

        Make text paint with the correct foreground color on Windows.
        Make the face validation check case insensitive.
        Force ClearType to be on for font rendering.

        Reviewed by Tim Hatcher

        * platform/win/FontWin.cpp:
        (WebCore::getCairoFont):
        (WebCore::Font::drawText):

2006-03-09  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7675
        When new text fields change from visibility:hidden to visibility:visible, value doesn't display

        Test: fast/forms/input-appearance-visibility.html

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::setStyle):
        Sets the style directly on the children of the inner div.

2006-03-09  David Hyatt <hyatt@apple.com>

        Make basic text rendering work on Win32.

        Reviewed by eric

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        Add FontDescription.h to the Visual Studio project.

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        Add some good default font settings to KHTMLSettings.

        * platform/Font.cpp:
        (WebCore::Font::update):
        Renamed the FontRenderer method to invalidate, so that's what
        update calls now.

        * platform/FontRenderer.h:
        * platform/mac/FontMac.mm:
        (WebCore::FontRenderer::~FontRenderer):
        (WebCore::FontRenderer::invalidate):
        Rename the update method to invalidate.  Make sure the Mac
        font renderer releases its resources when it gets destroyed.

        * platform/win/FontWin.cpp:
        (WebCore::CairoFont::CairoFont):
        (WebCore::CairoFont::~CairoFont):
        (WebCore::CairoFont::hfont):
        (WebCore::CairoFont::scaledFont):
        (WebCore::CairoFont::setMetrics):
        (WebCore::CairoFont::ascent):
        (WebCore::CairoFont::descent):
        (WebCore::CairoFont::xHeight):
        (WebCore::CairoFont::lineSpacing):
        Implement a new class called CairoFont that encapsulates
        the windows HFONT, the cairo font face, and the cairo scaled
        font.

        (WebCore::getCairoFont):
        The method to look up a Cairo font.  This will eventually use
        a hash, but for now it just always makes the fonts over and
        over again.

        (WebCore:::m_pitch):
        (WebCore::FontRenderer::~FontRenderer):
        (WebCore::FontRenderer::determinePitch):
        (WebCore::FontRenderer::invalidate):
        More of the FontRenderer plumbing.

        (WebCore::FontRenderer::primaryCairoFont):
        Returns the primary Cairo font for a family list.  This is basically
        the first family that is present on the system.

        (WebCore::Font::floatWidth):
        The width method uses GetTextExtentPoint32W for now.  This
        is totally wrong and will eventually be replaced by Cairo
        code.

        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::xHeight):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::isFixedPitch):
        Accessors for the metrics and pitch info.

        (WebCore::Font::drawText):
        Drawing of text.  Uses TextOut and is also basically throwaway
        code.

        * platform/win/TemporaryLinkStubs.cpp:
        (Font::checkSelectionPoint):
        Move the checkSelectionPoint method back to the link stubs.

2006-03-09  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison
    
        Fixed formatting and changed functions to take in 
        a const Selection& instead of a Selection.

        * editing/ModifySelectionListLevelCommand.cpp:
        (WebCore::ModifySelectionListLevelCommand::canIncreaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::canDecreaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::decreaseSelectionListLevel):
        (WebCore::modifySelectionListLevel):
        (WebCore::getStartEndListChildren):
        (WebCore::canIncreaseListLevel):
        (WebCore::canDecreaseListLevel):
        (WebCore::ModifySelectionListLevelCommand::increaseListLevel):
        (WebCore::ModifySelectionListLevelCommand::decreaseListLevel):
        * editing/ModifySelectionListLevelCommand.h:

2006-03-09  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=6814
        Implement selection methods for RenderTextField

        Test: fast/forms/input-appearance-selection.html

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle): removed extra space.
        (WebCore::RenderTextField::select): Removed checks for document and m_div since there should always be a document and 
         m_div will be initialized as the renderer gets attached.
        (WebCore::RenderTextField::selectionStart): Calls indexForVisiblePosition.
        (WebCore::RenderTextField::selectionEnd): ditto.
        (WebCore::RenderTextField::setSelectionStart): calls setSelectionRange.
        (WebCore::RenderTextField::setSelectionEnd): ditto.
        (WebCore::RenderTextField::setSelectionRange): gets VisiblePositions for both indices, and sets the selection.
        (WebCore::RenderTextField::visiblePositionForIndex): Added helper method.
        (WebCore::RenderTextField::indexForVisiblePosition): Added helper method.
        * rendering/RenderTextField.h: Added new helper methods for selection.

2006-03-09  David Carson  <dacarson@gmail.com>

        Test: fast/canvas/fillrect_gradient.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6103
          Rectangles are not filled according to the Web Applications Working Draft

        * khtml/ecma/kjs_html.cpp: (KJS::Context2DFunction::callAsFunction):
        Modified fillrect function to check and use a gradient if set.
        Builds a path to fill rects with a gradient.

2006-03-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        No test because this fixes an existing pixel test (and does not affect
        the render tree).

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7664
          REGRESSION: tests that include numeric list markers fail in pixel mode

        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText): Restored AlignRight behavior.

2006-03-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        No test because we couldn't figure out how to write one.

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7680
          REGRESSION: Ellipsis painted over the chrome and in invalid contexts

        * rendering/render_line.cpp:
        (WebCore::EllipsisBox::paint): Replaced call to Font::drawText with
        GraphicsContext::drawText, which checks the paintingDisabled flag.

2006-03-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - make link clicks work by propagating them up to a client

        * Viewer/ImageView.cpp:
        * bridge/win/FrameWin.cpp:
        * bridge/win/FrameWin.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::incomingReferrer):

2006-03-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add support for Timers under 10ms.
        Fix random crashers due to multi-threaded loading.

        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        (WebCore::TransferJobInternal::TransferJobInternal):
        * platform/Widget.h:
        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):
        (WebCore::initializeOffScreenTimerWindow):
        (WebCore::setSharedTimerFireTime):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::TransferJob::assembleResponseHeaders):
        (WebCore::TransferJob::retrieveCharset):
        * platform/win/TransferJobWin.cpp:
        (WebCore::addToOutstandingJobs):
        (WebCore::removeFromOutstandingJobs):
        (WebCore::lookupTransferJob):
        (WebCore::TransferJobWndProc):
        (WebCore::initializeOffScreenTransferJobWindow):
        (WebCore::TransferJob::~TransferJob):
        (WebCore::transferJobStatusCallback):
        (WebCore::TransferJob::start):
        (WebCore::TransferJob::cancel):
        * platform/win/WidgetWin.cpp:

2006-03-08  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=7579>
        TinyMCE: Implement execCommand(insertImage, ...)
        
        Implemented InsertImage and also changed paste to use a single 
        rule for when to remove junk that remains after node removal. 

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeNodeAndPruneAncestors):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::removeLinePlaceholderIfNeeded):
        * editing/ReplaceSelectionCommand.h:
        * editing/htmlediting.cpp:
        * editing/jsediting.cpp:

2006-03-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix build script to properly copy dll files.

        * WebCore.vcproj/WebCore/build-generated-files.sh:

2006-03-08  Rob Buis  <buis@kde.org>

        Reviewed by eseidel.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=6899 SVG <rect> does not respect display: none

        For svg elements that can render, call StyledElementImpl::rendererIsNeeded
        to decide whether the element should render. In particular this way
        any setting of display="none" is handled.

        * ksvg2/svg/SVGAElementImpl.h:
        (WebCore::SVGAElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGCircleElementImpl.h:
        (WebCore::SVGCircleElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGEllipseElementImpl.h:
        (WebCore::SVGEllipseElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGForeignObjectElementImpl.h:
        (WebCore::SVGForeignObjectElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGGElementImpl.h:
        (WebCore::SVGGElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGImageElementImpl.h:
        (WebCore::SVGImageElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGLineElementImpl.h:
        (WebCore::SVGLineElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGMarkerElementImpl.h:
        (WebCore::SVGMarkerElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGMaskElementImpl.h:
        (WebCore::SVGMaskElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGPathElementImpl.h:
        (WebCore::SVGPathElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGPatternElementImpl.h:
        (WebCore::SVGPatternElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGPolyElementImpl.h:
        (WebCore::SVGPolyElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGRectElementImpl.h:
        (WebCore::SVGRectElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGSVGElementImpl.h:
        (WebCore::SVGSVGElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGSwitchElementImpl.h:
        (WebCore::SVGSwitchElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGTSpanElementImpl.h:
        (WebCore::SVGTSpanElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGTextElementImpl.h:
        (WebCore::SVGTextElementImpl::rendererIsNeeded):
        * ksvg2/svg/SVGUseElementImpl.h:
        (WebCore::SVGUseElementImpl::rendererIsNeeded):

2006-03-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add stubs to allow JavaScript-enabled WebCore to not crash.
        Add ScreenWin implementation.
        Add alert() support.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::runJavaScriptAlert):
        (WebCore::FrameWin::runJavaScriptConfirm):
        * platform/win/ScreenWin.cpp: Added.
        (WebCore::monitorInfoForWidget):
        (WebCore::WebCore::screenRect):
        (WebCore::WebCore::screenDepth):
        (WebCore::WebCore::usableScreenRect):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::canUndo):
        (FrameWin::runJavaScriptPrompt):
        (FrameWin::canPaste):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::refreshPlugins):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::incomingReferrer):

2006-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix another instance of the bug I just fixed in the Macintosh-specific code path

        * platform/image-decoders/gif/GIFImageReader.h: Remove not-so-useful 100ms constant.
        * platform/image-decoders/gif/GIFImageReader.cpp: (GIFImageReader::read):
        Use the correct rule for minimum frame durations.

2006-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - very rough implementation of networking in TransferJob for windows

        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        (WebCore::TransferJobInternal::TransferJobInternal):
        * platform/win/TransferJobWin.cpp:
        (WebCore::transferJobStatusCallback):
        (WebCore::TransferJob::start):

2006-03-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fix win32 build

        * platform/win/FontWin.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::clearFocusRing):
        (GraphicsContext::selectedTextBackgroundColor):
        (Font::selectionRectForText):

2006-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix one more thing from http://bugs.webkit.org/show_bug.cgi?id=7528
          REGRESSION: GIF animation speeds are wrong on a page with many animated GIFs

        No layout test because I don't know how to test animated GIF speed.

        * platform/mac/ImageSourceMac.cpp: (WebCore::ImageSource::frameDurationAtIndex):
        Use the correct rule for minimum frame durations. It's a bit non-intuitive, so
        I made the comment more explicit. The old code in WebKit had this rule.

2006-03-08  David Hyatt  <hyatt@apple.com>

        Make GraphicsContext call into Font to draw all text and eliminate
        all knowledge of WebTextRenderers from it.

        Reviewed by darin

        * platform/Font.h:
        * platform/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawHighlightForText):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspelling):
        (WebCore::GraphicsContext::misspellingLineThickness):
        * platform/GraphicsContext.h:
        (WebCore::GraphicsContext::platformContext):
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::platformContext):
        * platform/mac/FontMac.mm:
        (WebCore::Font::drawText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawLineForText):
        (WebCore::Font::drawLineForMisspelling):
        (WebCore::Font::misspellingLineThickness):
        * platform/mac/GraphicsContextMac.mm:
        * platform/win/FontWin.cpp:
        (WebCore::Font::drawText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):

2006-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fixed super-fast animation of many animated GIFs

        No layout test because I don't know how to test animated GIF speed.

        * platform/mac/ImageSourceMac.cpp: (WebCore::ImageSource::frameDurationAtIndex):
        Always take the minimum duration into account, even if there's some kind of failure
        getting the duration from the GIF.

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7655
          unwanted output while running layout tests

        * khtml/xsl/xsl_stylesheetimpl.cpp: (WebCore::XSLStyleSheetImpl::parseString):
        Pass XML_PARSE_NOERROR and XML_PARSE_NOWARNING. We don't want errors and warnings
        to be logged to stdout or stderr. If we later decide we want the error messages,
        then we should do the additional work to put them into the web page or the
        console (along with the JavaScript errors).

        * platform/ArrayImpl.cpp: (WebCore::ArrayImpl::resize): Add a preflight to protect
        against integer overflow due to large array size. Noticed this while looking into
        the malloc error message.

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7647
          Crash when typing into text contols

        I missed a couple places that were still saying KWQWidgetHolder
        in the change I landed late last night.

        * kwq/KWQTextArea.h:
        * kwq/KWQTextArea.mm:
        * kwq/KWQTextField.h:
        Changed them all to say WebCoreWidgetHolder.

2006-03-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix cursor support on win32.

        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):

2006-03-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix basic text support.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawText):

2006-03-07  Dave Hyatt <hyatt@apple.com>

        Eliminate the unused parameters of the QString version of drawText.

        Reviewed by eric

        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawText):
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawText):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):

2006-03-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Add very basic text support.
        Sort a few more stubs.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::font):
        (WebCore::GraphicsContext::setFont):
        (WebCore::GraphicsContext::drawText):
        * platform/win/FontWin.cpp: Added.
        (WebCore::Font::drawText):
        * platform/win/TemporaryLinkStubs.cpp:
        (QComboBox::focusPolicy):
        (ScrollView::scrollXOffset):
        (Font::isFixedPitch):
        (Path::boundingRect):

2006-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7319
        Can't see caret at the end of a contenteditable div with overflow:hidden

        No tests added since I don't think the blinking caret will show up in our tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::rightmostPosition): When calculating the rightmostPosition for editable blocks, 
        we need to account for the caret that can be drawn 1 px past the last child inline box.

2006-03-07  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=3905
        Missing </title> makes page blank

        Test: fast/js/exception-linenums-in-html-1.html
        Test: fast/js/exception-linenums-in-html-2.html
        Test: fast/js/missing-title-end-tag-js.html
        Test: fast/tokenizer/missing-title-end-tag-1.html
        Test: fast/tokenizer/missing-title-end-tag-2.html

        * khtml/html/htmlparser.cpp:
        (WebCore::HTMLParser::handleError): Add check for missing </title> tag and handle
        this condition if identified.
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): If parseSpecial() consumes the rest of the
        document looking for a </title> tag, reset the state of the tokenizer and
        retokenize with no special handling for <title>.  The parser will handle the
        missing </title> tag in HTMLParser::handleError().
        * platform/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString): Added copy constructor.
        (WebCore::SegmentedString::operator=): Added assignment operator.  Previously the
        compiler was generating a default method for the assignment operator, but it did
        not handle m_currentChar properly.
        * platform/SegmentedString.h: Added prototypes for copy constructor and
        assignment operator.

2006-03-07  Eric Seidel  <eseidel@apple.com>

        Fix win32 link stubs.

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::searchableIndexIntroduction):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        (WebCore::findNextSentenceFromIndex):
        (WebCore::findSentenceBoundary):
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):

2006-03-07  Darin Adler  <darin@apple.com>

        Reviewed by Adele, except for the first change listed.

        - fix recently-introduced bug that GuardMalloc found while I was debugging my other change

        * rendering/render_frames.cpp: (WebCore::RenderPart::~RenderPart):
        Set m_widget to 0 before calling deref so we don't end up trying to do unwanted work.

        - removed 10 more files from KWQ

        * ForwardingHeaders/klocale.h: Removed.

        * khtml/misc/helper.cpp: Removed.
        * khtml/misc/helper.h: Removed.

        * kwq/KWQCollection.h: Removed.
        * kwq/KWQKCookieJar.h: Removed.
        * kwq/KWQKCookieJar.mm: Removed.
        * kwq/KWQKLocale.h: Removed.
        * kwq/KWQKLocale.mm: Removed.
        * kwq/KWQKURL.h: Removed.
        * kwq/KWQKURL.mm: Removed.
        * kwq/KWQTextUtilities.h: Removed.
        * kwq/KWQTextUtilities.mm: Removed.
        * kwq/KWQView.h: Removed.

        * platform/CookieJar.h: Added.
        * platform/Language.h: Added.
        * platform/LocalizedStrings.h: Added.
        * platform/TextBoundaries.h: Added.
        * platform/mac/CookieJar.mm: Added.
        * platform/mac/Language.mm: Added.
        * platform/mac/LocalizedStringsMac.mm: Added.
        * platform/mac/TextBoundaries.mm: Added.
        * platform/mac/WebCoreWidgetHolder.h: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated for removed and added files.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for removed and added files.

        * bridge/mac/WebCoreFrameBridge.mm: Updated includes.
        (-[WebCoreFrameBridge elementForView:]): Changed KWQWidgetHolder to WebCoreWidgetHolder.

        * editing/visible_units.cpp:
        (WebCore::previousWordPositionBoundary):
        (WebCore::nextWordPositionBoundary):
        (WebCore::previousSentencePositionBoundary):
        (WebCore::nextSentencePositionBoundary):
        Call TextBoundaries.h functions instead of helper.h ones.

        * khtml/ecma/kjs_navigator.cpp: (KJS::Navigator::getValueProperty):
        * ksvg2/svg/SVGTestsImpl.cpp: (WebCore::SVGTestsImpl::isValid):
        Changed to call defaultLanguage; cleaned up formatting.

        * khtml/html/HTMLFormElementImpl.cpp: Removed stray comment.

        * khtml/html/html_documentimpl.cpp:
        (WebCore::HTMLDocumentImpl::cookie):
        (WebCore::HTMLDocumentImpl::setCookie):
        Call CookieJar.h functions.

        * css/css_valueimpl.cpp:
        * css/cssparser.cpp:
        * css/cssstyleselector.cpp:
        * dom/DocumentImpl.cpp:
        * dom/dom_position.cpp:
        * khtml/ecma/kjs_window.cpp:
        * khtml/html/HTMLInputElementImpl.cpp:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/misc/decoder.cpp:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * kwq/KWQComboBox.mm:
        * kwq/KWQKSSLKeyGen.mm:
        * kwq/KWQListBox.mm:
        * kwq/KWQListImpl.cpp:
        * kwq/KWQListImpl.h:
        * kwq/KWQScrollBar.mm:
        * kwq/KWQSlider.mm:
        * kwq/KWQTextField.mm:
        * kwq/KWQValueList.h:
        * loader/DocLoader.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::beforeMouseDown):
        (WebCore::Widget::afterMouseDown):
        * rendering/render_applet.cpp:
        * rendering/render_form.cpp:
        * rendering/render_image.cpp:
        * rendering/render_list.cpp:
        Updated includes and protocol names.

        * khtml/html/htmltokenizer.cpp: (WebCore::HTMLTokenizer::write): Remove
        QT_VERSION code.
        * platform/QString.h: Remove QT_VERSION.

        * kwq/KWQPtrList.h: Change to no longer use QPtrCollection.

        * kwq/KWQRenderTreeDebug.h:
        * kwq/KWQRenderTreeDebug.cpp: (externalRepresentation):
        Remove unused debuggingRenderTree boolean.

2006-03-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        * platform/mac/GraphicsContextMac.mm: Add Widget.h to fix no-svg build.

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Make spinneret run again, fix webview to support dynamic resize.

        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::setDrawingAlpha):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        (WebCore::Widget::frameGeometry):

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Fix win32 build.

        * platform/win/TemporaryLinkStubs.cpp:
        (QScrollBar::QScrollBar):
        (QTextEdit::setAlignment):
        (Widget::client):
        (Widget::setClient):
        (QLineEdit::setAlignment):

2006-03-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=7566 (also 
        <rdar://problem/4467128> ). Must call update() on a Font before 
        attempting to use it because the FontRenderer is not created until 
        update() is called.

        * kwq/KWQListBox.mm:
        (QListBox::sizeForNumberOfLines): Call update()
        (-[KWQTableView drawRow:clipRect:]): Call update()

2006-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - http://bugs.webkit.org/show_bug.cgi?id=7564
          remove QObject, QGuardedPtr, slots, and signals

        I had written a detailed change log entry, but I lost it!
        I'm too annoyed to write one all over again.

        * ForwardingHeaders/qguardedptr.h: Removed.
        * ForwardingHeaders/qobject.h: Removed.

        * kwq/KWQGuardedPtr.cpp: Removed.
        * kwq/KWQGuardedPtr.h: Removed.
        * kwq/KWQNamespace.h: Removed.
        * kwq/KWQObject.cpp: Removed.
        * kwq/KWQObject.h: Removed.
        * kwq/KWQSignal.cpp: Removed.
        * kwq/KWQSignal.h: Removed.
        * kwq/KWQSlot.cpp: Removed.
        * kwq/KWQSlot.h: Removed.

        * platform/WidgetClient.h: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated for removed and added files.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * bindings/js/JSDOMCore.cpp: Touched.
        * bindings/js/JSDOMEvents.cpp: Ditto.

        * bridge/BrowserExtension.h:
        (WebCore::BrowserExtension::~BrowserExtension):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementForView:]):
        * dom/CDATASectionImpl.cpp:
        (WebCore::CDATASectionImpl::cloneNode):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::~DocumentImpl):
        * dom/DocumentImpl.h:
        * kcanvas/device/KRenderingDevice.h:
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        * khtml/ecma/kjs_window.cpp:
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        * khtml/html/html_documentimpl.cpp:
        (WebCore::HTMLDocumentImpl::createTokenizer):
        * khtml/html/htmlparser.cpp:
        (WebCore::HTMLParser::HTMLParser):
        (WebCore::HTMLParser::insertNode):
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::commentCreateErrorCheck):
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::isInline):
        (WebCore::HTMLParser::finished):
        * khtml/html/htmlparser.h:
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::stopParsing):
        (WebCore::HTMLTokenizer::timerFired):
        (WebCore::HTMLTokenizer::processToken):
        (WebCore::parseHTMLDocumentFragment):
        * khtml/html/htmltokenizer.h:
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButton setPopulatingMenu:QComboBox:::]):
        (QComboBox::itemSelected):
        (-[KWQPopUpButton becomeFirstResponder]):
        (-[KWQPopUpButton resignFirstResponder]):
        * kwq/KWQFileButton.h:
        (KWQFileButton::filename):
        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton):
        (KWQFileButton::filenameChanged):
        (-[KWQFileButtonAdapter filenameChanged:]):
        (-[KWQFileButtonAdapter focusChanged:]):
        (-[KWQFileButtonAdapter clicked]):
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::QLineEdit):
        (QLineEdit::setAlignment):
        (KWQNSTextAlignment):
        * kwq/KWQListBox.h:
        (QListBox::changingSelection):
        * kwq/KWQListBox.mm:
        (QListBox::QListBox):
        (-[KWQTableView becomeFirstResponder]):
        (-[KWQTableView resignFirstResponder]):
        (-[KWQTableView tableViewSelectionDidChange:]):
        * kwq/KWQScrollBar.h:
        (WebCore::):
        (QScrollBar::orientation):
        * kwq/KWQScrollBar.mm:
        (-[KWQScrollBar initWithQScrollBar:]):
        (QScrollBar::QScrollBar):
        (QScrollBar::valueChanged):
        (QScrollBar::scroll):
        * kwq/KWQSlider.h:
        * kwq/KWQSlider.mm:
        (-[KWQSlider mouseDown:]):
        (-[KWQSlider slide:]):
        (-[KWQSlider becomeFirstResponder]):
        (-[KWQSlider resignFirstResponder]):
        (QSlider::QSlider):
        (QSlider::sliderValueChanged):
        (QSlider::dimensions):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView textViewDidChangeSelection:]):
        (-[KWQTextAreaTextView textDidChange:]):
        (-[KWQTextAreaTextView becomeFirstResponder]):
        (-[KWQTextAreaTextView resignFirstResponder]):
        (-[KWQTextAreaTextView mouseDown:]):
        (-[KWQTextAreaTextView dispatchHTMLEvent:]):
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm:
        (QTextEdit::QTextEdit):
        (QTextEdit::setAlignment):
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController action:]):
        (-[KWQTextFieldController controlTextDidEndEditing:]):
        (-[KWQTextFieldController controlTextDidChange:]):
        (-[KWQTextFieldController textChanged]):
        (-[KWQTextFieldController textView:didHandleEvent:]):
        (-[KWQTextFieldController setHasFocus:]):
        (-[KWQTextFieldController textViewDidChangeSelection:]):
        * loader/CachedObject.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::setOpener):
        (WebCore::Frame::nodeForWidget):
        (WebCore::Frame::disconnectOwnerRenderer):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        * platform/Brush.h:
        * platform/Pen.h:
        * platform/Widget.cpp:
        (WebCore::Widget::isFrameView):
        * platform/Widget.h:
        (WebCore::):
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawText):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::Widget):
        (WebCore::Widget::focusPolicy):
        (WebCore::Widget::sendConsumedMouseUp):
        (WebCore::Widget::setClient):
        (WebCore::Widget::client):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::operator delete):
        * rendering/render_applet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::clicked):
        (WebCore::RenderFormElement::textAlignment):
        (WebCore::RenderLineEdit::RenderLineEdit):
        (WebCore::RenderLineEdit::selectionChanged):
        (WebCore::RenderLineEdit::returnPressed):
        (WebCore::RenderLineEdit::performSearch):
        (WebCore::RenderLineEdit::valueChanged):
        (WebCore::RenderFileButton::RenderFileButton):
        (WebCore::RenderFileButton::returnPressed):
        (WebCore::RenderFileButton::valueChanged):
        (WebCore::RenderLegend::RenderLegend):
        (WebCore::RenderSelect::RenderSelect):
        (WebCore::RenderSelect::updateFromElement):
        (WebCore::RenderSelect::valueChanged):
        (WebCore::RenderSelect::selectionChanged):
        (WebCore::RenderSelect::createListBox):
        (WebCore::RenderTextArea::RenderTextArea):
        (WebCore::RenderTextArea::valueChanged):
        (WebCore::RenderTextArea::selectionChanged):
        (WebCore::RenderSlider::RenderSlider):
        (WebCore::RenderSlider::valueChanged):
        * rendering/render_form.h:
        (WebCore::RenderFormElement::element):
        (WebCore::RenderLineEdit::element):
        (WebCore::RenderFileButton::element):
        (WebCore::RenderFileButton::isEditable):
        (WebCore::RenderSelect::element):
        (WebCore::RenderTextArea::element):
        (WebCore::RenderSlider::element):
        * rendering/render_frames.cpp:
        (WebCore::RenderPart::RenderPart):
        (WebCore::RenderPart::~RenderPart):
        (WebCore::RenderPart::setFrame):
        (WebCore::RenderPart::setWidget):
        (WebCore::RenderPart::deleteWidget):
        (WebCore::RenderFrame::RenderFrame):
        (WebCore::RenderPartObject::RenderPartObject):
        (WebCore::RenderPartObject::layout):
        * rendering/render_frames.h:
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::valueChanged):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::hitTest):
        * rendering/render_layer.h:
        (WebCore::RenderLayer::parent):
        (WebCore::RenderLayer::previousSibling):
        (WebCore::RenderLayer::nextSibling):
        (WebCore::RenderLayer::firstChild):
        (WebCore::RenderLayer::lastChild):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::RenderWidget):
        (WebCore::RenderWidget::destroy):
        (WebCore::RenderWidget::~RenderWidget):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::layout):
        (WebCore::RenderWidget::sendConsumedMouseUp):
        (WebCore::RenderWidget::focusIn):
        (WebCore::RenderWidget::focusOut):
        (WebCore::RenderWidget::scrollToVisible):
        (WebCore::RenderWidget::isVisible):
        (WebCore::RenderWidget::element):
        (WebCore::RenderWidget::deleteWidget):
        * rendering/render_replaced.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::requestsByDocument):
        (WebCore::addToRequestsByDocument):
        (WebCore::removeFromRequestsByDocument):
        (WebCore::XMLHttpRequest::getResponseText):
        (WebCore::XMLHttpRequest::getResponseXML):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::urlMatchesDocumentDomain):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::overrideMIMEType):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        (WebCore::XMLHttpRequest::getSpecificHeader):
        (WebCore::XMLHttpRequest::responseIsXML):
        (WebCore::XMLHttpRequest::getStatus):
        (WebCore::XMLHttpRequest::getStatusText):
        (WebCore::XMLHttpRequest::receivedAllData):
        (WebCore::XMLHttpRequest::receivedRedirect):
        (WebCore::XMLHttpRequest::receivedData):
        (WebCore::XMLHttpRequest::cancelRequests):
        (WebCore::XMLHttpRequest::detachRequests):
        * xml/xmlhttprequest.h:

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Reorganize link stubs (alphabetically).
        Stub out Path methods to make cnn.com work.

        * platform/win/TemporaryLinkStubs.cpp:
        (FrameView::viewportToGlobal):
        (FrameView::updateBorder):
        (FrameView::isFrameView):
        (FrameView::topLevelWidget):
        (QScrollBar::~QScrollBar):
        (QScrollBar::setSteps):
        (QScrollBar::scroll):
        (QScrollBar::QScrollBar):
        (QScrollBar::setValue):
        (QScrollBar::setKnobProportion):
        (QListBox::QListBox):
        (QListBox::setSelected):
        (QListBox::sizeForNumberOfLines):
        (QListBox::isSelected):
        (QListBox::appendItem):
        (QListBox::doneAppendingItems):
        (ScrollView::scrollXOffset):
        (QComboBox::focusPolicy):
        (QTextEdit::QTextEdit):
        (QTextEdit::~QTextEdit):
        (QTextEdit::textWithHardLineBreaks):
        (QTextEdit::sizeWithColumnsAndRows):
        (QTextEdit::setColors):
        (QTextEdit::setFont):
        (QTextEdit::setWritingDirection):
        (QTextEdit::checksDescendantsForFocus):
        (QTextEdit::selectionStart):
        (QTextEdit::hasSelectedText):
        (QTextEdit::setReadOnly):
        (QTextEdit::setDisabled):
        (QTextEdit::setLineHeight):
        (QTextEdit::setSelectionStart):
        (QTextEdit::text):
        (QTextEdit::setWordWrap):
        (QTextEdit::setAlignment):
        (QTextEdit::getCursorPosition):
        (QTextEdit::setSelectionRange):
        (Widget::enableFlushDrawing):
        (Widget::isEnabled):
        (Widget::focusPolicy):
        (Widget::disableFlushDrawing):
        (Widget::setIsSelected):
        (Widget::unlockDrawingFocus):
        (KJavaAppletWidget::KJavaAppletWidget):
        (ScrollView::scrollPointRecursively):
        (ScrollView::scrollBy):
        (QLineEdit::selectAll):
        (QLineEdit::addSearchResult):
        (QLineEdit::selectionStart):
        (QLineEdit::hasSelectedText):
        (QLineEdit::selectedText):
        (QLineEdit::setAutoSaveName):
        (QLineEdit::checksDescendantsForFocus):
        (QLineEdit::setMaxResults):
        (GraphicsContext::GraphicsContext):
        (GraphicsContext::addFocusRingRect):
        (GraphicsContext::drawLineForMisspelling):
        (GraphicsContext::drawFocusRing):
        (GraphicsContext::selectedTextBackgroundColor):
        (GraphicsContext::drawHighlightForText):
        (GraphicsContext::misspellingLineThickness):
        (GraphicsContext::addRoundedRectClip):
        (QSlider::QSlider):
        (QSlider::sizeHint):
        (QSlider::setValue):
        (QSlider::setMaxValue):
        (QSlider::~QSlider):
        (QSlider::setFont):
        (QListBox::setFont):
        (QListBox::~QListBox):
        (QListBox::setSelectionMode):
        (QListBox::setEnabled):
        (QListBox::clear):
        (QListBox::checksDescendantsForFocus):
        (KWQFileButton::KWQFileButton):
        (KWQFileButton::click):
        (KWQFileButton::sizeForCharacterWidth):
        (KWQFileButton::frameGeometry):
        (KWQFileButton::setFilename):
        (KWQFileButton::baselinePosition):
        (KWQFileButton::setFrameGeometry):
        (QSlider::focusPolicy):
        (QListBox::focusPolicy):
        (Cursor::Cursor):
        (MouseEvent::MouseEvent):
        (KWQKCookieJar::cookieEnabled):
        (WebCore::screenDepth):
        (WebCore::usableScreenRect):
        (FrameWin::createPlugin):
        (ScrollView::resizeContents):
        (ScrollView::visibleHeight):
        (ScrollView::visibleWidth):
        (ScrollView::setContentsPos):
        (ScrollView::contentsHeight):
        (ScrollView::contentsWidth):
        (ScrollView::inWindow):
        (Path::~Path):
        (Path::Path):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):
        (Path::operator=):

2006-03-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=6844>
        elementAtPoint returns the list when the point is over a list marker

        Call RenderObject::setInnerNode(), which sets both the 
        innerNode and the innerNonSharedNode.

        * rendering/render_list.cpp:
        (WebCore::RenderListItem::nodeAtPoint):
        * rendering/render_list.h:

2006-03-05  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed a lot of long-ago-deleted files
        from the kwq directory.

2006-03-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - moved all the remnants of the public C++ DOM API out of khtml/dom
        - changed from "int" to "ExceptionCode" for DOM exceptions
        - removed unused CSS_HTML_RELATIVE
        - changed offsetInCharacters to be a member function of NodeImpl
        - changed DOM functions that take a NodeType to use NodeType instead of
          unsigned short for clarity (will still be unsigned short in bindings)
        - changed exception constants so they can be used directly in the
          implementation code (added in the offsets for different types of exceptions)
        - replaced the eventListenerType function with an isHTMLEventListener function
        - got rid of EventListenerEvent, which is a synonym for EventImpl*
        - eliminated handleEventImpl, whish is now the same as handleEvent

        - did other preparation for the "remove Impl suffix" renaming
          (tested by using a script that does the renaming)

        * khtml/dom/css_rule.h: Removed.
        * khtml/dom/css_stylesheet.h: Removed.
        * khtml/dom/css_value.h: Removed.
        * khtml/dom/dom2_events.cpp: Removed.
        * khtml/dom/dom2_events.h: Removed.
        * khtml/dom/dom2_range.h: Removed.
        * khtml/dom/dom2_traversal.cpp: Removed.
        * khtml/dom/dom2_traversal.h: Removed.
        * khtml/dom/dom_exception.h: Removed.
        * khtml/dom/dom_node.h: Removed.

        * dom/EventListener.h: Added.
        * dom/ExceptionCode.h: Added.

        * WebCore+SVG/kdom.h: Removed NodeType and ExceptionCodes
        * WebCore+SVG/kdomevents.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Updated for file changes.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Removed unneeded DOM:: prefix. Updated file
        names and exception prefix for changes in DOM exceptions.

        * bindings/js/JSDOMCore.cpp: Touched to cause auto-generated code to be
        recompiled. We need to get this fixed!
        * bindings/js/JSDOMEvents.cpp: Ditto.

        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationEvent.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        * dom/WheelEvent.idl:
        Touched all IDL files so that changes in CodeGeneratorJS.pm would take effect.
        Added license headers.

        * bindings/objc/DOM.mm: Fixed garbled license agreement. Updated includes.
        Changed from a single "using namespace WebCore" to individual using statements
        because of the imminent conflict between DOMImplementation in Objective C
        and WebCore::DOMImplementation (currently has an Impl suffix). Added a typedef
        for WebCore::DOMImplementationImpl. Changed to use ExceptionCode instead of int.

        * bindings/objc/DOMCSS.h: Removed DOMCSSException and the special CSS exception
        codes. This is a feature of DOM Level 1 only. In DOM Level 2 these were eliminated
        and use basic DOM exception codes instead. We might have to do something for binary
        compatibility eventually, but perhaps not.

        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMEvents.mm:
        * bindings/objc/DOMEventsInternal.h:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMHTMLInternal.h:
        * bindings/objc/DOMViews.mm:
        * bindings/objc/DOMViewsInternal.h:
        Fixed garbled license agreements.
        Changed to use ExceptionCode instead of int and name the variable "ec".

        * bindings/objc/DOMInternal.h: Changed addDOMWrapperImpl to take NSObject* instead
        of id. This helps with overload resolution when addDOMWrapperImpl is renamed to be
        addDOMWrapper. Changed ALLOW_DOM_CAST to always use "class" in from of the type name
        of the WebCore class. This helps work around what seems like a bug in namespace support
        in Objective-C mode, although the bug only happens after the "remove Impl" renaming.
        * bindings/objc/DOMInternal.mm:
        (getDOMWrapperImpl): Changed to use HashMap.
        (addDOMWrapperImpl): Ditto.
        (removeDOMWrapper): Ditto.
        (raiseDOMException): Update to use new names for exception number ranges.

        * bridge/mac/WebCoreFrameBridge.mm:
        * khtml/ecma/xmlserializer.cpp:
        * kwq/KWQAccObject.mm:
        Removed unneeded includes.

        * css/css_ruleimpl.h: Moved "rule type" into this header.

        * dom/CommentImpl.h:
        * dom/CommentImpl.cpp: (WebCore::CommentImpl::offsetInCharacters): Added. Returns true.

        * khtml/ecma/XSLTProcessor.cpp: (KJS::XSLTProcessorProtoFunc::callAsFunction):
        Changed this around so we don't have a local variable named docImpl.

        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Updated for new form of exception
        constants.

        * khtml/ecma/kjs_events.h:
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent): Changed to no longer use EventListenerEvent.
        (KJS::JSAbstractEventListener::isHTMLEventListener): Added.

        * rendering/RenderTextField.h: Updated includes. Tweaked the code formatting of
        InputMutationListener. (Might be unnecessary since this class might be deleted soon.)

        * bridge/mac/MacFrame.mm:
        * css/css_computedstyle.cpp:
        * css/css_computedstyle.h:
        * css/css_ruleimpl.cpp:
        * css/css_stylesheetimpl.cpp:
        * css/css_stylesheetimpl.h:
        * css/css_valueimpl.cpp:
        * css/css_valueimpl.cpp:
        * css/css_valueimpl.h:
        * css/css_valueimpl.h:
        * css/cssparser.cpp:
        * css/cssstyleselector.cpp:
        * dom/CDATASectionImpl.cpp:
        * dom/CDATASectionImpl.h:
        * dom/CharacterDataImpl.cpp:
        * dom/CharacterDataImpl.h:
        * dom/ContainerNodeImpl.cpp:
        * dom/DOMImplementationImpl.cpp:
        * dom/DocumentFragmentImpl.cpp:
        * dom/DocumentFragmentImpl.h:
        * dom/DocumentImpl.cpp:
        * dom/DocumentImpl.h:
        * dom/DocumentTypeImpl.cpp:
        * dom/DocumentTypeImpl.h:
        * dom/NamedNodeMapImpl.h:
        * dom/NodeImpl.cpp:
        * dom/NodeImpl.h:
        * dom/NodeListImpl.cpp:
        * dom/TextImpl.cpp:
        * dom/TextImpl.h:
        * dom/dom2_eventsimpl.cpp:
        * dom/dom2_eventsimpl.h:
        * dom/dom2_rangeimpl.cpp:
        * dom/dom2_rangeimpl.h:
        * dom/dom2_traversalimpl.cpp:
        * dom/dom2_traversalimpl.h:
        * dom/dom_elementimpl.cpp:
        * dom/dom_elementimpl.h:
        * dom/dom_position.cpp:
        * dom/dom_xmlimpl.cpp:
        * dom/dom_xmlimpl.h:
        * dom/xml_tokenizer.cpp:
        * editing/AppendNodeCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/JoinTextNodesCommand.cpp:
        * editing/MergeIdenticalElementsCommand.cpp:
        * editing/RemoveNodeAttributeCommand.cpp:
        * editing/RemoveNodeCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/Selection.cpp:
        * editing/SelectionController.cpp:
        * editing/SelectionController.h:
        * editing/SetNodeAttributeCommand.cpp:
        * editing/SplitElementCommand.cpp:
        * editing/SplitTextNodeCommand.cpp:
        * editing/VisiblePosition.cpp:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * editing/visible_text.cpp:
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_css.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_range.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/ecma/kjs_traversal.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/html/HTMLElementImpl.cpp:
        * khtml/html/HTMLOptionElementImpl.cpp:
        * khtml/html/HTMLOptionElementImpl.h:
        * khtml/html/HTMLOptionsCollectionImpl.cpp:
        * khtml/html/HTMLSelectElementImpl.cpp:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/html_tableimpl.cpp:
        * khtml/html/html_tableimpl.h:
        * khtml/html/htmlparser.cpp:
        * khtml/xbl/xbl_tokenizer.cpp:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        * ksvg2/svg/SVGDOMImplementationImpl.h:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGElementImpl.cpp:
        * ksvg2/svg/SVGLengthImpl.cpp:
        * ksvg2/svg/SVGLocatableImpl.cpp:
        * ksvg2/svg/SVGPolyElementImpl.cpp:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * ksvg2/svg/SVGStyleElementImpl.cpp:
        * ksvg2/svg/SVGStyleElementImpl.h:
        * ksvg2/svg/SVGUseElementImpl.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * rendering/render_object.cpp:
        * xml/xmlhttprequest.cpp:
        Changed to use ExceptionCode instead of int and name the variable "ec".
        Also updated use of exception codes and other constants to get them from
        their new locations.

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix more pages (apple.com, yahoo.com) by returning empty error image.
        Empty a couple more stubs and clean up stub style a little.

        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::loadResource):
        * platform/win/TemporaryLinkStubs.cpp:
        (QListBox::isSelected):
        (QSlider::sizeHint):
        (QScrollBar::~QScrollBar):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::recordFormValue):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::createNewWindow):
        (Path::Path):
        (QLineEdit::~QLineEdit):
        (QLineEdit::setLiveSearch):
        (QComboBox::~QComboBox):

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Empty enough stubs to make apple.com load.

        * platform/win/TemporaryLinkStubs.cpp:
        (QTextEdit::sizeWithColumnsAndRows):
        (GraphicsContext::misspellingLineThickness):
        (QTextEdit::selectAll):
        (QTextEdit::setSelectionStart):
        (Widget::unlockDrawingFocus):
        (QLineEdit::setAutoSaveName):
        (ScrollView::scrollYOffset):
        (KWQFileButton::setFilename):
        (QListBox::setFont):
        (GraphicsContext::beginTransparencyLayer):
        (GraphicsContext::endTransparencyLayer):
        (QComboBox::QComboBox):
        (QComboBox::setFont):
        (QComboBox::baselinePosition):
        (QComboBox::setWritingDirection):
        (QComboBox::clear):
        (QComboBox::appendItem):
        (QComboBox::setCurrentItem):
        (QComboBox::sizeHint):
        (QComboBox::frameGeometry):
        (QComboBox::setFrameGeometry):
        (QLineEdit::setLiveSearch):

2006-03-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Fix external resource loading.
        Make a bunch of stubs not abort (to fix slashdot).

        * platform/win/TemporaryLinkStubs.cpp:
        (QTextEdit::textWithHardLineBreaks):
        (KWQFileButton::click):
        (QComboBox::setFrameGeometry):
        (QTextEdit::setText):
        (QListBox::appendItem):
        (GraphicsContext::endTransparencyLayer):
        (QLineEdit::selectionStart):
        (QTextEdit::QTextEdit):
        (QListBox::isSelected):
        (QComboBox::focusPolicy):
        (QTextEdit::setCursorPosition):
        (QTextEdit::setAlignment):
        (QLineEdit::selectedText):
        (ScrollView::scrollPointRecursively):
        (QScrollBar::setSteps):
        (QComboBox::appendItem):
        (GraphicsContext::drawLineForMisspelling):
        (KWQFileButton::setFilename):
        (QListBox::setWritingDirection):
        (QListBox::focusPolicy):
        (MouseEvent::MouseEvent):
        (QSlider::setFont):
        (Widget::setEnabled):
        (Widget::paint):
        (ScrollView::addChild):
        (ScrollView::inWindow):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearShadow):
        (RenderThemeWin::paintCheckbox):
        (RenderThemeWin::paintRadio):
        (RenderThemeWin::paintButton):
        (RenderThemeWin::paintTextField):
        (QLineEdit::QLineEdit):
        (QLineEdit::setFont):
        (QLineEdit::setAlignment):
        (QLineEdit::setWritingDirection):
        (QLineEdit::maxLength):
        (QLineEdit::setMaxLength):
        (QLineEdit::text):
        (QLineEdit::setText):
        (QLineEdit::cursorPosition):
        (QLineEdit::setCursorPosition):
        (QLineEdit::setEdited):
        (QLineEdit::setReadOnly):
        (QLineEdit::setPlaceholderString):
        (QLineEdit::setColors):
        (QLineEdit::sizeForCharacterWidth):
        (QLineEdit::baselinePosition):
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::fileLoadTimer):
        (WebCore::TransferJob::cancel):

2006-03-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix failure seen running editing layout tests

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        Use selectNodeContents instead of rolling our own.
        It handles the "nothing at all" edge case properly.

2006-03-05  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make updateContents invalidate entire window for now.
        Fix indentation in fileLoadTimer.

        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents):
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::fileLoadTimer):

2006-03-05  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        Add missing files to vcproj (fix win32 build).
        Also add svn:eol-style=native to new files.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-03-05  Darin Adler  <mjs@apple.com>

        - fix build

        * rendering/render_style.h: (compareEqual): Made it inline, fixed variable name.

2006-03-05  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6987
        Implement maxlength for new text fields

        Test added:
        * fast/forms/input-appearance-maxlength.html

        * WebCore.xcodeproj/project.pbxproj: 
         Added BeforeTextInsertedEventImpl.h, BeforeTextInsertedEventImpl.cpp, HTMLTextFieldInnerElementImpl.h, and HTMLTextFieldInnerElementImpl.cpp

        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::init): initialize max length to 1024.
        (WebCore::HTMLInputElementImpl::defaultEventHandler): Added case to use the khtmlBeforeTextInsertedEvent to check for maxlength.
        (WebCore::HTMLInputElementImpl::parseMappedAttribute): Makes sure that maxlength is between 0 and 1024.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): After doing a test insert of the fragment,
         Send khtmlBeforeTextInsertedEvent to the root editable element so the event handler can update the text, and we can update the fragment.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Send khtmlBeforeTextInsertedEvent to the root editable element so the event handler can update the text if necessary.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): If we've just applied a command, send the khtmlTextInsertedEvent to the root editable element. 
        (WebCore::EditCommand::unapply): ditto.
        (WebCore::EditCommand::reapply): ditto.

        * khtml/html/HTMLTextFieldInnerElementImpl.h: Added this class to store a pointer to the input element for the text field and to handle default events.
        (DOM::HTMLTextFieldInnerElementImpl::shadowParentNode): Added.
        (DOM::HTMLTextFieldInnerElementImpl::setShadowParentNode): Added.
        * khtml/html/HTMLTextFieldInnerElementImpl.cpp: Added.
        (WebCore::HTMLTextFieldInnerElementImpl::HTMLTextFieldInnerElementImpl):
        (WebCore::HTMLTextFieldInnerElementImpl::~HTMLTextFieldInnerElementImpl):
        (WebCore::HTMLTextFieldInnerElementImpl::defaultEventHandler):
         Sends khtmlBeforeTextInsertedEvents to the shadowParentNode, 
         and handles khtmlTextInsertedEvents by telling the renderer that the subtree has changed.

        * rendering/RenderTextField.cpp: Removed InputMutationListener since subtreeHasChanged is now called from the editing code.
        (WebCore::RenderTextField::~RenderTextField): removed event listener code.
        (WebCore::RenderTextField::updateFromElement): ditto.  And creates HTMLTextFieldInnerElementImpl.
        (WebCore::RenderTextField::subtreeHasChanged): calls new text() method.
        (WebCore::RenderTextField::text): created to get a String of all text in the RenderTextField.
        * rendering/RenderTextField.h: Removed InputMutationListener class.

        * dom/EventNames.h: Added khtmlTextInserted and khtmlBeforeTextInserted.
        * dom/BeforeTextInsertedEventImpl.cpp: Added.
        (WebCore::BeforeTextInsertedEventImpl::BeforeTextInsertedEventImpl):
        * dom/BeforeTextInsertedEventImpl.h: Added.
        (WebCore::BeforeTextInsertedEventImpl::isBeforeTextInsertedEvent):
        (WebCore::BeforeTextInsertedEventImpl::text):
        * dom/dom2_eventsimpl.cpp: (WebCore::EventImpl::isBeforeTextInsertedEvent): Added.
        * dom/dom2_eventsimpl.h: Added isBeforeTextInsertedEvent.

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        - fix build, give this a return type.

        * rendering/render_style.h:
        (compareEqual):

2006-03-05  Eric Seidel  <eseidel@apple.com>

        Add "Font.h" to (try to) fix the no-svg build.

        * platform/mac/GraphicsContextMac.mm:

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Darin.

        - fix win32 build by avoiding use of typeof

        * rendering/render_style.h:
        (compareEqual):

2006-03-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej.

        - Second cut at fixing <rdar://problem/4467143> JavaScript enumeration 
        of HTML element properties skips DOM node properties
 
        The approach here is for prototypes, in their constructor methods, 
        to set their own prototypes, preserving the prototype 
        chain in cases of multiple levels of inheritance. (Previously, our
        code assumed that a prototype never had a prototype of its own,
        and always used an empty object as a prototype's prototype).

        * bindings/scripts/CodeGeneratorJS.pm: Use the new
        DEFINE_PROTOTYPE_WITH_PROTOTYPE macro in place of the  
        KJS_IMPLEMENT_PROTOTYPE_WITH_PARENT macro.
        * khtml/ecma/kjs_dom.cpp: Ditto.
        * khtml/ecma/kjs_dom.h: Ditto.
        * khtml/ecma/kjs_events.cpp: Ditto.

        Touched these files to force a rebuild:

        * bindings/js/JSDOMCore.cpp:
        * bindings/js/JSDOMEvents.cpp:
        * dom/Attr.idl:
        * dom/CharacterData.idl:
        * dom/DOMImplementation.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/MutationEvent.idl:
        * dom/Notation.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Text.idl:
        * dom/WheelEvent.idl:

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - use unsigned bitfields when storing enums in them, to avoid mangling on win32 (was causing all layout to be RTL)
        http://bugs.webkit.org/show_bug.cgi?id=7618

        * css/css_base.cpp:
        (WebCore::CSSSelector::operator == ):
        (WebCore::CSSSelector::selectorText):
        * css/css_base.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::pseudoType):
        (WebCore::CSSSelector::relation):
        * css/css_grammar.y:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::CSSStyleSelector::checkOneSelector):
        * kcanvas/KCanvasPath.cpp:
        (WebCore::operator<<):
        * kcanvas/KCanvasPath.h:
        (WebCore::KCClipData::windRule):
        (WebCore::KCClipDataList::addPath):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasClipperQuartz::applyClip):
        * khtml/ecma/kjs_html.h:
        * khtml/html/HTMLButtonElementImpl.h:
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::setInputType):
        * khtml/html/HTMLInputElementImpl.h:
        (DOM::HTMLInputElementImpl::inputType):
        * khtml/html/html_tableimpl.h:
        * khtml/xbl/xbl_protohandler.cpp:
        (XBL::m_button):
        * khtml/xbl/xbl_protohandler.h:
        * ksvg2/css/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::):
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * ksvg2/svg/SVGAnimateTransformElementImpl.h:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        (SVGAnimationElementImpl::targetAttribute):
        (SVGAnimationElementImpl::setTargetAttribute):
        * ksvg2/svg/SVGAnimationElementImpl.h:
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::value):
        * ksvg2/svg/SVGLengthImpl.h:
        * kwq/KWQKHTMLSettings.h:
        * loader/CachedImage.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::setCachePolicy):
        (WebCore::DocLoader::setShowAnimations):
        * loader/DocLoader.h:
        (WebCore::DocLoader::showAnimations):
        * platform/FontDescription.h:
        (WebCore::FontDescription::genericFamily):
        * platform/QString.cpp:
        (HandleNode::):
        * platform/QString.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setSelectionState):
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::leftBottom):
        (WebCore::RenderBlock::rightBottom):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::selectionState):
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::FloatingObject::type):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::getRules):
        * rendering/bidi.cpp:
        (khtml::BidiContext::BidiContext):
        (khtml::operator==):
        (khtml::embed):
        (khtml::RenderBlock::computeHorizontalPositionsForLine):
        (khtml::RenderBlock::bidiReorderLine):
        (khtml::RenderBlock::layoutInlineChildren):
        * rendering/bidi.h:
        (khtml::BidiContext::dir):
        (khtml::BidiContext::basicDir):
        (khtml::BidiRun::BidiRun):
        * rendering/render_canvasimage.h:
        * rendering/render_layer.h:
        (WebCore::Marquee::whiteSpace):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::paintBorderImage):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::setSelectionState):
        * rendering/render_replaced.h:
        (WebCore::RenderReplaced::selectionState):
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::getPseudoStyle):
        * rendering/render_style.h:
        (khtml::BorderValue::BorderValue):
        (khtml::BorderValue::style):
        (khtml::BorderValue::nonZero):
        (khtml::BorderValue::operator==):
        (khtml::OutlineValue::operator==):
        (khtml::CollapsedBorderValue::style):
        (khtml::BorderImage::horizontalRule):
        (khtml::BorderImage::verticalRule):
        (khtml::BorderData::borderLeftWidth):
        (khtml::BorderData::borderRightWidth):
        (khtml::BorderData::borderTopWidth):
        (khtml::BorderData::borderBottomWidth):
        (khtml::BackgroundLayer::backgroundClip):
        (khtml::BackgroundLayer::backgroundOrigin):
        (khtml::BackgroundLayer::backgroundRepeat):
        (khtml::RenderStyle::styleType):
        (khtml::RenderStyle::display):
        (khtml::RenderStyle::originalDisplay):
        (khtml::RenderStyle::position):
        (khtml::RenderStyle::floating):
        (khtml::RenderStyle::borderLeftStyle):
        (khtml::RenderStyle::borderLeftColor):
        (khtml::RenderStyle::borderRightStyle):
        (khtml::RenderStyle::borderRightColor):
        (khtml::RenderStyle::borderTopStyle):
        (khtml::RenderStyle::borderTopColor):
        (khtml::RenderStyle::borderBottomStyle):
        (khtml::RenderStyle::borderBottomColor):
        (khtml::RenderStyle::outlineWidth):
        (khtml::RenderStyle::outlineStyle):
        (khtml::RenderStyle::overflow):
        (khtml::RenderStyle::visibility):
        (khtml::RenderStyle::verticalAlign):
        (khtml::RenderStyle::unicodeBidi):
        (khtml::RenderStyle::clear):
        (khtml::RenderStyle::tableLayout):
        (khtml::RenderStyle::textAlign):
        (khtml::RenderStyle::textTransform):
        (khtml::RenderStyle::direction):
        (khtml::RenderStyle::whiteSpace):
        (khtml::RenderStyle::backgroundRepeat):
        (khtml::RenderStyle::backgroundClip):
        (khtml::RenderStyle::backgroundOrigin):
        (khtml::RenderStyle::emptyCells):
        (khtml::RenderStyle::captionSide):
        (khtml::RenderStyle::listStyleType):
        (khtml::RenderStyle::listStylePosition):
        (khtml::RenderStyle::cursor):
        (khtml::RenderStyle::pageBreakInside):
        (khtml::RenderStyle::pageBreakBefore):
        (khtml::RenderStyle::pageBreakAfter):
        (khtml::RenderStyle::outlineOffset):
        (khtml::RenderStyle::appearance):
        (khtml::RenderStyle::boxAlign):
        (khtml::RenderStyle::boxDirection):
        (khtml::RenderStyle::boxLines):
        (khtml::RenderStyle::boxOrient):
        (khtml::RenderStyle::boxPack):
        (khtml::RenderStyle::boxSizing):
        (khtml::RenderStyle::marqueeBehavior):
        (khtml::RenderStyle::marqueeDirection):
        (khtml::RenderStyle::userModify):
        (khtml::RenderStyle::userDrag):
        (khtml::RenderStyle::userSelect):
        (khtml::RenderStyle::marginTopCollapse):
        (khtml::RenderStyle::marginBottomCollapse):
        (khtml::RenderStyle::wordWrap):
        (khtml::RenderStyle::nbspMode):
        (khtml::RenderStyle::khtmlLineBreak):
        (khtml::RenderStyle::matchNearestMailBlockquoteColor):
        (khtml::RenderStyle::setBorderLeftWidth):
        (khtml::RenderStyle::setBorderLeftStyle):
        (khtml::RenderStyle::setBorderLeftColor):
        (khtml::RenderStyle::setBorderRightWidth):
        (khtml::RenderStyle::setBorderRightStyle):
        (khtml::RenderStyle::setBorderRightColor):
        (khtml::RenderStyle::setBorderTopWidth):
        (khtml::RenderStyle::setBorderTopStyle):
        (khtml::RenderStyle::setBorderTopColor):
        (khtml::RenderStyle::setBorderBottomWidth):
        (khtml::RenderStyle::setBorderBottomStyle):
        (khtml::RenderStyle::setBorderBottomColor):
        (khtml::RenderStyle::setOutlineWidth):
        (khtml::RenderStyle::setOutlineStyle):
        (khtml::RenderStyle::pseudoState):

2006-03-05  Geoffrey Garen  <ggaren@apple.com>

        - Rolled out the fix for <rdar://problem/4467143> because it's the
        wrong approach. Maciej and I discussed this on IRC.

        * khtml/ecma/kjs_dom.cpp:
        (KJS::): Don't use classInfo to express prototype inheritance.
        classInfo is only for representing a c++ superclass relationship.

2006-03-05  Eric Seidel  <eseidel@apple.com>

        Move improperly placed #endif causing no-svg build to fail.

        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:

2006-03-05  Alexander Kellett  <lypanov@kde.org>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6890
          and http://bugs.webkit.org/show_bug.cgi?id=6951
          by being more tolerant towards invalid points data

        - new tests:
          svg/custom/polyline-setattribute-points-null.svg
          svg/custom/polyline-invalid-points.svg

        * ksvg2/svg/svgpathparser.cpp:
        (SVGPolyParser::parsePoints):

2006-03-05  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - remove no longer used KDOMSettings and KSVGSettings

        * WebCore+SVG/KDOMSettings.cpp: Removed.
        * WebCore+SVG/KDOMSettings.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * ksvg2/KSVGSettings.h: Removed.
        * ksvg2/svg/SVGStyledElementImpl.cpp:

2006-03-05  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * platform/Font.cpp:
        (WebCore::Font::update): remove extra ref causing large leak.

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Re-work ImageViewer to use GraphicsContext.
        Add GraphicsContext(cairo_t*) constructor to make double-buffering easier.
        Add one more stub to prevent slashdot from crashing.
        Also fixed win32 build after Font change.

        * Viewer.vcproj:
        * Viewer/ImageView.cpp:
        * platform/Color.h:
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::createPlugin):
        (BrowserExtensionWin::setTypedIconURL):

2006-03-05  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4840
          Frames only resize wider, can't make them narrower

        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameSetElementImpl::HTMLFrameSetElementImpl): Removed unused m_resizing flag.
        * khtml/html/html_baseimpl.h:
        * manual-tests/bugzilla-4840.html: Added.
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::viewportMouseMoveEvent):
        (WebCore::FrameView::viewportMouseReleaseEvent):
        (WebCore::FrameView::setResizingFrameSet): New method. When a resizing frameset is set,
        mouse move and mouse release events target it instead of hit-testing.
        * page/FrameView.h:
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::setResizing): Inform the FrameView that we are resizing (or not).

2006-03-04  David Hyatt  <hyatt@apple.com>

        Fix for bug 7586, eliminate QFontMetrics.

        Reviewed by eric

        * WebCore.xcodeproj/project.pbxproj:
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::computeLengthFloat):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::updateValue):
        * kwq/KWQFontMetrics.h: Removed.
        * kwq/KWQFontMetrics.mm: Removed.
        * platform/Font.cpp:
        (WebCore::m_wordSpacing):
        (WebCore::Font::Font):
        (WebCore::Font::operator=):
        (WebCore::Font::~Font):
        (WebCore::Font::update):
        (WebCore::Font::width):
        * platform/Font.h:
        (WebCore::Font::operator==):
        (WebCore::Font::width):
        (WebCore::Font::height):
        * platform/FontRenderer.h: Added.
        (WebCore::FontRenderer::isFixedPitch):
        * platform/GraphicsContext.h:
        * platform/mac/FontMac.mm: Added.
        (WebCore::m_renderer):
        (WebCore::FontRenderer::getWebCoreFont):
        (WebCore::FontRenderer::getRenderer):
        (WebCore::FontRenderer::determinePitch):
        (WebCore::FontRenderer::update):
        (WebCore::Font::getWebCoreFont):
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        (WebCore::Font::lineSpacing):
        (WebCore::Font::xHeight):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        * platform/mac/GraphicsContextMac.mm:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedMinMaxWidth):
        * rendering/RenderText.h:
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::calcMinMaxWidth):
        * rendering/bidi.cpp:
        (khtml::RenderBlock::tabWidth):
        (khtml::RenderBlock::checkLinesForTextOverflow):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::caretRect):
        * rendering/render_br.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::lineHeight):
        (WebCore::RenderFlow::caretRect):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::paint):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesVertically):
        * rendering/render_list.cpp:
        (WebCore::toHebrew):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcMinMaxWidth):
        (WebCore::RenderListMarker::baselinePosition):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::getVerticalPosition):
        (WebCore::RenderObject::lineHeight):
        (WebCore::RenderObject::baselinePosition):
        * rendering/render_object.h:
        * rendering/render_style.h:

2006-03-04  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Add urlSelected stub, adjust font metrics, and fix view size/move bug.

        * platform/win/TemporaryLinkStubs.cpp:
        (MouseEvent::MouseEvent):
        (FrameWin::urlSelected):
        (QFontMetrics::height):
        (QFontMetrics::xHeight):
        (QFontMetrics::ascent):
        (QFontMetrics::descent):
        (ScrollView::resizeContents):
        (ScrollView::setContentsPos):

2006-03-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - stop background image loads from crashing

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawScaledAndTiledImage):

        - fix termination condition on file load loop

        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::fileLoadTimer):

2006-03-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.

        - Fixed <rdar://problem/4467143> JavaScript enumeration of HTML 
        element properties skips DOM node properties

        No test case yet because this is a preliminary step toward enabling my
        uber test case for DOM support, which will cover this.

        * khtml/ecma/kjs_dom.cpp:
        (KJS::): Make DOMNode's classinfo reflect inheritance from 
        DOMNodeProto, so a for in enumeration can properly walk the 
        inheritance chain.
        * khtml/ecma/kjs_html.cpp:
        (KJS::): Used a script to sort classInfo data alphbetically.
        (KJS::KJS::HTMLElement::classInfo): Ditto.

2006-03-04  Maciej Stachowiak  <mjs@apple.com

        Reviewed by Eric.

         - fix mistake in TransferJob::start that made it cause a crash
        on non-file URLs

        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJob::start):

2006-03-04  Maciej Stachowiak  <mjs@apple.com

        Reviewed by Eric.

        - make TransferJobWin handle file: URLs, and fix other bugs
        as needed to make local file image loads work
        http://bugs.webkit.org/show_bug.cgi?id=7587

        * WebCore.vcproj/WebCore/WebCore.vcproj: add TransferJobWin
        to build.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin): Set autoLoadImages to true.
        * platform/TransferJob.cpp:
        (WebCore::TransferJob::TransferJob): Pass this to internal
        constructor, so windows version can initialize timer
        * platform/TransferJob.h:
        * platform/TransferJobInternal.h:
        (WebCore::TransferJobInternal::TransferJobInternal): On windows,
        prepare a timer for file loads.
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFloatImage): If passed-in context
        is null, use our built-in context (this is probably not the best,
        but should work for now).
        * platform/win/TemporaryLinkStubs.cpp:
        (FrameWin::issueRedoCommand): Don't break.
        (WebCore::TransferJob::assembleResponseHeaders): ditto
        (FrameWin::saveDocumentState): ditto
        (FrameWin::clearUndoRedoOperations): ditto
        * platform/win/TransferJobWin.cpp:
        (WebCore::TransferJobInternal::~TransferJobInternal): Close file
        handle if we have one.
        (WebCore::TransferJob::~TransferJob): Empty.
        (WebCore::TransferJob::start): Open a windows file handle.
        (WebCore::TransferJob::fileLoadTimer): Load from windows file
        handle.
        (WebCore::TransferJob::cancel): Stop timer and close windows file 
        handle if present.

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix QString crasher on Win32, also remove c-style casts from file.
        Add a few more stubs to allow more layout tests to not crash.
        Make dlls only copy when changed.
        Add RenderThemeWin stubs.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * platform/QString.cpp:
        (QString::stripWhiteSpace):
        (QString::simplifyWhiteSpace):
        (QString::setLatin1):
        (QString::sprintf):
        (QString::insert):
        (QString::fill):
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::usableScreenRect):
        (FrameWin::respondToChangedContents):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::issueRedoCommand):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::saveDocumentState):
        (FrameWin::print):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::issueUndoCommand):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::clearRecordedFormValues):
        (FrameWin::issuePasteCommand):
        (FrameWin::scheduleClose):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::issueTransposeCommand):
        (FrameWin::canPaste):
        (FrameWin::incomingReferrer):
        (FrameWin::canGoBackOrForward):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::getHistoryLength):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::openURLNotify):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (QListBox::setFont):
        (WebCore::TransferJob::assembleResponseHeaders):
        (WebCore::TransferJob::~TransferJob):
        (QFontMetrics::QFontMetrics):
        (QFontMetrics::lineSpacing):
        (QFontMetrics::xHeight):
        (QFontMetrics::ascent):
        (FrameWin::shouldChangeSelection):
        (FrameWin::generateFrameName):
        (FrameWin::createFrame):
        (RenderThemeWin::paintCheckbox):
        (RenderThemeWin::paintRadio):
        (RenderThemeWin::paintButton):
        (RenderThemeWin::paintTextField):
        * rendering/RenderThemeWin.cpp: Added.
        (WebCore::theme):
        * rendering/RenderThemeWin.h: Added.

2006-03-03  Geoffrey Garen  <ggaren@apple.com>

        Test case for <rdar://problem/4465598> REGRESSION (TOT): Crash occurs at 
        http://maps.google.com/?output=html ( KJS::Identifier::add(KJS::UString::Rep*)

        * manual-tests/property-map-save-crash.html: Added.

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by adele.

        Fix clearly bogus cairo elipse drawing code.
        Make QFontMetrics stubs slightly more sane.

        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        * platform/win/TemporaryLinkStubs.cpp:
        (QFontMetrics::floatWidth):
        (QFontMetrics::height):
        (QFontMetrics::width):
        (QFontMetrics::isFixedPitch):

2006-03-03  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7480
          non-HTML elems w/o children in HTML docs get serialized self-closing
        - fix problem where the HTML tokenizer would discard the first newline after </pre>

        Test: fast/innerHTML/innerHTML-custom-tag.html

        * editing/markup.cpp: (WebCore::shouldSelfClose): Refined rule so that it doesn't
        try to do any self-closing tags in HTML documents at all; updated comment.

        * khtml/html/htmltokenizer.cpp: (WebCore::HTMLTokenizer::parseTag): Added a check
        of beginTag in the <pre> tag case. We were accidentally discarding a newline after
        a </pre> tag.

2006-03-03  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - add new files to build, fix link stubs.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (KWQKCookieJar::cookieEnabled):
        (WebCore::TransferJob::retrieveCharset):
        (WebCore::TransferJob::assembleResponseHeaders):
        (WebCore::TransferJob::~TransferJob):
        * platform/win/TransferJobWin.cpp: Added.

2006-03-03  Maciej Stachowiak  <mjs@apple.com>

        - add file I forgot in my last commit.

        * platform/TransferJobInternal.h: Added.
        (WebCore::TransferJobInternal::TransferJobInternal):

2006-03-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Wire up WidgetWin, CursorWin, ScrollViewWin.
        Stub out methods for selection and cursors.

        * Viewer/ImageDocument.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp:
        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxyImpl::initScriptIfNeeded):
        * platform/IntRect.h:
        (WebCore::IntRect::IntRect):
        * platform/Widget.h:
        * platform/win/CursorWin.cpp:
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        * platform/win/IntRectWin.cpp:
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator RECT):
        * platform/win/MouseEventWin.cpp:
        * platform/win/ScrollViewWin.cpp: Added.
        (WebCore::ScrollView::updateContents):
        * platform/win/TemporaryLinkStubs.cpp:
        (QTextEdit::textWithHardLineBreaks):
        (QLineEdit::setPlaceholderString):
        (QScrollBar::scroll):
        (GraphicsContext::beginTransparencyLayer):
        (Widget::setIsSelected):
        (QLineEdit::selectedText):
        (QComboBox::sizeHint):
        (KWQFileButton::focusPolicy):
        (QTextEdit::focusPolicy):
        (QSlider::focusPolicy):
        (QListBox::focusPolicy):
        (QLineEdit::focusPolicy):
        (WebCore::moveCursor):
        (ScrollView::scrollBy):
        (KWQKCookieJar::cookieEnabled):
        (WebCore::TransferJob::TransferJob):
        (WebCore::screenDepth):
        (WebCore::usableScreenRect):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::issuePasteCommand):
        (FrameWin::issueTransposeCommand):
        (QSlider::setFont):
        (QLineEdit::setFont):
        (QListBox::setFont):
        (QFontMetrics::QFontMetrics):
        (QComboBox::setFont):
        (QTextEdit::setFont):
        (QTextEdit::setWritingDirection):
        (QFontMetrics::setFontDescription):
        (QFontMetrics::checkSelectionPoint):
        (FrameWin::addMessageToConsole):
        (FrameWin::shouldChangeSelection):
        (ScrollView::resizeContents):
        (ScrollView::visibleHeight):
        (ScrollView::visibleWidth):
        (ScrollView::setContentsPos):
        (ScrollView::contentsX):
        (ScrollView::contentsY):
        (ScrollView::contentsHeight):
        (ScrollView::contentsWidth):
        (ScrollView::viewportToContents):
        * platform/win/WidgetWin.cpp: Added.
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::windowHandle):
        (WebCore::Widget::setWindowHandle):
        (WebCore::Widget::setActiveWindow):
        (WebCore::Widget::frameGeometry):
        (WebCore::Widget::hasFocus):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::clearFocus):
        (WebCore::Widget::font):
        (WebCore::Widget::setFont):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::setFrameGeometry):
        (WebCore::Widget::mapFromGlobal):

2006-03-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - move TransferJob from kwq to platform, separate platform from non-platform bits

        * ForwardingHeaders/kio/job.h: Removed.
        * ForwardingHeaders/kio/jobclasses.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        * dom/xml_tokenizer.cpp:
        * khtml/xsl/xslt_processorimpl.cpp:
        * kwq/KWQKJobClasses.h: Removed.
        * kwq/KWQKJobClasses.mm: Removed.
        * kwq/KWQLoader.mm:
        * kwq/KWQResourceLoader.mm:
        * kwq/TransferJobClient.h: Removed.
        * loader/Cache.cpp:
        * loader/loader.cpp:
        * page/Frame.cpp:
        * platform/TransferJob.cpp: Added.
        (WebCore::TransferJob::TransferJob):
        (WebCore::TransferJob::queryMetaData):
        (WebCore::TransferJob::addMetaData):
        * platform/TransferJob.h: Added.
        * platform/TransferJobClient.h: Added.
        * platform/mac/TransferJobMac.mm: Added.
        (WebCore::TransferJobInternal::~TransferJobInternal):
        (WebCore::TransferJob::retrieveCharset):
        (WebCore::TransferJob::cancel):
        * xml/xmlhttprequest.cpp:

2006-03-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - enough link stubs to "display" local copy of WebKit site w/o hitting breakpoint

        * platform/win/TemporaryLinkStubs.cpp:
        (QLineEdit::setReadOnly):
        (QTextEdit::setCursorPosition):
        (QLineEdit::setCursorPosition):
        (QFontMetrics::width):
        (GraphicsContext::drawText):
        (GraphicsContext::drawLineForText):

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - remove function that is now gone

        * platform/win/TemporaryLinkStubs.cpp:

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - move logic to kick off load from KWQLoader function to a TransferJob method

        * kwq/KWQKJobClasses.h:
        * kwq/KWQKJobClasses.mm:
        (WebCore::TransferJob::start):
        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - remove unused loader parameter to KWQServeRequest.

        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        (KWQServeRequest):
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - remove one of the versions of KWQServeRequest.

        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * platform/win/TemporaryLinkStubs.cpp:
        (Widget::isEnabled):
        (KWQServeRequest):

2006-03-02  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - win32 build fix.

        * platform/win/MouseEventWin.cpp:

2006-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eric
        
        <http://bugs.webkit.org/show_bug.cgi?id=3894>
        uses of <cmath> should change to <math>

        * ksvg2/svg/SVGAnimateTransformElementImpl.cpp:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGLengthImpl.cpp:

2006-03-02  Andrew Wellington  <proton@wiretapped.net>

        Reviewed by Darin, landed by Beth

        Fix for http://bugs.webkit.org/show_bug.cgi?id=3230
        CSS1: Words with inline elements get extra capital letters

        Does not use UBreakIterator (yet?) for this, but a relatively
        simple change that fixes our failure in the CSS1 test suite 
        (5.4.5).

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::capitalize): Specify if this is a run-on
        * platform/StringImpl.h:
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::addChild): Change to re-run 
        capitalisation when added into tree as previous text node changes
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText): Check if previous node is text that
        doesn't end in a space

2006-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by sullivan
        
        <http://bugs.webkit.org/show_bug.cgi?id=7542>
        REGRESSION: (r13028) Scrolling causes incomplete drawing of <ul> bullets

        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):

2006-03-02  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Add (partially stubbed out) mouse event handling for Win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/IntPoint.h:
        * platform/MouseEvent.h:
        * platform/win/IntPointWin.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator POINT):
        * platform/win/MouseEventWin.cpp: Added.
        (WebCore::MouseEvent::MouseEvent):
        * platform/win/TemporaryLinkStubs.cpp:
        (QLineEdit::setMaxLength):
        (ScrollView::scrollBy):
        (WebCore::Widget::setFocus):
        (FrameWin::respondToChangedSelection):
        (FrameWin::runJavaScriptPrompt):
        (FrameWin::recordFormValue):
        (FrameWin::registerCommandForRedo):
        (FrameWin::runJavaScriptAlert):
        (FrameWin::runJavaScriptConfirm):
        (FrameWin::openURL):
        (FrameWin::registerCommandForUndo):
        (FrameWin::addMessageToConsole):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::shouldChangeSelection):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::markMisspellings):
        (FrameWin::personalbarVisible):
        (FrameWin::objectContentType):
        (FrameWin::createFrame):
        (FrameWin::createPlugin):
        (BrowserExtensionWin::setTypedIconURL):
        (BrowserExtensionWin::getHistoryLength):
        (BrowserExtensionWin::canRunModal):
        (BrowserExtensionWin::openURLNotify):
        (BrowserExtensionWin::createNewWindow):
        (BrowserExtensionWin::canRunModalNow):
        (BrowserExtensionWin::runModal):
        (BrowserExtensionWin::goBackOrForward):
        (BrowserExtensionWin::setIconURL):
        (FrameWin::passSubframeEventToSubframe):
        (FrameWin::lastEventIsMouseUp):
        (BrowserExtensionWin::BrowserExtensionWin):
        (Widget::setCursor):
        (ScrollView::visibleHeight):
        (ScrollView::visibleWidth):
        (ScrollView::setContentsPos):
        (ScrollView::contentsX):
        (ScrollView::contentsY):
        (ScrollView::contentsHeight):
        (ScrollView::contentsWidth):
        (ScrollView::viewportToContents):
        (TransferJob::TransferJob):
        (TransferJob::addMetaData):

2006-03-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://tinymce.moxiecode.com/example_full.php?example=true>
        TinyMCE: Undo still enabled after a location change, crashes if performed
        
        Can't clear undo/redo operations registered by subframes in didOpenURL,
        because subframes have already been detached.

        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL):
        (WebCore::Frame::closeURL):

2006-03-01  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - WebCore updates for "Set up new prototype macros and avoid using #if without defined() in JSC"
        http://bugs.webkit.org/show_bug.cgi?id=7387
        
        Add Platform.h 

        * ForwardingHeaders/kxmlcore/Platform.h: Added.
        * bridge/mac/WebCoreFrameNamespaces.m:
        * bridge/mac/WebCoreViewFactory.m:
        * bridge/mac/WebDashboardRegion.m:
        * config.h:
        * platform/Logging.cpp:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::addChild):
        * platform/mac/WebCoreCookieAdapter.m:
        * platform/mac/WebCoreGraphicsBridge.m:
        * platform/mac/WebCoreHistory.m:
        * platform/mac/WebCoreImageRendererFactory.m:
        * platform/mac/WebCoreKeyGenerator.m:
        * platform/mac/WebCoreView.m:

2006-03-02  Eric Seidel  <eseidel@apple.com>

        * WebCore.xcodeproj/project.pbxproj: update GraphicsContext.cpp path to fix build

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by andersca.

        Add first-stab GraphicsContextCairo.
        Shuffle a few more link stubs around, remove uncessary WebCore::

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/GraphicsContext.cpp: Added.
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::setColor):
        (WebCore::fillRectSourceOver):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        (WebCore::GraphicsContextPrivate::~GraphicsContextPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::setPen):
        (WebCore::GraphicsContext::setBrush):
        (WebCore::GraphicsContext::brush):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::setColorFromBrush):
        (WebCore::GraphicsContext::setColorFromPen):
        (WebCore::adjustLineToPixelBounderies):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawFloatImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawScaledAndTiledImage):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::addClip):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        * platform/cairo/ImageCairo.cpp:
        * platform/cg/GraphicsContextCG.cpp: Removed.
        * platform/win/TemporaryLinkStubs.cpp:
        (QLineEdit::selectAll):
        (Widget::mapFromGlobal):
        (QLineEdit::cursorPosition):
        (QTextEdit::setScrollBarModes):
        (QTextEdit::selectAll):
        (QComboBox::focusPolicy):
        (GraphicsContext::clearShadow):
        (QTextEdit::setCursorPosition):
        (GraphicsContext::drawText):
        (QLineEdit::setLiveSearch):
        (QComboBox::QComboBox):
        (Widget::lockDrawingFocus):
        (QTextEdit::setSelectionRange):
        (QSlider::QSlider):
        (ScrollView::scrollYOffset):
        (QComboBox::sizeHint):
        (QLineEdit::edited):
        (QTextEdit::text):
        (QSlider::value):
        (WebCore::Widget::setFocus):
        (WebCore::TransferJob::addMetaData):
        (FrameWin::respondToChangedContents):
        (FrameWin::unfocusWindow):
        (FrameWin::locationbarVisible):
        (FrameWin::respondToChangedSelection):
        (FrameWin::clearUndoRedoOperations):
        (FrameWin::issueRedoCommand):
        (FrameWin::getObjectInstanceForWidget):
        (FrameWin::getEmbedInstanceForWidget):
        (FrameWin::canRedo):
        (FrameWin::canUndo):
        (FrameWin::runJavaScriptPrompt):
        (FrameWin::recordFormValue):
        (FrameWin::registerCommandForRedo):
        (FrameWin::runJavaScriptAlert):
        (FrameWin::runJavaScriptConfirm):
        (FrameWin::openURL):
        (FrameWin::saveDocumentState):
        (FrameWin::print):
        (FrameWin::getAppletInstanceForWidget):
        (FrameWin::passMouseDownEventToWidget):
        (FrameWin::registerCommandForUndo):
        (FrameWin::issueCutCommand):
        (FrameWin::issueCopyCommand):
        (FrameWin::addMessageToConsole):
        (FrameWin::passWheelEventToChildWidget):
        (FrameWin::issueUndoCommand):
        (FrameWin::mimeTypeForFileName):
        (FrameWin::clearRecordedFormValues):
        (FrameWin::issuePasteCommand):
        (FrameWin::shouldChangeSelection):
        (FrameWin::scheduleClose):
        (FrameWin::markMisspellingsInAdjacentWords):
        (FrameWin::markMisspellings):
        (FrameWin::menubarVisible):
        (FrameWin::personalbarVisible):
        (FrameWin::lastEventIsMouseUp):
        (FrameWin::statusbarVisible):
        (FrameWin::toolbarVisible):
        (FrameWin::issueTransposeCommand):
        (FrameWin::userAgent):
        (FrameWin::canPaste):
        (FrameWin::incomingReferrer):
        (FrameWin::objectContentType):
        (FrameWin::passSubframeEventToSubframe):
        (FrameWin::createFrame):
        (FrameWin::canGoBackOrForward):
        (FrameWin::issuePasteAndMatchStyleCommand):
        (FrameWin::createPlugin):
        (FrameWin::generateFrameName):
        (QTextEdit::setWritingDirection):
        (QFontMetrics::checkSelectionPoint):
        (GraphicsContext::GraphicsContext):
        (QFontMetrics::isFixedPitch):
        (FrameWin::restoreDocumentState):
        (FrameWin::partClearedInBegin):
        (FrameWin::createEmptyDocument):
        (FrameWin::overrideMediaType):
        (FrameWin::setTitle):
        (FrameWin::handledOnloadEvents):
        (FrameWin::markedTextRange):
        (GraphicsContext::font):
        (GraphicsContext::setFont):

2006-03-02  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        Changed an Objective-C forward declaration from "class" to "@class".
        This doesn't appear to fix any problems, though.

        * platform/StringImpl.h:

2006-03-01  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=7059>
        TinyMCE: Select All + delete sends you Back intsead of deleting

        * page/Frame.cpp:
        (WebCore::Frame::selectFrameElementInParentIfFullySelected):

2006-03-01  David Harrison  <harrison@apple.com>

        Reviewed by Justin.
        (missed these in my earlier commit for <rdar://problem/4359736>)

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canIncreaseSelectionListLevel]):
        (-[WebCoreFrameBridge canDecreaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge decreaseSelectionListLevel]):

2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix win32 build, add IntRectWin and GraphicsContextCairo stub.

        * Viewer/ImageDocument.cpp:
        * Viewer/ImageMainFrame.cpp:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/IntRect.h:
        * platform/cairo/GraphicsContextCairo.cpp: Added.
        * platform/win/TemporaryLinkStubs.cpp:
        (GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::TransferJob::TransferJob):
        (GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):

2006-02-23  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/4359736> Support outlining ability with lists

        Added Mail SPI for list level changes.  It is SPI because it is not complete support
        for outlining.  See <rdar://problem/4457070> "API for html lists as note outlines".
        Additional support is to end a list when return is typed on empty list item.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added ModifySelectionListLevelCommand.cpp and ModifySelectionListLevelCommand.h
        
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge canIncreaseSelectionListLevel]):
        (-[WebCoreFrameBridge canDecreaseSelectionListLevel]):
        (-[WebCoreFrameBridge increaseSelectionListLevel]):
        (-[WebCoreFrameBridge decreaseSelectionListLevel]):
        Supply list level calls in the bridge.
        
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::createListItemElement):
        New.  Creates an li.
        
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        - slight logic cleanup
        - on empty list item, end the list
        
        * editing/ModifySelectionListLevelCommand.cpp: Added.
        (WebCore::ModifySelectionListLevelCommand::ModifySelectionListLevelCommand):
        (WebCore::ModifySelectionListLevelCommand::preservesTypingStyle):
        (WebCore::ModifySelectionListLevelCommand::doApply):
        (WebCore::ModifySelectionListLevelCommand::canIncreaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::canDecreaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::ModifySelectionListLevelCommand::decreaseSelectionListLevel):
        (WebCore::modifySelectionListLevel):
        (WebCore::getStartEndListChildren):
        (WebCore::canIncreaseListLevel):
        (WebCore::canDecreaseListLevel):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeBefore):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeAfter):
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange):
        (WebCore::ModifySelectionListLevelCommand::increaseListLevel):
        (WebCore::ModifySelectionListLevelCommand::decreaseListLevel):
        * editing/ModifySelectionListLevelCommand.h: Added.
        New editing command for adjusting the list level.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        Slight logic cleanup

        * editing/htmlediting.cpp:
        (WebCore::isListElement):
        (WebCore::enclosingListChild):
        New helpers.
        
        (WebCore::isTableElement):
        Allow caller to pass 0... return false in that case.
        
        * editing/htmlediting.h:
        New helpers.
        
        * rendering/RenderContainer.cpp:
        (WebCore::updateListMarkerNumbers):
        Allow for list children that are not li nodes.  Ignore and continue rather than stopping.
        
        (WebCore::RenderContainer::addChild):
        Allow for nil beforeChild, meaning "add at end".
        
2006-03-01  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Update ESelectionGranulartiy enum to use newer CamelCase styling.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge alterCurrentSelection:direction:granularity:]):
        * editing/Selection.cpp:
        (WebCore::Selection::Selection):
        (WebCore::Selection::validate):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        (WebCore::SelectionController::modifyMovingRightForward):
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        (WebCore::SelectionController::modifyMovingLeftBackward):
        (WebCore::SelectionController::modify):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/jsediting.cpp:
        * editing/text_granularity.h:
        (WebCore::):
        * page/Frame.cpp:
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEventSelection):

2006-03-01  Alexander Kellett  <lypanov@kde.org>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5966

        Fixes already existing test:
          svg/W3C-SVG-1.1/coords-viewattr-02-b.svg

        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        (WebCore::RenderSVGImage::paint):
        * kcanvas/RenderSVGImage.h:

2006-03-01  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=3812
          XMLHttpRequest: PUT, DELETE, HEAD and all other methods but POST actually do a GET.

        HEAD is currently unimplemented because of what seems to be a bug in NSURLConnection,
        and does a GET instead.

        * kwq/KWQKJobClasses.h: Add a method parameter to TransferJob.
        * kwq/KWQKJobClasses.mm:
        (WebCore::TransferJobPrivate::TransferJobPrivate):
        (WebCore::TransferJob::TransferJob):
        (WebCore::TransferJob::method):
        * bridge/mac/WebCoreFrameBridge.h: URL loading functions now take a method parameter.
        * dom/xml_tokenizer.cpp:
        (WebCore::openFunc):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::docLoaderFunc):
        * kwq/KWQLoader.mm:
        (KWQServeRequest):
        (KWQServeSynchronousRequest):
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send): Honor the method passed in open().
        * khtml/ecma/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction): Don't serialize null as "null".

2006-03-01  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=7450
        elementAtPoint is expensive and should return a smart dictionary
        
        <rdar://problem/2952761> moving the mouse around eats more CPU than I would expect (7450)

        Support for WebKit. This removes the old elementAtPoint: on the bridge.
        WebKit now uses the bridge method getInnerNonSharedNode:innerNode:URLElement:atPoint:

        * WebCore.exp: removes the WebCore* dictionary keys
        * bindings/objc/DOM.mm:
        (-[DOMElement image]): new method to get an NSImage if the element has an image renderer
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement titleDisplayString]): new method that returns the title after doing the backslash as currency symbol conversion
        (-[DOMHTMLInputElement altDisplayString]): ditto for alt
        (-[DOMHTMLImageElement altDisplayString]): ditto
        (-[DOMHTMLAppletElement altDisplayString]): ditto
        (-[DOMHTMLAreaElement altDisplayString]): ditto
        (-[DOMHTMLAnchorElement absoluteLinkURL]): new method to get the absolute NSURL
        (-[DOMHTMLAreaElement absoluteLinkURL]): ditto
        (-[DOMHTMLLinkElement absoluteLinkURL]): ditto
        (-[DOMHTMLInputElement absoluteImageURL]): new method to get the absolute image location as an NSURL
        (-[DOMHTMLImageElement absoluteImageURL]): ditto
        (-[DOMHTMLObjectElement absoluteImageURL]): ditto
        * bindings/objc/DOMPrivate.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge getInnerNonSharedNode:innerNode:URLElement:atPoint:]):
        (-[WebCoreFrameBridge isPointInsideSelection:]):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::prepareMouseEvent):
        (WebCore::DocumentImpl::backslashAsCurrencySymbol):
        * dom/DocumentImpl.h:
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::hitTest):
        * rendering/render_object.h:
        (WebCore::RenderObject::NodeInfo::URLElement):
        (WebCore::RenderObject::NodeInfo::setURLElement):

2006-03-01  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/css/hover-subselector.html

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7327
          REGRESSION (r12869): :hover subselector does not work in quirks mode

        * css/cssstyleselector.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkSelector): Pass flag to indicate sub-selector.
        (WebCore::CSSStyleSelector::checkOneSelector): Apply the *:hover and *:active quirks only
        when there are no sub-selectors.

2006-03-01  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Hyatt.

        - fix win32 build (and make dumprendertree run)

        * kwq/KWQComboBox.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (QTextEdit::selectionEnd):
        (Widget::~Widget):
        (GraphicsContext::beginTransparencyLayer):
        (QComboBox::populate):
        (GraphicsContext::drawConvexPolygon):
        (QFontMetrics::selectionRectForText):
        (GraphicsContext::setShadow):
        (GraphicsContext::clearFocusRing):
        (GraphicsContext::drawImageInRect):
        (KWQFileButton::setFilename):
        (KWQFileButton::focusPolicy):
        (KWQFileButton::frameGeometry):
        (QSlider::focusPolicy):
        (WebCore::GraphicsContext::font):
        (QTextEdit::setWritingDirection):
        (QFontMetrics::checkSelectionPoint):
        (QFontMetrics::isFixedPitch):
        (WebCore::TransferJob::addMetaData):

2006-02-28  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=7444
          move QPainter to platform directory and name it GraphicsContext

        * platform/GraphicsContext.h: Added.
        * platform/TextDirection.h: Added.
        * platform/cg/GraphicsContextCG.cpp: Added.
        * platform/mac/GraphicsContextMac.mm: Added.

        * kwq/KWQPainter.h: Removed.
        * kwq/KWQPainter.mm: Removed.
        * ForwardingHeaders/qpainter.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Updated for moved files.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for moved files.
        * platform/win/TemporaryLinkStubs.cpp: Updated.

        * bridge/mac/MacFrame.mm: (WebCore::MacFrame::setDisplaysWithFocusAttributes):
        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge drawRect:]):
        * editing/SelectionController.h:
        * editing/SelectionController.cpp: (WebCore::SelectionController::paintCaret):
        * kcanvas/KCanvasResources.cpp: (WebCore::KCanvasMarker::draw):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::Context2D::putValueProperty):
        (KJS::drawPattern):
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::paintCaret):
        (WebCore::Frame::paintDragCaret):
        (WebCore::Frame::paint):
        (WebCore::Frame::adjustPageHeight):
        * page/FrameView.h:
        * platform/Font.h:
        * platform/Font.cpp:
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::drawHighlightForText):
        (WebCore::Font::drawText):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm: (WebCore::Widget::paint):
        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintAllMarkersOfType):
        (WebCore::InlineTextBox::paintMarkedTextUnderline):
        (WebCore::InlineTextBox::offsetForPosition):
        * rendering/RenderTableCell.cpp:
        (WebCore::outlineBox):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTableCell.h:
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::outlineBox):
        * rendering/render_box.h:
        * rendering/render_button.cpp:
        (WebCore::RenderButton::RenderButton):
        (WebCore::RenderButton::paintObject):
        * rendering/render_button.h:
        (WebCore::RenderButton::removeLeftoverAnonymousBoxes):
        * rendering/render_canvas.cpp:
        * rendering/render_canvasimage.cpp:
        (WebCore::RenderCanvasImage::paint):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::addFocusRingRects):
        (WebCore::RenderFlow::paintFocusRing):
        (WebCore::RenderFlow::paintOutlines):
        (WebCore::RenderFlow::paintOutlineForLine):
        * rendering/render_flow.h:
        * rendering/render_form.cpp:
        (WebCore::RenderLineEdit::setStyle):
        (WebCore::RenderFieldset::paintBorderMinusLegend):
        (WebCore::RenderSelect::setWidgetWritingDirection):
        (WebCore::RenderTextArea::setStyle):
        * rendering/render_form.h:
        (WebCore::RenderFieldset::renderName):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintScrollbars):
        (WebCore::RenderLayer::paint):
        (WebCore::setClip):
        (WebCore::restoreClip):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::Marquee::direction):
        * rendering/render_layer.h:
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintBackgrounds):
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        (WebCore::InlineFlowBox::paintDecorations):
        (WebCore::EllipsisBox::paint):
        * rendering/render_line.h:
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::drawBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::addFocusRingRects):
        (WebCore::RenderObject::paintOutline):
        (WebCore::RenderObject::selectionColor):
        * rendering/render_object.h:
        (WebCore::RenderObject::element):
        (WebCore::RenderObject::document):
        (WebCore::RenderObject::setNode):
        (WebCore::RenderObject::node):
        (WebCore::RenderObject::PaintInfo::PaintInfo):
        (WebCore::RenderObject::paintBoxDecorations):
        (WebCore::RenderObject::paintBackgroundExtended):
        (WebCore::RenderObject::printBoxDecorations):
        * rendering/render_replaced.cpp: (WebCore::RenderReplaced::selectionColor):
        * rendering/render_replaced.h:
        Updated to use GraphicsContext instead of QPainter.

        * css/cssstyleselector.cpp: (WebCore::CSSStyleSelector::applyProperty):
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm: (QComboBox::setWritingDirection):
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm: (QLineEdit::setWritingDirection):
        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm: (QListBox::setWritingDirection):
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm: (QTextEdit::setWritingDirection):
        * rendering/bidi.cpp:
        (khtml::bidiNext):
        (khtml::bidiFirst):
        Updated to use TextDirection instead of QPainter::TextDirection and EDirection.

        * kcanvas/device/KRenderingDevice.h: Added renderingDevice here to
        replace QPainter::renderingDevice for now.

        * khtml/ecma/kjs_html.h: Fixed comments to mention GraphicsContext.

        * khtml/html/html_imageimpl.h:
        * page/FrameView.cpp:
        * rendering/RenderBlock.cpp:
        Added include needed since I reduced includes elsewhere.

        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm: (QFontMetrics::checkSelectionPoint):
        Changed QChar* to be const QChar*.

        * platform/FontDescription.h: Added include that was missing.
        * rendering/render_theme.cpp: Ditto.

        * platform/Image.h: Removed unnecessary forward declaration of QPainter.

        * rendering/RenderText.h: Clean up types, use const.

        * rendering/render_style.h: Removed EDirection and replaced it with TextDirection.

        * kcanvas/KCanvasCreator.cpp:
        (WebCore::KCanvasCreator::createRoundedRectangle):
        (WebCore::KCanvasCreator::createRectangle):
        (WebCore::KCanvasCreator::createEllipse):
        (WebCore::KCanvasCreator::createLine):
        * kcanvas/KCanvasPath.cpp: (WebCore::operator<<):
        * kcanvas/KCanvasTreeDebug.cpp: (WebCore::operator<<):
        * kcanvas/RenderForeignObject.cpp: (WebCore::RenderForeignObject::paint):
        * kcanvas/RenderPath.cpp: (WebCore::RenderPath::paint):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::translateForAttributes):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::prepareFilter):
        (WebCore::KCanvasFilterQuartz::applyFilter):
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (WebCore::KCanvasMaskerQuartz::applyMask):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (WebCore::KCanvasContainerQuartz::paint):
        (WebCore::KCanvasClipperQuartz::applyClip):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::pushContext):
        (WebCore::KRenderingDeviceQuartz::popContext):
        (WebCore::renderingDevice):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::setup):
        (WebCore::KRenderingPaintServerGradientQuartz::renderPath):
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):
        * ksvg2/misc/KCanvasRenderingStyle.cpp: (WebCore::sharedSolidPaintServer):
        * ksvg2/svg/SVGAElementImpl.cpp: (SVGAElementImpl::createRenderer):
        * ksvg2/svg/SVGClipPathElementImpl.cpp: (SVGClipPathElementImpl::canvasResource):
        * ksvg2/svg/SVGFEBlendElementImpl.cpp: (SVGFEBlendElementImpl::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElementImpl.cpp: (SVGFEColorMatrixElementImpl::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElementImpl.cpp: (SVGFEComponentTransferElementImpl::filterEffect):
        * ksvg2/svg/SVGFECompositeElementImpl.cpp: (SVGFECompositeElementImpl::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElementImpl.cpp: (WebCore::SVGFEDiffuseLightingElementImpl::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElementImpl.cpp: (SVGFEDisplacementMapElementImpl::filterEffect):
        * ksvg2/svg/SVGFEFloodElementImpl.cpp: (SVGFEFloodElementImpl::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElementImpl.cpp: (SVGFEGaussianBlurElementImpl::filterEffect):
        * ksvg2/svg/SVGFEImageElementImpl.cpp: (SVGFEImageElementImpl::filterEffect):
        * ksvg2/svg/SVGFEMergeElementImpl.cpp: (SVGFEMergeElementImpl::filterEffect):
        * ksvg2/svg/SVGFEOffsetElementImpl.cpp: (SVGFEOffsetElementImpl::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElementImpl.cpp: (SVGFESpecularLightingElementImpl::filterEffect):
        * ksvg2/svg/SVGFETileElementImpl.cpp: (SVGFETileElementImpl::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElementImpl.cpp: (SVGFETurbulenceElementImpl::filterEffect):
        * ksvg2/svg/SVGFilterElementImpl.cpp: (SVGFilterElementImpl::canvasResource):
        * ksvg2/svg/SVGGElementImpl.cpp: (SVGGElementImpl::createRenderer):
        * ksvg2/svg/SVGGradientElementImpl.cpp: (SVGGradientElementImpl::canvasResource):
        * ksvg2/svg/SVGMarkerElementImpl.cpp:
        (WebCore::SVGMarkerElementImpl::canvasResource):
        (WebCore::SVGMarkerElementImpl::createRenderer):
        * ksvg2/svg/SVGMaskElementImpl.cpp:
        (WebCore::SVGMaskElementImpl::drawMaskerContent):
        (WebCore::SVGMaskElementImpl::createRenderer):
        (WebCore::SVGMaskElementImpl::canvasResource):
        * ksvg2/svg/SVGPathElementImpl.cpp: (WebCore::SVGPathElementImpl::toPathData):
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (WebCore::SVGPatternElementImpl::drawPatternContentIntoTile):
        (WebCore::SVGPatternElementImpl::createRenderer):
        (WebCore::SVGPatternElementImpl::canvasResource):
        * ksvg2/svg/SVGPolygonElementImpl.cpp: (SVGPolygonElementImpl::toPathData):
        * ksvg2/svg/SVGPolylineElementImpl.cpp: (SVGPolylineElementImpl::toPathData):
        * ksvg2/svg/SVGSVGElementImpl.cpp: (WebCore::SVGSVGElementImpl::createRenderer):
        * ksvg2/svg/SVGStyledElementImpl.cpp: (WebCore::SVGStyledElementImpl::createRenderer):
        * ksvg2/svg/SVGSwitchElementImpl.cpp: (SVGSwitchElementImpl::createRenderer):
        * ksvg2/svg/SVGUseElementImpl.cpp: (SVGUseElementImpl::createRenderer):
        Updated to use renderingDevice instead of QPainter::renderingDevice.

2006-02-28  Darin Adler  <darin@apple.com>

        - fixed part of the reason the build is broken

        * WebCore.xcodeproj/project.pbxproj: Updated project file.

2006-02-28  Darin Adler  <darin@apple.com>

        Rubber-stamped by Hyatt.

        - moved the WebCoreXXX files from kwq to appropriate directories

        No changes to the contents of the files.

        * WebCore.xcodeproj/project.pbxproj: Updated project file.
        * bridge/mac/WebCoreCache.h: Added.
        * bridge/mac/WebCoreCache.mm: Added.
        * bridge/mac/WebCoreEncodings.h: Added.
        * bridge/mac/WebCoreEncodings.mm: Added.
        * bridge/mac/WebCoreFrameNamespaces.h: Added.
        * bridge/mac/WebCoreFrameNamespaces.m: Added.
        * bridge/mac/WebCoreFrameView.h: Added.
        * bridge/mac/WebCoreJavaScript.h: Added.
        * bridge/mac/WebCoreJavaScript.mm: Added.
        * bridge/mac/WebCoreKeyboardAccess.h: Added.
        * bridge/mac/WebCoreResourceLoader.h: Added.
        * bridge/mac/WebCoreScriptDebugger.h: Added.
        * bridge/mac/WebCoreScriptDebugger.mm: Added.
        * bridge/mac/WebCoreSettings.h: Added.
        * bridge/mac/WebCoreSettings.mm: Added.
        * bridge/mac/WebCoreTextDecoder.h: Added.
        * bridge/mac/WebCoreTextDecoder.mm: Added.
        * bridge/mac/WebCoreViewFactory.h: Added.
        * bridge/mac/WebCoreViewFactory.m: Added.
        * bridge/mac/WebDashboardRegion.h: Added.
        * bridge/mac/WebDashboardRegion.m: Added.
        * kwq/WebCoreCache.h: Removed.
        * kwq/WebCoreCache.mm: Removed.
        * kwq/WebCoreCookieAdapter.h: Removed.
        * kwq/WebCoreCookieAdapter.m: Removed.
        * kwq/WebCoreEncodings.h: Removed.
        * kwq/WebCoreEncodings.mm: Removed.
        * kwq/WebCoreFrameNamespaces.h: Removed.
        * kwq/WebCoreFrameNamespaces.m: Removed.
        * kwq/WebCoreFrameView.h: Removed.
        * kwq/WebCoreGraphicsBridge.h: Removed.
        * kwq/WebCoreGraphicsBridge.m: Removed.
        * kwq/WebCoreHistory.h: Removed.
        * kwq/WebCoreHistory.m: Removed.
        * kwq/WebCoreImageRenderer.h: Removed.
        * kwq/WebCoreImageRendererFactory.h: Removed.
        * kwq/WebCoreImageRendererFactory.m: Removed.
        * kwq/WebCoreJavaScript.h: Removed.
        * kwq/WebCoreJavaScript.mm: Removed.
        * kwq/WebCoreKeyGenerator.h: Removed.
        * kwq/WebCoreKeyGenerator.m: Removed.
        * kwq/WebCoreKeyboardAccess.h: Removed.
        * kwq/WebCoreResourceLoader.h: Removed.
        * kwq/WebCoreScriptDebugger.h: Removed.
        * kwq/WebCoreScriptDebugger.mm: Removed.
        * kwq/WebCoreSettings.h: Removed.
        * kwq/WebCoreSettings.mm: Removed.
        * kwq/WebCoreTextDecoder.h: Removed.
        * kwq/WebCoreTextDecoder.mm: Removed.
        * kwq/WebCoreTextRenderer.h: Removed.
        * kwq/WebCoreTextRendererFactory.h: Removed.
        * kwq/WebCoreTextRendererFactory.mm: Removed.
        * kwq/WebCoreView.h: Removed.
        * kwq/WebCoreView.m: Removed.
        * kwq/WebCoreViewFactory.h: Removed.
        * kwq/WebCoreViewFactory.m: Removed.
        * kwq/WebDashboardRegion.h: Removed.
        * kwq/WebDashboardRegion.m: Removed.
        * platform/mac/WebCoreCookieAdapter.h: Added.
        * platform/mac/WebCoreCookieAdapter.m: Added.
        * platform/mac/WebCoreGraphicsBridge.h: Added.
        * platform/mac/WebCoreGraphicsBridge.m: Added.
        * platform/mac/WebCoreHistory.h: Added.
        * platform/mac/WebCoreHistory.m: Added.
        * platform/mac/WebCoreImageRenderer.h: Added.
        * platform/mac/WebCoreImageRendererFactory.h: Added.
        * platform/mac/WebCoreImageRendererFactory.m: Added.
        * platform/mac/WebCoreKeyGenerator.h: Added.
        * platform/mac/WebCoreKeyGenerator.m: Added.
        * platform/mac/WebCoreTextRenderer.h: Added.
        * platform/mac/WebCoreTextRendererFactory.h: Added.
        * platform/mac/WebCoreTextRendererFactory.mm: Added.
        * platform/mac/WebCoreView.h: Added.
        * platform/mac/WebCoreView.m: Added.

2006-02-28  David Hyatt  <hyatt@apple.com>

        Fold QFont into Font and eliminate QFont completely.

        Reviewed by eric

        * ForwardingHeaders/qfont.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMElement _font]):
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::attributedString):
        (WebCore::MacFrame::fontForSelection):
        (WebCore::MacFrame::fontAttributesForSelectionStart):
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::recalcStyle):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::updateValue):
        * kwq/KWQAccObject.mm:
        (AXAttributeStringSetStyle):
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::setFont):
        * kwq/KWQFont.h: Removed.
        * kwq/KWQFont.mm: Removed.
        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm:
        (QFontMetricsPrivate::QFontMetricsPrivate):
        (QFontMetricsPrivate::~QFontMetricsPrivate):
        (QFontMetricsPrivate::getRenderer):
        (QFontMetricsPrivate::fontDescription):
        (QFontMetricsPrivate::setFontDescription):
        (QFontMetricsPrivate::getWebCoreFont):
        (QFontMetricsPrivate::isFixedPitch):
        (QFontMetricsPrivate::determinePitch):
        (QFontMetrics::QFontMetrics):
        (QFontMetrics::setFontDescription):
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::selectionRectForText):
        (QFontMetrics::checkSelectionPoint):
        (QFontMetrics::getWebCoreFont):
        (QFontMetrics::isFixedPitch):
        * kwq/KWQKHTMLSettings.h:
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (-[NSSearchField _addStringToRecentSearches:]):
        (QLineEdit::setFont):
        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm:
        (QListBox::sizeForNumberOfLines):
        (QListBox::setFont):
        (-[KWQTableView drawRow:clipRect:]):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::font):
        (WebCore::QPainter::setFont):
        (WebCore::QPainter::fontMetrics):
        (WebCore::QPainter::_updateRenderer):
        (WebCore::QPainter::drawText):
        (WebCore::QPainter::drawHighlightForText):
        * kwq/KWQSlider.h:
        * kwq/KWQSlider.mm:
        (QSlider::setFont):
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm:
        (QTextEdit::setFont):
        * platform/Font.cpp:
        (khtml::Font::update):
        * platform/Font.h:
        (WebCore::):
        (WebCore::Font::m_wordSpacing):
        (WebCore::Font::Font):
        (WebCore::Font::operator==):
        (WebCore::Font::operator!=):
        (WebCore::Font::fontMetrics):
        (WebCore::Font::pixelSize):
        (WebCore::Font::size):
        (WebCore::Font::letterSpacing):
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        (WebCore::Font::isFixedPitch):
        (WebCore::Font::isPrinterFont):
        (WebCore::Font::firstFamily):
        (WebCore::Font::family):
        (WebCore::Font::italic):
        (WebCore::Font::weight):
        (WebCore::Font::getNSFamily):
        (WebCore::Font::getNSFont):
        (WebCore::Font::getWebCoreFont):
        * platform/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        * platform/FontFamily.h:
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::font):
        (WebCore::Widget::setFont):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::cacheWidths):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::calcMinMaxWidth):
        (WebCore::RenderText::font):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        * rendering/bidi.cpp:
        (khtml::RenderBlock::computeHorizontalPositionsForLine):
        (khtml::RenderBlock::findNextLineBreak):
        * rendering/render_br.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::lineHeight):
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::setStyle):
        (WebCore::RenderFormElement::addIntrinsicMarginsIfAllowed):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::paintDecorations):
        (WebCore::EllipsisBox::paint):
        * rendering/render_list.cpp:
        (RenderListMarker::paint):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::getVerticalPosition):
        (WebCore::RenderObject::lineHeight):
        * rendering/render_object.h:
        (WebCore::RenderObject::font):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::setStyle):
        * rendering/render_style.h:
        (khtml::RenderStyle::fontSize):
        (khtml::RenderStyle::fontMetrics):
        (khtml::RenderStyle::wordSpacing):
        (khtml::RenderStyle::letterSpacing):
        (khtml::RenderStyle::setFontDescription):
        (khtml::RenderStyle::setWordSpacing):
        (khtml::RenderStyle::setLetterSpacing):

2006-02-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - remove obsolete WebCoreScrollView class

        * WebCore.exp: Remove WebCoreScrollView class name.

        * kwq/WebCoreScrollView.h: Removed.
        * kwq/WebCoreScrollView.m: Removed.
        * WebCore.xcodeproj/project.pbxproj: Remove WebCoreScrollView source files.

        * kwq/KWQListBox.mm: (-[KWQListBoxScrollView autoforwardsScrollWheelEvents]): Added.
        * kwq/KWQTextArea.h: Change base class to NSScrollView instead of WebCoreScrollView.
        * kwq/KWQTextArea.mm: (-[KWQTextAreaTextView autoforwardsScrollWheelEvents]): Ditto.

2006-02-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix spacing/style on several of the stubs.
        Reorganize stubs, separating empty stubs.
        Remove the abort from certain stubs blocking DRT.
        Add a virtual setView call to Frame baseclass.

        * bridge/mac/MacFrame.h: mark setView virtual
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::attach): remove no-renderer hack
        * page/Frame.cpp:
        (WebCore::Frame::view): fix spacing
        (WebCore::Frame::setView): added.
        * page/Frame.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (notImplemented): make break directly into debugger.
        Moved, modified several other stubs not mentioned here.

2006-02-28  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://bugs.webkit.org/show_bug.cgi?id=6647>
        TinyMCE: document.execCommand("insertHTML", ...) unimplemented

        * editing/jsediting.cpp:

2006-02-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - make win32 DumpRenderTree run without crashing
        http://bugs.webkit.org/show_bug.cgi?id=7511

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/BrowserExtensionWin.h: Added.
        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin): Initialize browser
        extension and settings.
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::attach): Don't create renderers 
        for now.
        * dom/EventNames.cpp:
        (WebCore::EventNames::init): use placement new even when
        not avoiding static constructors.
        * khtml/html/htmlnames.cpp:
        (WebCore::HTMLNames::init): ditto
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init): ditto
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedName): Added default
        constructor but only in ifdef.
        * page/Frame.h:
        * platform/AtomicString.cpp:
        (WebCore::AtomicString::init): use placement new even when
        not avoiding static constructors
        * platform/StaticConstructors.h: don't initialize when
        not avoiding static constructors, just default construct
        and let initialization happen normally
        * platform/win/TemporaryLinkStubs.cpp: Stub out some more things
        (Cursor::~Cursor):
        (QFont::~QFont):
        (QFontMetrics::~QFontMetrics):
        (WebCore::FrameWin::restoreDocumentState):
        (WebCore::FrameWin::partClearedInBegin):
        (WebCore::FrameWin::createEmptyDocument):
        (WebCore::BrowserExtensionWin::getHistoryLength):
        (WebCore::BrowserExtensionWin::canRunModal):
        (WebCore::BrowserExtensionWin::openURLNotify):
        (WebCore::BrowserExtensionWin::canRunModalNow):
        (WebCore::BrowserExtensionWin::runModal):
        (WebCore::BrowserExtensionWin::goBackOrForward):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove abort() from constructors to allow DRT to run.

        * platform/win/TemporaryLinkStubs.cpp:
        (QFont::QFont):
        (QFontMetrics::QFontMetrics):

2006-02-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=6893> 
        REGRESSION: Major bug with TinyMCE, no value submitted from textarea
        <rdar://problem/3465857> value from textarea form field inside of hidden div isn't submitted
        <rdar://problem/3968059> Textarea with hard-wrap: pre-filled text doesn't get hard-wrapped
        
        Canonicalize line endings in textareas to avoid the workarounds that were a source of bugs,
        Also call textWithHardLineWraps inside appendFormData (and nowhere else) if wrap="hard".

        * khtml/html/HTMLTextAreaElementImpl.cpp:
        (WebCore::HTMLTextAreaElementImpl::HTMLTextAreaElementImpl):
        (WebCore::HTMLTextAreaElementImpl::select):
        (WebCore::HTMLTextAreaElementImpl::appendFormData):
        (WebCore::HTMLTextAreaElementImpl::rendererWillBeDestroyed):
        (WebCore::HTMLTextAreaElementImpl::updateValue):
        (WebCore::HTMLTextAreaElementImpl::value):
        (WebCore::HTMLTextAreaElementImpl::setValue):
        (WebCore::HTMLTextAreaElementImpl::defaultValue):
        * khtml/html/HTMLTextAreaElementImpl.h:
        (DOM::HTMLTextAreaElementImpl::invalidateValue):
        * kwq/KWQTextArea.h:
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView textDidChange:]):
        (-[KWQTextAreaTextView text]):
        (-[KWQTextAreaTextView textWithHardLineBreaks]):
        (-[KWQTextAreaTextView setSelectedRange:]):
        (-[KWQTextAreaTextView selectedRange]):
        (-[KWQTextAreaTextView getCursorPositionAsIndex:inParagraph:]):
        (RangeOfParagraph):
        (-[KWQTextAreaTextView textView:shouldChangeTextInRange:replacementString:]):
        * rendering/render_form.cpp:
        (WebCore::RenderTextArea::destroy):
        (WebCore::RenderTextArea::updateFromElement):
        (WebCore::RenderTextArea::text):
        (WebCore::RenderTextArea::textWithHardLineBreaks):
        * rendering/render_form.h:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Copy missing dlls to build directory.

        * Viewer.cpp: fix line endings
        * Viewer/ImageView.cpp: fix line endings
        * Viewer/stdafx.cpp: fix line endings
        * WebCore.vcproj/WebCore/build-generated-files.sh:

2006-02-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: added to fast/dom/css-selectorText.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7338
          Incorrect selectorText for multiple subselectors.

        * css/css_base.cpp:
        (CSSSelector::selectorText): Iterate over subselectors

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - write a portable ICU version of TextEncoding::fromUnicode for use on win32

        * platform/StreamingTextDecoder.h:
        * platform/TextEncoding.cpp:
        (WebCore::TextEncoding::fromUnicode): added
        (WebCore::getConverter): helper
        (WebCore::cacheConverter): ditto
        (WebCore::effectiveEncoding): ditto
        * platform/mac/TextEncodingMac.cpp: Add comment
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::TextEncoding::fromUnicode): remove

2006-02-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/text/in-rendered-text-rtl.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7433
          REGRESSION (r12789): Second RTL text run on a line cannot be selected

        * dom/dom_position.cpp:
        (WebCore::Position::inRenderedText): If the RenderText contains
        reversed text, the text boxes are not necessarily ordered by start
        position, so iterate through all of them.
        (WebCore::Position::isRenderedCharacter): Ditto.

2006-02-27  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin.

        - Fix for http://bugs.webkit.org/show_bug.cgi?id=7321
        REGRESSION: style tag in body causes two head elements to appear in the DOM

        * khtml/html/htmlparser.cpp: Handle the head node like form and map nodes.
        (WebCore::HTMLParser::parseToken):
        (WebCore::HTMLParser::headCreateErrorCheck):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add stub to make DRT link.
        Make WebCore copy libxml.dll into build directory when building.

        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::TextEncoding::fromUnicode):

2006-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix regression in layout tests

        * dom/dom_elementimpl.cpp: (WebCore::StyledElementImpl::addCSSLength):
        Fix some code that was not properly truncating. I broke it in my
        string change this morning. 

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - add stubs for FrameWin overrides of pure virtual Frame methods

        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::FrameWin::respondToChangedContents):
        (WebCore::FrameWin::unfocusWindow):
        (WebCore::FrameWin::locationbarVisible):
        (WebCore::FrameWin::respondToChangedSelection):
        (WebCore::FrameWin::clearUndoRedoOperations):
        (WebCore::FrameWin::issueRedoCommand):
        (WebCore::FrameWin::canRedo):
        (WebCore::FrameWin::restoreDocumentState):
        (WebCore::FrameWin::canUndo):
        (WebCore::FrameWin::overrideMediaType):
        (WebCore::FrameWin::saveDocumentState):
        (WebCore::FrameWin::print):
        (WebCore::FrameWin::issueCutCommand):
        (WebCore::FrameWin::issueCopyCommand):
        (WebCore::FrameWin::partClearedInBegin):
        (WebCore::FrameWin::issueUndoCommand):
        (WebCore::FrameWin::clearRecordedFormValues):
        (WebCore::FrameWin::issuePasteCommand):
        (WebCore::FrameWin::markedTextRange):
        (WebCore::FrameWin::shouldChangeSelection):
        (WebCore::FrameWin::scheduleClose):
        (WebCore::FrameWin::menubarVisible):
        (WebCore::FrameWin::personalbarVisible):
        (WebCore::FrameWin::createEmptyDocument):
        (WebCore::FrameWin::lastEventIsMouseUp):
        (WebCore::FrameWin::statusbarVisible):
        (WebCore::FrameWin::toolbarVisible):
        (WebCore::FrameWin::issueTransposeCommand):
        (WebCore::FrameWin::userAgent):
        (WebCore::FrameWin::canPaste):
        (WebCore::FrameWin::incomingReferrer):
        (WebCore::FrameWin::canGoBackOrForward):
        (WebCore::FrameWin::issuePasteAndMatchStyleCommand):
        (WebCore::FrameWin::handledOnloadEvents):
        (WebCore::FrameWin::generateFrameName):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add constructor and destructor. 

        * bridge/win/FrameWin.cpp:
        (WebCore::FrameWin::FrameWin):
        (WebCore::FrameWin::~FrameWin):

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric (sorta).

        - add return values where needed

        * platform/win/TemporaryLinkStubs.cpp:
        (KWQServeRequest):
        (KWQServeSynchronousRequest):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add a couple more stubs to make Win32 link.

        * platform/win/TemporaryLinkStubs.cpp:
        (KWQServeSynchronousRequest):
        (WebCore::FrameView::topLevelWidget):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Move mac-specific logging logic up into WebCore (from JavaScriptCore).
        Remove KWQ prefixes from default log channels.
        http://bugs.webkit.org/show_bug.cgi?id=7503

        * bridge/mac/WebCorePageBridge.mm:
        (initializeLogChannel):
        (initializeLoggingChannelsIfNecessary):
        (-[WebCorePageBridge init]):
        * page/Frame.h:
        * platform/Logging.cpp:
        * platform/Logging.h:

2006-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4104575> hang due to slow saveDocumentState method

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge saveDocumentState]):
        Change code that iterates a QStringList with indices to use iterator instead.

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - portable version of QString::utf8

        * platform/QString.cpp:
        (QString::utf8): moved here, rewritten to use TextCodec
        * platform/mac/QStringMac.mm:
        (QString::utf8): removed from here

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Fix FrameWin.h to use consistant line endings.
        Fix TemporaryLinkStubs to better match style guidelines.

        * bridge/win/FrameWin.h:
        (WebCore::Win):
        * platform/win/TemporaryLinkStubs.cpp:
        (QLineEdit::selectAll):
        (QPainter::save):
        (Widget::enableFlushDrawing):
        (QPainter::drawHighlightForText):
        (QFont::setPrinterFont):
        (QTextEdit::textWithHardLineBreaks):
        (Widget::mapFromGlobal):
        (QPainter::addClip):
        (QLineEdit::cursorPosition):
        (QPainter::setPen):
        (QPainter::selectedTextBackgroundColor):
        (QPainter::fontMetrics):
        (Widget::show):
        (QFont::setItalic):
        (QSlider::setValue):
        (QLineEdit::addSearchResult):
        (KWQFileButton::click):
        (QLineEdit::setWritingDirection):
        (QPainter::drawFocusRing):
        (KWQFileButton::sizeForCharacterWidth):
        (QTextEdit::sizeWithColumnsAndRows):
        (QComboBox::clear):
        (QPainter::misspellingLineThickness):
        (QComboBox::setFrameGeometry):
        (QLineEdit::maxLength):
        (Widget::isEnabled):
        (KWQServeRequest):
        (QTextEdit::setText):
        (Widget::paint):
        (QPainter::addRoundedRectClip):
        (FrameView::viewportToGlobal):
        (QTextEdit::selectionEnd):
        (QFont::determinePitch):
        (QTextEdit::setScrollBarModes):
        (QPainter::drawEllipse):
        (QTextEdit::setReadOnly):
        (QListBox::appendItem):
        (QLineEdit::setPlaceholderString):
        (Cursor::Cursor):
        (Widget::focusPolicy):
        (ScrollView::removeChild):
        (QTextEdit::selectAll):
        (QPainter::fillRect):
        (QPainter::endTransparencyLayer):
        (QFont::QFont):
        (ScrollView::addChild):
        (QTextEdit::setDisabled):
        (QScrollBar::scroll):
        (Widget::~Widget):
        (QPainter::xForm):
        (QListBox::sizeForNumberOfLines):
        (ScrollView::resizeContents):
        (QLineEdit::selectionStart):
        (QLineEdit::QLineEdit):
        (FrameView::updateBorder):
        (QLineEdit::hasSelectedText):
        (QScrollBar::QScrollBar):
        (QListBox::doneAppendingItems):
        (QTextEdit::QTextEdit):
        (ScrollView::inWindow):
        (QScrollBar::setValue):
        (QFont::setFirstFamily):
        (QTextEdit::hasSelectedText):
        (QTextEdit::selectionStart):
        (QFont::setWeight):
        (ScrollView::scrollXOffset):
        (QListBox::isSelected):
        (QLineEdit::setReadOnly):
        (QPainter::drawLineForText):
        (QPainter::QPainter):
        (QComboBox::~QComboBox):
        (QComboBox::focusPolicy):
        (QPainter::drawImageAtPoint):
        (QPainter::clearShadow):
        (QTextEdit::setLineHeight):
        (QScrollBar::setKnobProportion):
        (KWQFileButton::KWQFileButton):
        (QFontMetrics::boundingRect):
        (QTextEdit::setSelectionStart):
        (QPainter::beginTransparencyLayer):
        (QFontMetrics::setFont):
        (QComboBox::setFont):
        (Widget::frameGeometry):
        (QListBox::setSelected):
        (QPainter::addFocusRingRect):
        (QTextEdit::setCursorPosition):
        (QPainter::restore):
        (QFontMetrics::width):
        (Widget::setEnabled):
        (QTextEdit::setSelectionEnd):
        (QComboBox::populate):
        (ScrollView::setStaticBackground):
        (QPainter::font):
        (QTextEdit::setAlignment):
        (QLineEdit::setCursorPosition):
        (QPainter::drawText):
        (QPainter::pen):
        (KJavaAppletWidget::KJavaAppletWidget):
        (QFontMetrics::descent):
        (QListBox::QListBox):
        (QFontMetrics::ascent):
        (QLineEdit::selectedText):
        (Widget::setIsSelected):
        (QLineEdit::text):
        (Widget::unlockDrawingFocus):
        (QLineEdit::setLiveSearch):
        (QPainter::paintingDisabled):
        (QComboBox::QComboBox):
        (QPainter::drawConvexPolygon):
        (Widget::setFont):
        (QSlider::setMaxValue):
        (Widget::lockDrawingFocus):
        (QPainter::drawLine):
        (QPainter::setBrush):
        (QTextEdit::setSelectionRange):
        (ScrollView::scrollPointRecursively):
        (QLineEdit::sizeForCharacterWidth):
        (Cursor::~Cursor):
        (QFontMetrics::selectionRectForText):
        (ScrollView::suppressScrollBars):
        (QFontMetrics::checkSelectionPoint):
        (QTextEdit::getCursorPosition):
        (FrameView::isFrameView):
        (QScrollBar::setSteps):
        (QLineEdit::setMaxLength):
        (Widget::setCursor):
        (QLineEdit::setAutoSaveName):
        (QComboBox::baselinePosition):
        (QComboBox::appendItem):
        (QPainter::setShadow):
        (QTextEdit::setWritingDirection):
        (Widget::setDrawingAlpha):
        (QSlider::QSlider):
        (ScrollView::setVScrollBarMode):
        (QPainter::drawScaledAndTiledImage):
        (ScrollView::scrollYOffset):
        (QPainter::drawImage):
        (QComboBox::setCurrentItem):
        (QFontMetrics::height):
        (QComboBox::setWritingDirection):
        (ScrollView::setScrollBarsMode):
        (QComboBox::sizeHint):
        (QPainter::drawRect):
        (QFont::setPixelSize):
        (Widget::setFrameGeometry):
        (QLineEdit::setSelection):
        (QLineEdit::setMaxResults):
        (QListBox::clear):
        (QLineEdit::edited):
        (QPainter::drawTiledImage):
        (QPainter::clearFocusRing):
        (QFont::operator==):
        (Widget::Widget):
        (QTextEdit::text):
        (QPainter::drawImageInRect):
        (QPainter::setFont):
        (Widget::disableFlushDrawing):
        (QPainter::initFocusRing):
        (QSlider::setMinValue):
        (QTextEdit::setWordWrap):
        (QPainter::drawLineForMisspelling):
        (QLineEdit::setText):
        (QSlider::value):
        (QListBox::setSelectionMode):
        (KWQFileButton::setFilename):
        (QFontMetrics::QFontMetrics):
        (QFontMetrics::lineSpacing):
        (QLineEdit::setEdited):
        (QComboBox::frameGeometry):
        (QListBox::setWritingDirection):
        (QLineEdit::setAlignment):
        (ScrollView::updateContents):
        (QFontMetrics::floatWidth):
        (ScrollView::setHScrollBarMode):
        (KWQFileButton::focusPolicy):
        (QListBox::setFont):
        (QLineEdit::checksDescendantsForFocus):
        (KWQFileButton::baselinePosition):
        (QSlider::~QSlider):
        (KWQFileButton::setFrameGeometry):
        (QListBox::~QListBox):
        (KWQFileButton::frameGeometry):
        (QTextEdit::setFont):
        (QLineEdit::setFont):
        (KWQFileButton::~KWQFileButton):
        (QTextEdit::focusPolicy):
        (QSlider::focusPolicy):
        (QSlider::setFont):
        (QListBox::setEnabled):
        (QListBox::checksDescendantsForFocus):
        (QListBox::focusPolicy):
        (QLineEdit::baselinePosition):
        (QSlider::sizeHint):
        (QLineEdit::~QLineEdit):
        (QTextEdit::~QTextEdit):
        (QTextEdit::checksDescendantsForFocus):
        (QLineEdit::focusPolicy):
        (QScrollBar::~QScrollBar):
        (Path::operator=):
        (QLineEdit::setColors):
        (QTextEdit::setColors):
        (searchableIndexIntroduction):
        (KWQKCookieJar::setCookie):
        (KWQKCookieJar::cookie):
        (WebCore::screenRect):
        (WebCore::Widget::clearFocus):
        (WebCore::historyContains):
        (KWQFindNextSentenceFromIndex):
        (KWQFindSentenceBoundary):
        (KWQFindNextWordFromIndex):
        (KWQFindWordBoundary):
        (submitButtonDefaultLabel):
        (inputElementAltText):
        (resetButtonDefaultLabel):
        (KWQKCookieJar::cookieEnabled):
        (WebCore::Widget::setFocus):
        (WebCore::QPainter::fillRect):
        (WebCore::QPainter::~QPainter):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::TransferJob::kill):
        (WebCore::TransferJob::addMetaData):
        (WebCore::TransferJob::queryMetaData):
        (WebCore::TransferJob::error):
        (WebCore::TransferJob::errorText):
        (WebCore::TransferJob::isErrorPage):
        (WebCore::TransferJob::TransferJob):
        (WebCore::Widget::hide):
        (KLocale::language):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::screenDepth):
        (QFont::italic):
        (QFontMetrics::operator=):
        (QFontMetrics::xHeight):
        (WebCore::usableScreenRect):
        (QFont::operator=):
        (Widget::setActiveWindow):
        (KWQCheckIfReloading):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):
        (KWQCheckCacheObjectStatus):

2006-02-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=6844>
        elementAtPoint returns the list when the point is over a list marker
        
        Consider the case of outside list markers in nodeAtPoint.  Had to pull 
        the code out of RenderListMarker::paint that computed the position/size 
        of the list marker.

        Added:
        * fast/events/onclick-list-marker.html

        * rendering/render_list.cpp:
        (RenderListItem::nodeAtPoint):
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::paint):
        (RenderListMarker::nodeAtPoint):
        (RenderListMarker::getRelativeMarkerRect):
        * rendering/render_list.h:
        * rendering/render_object.h:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by timo.

        Fix xcode project after previous KWQLogging move.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Logging.h:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by timo.

        Move KWQLogging to platform and rename as Logging.*, fix headers.
        This will break the mac build, which I will fix on my next commit.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * dom/DocumentImpl.cpp:
        * dom/dom_position.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/VisiblePosition.cpp:
        * editing/markup.cpp:
        * khtml/ecma/kjs_window.cpp:
        * kwq/KWQLogging.h: Removed.
        * kwq/KWQLogging.m: Removed.
        * kwq/KWQRegExp.cpp:
        * kwq/KWQTextStream.cpp:
        * platform/Logging.cpp: Added.
        * platform/Logging.h: Added.
        * platform/QString.cpp:
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::ScrollView::vScrollBarMode):
        (WebCore::theme):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Fix a bunch more link errors in the win32 build, mostly by adding stubs.

        * WebCore.vcproj/WebCore/WebCore.vcproj: add JSXMLHttpRequest and PlugInInfoStore
        * WebCore.vcproj/WebCore/build-generated-files.sh: update for JSXMLHttpRequest
        * khtml/ecma/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty): fix switch to compile
        * platform/PlugInInfoStore.h:
        * platform/mac/PlugInInfoStoreMac.mm:
        * platform/win/TemporaryLinkStubs.cpp: add a bunch of stubs.
        (WebCore::TransferJob::errorText):
        (WebCore::TransferJob::isErrorPage):
        (WebCore::Widget::hide):
        (PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (PlugInInfoStore::pluginCount):
        (WebCore::refreshPlugins):
        (QFont::QFont):
        (QFont::~QFont):
        (QFont::italic):
        (QFont::weight):
        (QFontMetrics::QFontMetrics):
        (QFontMetrics::~QFontMetrics):
        (QFontMetrics::xHeight):
        (Widget::setActiveWindow):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::contentsHeight):
        (WebCore::ScrollView::contentsWidth):
        (WebCore::ScrollView::visibleHeight):
        (WebCore::ScrollView::visibleWidth):
        (WebCore::ScrollView::hScrollBarMode):
        (WebCore::ScrollView::vScrollBarMode):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by timo.

        Add missing include to fix build.

        * platform/win/TemporaryLinkStubs.cpp:

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Move KConfig to platform/PlugInInfoStore and add test.
        http://bugs.webkit.org/show_bug.cgi?id=7498

        Test: plugins/plugin-javascript-access.html

        * ForwardingHeaders/kconfig.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::PluginBase::PluginBase):
        * khtml/ecma/kjs_window.cpp:
        * kwq/KWQKConfigBase.h: Removed.
        * kwq/KWQKConfigBase.mm: Removed.
        * platform/PlugInInfoStore.h: Added.
        * platform/mac/PlugInInfoStoreMac.mm: Added.
        (WebCore::PlugInInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PlugInInfoStore::pluginCount):
        (WebCore::refreshPlugins):

2006-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        * platform/win/TemporaryLinkStubs.cpp: Added more stubs.

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Reworked KConfig and plugin architecture to be much more sane.
        This is part one.  Once this lands, I'll move it under platform with a better name.

        Darin had several great suggested further improvements as part of:
        http://bugs.webkit.org/show_bug.cgi?id=7451
        I'll make some of those when I move this to platform.

        No layout test possible (no way to control which plugins DRT sees).

        * khtml/ecma/kjs_navigator.cpp:
        (KJS::PluginBase::PluginBase):
        (KJS::PluginBase::~PluginBase):
        (KJS::PluginBase::refresh):
        (KJS::Plugins::getValueProperty):
        (KJS::Plugins::nameGetter):
        (KJS::Plugins::getOwnPropertySlot):
        (KJS::MimeTypes::getValueProperty):
        (KJS::MimeTypes::nameGetter):
        (KJS::MimeTypes::getOwnPropertySlot):
        (KJS::Plugin::getValueProperty):
        (KJS::Plugin::nameGetter):
        (KJS::Plugin::getOwnPropertySlot):
        * khtml/ecma/kjs_navigator.h:
        * khtml/ecma/kjs_window.cpp:
        * kwq/KWQKConfigBase.h:
        (WebCore::PluginInfoStore::PluginInfoStore):
        * kwq/KWQKConfigBase.mm:
        (WebCore::PluginInfoStore::createPluginInfoForPluginAtIndex):
        (WebCore::PluginInfoStore::pluginCount):
        (WebCore::refreshPlugins):

2006-02-27  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Build fix: cast to unsigned from size_t.

        * platform/StreamingTextDecoder.cpp:

2006-02-27  Maciej Stachowiak  <mjs@apple.com>
 
        Reviewed by Darin.

        - add Selection.cpp to win32 build
        http://bugs.webkit.org/show_bug.cgi?id=7490

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        - use proper header for std::min.

        * platform/StreamingTextDecoder.cpp:

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - add new TextEncoding stuff to win32 build
        http://bugs.webkit.org/show_bug.cgi?id=7491

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * platform/StreamingTextDecoder.cpp:
        (WebCore::StreamingTextDecoder::convertUTF16):
        * platform/TextEncoding.cpp:

2006-02-27  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed rendering/font.* and added platform/Font.*.

2006-02-27  Darin Adler  <darin@apple.com>

        * css/csshelper.cpp: (WebCore::parseURL): Actually, the second version was fine. Rolling
        back to that; apologies for the churn.

2006-02-27  Darin Adler  <darin@apple.com>

        * css/csshelper.cpp: (WebCore::parseURL): Third time's the charm.

2006-02-27  Darin Adler  <darin@apple.com>

        * css/csshelper.cpp: (WebCore::parseURL): Oops! Checked in fixed version of this file.

2006-02-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7486
          a first step in improving String/StringImpl API -- use "s" and "l" less

        * css/csshelper.cpp: (WebCore::parseURL): Use a local buffer rather than
        manipulating the characters directly inside a StringImpl buffer.

        * css/cssstyleselector.cpp: (WebCore::parseUASheet): Copy the data to parse
        it rather than going out of our way to hack StringImpl to not copy the data.
        It would be better not to copy, but this is one-time work.

        * dom/DOMImplementationImpl.cpp: (WebCore::DOMImplementationImpl::createDocument):
        * dom/dom2_viewsimpl.cpp: (DOM::AbstractViewImpl::getMatchedCSSRules):
        * dom/dom_elementimpl.cpp: (WebCore::StyledElementImpl::addCSSLength):
        * dom/dom_xmlimpl.cpp: (WebCore::EntityImpl::toString):
        * editing/CompositeEditCommand.cpp: (WebCore::CompositeEditCommand::deleteInsignificantText):
        * khtml/html/htmlparser.cpp: (WebCore::HTMLParser::handleError):
        * platform/AtomicString.cpp:
        (WebCore::CStringTranslator::equal):
        (WebCore::QCharBufferTranslator::equal):
        (WebCore::AtomicString::add):
        * platform/StringImpl.h:
        (WebCore::StringImpl::unicode): Added.
        (KXMLCore::CaseInsensitiveHash::hash): 
        (KXMLCore::CaseInsensitiveHash::equal):
        * rendering/InlineTextBox.cpp: (khtml::InlineTextBox::selectionStartEnd):
        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderText.cpp:
        (WebCore::getCharacterBreakIterator):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::atLineWrap):
        (WebCore::RenderText::allAscii):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        (WebCore::RenderText::containsOnlyWhitespace):
        (WebCore::RenderText::setSelectionState):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::width):
        (WebCore::RenderText::selectionRect):
        (WebCore::RenderText::caretMaxOffset):
        * rendering/RenderTextFragment.cpp:
        (khtml::RenderTextFragment::RenderTextFragment):
        (khtml::RenderTextFragment::originalString):
        Use length() instead of l, unicode() instead of s, and (*x)[] instead of x->s[].

        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Use const.
        (WebCore::endOfParagraph): Ditto.

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        - fix problem with a prototype that broke win32 build

        * platform/StreamingTextDecoder.h:
        (WebCore::StreamingTextDecoder::convert):

2006-02-27  Maciej Stachowiak  <mjs@apple.com>

        - fix debug build (broken by my last commit)

        * platform/StreamingTextDecoder.cpp:
        (WebCore::StreamingTextDecoder::createICUConverter):
        (WebCore::StreamingTextDecoder::convertUsingICU):

2006-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - platformize KWQTextCodec
        http://bugs.webkit.org/show_bug.cgi?id=7487
        
        I renamed QTextCodec to TextEncoding and QTextDecoder to
        StreamingTextDecoder. I also made a bunch of other changes to make
        the API more sensible.
        
        * ForwardingHeaders/qtextcodec.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge URLWithAttributeString:]):
        (-[WebCoreFrameBridge textEncoding]):
        (+[WebCoreFrameBridge stringWithData:textEncoding:]):
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::completeURL):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDocument::getValueProperty):
        (KJS::DOMDocument::putValueProperty):
        * khtml/html/FormDataList.cpp:
        (DOM::FormDataList::FormDataList):
        (DOM::FormDataList::appendString):
        * khtml/html/FormDataList.h:
        * khtml/html/HTMLFormElementImpl.cpp:
        (WebCore::HTMLFormElementImpl::HTMLFormElementImpl):
        (WebCore::HTMLFormElementImpl::formData):
        * khtml/html/htmltokenizer.cpp:
        * khtml/misc/decoder.cpp:
        (Decoder::Decoder):
        (Decoder::setEncodingName):
        (Decoder::encodingName):
        (Decoder::decode):
        * khtml/misc/decoder.h:
        (khtml::Decoder::):
        (khtml::Decoder::visuallyOrdered):
        (khtml::Decoder::encoding):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::XSLTProcessorImpl::createDocumentFromSource):
        * kwq/KWQCharsets.cpp: Removed.
        * kwq/KWQCharsets.h: Removed.
        * kwq/KWQTextCodec.cpp: Removed.
        * kwq/KWQTextCodec.h: Removed.
        * kwq/WebCoreTextDecoder.h:
        * kwq/WebCoreTextDecoder.mm:
        * kwq/can-convert.mm: Removed.
        * kwq/character-sets.txt: Removed.
        * kwq/mac-encodings.txt: Removed.
        * kwq/make-charset-table.pl: Removed.
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        (WebCore::CachedCSSStyleSheet::setCharset):
        (WebCore::CachedCSSStyleSheet::data):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::setCharset):
        (WebCore::CachedScript::data):
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::setCharset):
        * page/Frame.cpp:
        (WebCore::Frame::write):
        (WebCore::Frame::gotoAnchor):
        (WebCore::Frame::encoding):
        (WebCore::Frame::backslashAsCurrencySymbol):
        * platform/CharsetNames.cpp: Added.
        (KXMLCore::):
        (WebCore::EncodingHash::equal):
        (WebCore::EncodingHash::hash):
        (WebCore::buildDictionaries):
        (WebCore::textEncodingIDFromCharsetName):
        (WebCore::charsetNameFromTextEncodingID):
        * platform/CharsetNames.h: Added.
        * platform/KURL.cpp:
        (KURL::KURL):
        (KURL::decode_string):
        (encodeRelativeString):
        * platform/KURL.h:
        * platform/QString.cpp:
        (QString::fromUtf8):
        * platform/StreamingTextDecoder.cpp: Added.
        (WebCore::StreamingTextDecoder::StreamingTextDecoder):
        (WebCore::StreamingTextDecoder::convertLatin1):
        (WebCore::StreamingTextDecoder::~StreamingTextDecoder):
        (WebCore::StreamingTextDecoder::convertUTF16):
        (WebCore::effectiveEncoding):
        (WebCore::StreamingTextDecoder::createICUConverter):
        (WebCore::unwanted):
        (WebCore::StreamingTextDecoder::appendOmittingUnwanted):
        (WebCore::StreamingTextDecoder::convertUsingICU):
        (WebCore::StreamingTextDecoder::convert):
        (WebCore::StreamingTextDecoder::toUnicode):
        * platform/StreamingTextDecoder.h: Added.
        (WebCore::StreamingTextDecoder::convert):
        * platform/TextEncoding.cpp: Added.
        (WebCore::TextEncoding::TextEncoding):
        (WebCore::TextEncoding::name):
        (WebCore::effectiveEncoding):
        (WebCore::TextEncoding::backslashAsCurrencySymbol):
        (WebCore::TextEncoding::toUnicode):
        * platform/TextEncoding.h: Added.
        (WebCore::):
        (WebCore::TextEncoding::):
        (WebCore::TextEncoding::TextEncoding):
        (WebCore::TextEncoding::isValid):
        (WebCore::TextEncoding::usesVisualOrdering):
        (WebCore::TextEncoding::isJapanese):
        (WebCore::TextEncoding::encodingID):
        (WebCore::TextEncoding::flags):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/character-sets.txt: Added.
        * platform/mac/ExtraCFEncodings.h: Added.
        * platform/mac/QStringMac.mm:
        * platform/mac/TextEncodingMac.cpp: Added.
        (WebCore::effectiveEncoding):
        (WebCore::TextEncoding::fromUnicode):
        * platform/mac/can-convert.mm: Added.
        * platform/mac/mac-encodings.txt: Added.
        * platform/make-charset-table.pl: Added.
        * platform/win/win-encodings.txt: Added.
        * rendering/render_object.cpp:
        (WebCore::RenderObject::backslashAsCurrencySymbol):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::slotData):

2006-02-27  Darin Adler  <darin@apple.com>

        - fix Windows build

        * platform/win/TemporaryLinkStubs.cpp: Change KIO::TransferJob to WebCore::TransferJob.

2006-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - merged Job and TransferJob into TransferJob and moved it to WebCore namespace
        - changed TransferJob to use a TransferJobClient object instead of signals

        * ForwardingHeaders/kio/job.h: Changed to point to "KWQKJobClasses.h".
        * kwq/KWQKJob.h: Removed.
        * kwq/TransferJobClient.h: Added.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for file changes.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * dom/xml_tokenizer.cpp: (WebCore::openFunc):
        * khtml/xsl/xslt_processorimpl.cpp: (DOM::docLoaderFunc):
        Use "new TransferJob" instead of "KIO::get" and "KIO::http_post".

        * kwq/KWQKJobClasses.h: Eliminate Job. Add a TransferJobClient* parameter to
        TransferJob. Eliminate the deliverAllData parameter to TransferJob constructor.
        Remove the signals from TransferJob.
        * kwq/KWQKJobClasses.mm:
        (WebCore::TransferJobPrivate::TransferJobPrivate): Store a client pointer.
        (WebCore::TransferJob::TransferJob): Store a client pointer, remove the
        deliverAllData boolean.
        (WebCore::TransferJob::receivedResponse): Added. Replaces the old emitReceivedResponse
        function; uses client instead of a signal.
        (WebCore::TransferJob::client): Added.

        * kwq/KWQLoader.h: Switched things to mention the WebCore namespace.
        Changed KIO::TransferJob to WebCore::TransferJob.
        * kwq/KWQLoader.mm: Ditto.

        * kwq/KWQObject.h:
        * kwq/KWQObject.cpp: Removed isKHTMLLoader.

        * kwq/KWQResourceLoader.h: Changed KIO::TransferJob to WebCore::TransferJob.
        * kwq/KWQResourceLoader.mm:
        (-[KWQResourceLoader receivedResponse:]): Call receivedResponse function on
        the job instead of emitReceivedResponse.
        (-[KWQResourceLoader redirectedToURL:]): Call receivedRedirect function on the
        client directly instead of emitRedirection on the job.
        (-[KWQResourceLoader addData:]): Call receivedData function on the
        client directly instead of emitData on the job.
        (-[KWQResourceLoader finishJobAndHandle:]): Call receivedAllData function on the
        client directly instead of emitResult on the job. Also fixed a potential memory leak
        where the handle was not released if the job was 0.

        * kwq/KWQSignal.h:
        * kwq/KWQSignal.cpp:
        * kwq/KWQSlot.h:
        * kwq/KWQSlot.cpp:
        Removed the job-related signals and slots.

        * loader/CachedObject.h: Removed unneeded declaration of TransferJob.

        * loader/loader.h:
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests): Use "new TransferJob" instead of "KIO::get".
        Also don't connect signals.
        (WebCore::Loader::receivedAllData): New name for slotFinished.
        (WebCore::Loader::receivedResponse): New name for slotReceivedResponse.
        (WebCore::Loader::receivedData): New name for slotData.
        (WebCore::Loader::cancelRequests): Changed KIO::Job to TransferJob.
        (WebCore::Loader::jobForRequest): Ditto.

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::didOpenURL): Use "new TransferJob" instead of "KIO::get" and
        "KIO::http_post". Also don't connect signals.
        (WebCore::Frame::receivedAllData): Renamed from slotFinished. Also slightly
        cleaned up the logic.
        (WebCore::Frame::receivedRedirect): Renamed from slotRedirection.
        * page/FramePrivate.h: Changed KIO::TransferJob to WebCore::TransferJob.

        * xml/xmlhttprequest.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Eliminate XMLHttpRequestQObject.
        (WebCore::XMLHttpRequest::send): Use "new TransferJob" instead of
        "KIO::get" and "KIO::http_post". Also don't connect signals.
        (WebCore::XMLHttpRequest::processSyncLoadResults): Change to call the functions
        by their new names (names changed to use with TransferJobClient).
        (WebCore::XMLHttpRequest::receivedAllData): Renamed from slotFinished.
        (WebCore::XMLHttpRequest::receivedRedirect): Renamed from slotRedirection.
        (WebCore::XMLHttpRequest::receivedData): Renamed from slotData.

2006-02-26  Darin Adler  <darin@apple.com>

        - try again after seeing errors from buildbot

        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):
        Add __APPLE__ ifdefs to two more uses of response.

2006-02-26  Darin Adler  <darin@apple.com>

        - try again after seeing errors from buildbot

        * loader/CachedObject.cpp: (WebCore::CachedObject::~CachedObject):
        * loader/CachedObject.h: (WebCore::CachedObject::CachedObject):
        * loader/loader.cpp:
        Add __APPLE__ ifdefs to calls to setResponse and setAllData.

        * platform/win/TemporaryLinkStubs.cpp: Add missing includes.

2006-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - more Win32 link fixes

        * loader/CachedObject.h: Put some Mac-specific stuff inside
        __APPLE__ ifdefs.
        * platform/win/TemporaryLinkStubs.cpp: Added more stubs.

2006-02-26  Darin Adler  <darin@apple.com>

        - try again after seeing errors from buildbot

        * platform/win/TemporaryLinkStubs.cpp: Added more includes.

2006-02-26  Darin Adler  <darin@apple.com>

        - try again after seeing errors from buildbot

        * platform/win/TemporaryLinkStubs.cpp: Added more includes.

2006-02-26  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - work toward getting the Win32 build to link

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added KWQObject.cpp.
        * platform/win/TemporaryLinkStubs.cpp: Added more stubs.

2006-02-24  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7440
        Floats not positioned correctly

        Test: fast/block/float/multiple-float-positioning.html

        * rendering/RenderBlock.cpp: 
        (WebCore::RenderBlock::positionNewFloats): Correct iteration of the float list

2006-02-24  Graham Dennis  <Graham.Dennis@gmail.com>

        <http://bugs.webkit.org/show_bug.cgi?id=6933>
        Selection extends beyond focus ring for some contentEditable divs

        Reviewed by justin

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot): Have root editable elements paint their
        own selection gaps.

2006-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix <rdar://problem/4456287> REGRESSION: assertion failure at mypage.apple.com
          in WebCore::TimerBase::nextFireInterval() const + 100 (Timer.cpp:188)

        Test: fast/dom/Window/redirect-with-timer.html

        * platform/Timer.h: Made isActive no longer inline. Added inHeap function.
        * platform/Timer.cpp: Changed assertions to use inHeap function for clarity.
        (WebCore::TimerBase::isActive): Return true for timers that are ready to fire.
        They have a next fire time of 0, but they should still be considered active.
        (WebCore::TimerBase::checkConsistency): Correct the consistency check. The new
        rule is that timers with a next fire time of 0 are not in the heap, and all other
        timers are.

2006-02-24  Graham Dennis  <Graham.Dennis@gmail.com>

        <http://bugs.webkit.org/show_bug.cgi?id=7245>
        caret does not display at the end of some lines in contenteditable divs

        Reviewed by justin

        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::setContentEditable):
        * page/Frame.cpp:
        (WebCore::Frame::applyEditingStyleToElement):
        (WebCore::Frame::removeEditingStyleFromElement):

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Move dom_qname to QualifiedName and dom_atomicstringlist to AtomicStringList.

        * WebCore+SVG/KDOMHeaders.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/css_base.h:
        * dom/AtomicStringList.h: Added.
        (WebCore::AtomicStringList::AtomicStringList):
        * dom/QualifiedName.cpp: Added.
        * dom/QualifiedName.h: Added.
        * dom/dom_atomicstringlist.h: Removed.
        * dom/dom_elementimpl.h:
        * dom/dom_qname.cpp: Removed.
        * dom/dom_qname.h: Removed.
        * editing/RemoveNodeAttributeCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * khtml/html/htmlnames.h:
        * khtml/html/htmltokenizer.h:
        * ksvg2/scripts/make_names.pl: update for new headers

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Made a few methods on frame pure virtual.
        Added a bunch of stub functions for win32 linking.

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::print):
        (WebCore::MacFrame::canUndo):
        (WebCore::MacFrame::canRedo):
        (WebCore::MacFrame::canPaste):
        * bridge/win/FrameWin.h:
        * page/Frame.h:
        * platform/win/TemporaryLinkStubs.cpp:
        (QTextEdit::sizeWithColumnsAndRows):
        (QLineEdit::maxLength):
        (QPainter::drawEllipse):
        (QTextEdit::setLineHeight):
        (QPainter::beginTransparencyLayer):
        (QLineEdit::selectedText):
        (Widget::setIsSelected):
        (QPainter::paintingDisabled):
        (QFontMetrics::selectionRectForText):
        (QTextEdit::getCursorPosition):
        (QSlider::QSlider):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::moveCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):

2006-02-24  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Hyatt, tweaked and landed by ggaren.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5146
          max-height/max-width not resizing images with correct aspect ratio

        This patch is a port and adaptation of Allan Sandfeld Jensen's (carewolf)
        patch of http://bugs.kde.org/show_bug.cgi?id=120107 with the needed
        modifications to suit the Webcore tree.  Makes images respect min/max 
        sizes and their intrinsic aspect ratios at the same time according to 
        CSS 2.1 (http://www.w3.org/TR/CSS21/visudet.html#min-max-widths).  

        Test: fast/replaced/maxheight-percent.html
        Test: fast/replaced/maxheight-pxs.html
        Test: fast/replaced/maxwidth-percent.html
        Test: fast/replaced/maxwidth-pxs.html
        Test: fast/replaced/minheight-percent.html
        Test: fast/replaced/minheight-pxs.html
        Test: fast/replaced/minwidth-percent.html
        Test: fast/replaced/minwidth-pxs.html

        * rendering/render_box.cpp:
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeight): 
        (WebCore::RenderBox::calcReplacedHeightUsing): Calculate percent heights correctly
        * rendering/render_image.cpp: Respect aspect ratios and calculate max/min
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        (WebCore::RenderImage::calcAspectRatioWidth): Added
        (WebCore::RenderImage::calcAspectRatioHeight): Added
        (WebCore::RenderImage::calcMinMaxWidth): Added
        * rendering/render_image.h:

2006-02-24  Vicki Murley <vicki@apple.com>

        - add missing resources for manual-tests/scrolling-nestedframesets.html

        * manual-tests/resources/testframe-link_text.html: Added.
        * manual-tests/resources/testframeset.html: Added.

2006-02-24  Vicki Murley <vicki@apple.com>

        - test case for <rdar://problem/4394910> calling Javascript window.close() does not trigger onbeforeunload event

        * manual-tests/onbeforeunload-close_with_javascript.html: Added.

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add Path stubs for Win32 build.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/win/TemporaryLinkStubs.cpp:
        (Path::Path):
        (Path::~Path):
        (Path::operator=):
        (Path::contains):
        (Path::translate):
        (Path::boundingRect):

2006-02-24  David Hyatt  <hyatt@apple.com>

        In preparation for the elimination of QFont and QFontMetrics, rename methods on RenderStyle.  htmlFont() becomes simply
        font().  The old font() method turns into qfont().  Also added a helper for obtaining the fontDescription() directly from
        the RenderStyle (without first obtaining the htmlFont()).

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMElement _font]):
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::attributedString):
        (WebCore::MacFrame::fontForSelection):
        (WebCore::MacFrame::fontAttributesForSelectionStart):
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::computeLengthFloat):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::checkForTextSizeAdjust):
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::recalcStyle):
        * editing/visible_text.cpp:
        (khtml::TextIterator::exitNode):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::updateValue):
        * kwq/KWQAccObject.mm:
        (AXAttributeStringSetStyle):
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        (khtml::InlineTextBox::offsetForPosition):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::shouldUseMonospaceCache):
        (WebCore::RenderText::font):
        (WebCore::RenderText::width):
        (WebCore::RenderText::htmlFont):
        * rendering/bidi.cpp:
        (khtml::RenderBlock::tabWidth):
        (khtml::RenderBlock::checkLinesForTextOverflow):
        * rendering/render_br.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/render_flexbox.cpp:
        (khtml::RenderFlexibleBox::layoutVerticalBox):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::lineHeight):
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::setStyle):
        (WebCore::RenderFormElement::addIntrinsicMarginsIfAllowed):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintDecorations):
        (WebCore::EllipsisBox::paint):
        * rendering/render_list.cpp:
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::paint):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::lineHeight):
        * rendering/render_object.h:
        (WebCore::RenderObject::font):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::setStyle):
        * rendering/render_style.h:
        (khtml::RenderStyle::font):
        (khtml::RenderStyle::fontDescription):
        (khtml::RenderStyle::qfont):
        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):

2006-02-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - add link stubs for symbols only referenced from the link stubs file

        * platform/win/TemporaryLinkStubs.cpp:
        (KWQFileButton::focusPolicy):
        (QLineEdit::checksDescendantsForFocus):
        (KWQFileButton::baselinePosition):
        (QSlider::~QSlider):
        (QListBox::~QListBox):
        (KWQFileButton::frameGeometry):
        (KWQFileButton::~KWQFileButton):
        (QTextEdit::focusPolicy):
        (QSlider::focusPolicy):
        (QListBox::setEnabled):
        (QListBox::checksDescendantsForFocus):
        (QListBox::focusPolicy):
        (QLineEdit::baselinePosition):
        (QSlider::sizeHint):
        (QLineEdit::~QLineEdit):
        (QTextEdit::~QTextEdit):
        (QTextEdit::checksDescendantsForFocus):
        (QLineEdit::focusPolicy):
        (QScrollBar::~QScrollBar):

2006-02-24  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - fix up font.h inclues to be Font.h to fix build.

        * css/css_computedstyle.cpp:
        * css/css_valueimpl.cpp:
        * platform/Font.cpp:
        * rendering/render_style.h:

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix mac build by changing constants to an enum.

        * khtml/dom/dom2_events.h:
        (DOM::KeyboardEvent::):

2006-02-24  David Hyatt  <hyatt@apple.com>

        Move rendering/font to platform/Font.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssstyleselector.cpp:
        * platform/Font.cpp: Added.
        * platform/Font.h: Added.
        * rendering/font.cpp: Removed.
        * rendering/font.h: Removed.
        * rendering/render_theme_mac.mm:

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove delcarations causing duplicate symbols on win32.

        * khtml/dom/dom2_events.cpp:

2006-02-24  Eric Seidel  <eseidel@apple.com>

        * bridge/win/FrameWin.cpp: fix line endings

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Removed WebCore:: prefixes added using namespace WebCore, fixes win32 build.

        * platform/win/TemporaryLinkStubs.cpp:
        (QPainter::save):
        (Widget::enableFlushDrawing):
        (QPainter::drawHighlightForText):
        (QTextEdit::textWithHardLineBreaks):
        (QPainter::setPen):
        (QPainter::selectedTextBackgroundColor):
        (QPainter::fontMetrics):
        (Widget::show):
        (QLineEdit::setWritingDirection):
        (KWQFileButton::sizeForCharacterWidth):
        (QTextEdit::sizeWithColumnsAndRows):
        (iBeamCursor):
        (QPainter::misspellingLineThickness):
        (westResizeCursor):
        (Widget::isEnabled):
        (northWestResizeCursor):
        (QPainter::drawEllipse):
        (southWestResizeCursor):
        (Widget::focusPolicy):
        (waitCursor):
        (QPainter::endTransparencyLayer):
        (ScrollView::addChild):
        (Widget::~Widget):
        (QListBox::sizeForNumberOfLines):
        (FrameView::updateBorder):
        (QPainter::drawLineForText):
        (QPainter::QPainter):
        (QComboBox::focusPolicy):
        (QPainter::drawImageAtPoint):
        (QPainter::clearShadow):
        (eastResizeCursor):
        (QFontMetrics::boundingRect):
        (QPainter::beginTransparencyLayer):
        (northEastResizeCursor):
        (Widget::frameGeometry):
        (QPainter::addFocusRingRect):
        (QPainter::restore):
        (Widget::setEnabled):
        (QPainter::font):
        (QPainter::pen):
        (crossCursor):
        (Widget::setIsSelected):
        (handCursor):
        (QLineEdit::text):
        (Widget::unlockDrawingFocus):
        (QPainter::paintingDisabled):
        (northResizeCursor):
        (Widget::lockDrawingFocus):
        (QPainter::drawLine):
        (QPainter::setBrush):
        (QPainter::drawText):
        (QLineEdit::sizeForCharacterWidth):
        (Cursor::~Cursor):
        (QFontMetrics::selectionRectForText):
        (southResizeCursor):
        (moveCursor):
        (FrameView::isFrameView):
        (helpCursor):
        (QTextEdit::setWritingDirection):
        (Widget::setDrawingAlpha):
        (southEastResizeCursor):
        (QPainter::drawScaledAndTiledImage):
        (QPainter::drawImage):
        (QComboBox::setWritingDirection):
        (QComboBox::sizeHint):
        (QPainter::drawRect):
        (QPainter::drawTiledImage):
        (QPainter::clearFocusRing):
        (Widget::Widget):
        (QTextEdit::text):
        (QPainter::drawImageInRect):
        (Widget::disableFlushDrawing):
        (QPainter::initFocusRing):
        (QPainter::drawLineForMisspelling):
        (QComboBox::frameGeometry):
        (QListBox::setWritingDirection):
        (ScrollView::updateContents):

2006-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - moved QScrollView from kwq to platform directory

        * kwq/KWQScrollView.h: Removed.
        * kwq/KWQScrollView.mm: Removed.

        * platform/ScrollBarMode.h: Added. Just the enum for scroll bar mode.
        * platform/ScrollView.h: Added. The rest of the former QScrollView.
        * platform/mac/ScrollViewMac.mm: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.
        * platform/win/TemporaryLinkStubs.cpp: Updated.

        * bridge/mac/MacFrame.mm: (WebCore::MacFrame::createFrame):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::init):
        (WebCore::HTMLFrameElementImpl::parseMappedAttribute):
        * page/Frame.cpp: (WebCore::Frame::scrollbarsVisible):
        Changed scrolling constants to use new names.

        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::bodySetter):
        Use FrameView instead of QScrollView for a local variable.

        * khtml/html/html_baseimpl.h: Use ScrollBarMode instead of
        QScrollView::ScrollBarMode.

        * kwq/KWQListBox.h: Use WebCore::ScrollView instead of
        QScrollView and WebCore::ScrollBarMode instead of QScrollView::ScrollBarMode.
        * kwq/KWQTextEdit.h: Ditto.
        * kwq/KWQTextEdit.mm:
        (QTextEdit::setScrollBarModes): Ditto.
        (QTextEdit::focusPolicy): Ditto.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Use ScrollBarMode
        instead of QScrollView::ScrollBarMode.
        (WebCore::FrameView::FrameView): Remove mention of QScrollView.
        (WebCore::FrameView::resetScrollBars): Rename QScrollView to ScrollView.
        (WebCore::FrameView::applyOverflowToViewport): Use newly-named constants.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::setScrollBarsMode): Rename QScrollView to ScrollView.
        (WebCore::FrameView::setVScrollBarMode): Ditto.
        (WebCore::FrameView::setHScrollBarMode): Ditto.
        (WebCore::FrameView::restoreScrollBar): Ditto.

        * platform/mac/MouseEventMac.mm: (WebCore::positionForEvent): Fixed comment.
        * platform/mac/WheelEventMac.mm: (WebCore::positionForEvent): Ditto.
        * platform/mac/WidgetMac.mm: (WebCore::Widget::getOuterView): Ditto.

        * rendering/render_form.cpp: (WebCore::RenderTextArea::setStyle):
        Use ScrollBarMode instead of QScrollView::ScrollBarMode, and new constants.
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize): Changed to use an IntRect to pass to
        updateContents so we can remove the overload.
        (WebCore::RenderPart::updateWidgetPosition): Remove unnecessary of QScrollView.

        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Use FrameView instead of QScrollView.
        (WebCore::RenderLayer::setHasHorizontalScrollbar): Ditto.
        (WebCore::RenderLayer::setHasVerticalScrollbar): Ditto.

2006-02-24  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders.

        Fix the win32 build.

        * page/Frame.cpp:
        (WebCore::Frame::adjustPageHeight):
        (WebCore::Frame::forceLayoutWithPageWidthRange):

2006-02-23  David Hyatt  <hyatt@apple.com>

        Rename FontDef to FontDescription and move it into the platform directory.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::attributedString):
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::computeLengthFloat):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::checkForTextSizeAdjust):
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
        (WebCore::CSSStyleSelector::setFontSize):
        * css/cssstyleselector.h:
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::recalcStyle):
        * editing/visible_text.cpp:
        (khtml::TextIterator::exitNode):
        * platform/FontDescription.h: Added.
        (WebCore::FontDescription::):
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::operator!=):
        (WebCore::FontDescription::family):
        (WebCore::FontDescription::firstFamily):
        (WebCore::FontDescription::specifiedSize):
        (WebCore::FontDescription::computedSize):
        (WebCore::FontDescription::italic):
        (WebCore::FontDescription::computedPixelSize):
        (WebCore::FontDescription::smallCaps):
        (WebCore::FontDescription::isAbsoluteSize):
        (WebCore::FontDescription::weight):
        (WebCore::FontDescription::genericFamily):
        (WebCore::FontDescription::usePrinterFont):
        (WebCore::FontDescription::setFamily):
        (WebCore::FontDescription::setComputedSize):
        (WebCore::FontDescription::setSpecifiedSize):
        (WebCore::FontDescription::setItalic):
        (WebCore::FontDescription::setSmallCaps):
        (WebCore::FontDescription::setIsAbsoluteSize):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::setGenericFamily):
        (WebCore::FontDescription::setUsePrinterFont):
        (WebCore::FontDescription::operator==):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedMinMaxWidth):
        * rendering/bidi.cpp:
        (khtml::RenderBlock::computeHorizontalPositionsForLine):
        * rendering/font.cpp:
        (khtml::Font::selectionRectForText):
        (khtml::Font::drawHighlightForText):
        (khtml::Font::drawText):
        (khtml::Font::update):
        * rendering/font.h:
        (WebCore::Font::Font):
        (WebCore::Font::operator==):
        (WebCore::Font::fontDescription):
        (WebCore::Font::isSmallCaps):
        (WebCore::Font::wordSpacing):
        (WebCore::Font::floatWidth):
        (WebCore::Font::checkSelectionPoint):
        (WebCore::Font::width):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/render_list.cpp:
        (RenderListItem::getAbsoluteRepaintRect):
        * rendering/render_style.h:
        (khtml::RenderStyle::wordSpacing):
        (khtml::RenderStyle::letterSpacing):
        (khtml::RenderStyle::setFontDescription):
        (khtml::RenderStyle::setWordSpacing):
        (khtml::RenderStyle::setLetterSpacing):
        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize):

2006-02-23  Maciej Stachowiak  <mjs@apple.com>

        - fix build by making some pointless changes to files that Xcode doesn't 
        rebuild otherwise

        * bindings/js/JSDOMCore.cpp:
        * bindings/js/JSDOMEvents.cpp:
        * dom/Element.idl:
        * dom/WheelEvent.idl:
        
        - add -Y 3 flag to linking; this makes the linker say what files reference 
        unresolved symbols
        
        * WebCore.xcodeproj/project.pbxproj:

2006-02-23  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/win/TemporaryLinkStubs.cpp: Removed childX/Y stubs.

2006-02-23  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * platform/win/TemporaryLinkStubs.cpp: Removed QPalette-related stubs.

        - remove unused forwarding headers

        * ForwardingHeaders/kurl.h: Removed.
        * ForwardingHeaders/qlist.h: Removed.
        * ForwardingHeaders/qregion.h: Removed.
        * ForwardingHeaders/qsortedlist.h: Removed.

2006-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - removed QPalette, QRegion, QPrinter
        - added Path to replace QRegion
        - removed unused QScrollView functions

        * ForwardingHeaders/qpalette.h: Removed.
        * kwq/KWQPalette.h: Removed.
        * kwq/KWQPalette.mm: Removed.
        * kwq/KWQPrinter.h: Removed.
        * kwq/KWQRegion.cpp: Removed.
        * kwq/KWQRegion.h: Removed.

        * platform/Path.h: Added. Replaces QRegion.
        * platform/cg: Added.
        * platform/cg/PathCG.cpp: Added.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for file changes.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bridge/mac/MacFrame.mm: Removed use of KWQPrinter.h.
        (WebCore::MacFrame::khtmlMouseMoveEvent): Removed use of viewport().
        * bridge/mac/WebCoreFrameBridge.mm: Removed use of KWQPrinter.h.
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLAreaElementImpl::getRect): Replaced QRegion with Path.
        (WebCore::HTMLAreaElementImpl::getRegion): Ditto.
        * khtml/html/html_imageimpl.h: Ditto.
        * kwq/KWQPainter.mm: Removed use of QRegion.
        * page/Frame.cpp: (WebCore::Frame::~Frame): Removed use of viewport().
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Ditto.
        (WebCore::FrameView::viewportMouseMoveEvent): Ditto.
        * rendering/render_frames.cpp: (WebCore::RenderFrameSet::userResize): Ditto.
        * rendering/render_layer.cpp: (WebCore::RenderLayer::scrollRectToVisible): Ditto.

        * kwq/KWQScrollView.h: Removed viewport(), hasVerticalScrollBar(),
        hasHorizontalScrollBar(), childX(), childY().
        * kwq/KWQScrollView.mm: Ditto.

        * rendering/render_box.cpp: (WebCore::RenderBox::paintBackgroundExtended):
        Removed use of QPalette that always yields white.
        * rendering/render_canvas.cpp: (WebCore::RenderCanvas::paintBoxDecorations):
        Ditto.

        * platform/Widget.h:
        * platform/mac/WidgetMac.mm: Removed palette() and setPalette().

        * kwq/KWQLineEdit.h: Replaced setPalette with setColors.
        * kwq/KWQLineEdit.mm: (QLineEdit::setColors): Replaced setPalette.
        * kwq/KWQTextEdit.h: Ditto.
        * kwq/KWQTextEdit.mm: (QTextEdit::setColors): Ditto.

        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::updateFromElement): Removed call to setPalette.
        (WebCore::RenderLineEdit::updateFromElement): Added call to setColors.
        (WebCore::RenderTextArea::updateFromElement): Ditto.

        * rendering/render_replaced.cpp: (WebCore::RenderWidget::paint):
        Removed use of childX and childY functions.

2006-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - add KURL to windows build and fix its compile issues
        http://bugs.webkit.org/show_bug.cgi?id=7439

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/KURL.cpp:

2006-02-23  Maciej Stachowiak  <mjs@apple.com>

        - fix build (header name changed)

        * platform/mac/KURLMac.mm:

2006-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - add temporary stubs that call abort() for functions only called from render and editing code 
        http://bugs.webkit.org/show_bug.cgi?id=7429

        This gets rid of a couple hundred link errors.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * kwq/KWQFontMetrics.h:
        * kwq/KWQSignal.h:
        (KWQSignal::KWQSignal):
        * platform/win/TemporaryLinkStubs.cpp: Added.
        (notImplemented):
        (QLineEdit::selectAll):
        (WebCore::QPainter::save):
        (WebCore::Widget::enableFlushDrawing):
        (WebCore::QPainter::drawHighlightForText):
        (QFont::setPrinterFont):
        (QTextEdit::textWithHardLineBreaks):
        (QLineEdit::cursorPosition):
        (WebCore::QPainter::setPen):
        (WebCore::QPainter::selectedTextBackgroundColor):
        (WebCore::QPainter::fontMetrics):
        (WebCore::Widget::show):
        (QFont::setItalic):
        (QSlider::setValue):
        (QLineEdit::addSearchResult):
        (KWQFileButton::click):
        (QLineEdit::setWritingDirection):
        (KWQFileButton::sizeForCharacterWidth):
        (QTextEdit::sizeWithColumnsAndRows):
        (WebCore::iBeamCursor):
        (QComboBox::clear):
        (WebCore::QPainter::misspellingLineThickness):
        (QLineEdit::maxLength):
        (WebCore::westResizeCursor):
        (WebCore::Widget::isEnabled):
        (WebCore::northWestResizeCursor):
        (QTextEdit::selectionEnd):
        (QFont::determinePitch):
        (QTextEdit::setScrollBarModes):
        (WebCore::QPainter::drawEllipse):
        (WebCore::southWestResizeCursor):
        (QTextEdit::setReadOnly):
        (QListBox::appendItem):
        (WebCore::Widget::focusPolicy):
        (QTextEdit::selectAll):
        (WebCore::waitCursor):
        (WebCore::QPainter::endTransparencyLayer):
        (QScrollView::addChild):
        (QTextEdit::setDisabled):
        (QScrollBar::scroll):
        (WebCore::Widget::~Widget):
        (QListBox::sizeForNumberOfLines):
        (QScrollView::resizeContents):
        (QLineEdit::selectionStart):
        (QLineEdit::QLineEdit):
        (WebCore::FrameView::updateBorder):
        (QLineEdit::hasSelectedText):
        (QListBox::doneAppendingItems):
        (QScrollView::inWindow):
        (QScrollBar::setValue):
        (QTextEdit::hasSelectedText):
        (QTextEdit::selectionStart):
        (QFont::setWeight):
        (QScrollView::scrollXOffset):
        (QListBox::isSelected):
        (QLineEdit::setReadOnly):
        (WebCore::QPainter::drawLineForText):
        (QObject::disconnect):
        (WebCore::QPainter::QPainter):
        (QComboBox::~QComboBox):
        (QComboBox::focusPolicy):
        (WebCore::QPainter::drawImageAtPoint):
        (WebCore::QPainter::clearShadow):
        (QTextEdit::setLineHeight):
        (QMouseEvent::QMouseEvent):
        (WebCore::eastResizeCursor):
        (QScrollBar::setKnobProportion):
        (QFontMetrics::boundingRect):
        (QTextEdit::setSelectionStart):
        (WebCore::QPainter::beginTransparencyLayer):
        (WebCore::northEastResizeCursor):
        (WebCore::Widget::frameGeometry):
        (QListBox::setSelected):
        (WebCore::QPainter::addFocusRingRect):
        (QTextEdit::setCursorPosition):
        (WebCore::QPainter::restore):
        (QFontMetrics::width):
        (WebCore::Widget::setEnabled):
        (QTextEdit::setSelectionEnd):
        (QComboBox::populate):
        (QScrollView::setStaticBackground):
        (WebCore::QPainter::font):
        (QTextEdit::setAlignment):
        (QLineEdit::setCursorPosition):
        (WebCore::Widget::palette):
        (WebCore::QPainter::pen):
        (QFontMetrics::descent):
        (QListBox::QListBox):
        (QFontMetrics::ascent):
        (QLineEdit::selectedText):
        (WebCore::crossCursor):
        (WebCore::Widget::setIsSelected):
        (WebCore::handCursor):
        (QLineEdit::text):
        (WebCore::Widget::unlockDrawingFocus):
        (QLineEdit::setLiveSearch):
        (WebCore::QPainter::paintingDisabled):
        (WebCore::northResizeCursor):
        (QComboBox::QComboBox):
        (QSlider::setMaxValue):
        (WebCore::Widget::lockDrawingFocus):
        (WebCore::QPainter::drawLine):
        (WebCore::QPainter::setBrush):
        (QTextEdit::setSelectionRange):
        (WebCore::QPainter::drawText):
        (QScrollView::scrollPointRecursively):
        (QLineEdit::sizeForCharacterWidth):
        (WebCore::Cursor::~Cursor):
        (QFontMetrics::selectionRectForText):
        (WebCore::southResizeCursor):
        (QScrollView::suppressScrollBars):
        (QFontMetrics::checkSelectionPoint):
        (QTextEdit::getCursorPosition):
        (WebCore::moveCursor):
        (WebCore::FrameView::isFrameView):
        (QScrollBar::setSteps):
        (QLineEdit::setMaxLength):
        (QComboBox::baselinePosition):
        (QComboBox::appendItem):
        (WebCore::helpCursor):
        (QTextEdit::setWritingDirection):
        (WebCore::Widget::setDrawingAlpha):
        (QSlider::QSlider):
        (WebCore::southEastResizeCursor):
        (QScrollView::setVScrollBarMode):
        (WebCore::QPainter::drawScaledAndTiledImage):
        (QScrollView::scrollYOffset):
        (WebCore::QPainter::drawImage):
        (QComboBox::setCurrentItem):
        (QFontMetrics::height):
        (QComboBox::setWritingDirection):
        (QScrollView::setScrollBarsMode):
        (QComboBox::sizeHint):
        (WebCore::QPainter::drawRect):
        (QFont::setPixelSize):
        (QLineEdit::setSelection):
        (QLineEdit::setMaxResults):
        (QListBox::clear):
        (QLineEdit::edited):
        (WebCore::QPainter::drawTiledImage):
        (WebCore::QPainter::clearFocusRing):
        (WebCore::Widget::Widget):
        (QTextEdit::text):
        (WebCore::QPainter::drawImageInRect):
        (WebCore::Widget::disableFlushDrawing):
        (WebCore::QPainter::initFocusRing):
        (QSlider::setMinValue):
        (QTextEdit::setWordWrap):
        (WebCore::QPainter::drawLineForMisspelling):
        (QSlider::value):
        (QListBox::setSelectionMode):
        (QFontMetrics::lineSpacing):
        (QLineEdit::setEdited):
        (QComboBox::frameGeometry):
        (QListBox::setWritingDirection):
        (QLineEdit::setAlignment):
        (QScrollView::updateContents):
        (QFontMetrics::floatWidth):
        (QScrollView::setHScrollBarMode):

2006-02-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.
        
        - Move KURL from kwq to platform, make portable
        http://bugs.webkit.org/show_bug.cgi?id=7437

        * WebCore.xcodeproj/project.pbxproj:
        * css/css_ruleimpl.cpp:
        * css/cssparser.cpp:
        * css/cssstyleselector.cpp:
        * dom/DocumentImpl.h:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_headimpl.cpp:
        * khtml/xbl/xbl_binding.cpp:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * kwq/KWQTextCodec.cpp:
        (QTextCodec::codecForName):
        (QTextCodec::utf8Codec):
        (QTextCodec::codecForNameEightBitOnly):
        (QTextCodec::codecForLocale):
        (QTextCodec::name):
        (QTextCodec::makeDecoder):
        * kwq/KWQTextCodec.h:
        * loader/CachedObject.cpp:
        * loader/DocLoader.cpp:
        * page/Frame.h:
        * platform/KURL.cpp: Added.
        (KURL::decode_string):
        (encodeRelativeString):
        * platform/KURL.h: Added.
        * platform/mac/KURLMac.mm: Added.
        (KURL::getNSURL):
        * xml/xmlhttprequest.h:

2006-02-23  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - moved QMouseEvent, QKeyEvent, QWheelEvent, and "Foundation extras"
          from kwq to platform directory
        - moved history function from kwq to bridge directory
        - eliminated QEvent, MousePressEvent, MouseDoubleClickEvent, MouseMoveEvent,
          MoveReleaseEvent, and DrawContents classes
        - merged NodeImpl::MouseEvent and the MouseEvent from khtml_events.h into
          a single class in the page directory
        - broke khtmllayout.h out into a file for the Length structure in the css
          directory and a file for the GapRects structure in the rendering directory
        - redid the Length structure to work more portably by not relying on bitfield
          layout and improve the names to no longer explicitly mention "width"
        - reduced use of QGuardedPtr and other uses of the QObject "destroyed" signal

        * ForwardingHeaders/kparts: Removed.
        * ForwardingHeaders/qevent.h: Removed.
        * khtml/khtml_events.cpp: Removed.
        * khtml/khtml_events.h: Removed.
        * khtml/misc/khtmllayout.h: Removed.
        * kwq/KWQEvent.h: Removed.
        * kwq/KWQEvent.mm: Removed.
        * kwq/KWQFoundationExtras.h: Removed.
        * kwq/KWQKHistoryProvider.mm: Removed.
        * kwq/KWQKPartsHistoryProvider.h: Removed.

        * bridge/History.h: Added.
        * bridge/mac/HistoryMac.mm: Added.
        * css/Length.h: Added.
        * page/MouseEventWithHitTestResults.h: Added.
        * platform/KeyEvent.h: Added.
        * platform/MouseEvent.h: Added.
        * platform/WheelEvent.h: Added.
        * platform/mac/FoundationExtras.h: Added.
        * platform/mac/KeyEventMac.mm: Added.
        * platform/mac/MouseEventMac.mm: Added.
        * platform/mac/WheelEventMac.mm: Added.
        * rendering/GapRects.h: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated for above changes.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for above changes.

        * bridge/mac/MacFrame.h: Removed unused parameters from urlSelected functions.
        Replaced MouseEvent, MousePressEvent, MouseMoveEvent, and MouseReleaseEvent
        with MouseEventWithHitTestResults.
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::urlSelected): Removed unused parameters.
        (WebCore::MacFrame::wheelEvent): Changed to use WheelEvent.
        (WebCore::MacFrame::keyEvent): Changed to use KeyEvent.
        (WebCore::MacFrame::khtmlMousePressEvent): Changed parameter type.
        (WebCore::MacFrame::khtmlMouseMoveEvent): Ditto.
        (WebCore::MacFrame::khtmlMouseReleaseEvent): Ditto.
        (WebCore::MacFrame::passSubframeEventToSubframe): Ditto.
        (WebCore::MacFrame::mouseDown): Changed to use MouseEvent.
        (WebCore::MacFrame::mouseDragged): Ditto.
        (WebCore::MacFrame::mouseUp): Ditto.
        (WebCore::MacFrame::mouseMoved): Ditto.
        (WebCore::MacFrame::sendContextMenuEvent): Ditto.

        * css/csshelper.h: Removed a bunch of unused declarations.

        * dom/DocumentImpl.h:
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::prepareMouseEvent): Changed to take a MouseEvent
        and return a MouseEventWithHitTestResults.
        (WebCore::DocumentImpl::defaultEventHandler): Changed to use KeyEvent.

        * dom/NodeImpl.h: Removed NodeImpl::MouseEvent and NodeImpl::MouseEventType.
        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchMouseEvent): Changed to always get the type and
        detail values from the caller, never from the event. Changed to use MouseEvent.
        (WebCore::NodeImpl::dispatchKeyEvent): Changed to use KeyEvent.
        (WebCore::NodeImpl::dispatchWheelEvent): Changed to use WheelEvent.

        * dom/dom2_eventsimpl.h:
        * dom/dom2_eventsimpl.cpp:
        (WebCore::KeyboardEventImpl::KeyboardEventImpl): Changed to use KeyEvent.
        (WebCore::KeyboardEventImpl::charCode): Ditto.

        * dom/dom_elementimpl.h: Removed unused mouseEventHandler function.

        * khtml/ecma/domparser.h: Use RefPtr instead of QGuardedPtr to hold the reference
        to the document.

        * khtml/ecma/kjs_proxy.h: (WebCore::KJSProxyImpl::haveInterpreter): Added. For
        use in the Frame destructor so we can get an existing KJS::Window object without
        creating a new interpreter and window object.

        * khtml/ecma/kjs_window.h: Merged WindowQObject into Window. Changed all the
        guarded pointers to Frame to use plain old pointers that are cleared by the
        Frame explicitly (by the function disconnectFrame). Made the pointers to all
        the sub-objects of KJS::Window be mutable so we don't have to const_cast in
        the functions to get (and lazily create) them.
        * khtml/ecma/kjs_window.cpp:
        (KJS::DOMWindowTimer::DOMWindowTimer): Use Window* instead of WindowQObject*.
        (KJS::History::disconnectFrame): Added. Clears m_frame.
        (KJS::FrameArray::disconnectFrame): Added. Clears m_frame.
        (KJS::Window::Window): Removed code to create a WindowQObject.
        (KJS::Window::~Window): Removed code to delete a WindowQObject.
        (KJS::Window::location): Remove now-unneeded const_cast.
        (KJS::Window::selection): Ditto.
        (KJS::Window::locationbar): Ditto.
        (KJS::Window::menubar): Ditto.
        (KJS::Window::personalbar): Ditto.
        (KJS::Window::statusbar): Ditto.
        (KJS::Window::toolbar): Ditto.
        (KJS::Window::scrollbars): Ditto.
        (KJS::Window::getValueProperty): Update since m_frame is now a raw pointer.
        (KJS::Window::getOwnPropertySlot): Ditto.
        (KJS::Window::toBoolean): Ditto.
        (KJS::Window::scheduleClose): Remove assert that WindowQObject* is not null.
        (KJS::Window::isSafeScript): Update since m_frame is now a raw pointer.
        (KJS::Window::clear): Remove code to delete a WindowQObject. Added a call
        to clearAllTimeouts instead.
        (KJS::Window::clearAllTimeouts): Added. Does equivalent of the WindowQObject
        destructor.
        (KJS::Window::installTimeout): Moved to Window from WindowQObject.
        (KJS::Window::pauseTimeouts): Ditto.
        (KJS::Window::resumeTimeouts): Ditto.
        (KJS::Window::clearTimeout): Ditto.
        (KJS::Window::timerFired): Ditto.
        (KJS::Window::disconnectFrame): Added. Sets all the frame pointers to 0.
        (KJS::FrameArray::getOwnPropertySlot): Update since m_frame is now a raw pointer.
        (KJS::Location::getOwnPropertySlot): Ditto.
        (KJS::Location::put): Ditto.
        (KJS::Selection::getOwnPropertySlot): Ditto.
        (KJS::BarInfo::getOwnPropertySlot): Ditto.

        * khtml/html/html_baseimpl.h: Forward-declare Length instead of including khtmllayout.h.
        * khtml/html/html_imageimpl.h: Ditto.

        * khtml/html/html_inlineimpl.cpp: (WebCore::HTMLAnchorElementImpl::defaultEventHandler):
        Changed to use KeyEvent and removed the code to extract the button and state from the
        DOM even to pass to urlSelected.
        * ksvg2/svg/SVGAElementImpl.cpp: (SVGAElementImpl::defaultEventHandler): Ditto.

        * khtml/html/htmltokenizer.cpp: (WebCore::HTMLTokenizer::timerFired): Change to use
        a RefPtr instead of a QGuardedPtr.

        * khtml/misc/helper.h:
        * khtml/misc/helper.cpp: Removed printpainter and setPrintPainter.

        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGDocumentImpl.cpp: (WebCore::SVGDocumentImpl::dispatchKeyEvent):
        Change to use KeyEvent.

        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButton becomeFirstResponder]):
        (-[KWQPopUpButton resignFirstResponder]):
        * kwq/KWQFileButton.mm:
        (KWQFileButton::focusChanged):
        * kwq/KWQListBox.mm:
        (-[KWQTableView becomeFirstResponder]):
        (-[KWQTableView resignFirstResponder]):
        * kwq/KWQSlider.mm:
        (-[KWQSlider becomeFirstResponder]):
        (-[KWQSlider resignFirstResponder]):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView becomeFirstResponder]):
        (-[KWQTextAreaTextView resignFirstResponder]):
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController setHasFocus:]):
        Updated to use new eventFilterFocusIn/Out instead of the general purpose
        eventFilter function. This allows us to remove QEvent and the focus events.

        * kwq/KWQNamespace.h: Removed ButtonState.

        * kwq/KWQObject.h:
        * kwq/KWQObject.cpp: Replaced eventFilter function with eventFilterFocusIn and
        eventFilterFocusOut, allowing us to remove QEvent. Removed event function.

        * kwq/KWQSlot.cpp:
        (KWQSlot::KWQSlot): Removed the parentDestroyed slot.
        (KWQSlot::call): Ditto.

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::UserStyleSheetLoader::UserStyleSheetLoader): Renamed from
        PartStyleSheetLoader. Removed a lot of unneeded null checks. Use a
        raw Frame pointer instead of a QGuardedPtr, and count on the Frame
        to delete us when it's being deleted.
        (WebCore::UserStyleSheetLoader::~UserStyleSheetLoader): No longer
        a virtual function. This is not a polymorphic class.
        (WebCore::UserStyleSheetLoader::setStyleSheet): Remove code to delete
        ourselves -- that's now the frame's responsibility.
        (WebCore::Frame::~Frame): Call disconnectFrame on the KJS::Window and
        delete m_userStyleSheetLoader.
        (WebCore::Frame::changeLocation): Update since urlSelected no longer takes
        button and state parameters.
        (WebCore::Frame::setUserStyleSheet): Delete existing loader to stop a load
        in progress before starting a new load. Store reference to loader.
        (WebCore::Frame::urlSelected): Remove button and state parameters and unused
        local variable hasTarget.
        (WebCore::Frame::selectClosestWordFromMouseEvent): Change from QMouseEvent
        to MouseEvent.
        (WebCore::Frame::handleMousePressEventDoubleClick): Change from MousePressEvent
        to MouseEventWithHitTestResults.
        (WebCore::Frame::handleMousePressEventTripleClick): Ditto.
        (WebCore::Frame::handleMousePressEventSingleClick): Ditto.
        (WebCore::Frame::khtmlMousePressEvent): Ditto.
        (WebCore::Frame::handleMouseMoveEventSelection): Change from MouseMoveEvent
        to MouseEventWithHitTestResults.
        (WebCore::Frame::khtmlMouseMoveEvent): Ditto.
        (WebCore::Frame::khtmlMouseReleaseEvent): Change from MouseReleaseEvent
        to MouseEventWithHitTestResults.
        (WebCore::Frame::khtmlMouseDoubleClickEvent): Change from
        MouseReleaseDoubleClickEvent to MouseEventWithHitTestResults.
        (WebCore::Frame::passWidgetMouseDownEventToWidget): Change from
        NodeImpl::MouseEvent to MouseEventWithHitTestResults.

        * page/FramePrivate.h: Added m_userStyleSheetLoader.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportMousePressEvent): Change from QMouseEvent to
        MouseEvent and from NodeImpl::MouseEvent to MouseEventWithHitTestResults.
        (WebCore::FrameView::viewportMouseDoubleClickEvent): Ditto.
        (WebCore::selectCursor): Ditto.
        (WebCore::FrameView::viewportMouseMoveEvent): Ditto.
        (WebCore::FrameView::viewportMouseReleaseEvent): Ditto.
        (WebCore::FrameView::keyPressEvent): Change from QKeyEvent to KeyEvent.
        (WebCore::FrameView::dispatchMouseEvent): Change from QMouseEvent to
        MouseEvent and from NodeImpl::MouseEvent to MouseEventWithHitTestResults.
        (WebCore::FrameView::viewportWheelEvent): Change from QWheelEvent to
        WheelEvent.
        (WebCore::FrameView::hoverTimerFired): Update for change to prepareMouseEvent
        parameters.

        * platform/Widget.h:
        * platform/Widget.cpp: Removed event function.

        * rendering/render_form.h: Removed LineEditWidget, ComboBoxWidget, TextAreaWidget.
        * rendering/render_form.cpp:
        (WebCore::RenderFormElement::slotClicked): Changed from QMouseEvent to MouseEvent.
        (WebCore::RenderFormElement::addIntrinsicMarginsIfAllowed): Updated for changes
        to the Length class.
        (WebCore::RenderSelect::setWidgetWritingDirection): Updated for removal of
        ComboBoxWidget.
        (WebCore::RenderSelect::slotSelected): Ditto.
        (WebCore::RenderSelect::createComboBox): Ditto.

        * rendering/render_replaced.h:
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::destroy): Updated since removeEventFilter no longer takes
        a parameter.
        (WebCore::RenderWidget::setQWidget): Ditto.
        (WebCore::RenderWidget::eventFilterFocusIn): Added. Replaces eventFilter.
        (WebCore::RenderWidget::eventFilterFocusOut): Ditto.

        * css/css_computedstyle.cpp:
        (WebCore::valueForLength):
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::checkPseudoState):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLAreaElementImpl::getRegion):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::leftRelOffset):
        (WebCore::RenderBlock::rightRelOffset):
        (WebCore::RenderBlock::calcMinMaxWidth):
        (WebCore::getBPMWidth):
        (WebCore::RenderBlock::calcInlineMinMaxWidth):
        (WebCore::RenderBlock::calcBlockMinMaxWidth):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::calcMinMaxWidth):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderText.h:
        (khtml::RenderText::marginLeft):
        (khtml::RenderText::marginRight):
        * rendering/bidi.cpp:
        (khtml::getBPMWidth):
        * rendering/render_applet.cpp:
        (WebCore::RenderApplet::createWidgetIfNecessary):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::getClipRect):
        (WebCore::RenderBox::relativePositionOffset):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcWidthUsing):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        (WebCore::RenderBox::calcHorizontalMargins):
        (WebCore::RenderBox::calcHeight):
        (WebCore::RenderBox::calcHeightUsing):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedWidth):
        (WebCore::RenderBox::calcReplacedWidthUsing):
        (WebCore::RenderBox::calcReplacedHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::calcVerticalMargins):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteVertical):
        (WebCore::RenderBox::calcAbsoluteVerticalValues):
        * rendering/render_br.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/render_flexbox.cpp:
        (khtml::RenderFlexibleBox::calcHorizontalMinMaxWidth):
        (khtml::RenderFlexibleBox::calcVerticalMinMaxWidth):
        (khtml::RenderFlexibleBox::calcMinMaxWidth):
        (khtml::RenderFlexibleBox::allowedChildFlex):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::lineHeight):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::layout):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::isWidthSpecified):
        (WebCore::RenderImage::isHeightSpecified):
        * rendering/render_layer.cpp:
        (WebCore::Marquee::direction):
        (WebCore::Marquee::start):
        (WebCore::Marquee::updateMarqueeStyle):
        (WebCore::Marquee::timerFired):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::marginLeft):
        (WebCore::InlineFlowBox::marginRight):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paddingTop):
        (WebCore::RenderObject::paddingBottom):
        (WebCore::RenderObject::paddingLeft):
        (WebCore::RenderObject::paddingRight):
        (WebCore::RenderObject::getVerticalPosition):
        (WebCore::RenderObject::lineHeight):
        (WebCore::RenderObject::addDashboardRegions):
        * rendering/render_style.h:
        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::addIntrinsicMargins):
        * rendering/table_layout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::calcMinMaxWidth):
        (WebCore::FixedTableLayout::layout):
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::calcMinMaxWidth):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        (WebCore::AutoTableLayout::layout):
        (WebCore::AutoTableLayout::calcPercentages):
        Updated for changes to the Length class.
        Also removed a check of the printpainter global, never used in WebCore.

        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/csshelper.cpp:
        * editing/SelectionController.cpp:
        * khtml/ecma/kjs_html.h:
        * kwq/KWQAccObject.mm:
        * kwq/KWQAccObjectCache.mm:
        * kwq/KWQClipboard.mm:
        * kwq/KWQFont.mm:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQKJobClasses.mm:
        * kwq/KWQKURL.mm:
        * kwq/KWQLoader.mm:
        * kwq/KWQPageState.mm:
        * kwq/KWQPainter.mm:
        * kwq/WebCoreSettings.mm:
        * platform/StringImpl.cpp:
        * platform/mac/CursorMac.mm:
        * platform/mac/WidgetMac.mm:
        * rendering/RenderBlock.h:
        * rendering/render_canvas.cpp:
        * rendering/render_line.h:
        * rendering/render_style.cpp:
        * rendering/table_layout.h:
        Updated includes.

        * bindings/js/JSDOMCore.cpp: Touched, because I got strange failures if this
        didn't rebuild.
        * bindings/js/JSDOMEvents.cpp: Ditto.

2006-02-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Fix linking of static constructed globals on win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * config.h:
        * dom/EventNames.cpp:
        (WebCore::EventNames::init):
        * dom/EventNames.h:
        * dom/dom_qname.cpp:
        (WebCore::QualifiedName::init):
        * dom/dom_qname.h:
        * khtml/html/htmlnames.cpp:
        (WebCore::HTMLNames::init):
        * khtml/html/htmlnames.h:
        * platform/AtomicString.cpp:
        (WebCore::AtomicString::init):
        * platform/StaticConstructors.h: Added.

2006-02-23  Vicki Murley <vicki@apple.com>

        Reviewed by Tim Omernick.
 
        - fix <rdar://problem/4394910> calling Javascript window.close() does not trigger onbeforeunload event

        Check shouldClose() before actually scheduling a close.

        shouldClose() checks for the onbeforeunload handler, displays the onbeforeunload dialog, and returns a 
        result based on whether the user clicks "OK" or "Cancel".  In cases where the window is closed with cmd-w 
        or by clicking the red globe, shouldClose() is checked in the windowShouldClose delegate method.  Since 
        windowShouldClose isn't invoked when a window is closed with Javascript, it makes sense to add a check 
        for shouldClose() in scheduleClose(), returning early when appropriate before the chain of events that 
        closes a window even gets started.  

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::scheduleClose): add a check for shouldClose()

2006-02-23  Vicki Murley <vicki@apple.com>

        Reviewed by Hyatt.
 
        - fix <rdar://problem/4456004> onbeforeunload should cancel, and 
        <rdar://problem/4453579> REGRESSION (TOT): onbeforeunload is broken (7421)

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::shouldClose): Onbeforeunload is a non-bubbling window
        event, so we should be using handleWindowEvent rather than dispatching a 
        generic event on the body. It seems this only worked before because of incorrect
        code in other parts of the tree. 
        * dom/dom2_eventsimpl.cpp:
        (WebCore::BeforeUnloadEventImpl::BeforeUnloadEventImpl): for this constructor,
        pass true for the cancel parameter

2006-02-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Adding stub FrameWin class to expose link errors.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/win/FrameWin.cpp: Added.
        * bridge/win/FrameWin.h: Added.
        (WebCore::Win):

2006-02-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - move QStringList to platform, make it portable

        * ForwardingHeaders/qstringlist.h: Removed.
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentImpl.h:
        * kcanvas/KCanvasFilters.h:
        * khtml/xbl/xbl_protohandler.cpp:
        * ksvg2/svg/SVGColorImpl.cpp:
        * ksvg2/svg/SVGComponentTransferFunctionElementImpl.cpp:
        * ksvg2/svg/SVGDOMImplementationImpl.h:
        * ksvg2/svg/SVGFEBlendElementImpl.cpp:
        * ksvg2/svg/SVGFEColorMatrixElementImpl.cpp:
        * ksvg2/svg/SVGFEComponentTransferElementImpl.cpp:
        * ksvg2/svg/SVGFECompositeElementImpl.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElementImpl.cpp:
        * ksvg2/svg/SVGFEDisplacementMapElementImpl.cpp:
        * ksvg2/svg/SVGFEFloodElementImpl.cpp:
        * ksvg2/svg/SVGFEGaussianBlurElementImpl.cpp:
        * ksvg2/svg/SVGFELightElementImpl.cpp:
        * ksvg2/svg/SVGFEMergeElementImpl.cpp:
        * ksvg2/svg/SVGFEOffsetElementImpl.cpp:
        * ksvg2/svg/SVGFESpecularLightingElementImpl.cpp:
        * ksvg2/svg/SVGFETileElementImpl.cpp:
        * ksvg2/svg/SVGFETurbulenceElementImpl.cpp:
        * ksvg2/svg/SVGFitToViewBoxImpl.cpp:
        * ksvg2/svg/SVGLengthListImpl.cpp:
        * ksvg2/svg/SVGNumberListImpl.cpp:
        * ksvg2/svg/SVGPreserveAspectRatioImpl.cpp:
        * ksvg2/svg/SVGStringListImpl.cpp:
        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
        * ksvg2/svg/SVGTransformableImpl.cpp:
        * kwq/KWQClipboard.mm:
        * kwq/KWQKConfigBase.mm:
        * kwq/KWQKHTMLSettings.h:
        * kwq/KWQKLocale.h:
        * kwq/KWQKSSLKeyGen.h:
        * kwq/KWQStringList.h: Removed.
        * kwq/KWQStringList.mm: Removed.
        * loader/DocLoader.h:
        * page/Frame.h:
        * platform/QStringList.cpp: Added.
        (QStringList::split):
        (QStringList::pop_front):
        * platform/QStringList.h: Added.
        * platform/mac/QStringListMac.mm: Added.
        (QStringList::getNSArray):

2006-02-21  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Tests:
        * fast/forms/input-baseline.html
        * fast/inline-block/contenteditable-baseline.html

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=7330
        baselinePosition is wrong for new text field when empty

        * rendering/RenderBlock.cpp: (WebCore::RenderBlock::getBaselineOfLastLineBox):  
         If we're dealing with an empty contenteditable block, then we've added height to the block to make room for the caret, 
         and there are no children to give us the baseline.  Instead, compute the baseline for the block itself, and factor in the border and the padding.

2006-02-21  Vicki Murley <vicki@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7363
        REGRESSION (r12872): Repro crash when clicking the Quick Reply box in Gmail

        Add a nil check for the renderer, and refetch the renderer for the old focus node
        after dispatching the event. 

        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::setFocusNode):

2006-02-21  Maciej Stachowiak  <mjs@apple.com>

        Rubber Stamped by Hyatt.

        - renamed STATIC, FIXED, RELATIVE, ABSOLUTE to StaticPosition, FixedPosition, etc
        
        This avoids conflicting with win32 headers.

        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/htmlediting.cpp:
        (WebCore::isSpecialElement):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::setStyle):
        (WebCore::RenderBox::absolutePosition):
        (WebCore::RenderBox::computeAbsoluteRepaintRect):
        * rendering/render_flow.cpp:
        (WebCore::RenderFlow::getAbsoluteRepaintRect):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::container):
        * rendering/render_style.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/render_style.h:
        (khtml::):
        (khtml::RenderStyle::initialPosition):

2006-02-21  Maciej Stachowiak  <mjs@apple.com>

        Rubber Stamped by Hyatt.

        - remove KWQSignalStubs.cpp from project.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-02-21  Maciej Stachowiak  <mjs@apple.com>

        Platform build fix, not reviewed.

        - undef min and max, and include <algorithm> so std::min works

        * rendering/font.h:

2006-02-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Darin.
        
        Patch from Maks Orlovich, based on work by David Faure, hand-applied and 
        significantly reworked by me.
        
        - Patch: give internal function names (KJS merge)
        http://bugs.webkit.org/show_bug.cgi?id=6279

        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElementFunction::HTMLElementFunction):
        * kwq/WebCoreScriptDebugger.mm:
        (-[WebCoreScriptCallFrame functionName]):

2006-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7331
          CSS parser leaks when parsing incorrect CSS

        * css/css_base.h:
        (WebCore::CSSSelector::append): Replaced recursive implementation
        with an iterative one.
        (WebCore::StyleBaseImpl::StyleBaseImpl): Changed to be a Shared, not
        a TreeShared; parents now ref children as needed. This change was
        vital to fix the storage leaks. Also removed unused multiLength bool.
        (WebCore::StyleBaseImpl::parent): Added. Needed now that there's no
        TreeShared base class.
        (WebCore::StyleBaseImpl::setParent): Ditto.
        (WebCore::StyleBaseImpl::insertedIntoParent): Added. Hook for
        notification when added to a parent -- used by import style rules.
        (WebCore::StyleListImpl::StyleListImpl): Changed to use a Vector instead
        of a QPtrList for children. Slower for dynamic insert and remove for the
        DOM API, faster and more efficient for everything else.
        * css/css_base.cpp:
        (WebCore::StyleListImpl::append): Now calls insertedIntoParent
        and uses Vector.
        (WebCore::StyleListImpl::insert): Added. Calls insertedIntoParent.
        (WebCore::StyleListImpl::remove): Added. 

        * css/css_grammar.y: Removed obsolete "don't inline" stuff. Changed all
        code that creates new objects to use new functions on CSSParser. For
        CSSSelector, ValueList, Function, and Value, this means using new
        functions with a "floating" concept, but for reference-counted classes
        this just means asking the CSSParser to create the object instead of
        calling new. Remove all explicit "delete", which is now handled by the
        parser instead, which works when the Bison-generated parser fails too,
        not just when it hits error rules in the grammar.

        * css/css_ruleimpl.h:
        * css/css_ruleimpl.cpp:
        (WebCore::CSSImportRuleImpl::CSSImportRuleImpl): Remove call to init()
        which kicks off style sheet loading. We now do that when we are added to
        our parent instead of construction time. Also removed unused constructor.
        (WebCore::CSSImportRuleImpl::insertedIntoParent): Replaced init() with this
        function that does much the same thing at a different time. Changed code
        that sets m_loading to do it in a simple way that doesn't need a big comment.
        (WebCore::CSSMediaRuleImpl::insertRule): Use RefPtr.

        * css/css_stylesheetimpl.cpp:
        (StyleSheetImpl::StyleSheetImpl): Pass 0 for parent explicitly since the
        empty constructor was removed in the other patch.
        (CSSStyleSheetImpl::CSSStyleSheetImpl): Remove code to set up m_lstChildren;
        that's now handled by the base class.
        (CSSStyleSheetImpl::insertRule): Use length() instead of m_listChildren->count()
        and insert instead of m_lstChildren->insert. Also use RefPtr for the result of
        parseRule.
        (CSSStyleSheetImpl::addRule): Use length() instead of m_lstChildren->count().
        (CSSStyleSheetImpl::deleteRule): Use length() instead of checking the result of
        take() for 0. Use remove() instead of m_lstChildren->take().
        (CSSStyleSheetImpl::parseString): Use setStrictParsing instead of going at the
        strictParsing data member directly.
        (CSSStyleSheetImpl::isLoading): Use length() and item() instead of
        m_lstChildren->first() and m_lstChildren->next().

        * css/css_valueimpl.h: Add an include of QPtrList now that it's not used in
        any included file. Also added a constructor for CSSValueImpl, now that StyleBaseImpl
        has no empty constructor.
        * css/css_valueimpl.cpp:
        (WebCore::CSSMutableStyleDeclarationImpl::setProperty): Use useStrictParsing()
        instead of looking at the strictParsing data member directly.
        (WebCore::CSSMutableStyleDeclarationImpl::parseDeclaration): Ditto.
        (WebCore::CSSMutableStyleDeclarationImpl::setLengthProperty): Ditto.
        (WebCore::CSSMutableStyleDeclarationImpl::setCssText): Ditto.

        * css/cssparser.h:
        (WebCore::ValueList): Changed to use a Vector and an index rather
        than using a QPtrList.
        (WebCore::CSSParser): Changed parseRule to return a PassRefPtr, removed the
        createStyleDeclaration function since that's now handled by createStyleRule,
        made clearProperties be private, and added a suite of functions to create the
        objects formerly made with "new" in the Bison grammar. Also put the Units enum
        here in the header, and added an operator so they can be or'ed together while
        staying with the enum type so we can use Units instead of int for a function arg.
        * css/cssparser.cpp:
        (WebCore::ValueList::~ValueList): Changed to use Vector.
        (WebCore::CSSParser::CSSParser): Removed initializer for rule now that it's a RefPtr.
        (WebCore::CSSParser::~CSSParser): Added code to delete all the items in the sets that
        track floating objects. Also removed an unneeded check before callling clearProperties.
        (WebCore::CSSParser::parseSheet): Removed "delete rule" since rule is now a RefPtr.
        (WebCore::CSSParser::parseRule): Changed code to use rule.release() since rule is now
        a RefPtr and this function now returns a PassRefPtr.
        (WebCore::CSSParser::parseValue): Removed "delete rule" since rule is now a RefPtr.
        (WebCore::CSSParser::parseColor): Ditto.
        (WebCore::CSSParser::parseDeclaration): Ditto.
        (WebCore::CSSParser::validUnit): Made this a static class member instead of a local
        function so it can be used by the SVG parser code. Also updated to use the new ValueList
        class that uses Vector.
        (WebCore::CSSParser::parse4Values): Updated to new ValueList.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::skipCommaInDashboardRegion): Ditto.
        (WebCore::CSSParser::parseDashboardRegions): Ditto.
        (WebCore::CSSParser::parseShape): Ditto.
        (WebCore::CSSParser::parseColorFromValue): Ditto.
        (WebCore::BorderImageParseContext::commitBorderImage): Ditto.
        (WebCore::CSSParser::createFloatingSelector): Added. Puts selector into floating set.
        (WebCore::CSSParser::sinkFloatingSelector): Added. Removes from floating set.
        (WebCore::CSSParser::createFloatingValueList): Added. Puts list into floating set.
        (WebCore::CSSParser::sinkFloatingValueList): Added. Removes from floating set.
        (WebCore::CSSParser::createFloatingFunction): Added. Puts function into floating set.
        (WebCore::CSSParser::sinkFloatingFunction): Added. Removes from floating set.
        (WebCore::CSSParser::sinkFloatingValue): Added. Removes function from floating set if
        value contains a function pointer.
        (WebCore::CSSParser::createMediaList): Added. Puts list in a vector of RefPtrs kept
        by the parser, so the object won't end up floating.
        (WebCore::CSSParser::createImportRule): Ditto.
        (WebCore::CSSParser::createMediaRule): Ditto.
        (WebCore::CSSParser::createRuleList): Ditto.
        (WebCore::CSSParser::createStyleRule): Ditto. The properties come from the parser's
        global state instead of from a parameter.

        * khtml/xsl/xsl_stylesheetimpl.h:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::XSLStyleSheetImpl): Initialize the new m_stylesheetDocTaken
        bool to false. Also remove code to set up m_lstChildren since the base class takes care
        of that now.
        (WebCore::XSLStyleSheetImpl::~XSLStyleSheetImpl): Only call xmlFreeDoc if the document
        was not taken by libxslt. We used to leak XSLStyleSheetImpl objects, which is why we
        didn't notice this before; we'll try to double free without this change.
        (WebCore::XSLStyleSheetImpl::isLoading): Use length() and item() instead of
        m_lstChildren->first() and m_lstChildren->next().
        (WebCore::XSLStyleSheetImpl::clearDocuments): Ditto.
        (WebCore::XSLStyleSheetImpl::parseString): Only call xmlFreeDoc if the document was not
        taken by libxslt. Also set m_stylesheetDocTaken for the new document.
        (WebCore::XSLStyleSheetImpl::loadChildSheet): Use RefPtr and append instead of
        m_lstChildren->append.
        (WebCore::XSLStyleSheetImpl::compileStyleSheet): Set m_stylesheetDocTaken to true if
        xsltParseStylesheetDoc is successful, since the stylesheet then owns the document.
        (WebCore::XSLStyleSheetImpl::locateStylesheetSubResource): Use length() and item()
        instead of m_lstChildren->first() and m_lstChildren->next().
        (WebCore::XSLStyleSheetImpl::markAsProcessed): Set m_stylesheetDocTaken, since when
        this is called, the document is returned to libxslt which then attaches it to a
        stylesheet or parent document.

        * ksvg2/css/KSVGCSSParser.cpp: Changed to compile as separate
        file instead of being included in cssparser.cpp.
        (WebCore::CSSParser::parseSVGPaint): Take out unnecessary check
        of number of args. Everything works fine without that check, and
        otherwise I'd have to change it for the change in data structure.
        (WebCore::CSSParser::parseSVGColor): Ditto.
        * WebCore.xcodeproj/project.pbxproj: Added KSVGCSSParser.cpp.

        - fixed another leak found by run-webkit-leaks --leaks

        * kwq/KWQLoader.mm: (KWQServeRequest): Delete the job if we can't do the I/O, because
        the caller is passing ownership to us.

        - updated other code to use new Vector insert and remove

        * khtml/html/HTMLFormElementImpl.cpp:
        (WebCore::removeFromVector): Changed to use Vector's remove.
        (WebCore::HTMLFormElementImpl::registerFormElement): Changed to use Vector's insert.

2006-02-20  Darin Adler  <darin@apple.com>

        Collaborated with Graham Dennis <Graham.Dennis@gmail.com> on this.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6831
          contentEditable outline darkens as caret moves

        Test: editing/selection/move-by-character-6.html

        The trick was to draw the focus ring clipped to a list of rectangles instead
        of clipped to exactly one.

        * kwq/KWQPainter.h: Move Color parameter from initFocusRing to drawFocusRing.
        * kwq/KWQPainter.mm:
        (WebCore::QPainterPrivate::QPainterPrivate): Change focusRingPath from
        an NSBezierPath to a CGMutablePathRef.
        (WebCore::QPainterPrivate::~QPainterPrivate): Ditto.
        (WebCore::QPainter::initFocusRing): Removed color parameter, and made a
        CGPath instead of an NSBezierPath.
        (WebCore::QPainter::addFocusRingRect): CGPath instead of NSBezierPath.
        (WebCore::QPainter::drawFocusRing): Added color parameter, and changed to
        use new bridge method to draw the focus ring.
        (WebCore::QPainter::clearFocusRing): CGPath instead of NSBezierPath.

        * kwq/WebCoreGraphicsBridge.h:
        * kwq/WebCoreGraphicsBridge.m:
        (-[WebCoreGraphicsBridge drawFocusRingWithPath:radius:color:]):
        Replaced setFocusRingStyle: method with this one.

        * rendering/render_flow.cpp: (WebCore::RenderFlow::paintFocusRing):
        * rendering/render_object.cpp: (WebCore::RenderObject::paintOutline):
        Pass color to drawFocusRing instead of initFocusRing.

        - fixed message on exit from the other patch I just landed

        * platform/mac/CursorMac.mm:
        (WebCore::leakNamedCursor): Renamed and made this leak intentionally.

2006-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - moved Cursor into the platform directory from KWQ
        - removed a lot of other unneeded stuff from KWQ

        * platform/Cursor.h: Added.
        * platform/mac/CursorMac.mm: Added.
        * platform/mac/CursorWin.cpp: Added.

        * kwq/KWQBuffer.cpp: Removed.
        * kwq/KWQBuffer.h: Removed.
        * kwq/KWQCursor.h: Removed.
        * kwq/KWQCursor.mm: Removed.
        * kwq/KWQIODevice.h: Removed.
        * kwq/KWQKCursor.h: Removed.
        * kwq/KWQKCursor.mm: Removed.
        * kwq/KWQKDebug.h: Removed.
        * kwq/KWQSignalStubs.cpp: Removed.

        * ForwardingHeaders/kcursor.h: Removed.
        * ForwardingHeaders/kdebug.h: Removed.
        * ForwardingHeaders/qbuffer.h: Removed.

        * kwq/KWQEvent.h: Removed unused constants and types QCustomEvent,
        QFocusEvent, QHideEvent, QShowEvent, QContextMenuEvent, and QResizeEvent.

        * kwq/KWQLoader.h: Removed KWQLoader class since signals are no longer needed.
        * kwq/KWQLoader.mm: Ditto.

        * kwq/KWQNamespace.h: Removed DontClip, ShowPrefix, WordBreak, LayoutDirection,
        LeftToRight, RightToLeft, RasterOp, CopyROP, OrROP, and XorROP.

        * kwq/KWQObject.h: Removed blockSignals, sender, _signalsBlocked, _sender,
        and KWQObjectSenderScope.
        * kwq/KWQObject.cpp:
        (QObject::QObject): Removed _signalsBlocked.
        (QObject::connect): Removed special-case signals to not complain about.
        All of them were either unused, converted to non-signal functions, or in one
        case (slotScrollBarMoved) turned into a FIXME.

        * kwq/KWQPainter.h: Removed rasterOp and setRasterOp.
        * kwq/KWQPainter.mm: Ditto.

        * kwq/KWQSignal.h:
        * kwq/KWQSignal.cpp: (KWQSignal::disconnect): Removed special cases for
        various signals; all are now using plain function calls instead.

        * kwq/KWQSlot.h:
        * kwq/KWQSlot.cpp: Removed slots that are no longer needed because they
        are using plain function calls instead of signals.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Updated for changed files.

        * bridge/mac/FrameViewMac.mm: Moved the contents of KWQKHTMLView.cpp in here.
        * bridge/mac/KWQKHTMLView.cpp: Removed.

        * bridge/mac/MacFrame.h: Removed signals, changed setStatusBarText to take
        String instead of QString.
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame): Removed signals.
        (WebCore::MacFrame::setStatusBarText): Changed parameter type.
        (WebCore::MacFrame::openURLFromPageCache): Removed parameter from started function.
        (WebCore::MacFrame::khtmlMouseMoveEvent): Changed from QCursor() to pointerCursor().

        * dom/DocumentImpl.h:
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl): Removed signals.
        (WebCore::DocumentImpl::implicitOpen): Ditto.
        (WebCore::DocumentImpl::determineParseMode): Removed a use of kdDebug.
        (WebCore::DocumentImpl::finishedParsing): Added. Does a setParsing(false) and then
        calls finishedParsing on the frame. Replaces the old finishedParsing signal.

        * dom/xml_tokenizer.h:
        * dom/xml_tokenizer.cpp: Removed the finishedParsing signal since it's not just
        a function on the document.
        (WebCore::XMLTokenizer::finish): Call the function instead of emitting the signal.

        * khtml/html/htmlparser.h:
        * khtml/html/htmlparser.cpp: Moved the parser inside the WebCore namespace.

        * khtml/html/htmltokenizer.h:
        * khtml/html/htmltokenizer.cpp: (WebCore::HTMLTokenizer::end): Updated
        to call finishedParsing function on document rather than emitting a signal.

        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButton becomeFirstResponder]): Use QEvent instead of QFocusEvent.
        (-[KWQPopUpButton resignFirstResponder]): Ditto.
        * kwq/KWQFileButton.mm: (KWQFileButton::focusChanged): Ditto.
        * kwq/KWQListBox.mm:
        (-[KWQTableView becomeFirstResponder]): Ditto.
        (-[KWQTableView resignFirstResponder]): Ditto.
        * kwq/KWQSlider.mm:
        (-[KWQSlider becomeFirstResponder]): Ditto.
        (-[KWQSlider resignFirstResponder]): Ditto.
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView becomeFirstResponder]): Ditto.
        (-[KWQTextAreaTextView resignFirstResponder]): Ditto.
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController setHasFocus:]): Ditto.

        * kwq/KWQTextStream.h: Removed the mode parameter from the QTextStream constructor.
        Removed the QTextIStream and QTextOStream classes.
        * kwq/KWQTextStream.cpp: (QTextStream::QTextStream): Removed the mode parameter.

        * loader/CachedCSSStyleSheet.h: Changed to take a ByteArray instead of a QBuffer.
        * loader/CachedCSSStyleSheet.cpp: (WebCore::CachedCSSStyleSheet::data): Ditto.
        * loader/CachedImage.h: Ditto.
        * loader/CachedImage.cpp: (WebCore::CachedImage::data): Ditto.
        * loader/CachedObject.h: Ditto.
        * loader/CachedScript.h: Ditto.
        * loader/CachedScript.cpp: (WebCore::CachedScript::data): Ditto.
        * loader/CachedXBLDocument.h: Ditto.
        * loader/CachedXBLDocument.cpp: (WebCore::CachedXBLDocument::data): Ditto.
        * loader/CachedXSLStyleSheet.h:
        * loader/CachedXSLStyleSheet.cpp: (WebCore::CachedXSLStyleSheet::data): Ditto.

        * loader/DocLoader.cpp: (WebCore::DocLoader::setLoadInProgress): Added a call
        to loadDone on the frame. Replaces the requestFailed and requestDone signals.

        * loader/DocLoader.h: Removed include of <qbuffer.h>.

        * loader/Request.h:
        * loader/Request.cpp: Updated to use ByteArray instead of QBuffer.

        * loader/loader.h: Removed unused signals.
        * loader/loader.cpp:
        (WebCore::Loader::Loader): Removed use of KWQLoader.
        (WebCore::Loader::~Loader): Ditto.
        (WebCore::Loader::load): Removed code to emit unused requestStarted signal.
        (WebCore::Loader::slotFinished): Removed code to emit requestFailed and
        requestDone signals, now handled by DocLoader::setLoadInProgress(false).
        (WebCore::Loader::slotReceivedResponse): Use ByteArray instead of QBuffer.
        (WebCore::Loader::slotData): Ditto.

        * page/Frame.h: Removed setURLCursor, urlCursor, slotRestoreData, slotIncZoom,
        slotDecZoom, slotLoadImages, slotPartRemoved, slotActiveFrameChanged,
        slotChildURLRequest, slotShowDocument, slotAutoScroll, slotPrintFrame, slotSelectAll,
        slotProgressUpdate, slotJobPercent, slotJobSpeed.connectChild, disconnectChild,
        and changed a number of others from slots to plain old functions.
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Don't connect to loader signals.
        (WebCore::Frame::~Frame): Don't disconnect from loader signals.
        (WebCore::Frame::didOpenURL): Call started function instead of emitting
        started signal. Don't connect to speed and percent signals (which never
        existed in WebCore anyway).
        (WebCore::Frame::stopLoading): Call finishedParsing function instead of
        calling slotFinishedParsing.
        (WebCore::Frame::executeScript): Removed redundant checks and let
        submitFormAgain do the checking.
        (WebCore::Frame::clear): Removed code to disconnect from finishedParsing
        signal; we now use a function. Also removed loop that calls disconnectChild,
        becase again we use functions now instead of signals.
        (WebCore::Frame::setDocument): Remove code to disconnect and connect to the
        finishedParsing signal.
        (WebCore::Frame::begin): Remove code to connect to the finishedParsing signal.
        (WebCore::Frame::finishedParsing): Moved code that does setParsing(false) into
        the document class. Also renamed from slotFinishedParsing.
        (WebCore::Frame::loadDone): Renamed from slotLoaderRequestDone.
        (WebCore::Frame::checkCompleted): Changed to call the completed function instead
        of emitting one of the two completed signals.
        (WebCore::Frame::loadSubframe): Removed call to connectChild because we now use
        functions instead of signals. Also change the call to completed to pass false
        instead of true.
        (WebCore::Frame::submitFormAgain): Change function around so we are less likely
        to leak if something strange happens inside submitForm.
        (WebCore::Frame::submitForm): Remove code to connect signal. We now call
        submitFormAgain from inside the completed function.
        (WebCore::Frame::parentCompleted): Renamed from slotParentCompleted. No longer
        a slot, now called from completed.
        (WebCore::Frame::childCompleted): Renamed from slotChildCompleted.
        (WebCore::Frame::setJSStatusBarText): Removed "emit" from function call. Changed
        to use String instead of QString.
        (WebCore::Frame::setJSDefaultStatusBarText): Ditto.
        (WebCore::Frame::sendResizeEvent): Changed to send DOM event directly instead of
        creating a QResizeEvent to send along to the FrameView.
        (WebCore::Frame::scrollToAnchor): Changed to not pass a parameter to the started
        function, which no longer takes one.
        (WebCore::Frame::frameDetached): Removed code that calls disconnectChild, since
        we no longer use signals.
        (WebCore::Frame::completed): Added. Calls childCompleted, parentCompleted, and
        submitFormAgain.
        (WebCore::Frame::setStatusBarText): Added.
        (WebCore::Frame::started): Added. Sets the complete flag to false for the frame
        and all its ancestors, which is what slotChildStarted did recursively.

        * page/FramePrivate.h: Removed m_activeFrame and changed m_kjsStatusBarText and
        m_kjsDefaultStatusBarText to String from QString.

        * page/FrameView.h: Removed resizeEvent, focusInEvent, focusOutEvent, and
        slotPaletteChanged. Changed cleared from a signal to a private function and
        slotScrollBarMoved to a private function named scrollBarMoved.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Removed connect call here that was connecting
        a signal that's nonexistent in WebCore; we'll want to rig it up later.
        (WebCore::FrameView::~FrameView): Added a call to setQWidget(0) here to replace
        something that was done with a signal before.
        (WebCore::FrameView::clear): Call cleared as a function rather than a signal.
        (WebCore::selectCursor): Changed to use Cursor instead of QCursor.
        (WebCore::FrameView::scrollBarMoved): Renamed this function, which is never called.
        Added a FIXME about calling it.
        (WebCore::FrameView::cleared): Added. Calls viewCleared on the owner part, which
        used to be done with a signal.

        * platform/Widget.h: Changed to Cursor from QCursor.
        * platform/mac/WidgetMac.mm: (WebCore::Widget::setCursor): Ditto.

        * rendering/render_frames.h:
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize): Removed cursor-setting code here. We might
        want to use resize cursors for frames again, but it was mostly disabled anyway and
        it's not clear which cursors to use.
        (WebCore::RenderPart::setWidget): Removed code to connect to the cleared signal.
        Instead, FrameView takes care of it directly.
        (WebCore::RenderPart::viewCleared): Renamed from slotViewCleared.
        (WebCore::RenderFrame::viewCleared): Ditto.
        (WebCore::RenderPartObject::viewCleared): Ditto.

        * rendering/render_image.cpp:
        (WebCore::RenderImage::imageChanged): Removed use of WordBreak, which doesn't exist
        in WebCore text rendering.
        (WebCore::RenderImage::paint): Ditto.

        * rendering/render_list.cpp: (RenderListMarker::paint): Removed use of DontClip, which
        doesn't exist in WebCore text rendering. Also removed incorrect use of references to
        temporaries for the ". " and " ." strings.

        * rendering/render_object.cpp:
        (WebCore::RenderObject::drawBorder): Removed call to setRasterOp since it is a no-op
        in WebCore's painter. Added a FIXME.
        (WebCore::RenderObject::information): Remove mode parameter to QTextStream.

        * rendering/render_replaced.h: Removed slotWidgetDestructed, made setQWidget public,
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::setQWidget): Removed code to connect slotWidgetDestructed to
        the destroyed signal. Instead FrameView calls setQWidget(0) on us.
        (WebCore::RenderWidget::eventFilter): Removed use of QFocusEvent::reason, which is
        never "popup" in WebCore.

        * WebCore+SVG/kdom.h:
        * css/css_stylesheetimpl.cpp:
        * css/css_valueimpl.cpp:
        * css/cssparser.cpp:
        * kcanvas/KCanvasCreator.cpp:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/RenderPath.cpp:
        * khtml/ecma/xmlserializer.cpp:
        * khtml/html/html_baseimpl.cpp:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        * ksvg2/svg/SVGPathSegLinetoImpl.cpp:
        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
        * ksvg2/svg/SVGTransformImpl.cpp:
        * platform/StringImpl.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/render_box.cpp:
        * rendering/render_canvas.cpp:
        * rendering/render_flow.cpp:
        * rendering/render_form.cpp:
        * rendering/render_layer.cpp:
        * rendering/render_style.cpp:
        Removed includes of <kdebug.h>.

        * css/css_base.cpp: (CSSSelector::selectorText):
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::wasRunByUserGesture):
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSRule::putValueProperty):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty):
        (KJS::DOMNode::putValueProperty):
        (KJS::DOMDocument::getValueProperty):
        * khtml/ecma/kjs_events.cpp:
        (KJS::DOMEvent::getValueProperty):
        (KJS::DOMUIEvent::getValueProperty):
        (KJS::DOMMouseEvent::getValueProperty):
        (KJS::DOMKeyboardEvent::getValueProperty):
        (KJS::Clipboard::getValueProperty):
        (KJS::Clipboard::putValueProperty):
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::getValueProperty):
        (KJS::KJS::HTMLDocument::putValueProperty):
        (KJS::HTMLElement::anchorGetter):
        (KJS::HTMLElement::areaGetter):
        (KJS::KJS::HTMLElementFunction::callAsFunction):
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::DOMNodeIterator::getValueProperty):
        (KJS::DOMTreeWalker::getValueProperty):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Screen::getValueProperty):
        (KJS::Window::scheduleClose):
        (KJS::Window::isSafeScript):
        (KJS::Window::clear):
        (KJS::LocationFunc::callAsFunction):
        (KJS::History::getValueProperty):
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp:
        (SVGAnimateColorElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimateElementImpl.cpp:
        (SVGAnimateElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimateTransformElementImpl.cpp:
        (SVGAnimateTransformElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        (SVGAnimationElementImpl::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElementImpl.cpp:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        (WebCore::SVGDocumentImpl::finishedParsing):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::updateValueInSpecifiedUnits):
        Removed use of kdWarning, kdDebug, etc.

2006-02-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - port QString to win32

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/QString.cpp:
        (strncasecmp):
        (QString::mid):
        (freeHandle):

2006-02-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        <rdar://problem/4449442> GMAIL: XMLHttpRequest does not correctly report "Interactive" state on receipt of load data
        Also cleaned up spacing a little.

        No layout test possible (local loads are non incremental).

        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::changeState):
        (WebCore::XMLHttpRequest::slotData):

2006-02-20  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7318
          REGRESSION: Timer bug causes gif animation and (html and JS) page forwarding to fail

        Timers were stopping firing after a while.

        My testing makes this look like a CFRunLoopTimer bug, and it would be nice to reproduce
        this with a standalone test and report it to the CF team, but in the mean time, change
        to create a new timer each time instead of reusing the existing timer.

        * platform/mac/SharedTimerMac.cpp:
        (WebCore::setSharedTimerFiredFunction): Added an assertion.
        (WebCore::setSharedTimerFireTime): Destroy the existing timer and create a new one every time.
        Also create a non-repeating timer rather than a repeating timer.
        (WebCore::stopSharedTimer): Destroy the existing timer rather than setting its fire date
        far into the future.

2006-02-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - cut out a little unneeded bridge code

        * bridge/mac/WebCoreFrameBridge.h: Removed frame name from createWindowWithURL: method
        and changed it to return a page bridge. Also made createModalDialogWithURL: method
        return a page bridge. Removed the mainFrame and webView methods.
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge nextFrameWithWrap:]): Use page to get to main frame.
        (-[WebCoreFrameBridge setFrameNamespace:]): Ditto.
        (-[WebCoreFrameBridge frameNamespace]): Ditto.
        (-[WebCoreFrameBridge _shouldAllowAccessFrom:]): Ditto.
        (-[WebCoreFrameBridge _frameInAnyWindowNamed:sourceFrame:]): Ditto.
        (-[WebCoreFrameBridge findFrameNamed:]): Ditto.
        (-[WebCoreFrameBridge installInFrame:]): Ditto.

        * bridge/mac/WebCorePageBridge.h: Added outerView method to replace webView method
        on the frame bridge.

        * bridge/mac/BrowserExtensionMac.mm: (WebCore::BrowserExtensionMac::createNewWindow):
        Update to use a page bridge instead of frame bridge.

2006-02-19  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Anders.
        
        - renamed ERROR to LOG_ERROR because some operating systems define ERROR in a system header

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::passMouseDownEventToWidget):
        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue):
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * editing/Selection.cpp:
        (WebCore::Selection::toRange):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFEBlendQuartz::getCIFilter):
        (WebCore::KCanvasFEColorMatrixQuartz::getCIFilter):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::createResource):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::parseErrorFunc):
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::ascent):
        (QFontMetrics::descent):
        (QFontMetrics::lineSpacing):
        (QFontMetrics::xHeight):
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::checkSelectionPoint):
        * kwq/KWQKConfigBase.mm:
        (KConfig::readEntry):
        (KConfig::readNumEntry):
        (KConfig::readUnsignedNumEntry):
        * kwq/KWQLineEdit.mm:
        (KWQNSTextAlignmentForAlignmentFlags):
        * kwq/KWQObject.cpp:
        (QObject::connect):
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::restore):
        (WebCore::QPainter::drawFocusRing):
        * kwq/KWQRegExp.cpp:
        (QRegExp::KWQRegExpPrivate::compile):
        (QRegExp::match):
        * kwq/KWQSignal.cpp:
        (KWQSignal::connect):
        (KWQSignal::disconnect):
        * kwq/KWQSlot.cpp:
        (KWQSlot::KWQSlot):
        * kwq/KWQTextCodec.cpp:
        (KWQTextDecoder::createICUConverter):
        (KWQTextDecoder::convertUsingICU):
        * kwq/WebCoreTextRendererFactory.mm:
        (-[WebCoreTextRendererFactory fontWithFamilies:traits:size:]):
        (-[WebCoreTextRendererFactory isFontFixedPitch:]):
        (-[WebCoreTextRendererFactory rendererWithFont:]):
        * page/Frame.cpp:
        (WebCore::Frame::paint):

2006-02-17  Maciej Stachowiak <mjs@apple.com>

        Reviewed by Dave Hyatt.

        - fix win32 build

        * css/css_grammar.y: 
        * khtml/html/html_objectimpl.cpp: #ifdef out all bindings code
        (WebCore::HTMLAppletElementImpl::~HTMLAppletElementImpl):
        (WebCore::HTMLAppletElementImpl::detach):
        (WebCore::HTMLEmbedElementImpl::~HTMLEmbedElementImpl):
        (WebCore::HTMLEmbedElementImpl::detach):
        (WebCore::HTMLObjectElementImpl::~HTMLObjectElementImpl):
        (WebCore::HTMLObjectElementImpl::detach):
        * khtml/html/html_objectimpl.h:

2006-02-18  Alexander Kellett  <lypanov@kde.org>

        Reviewed by Maciej.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=7199.

        Testcase: 
          svg/custom/text-gradient-no-content.svg

        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (WebCore::KRenderingPaintServerGradientQuartz::teardown):

2006-02-18  David Harrison  <harrison@apple.com>

        Reviewed by John.

        <rdar://problem/4448212> _accessibilityTableCell please remove this.

        Remove override of a defamed AX method.

        * kwq/KWQListBox.mm:
        Dump _accessibilityTableCell.

2006-02-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/css/ex-after-font-variant.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4227
          The ex unit doesn't work for font-variant: small-caps

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations): Added CSS_PROP_FONT_VARIANT to the properties
        that need to be applied first, since it dirties the font.

2006-02-17  Adele Peterson  <adele@apple.com>

        Reviewed by Beth.

        Adding isEdited/setEdited hooks so onChange will fire for the new text fields.

        * rendering/RenderTextField.cpp:
        (WebCore::m_dirty):
        (WebCore::RenderTextField::updateFromElement): setEdited to false when value attribute has changed.
        (WebCore::RenderTextField::subtreeHasChanged): setEdited to true when anonymous editable div has changed.
        * rendering/RenderTextField.h:
        (WebCore::RenderTextField::isEdited):
        (WebCore::RenderTextField::setEdited):
        (WebCore::RenderTextField::isTextField):

2006-02-17  Vicki Murley <vicki@apple.com>

        Reviewed by Justin.
 
        Get rid of handleFocusOut on text fields and textareas - move this functionality to the place
        where we resign focus on the previous node in setFocusNode.  Add isTextField on RenderObject
        as one way to distinguish from contenteditable elements - Win IE does not fire onChange for 
        contenteditable elements, so we won't either. Also, expose the dirty bit variables previously 
        checked in handleFocusOut methods in isEdited() and setEdited().

        Fixes the following bugs:
        <rdar://problem/4315673> REGRESSION (1.2.2 - 1.3): onChange and onFocus events firing order differs for mouse click and tab (7227)
        <rdar://problem/4447009> for text fields, onChange should fire before onBlur to match Win IE

        Test case is on the way.

        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::setFocusNode): For textareas and text fields, fire a change event
        on the node that is resigning focus.  Make sure the blur event fires after the change event - 4447009.
        * rendering/render_form.cpp:
        (WebCore::RenderLineEdit::slotReturnPressed): Replace call to handleFocusOut with equivalent code.
        (WebCore::RenderLineEdit::isEdited): Added.
        (WebCore::RenderLineEdit::setEdited): Added.
        (WebCore::RenderTextArea::setEdited): Added.
        * rendering/render_form.h:
        (WebCore::RenderLineEdit::isTextField): Added.
        (WebCore::RenderTextArea::isTextArea): Make this non-virtual.
        (WebCore::RenderTextArea::isEdited): Added.
        * rendering/render_object.h:
        (WebCore::RenderObject::isEdited): Added.
        (WebCore::RenderObject::setEdited): Added.
        (WebCore::RenderObject::isTextField): Added.
        * rendering/render_replaced.h: Remove handleFocusOut().
        * rendering/render_replaced.cpp: Ditto.
        (WebCore::RenderWidget::eventFilter): Remove call to handleFocusOut().  Safe to do here,
        since we call setFocusNode immediately beforehand.

2006-02-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/parser/nofoo-tags-inside-paragraph.html

        Reviewed by Anders Carlsson.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7265
          REGRESSION: noscript, noframes, nolayer, noembed tags insert break inside paragraph tag

        * khtml/html/htmlparser.cpp:
        (HTMLParser::isInline): Treat noframes, nolayer, noembed and skipped noscript
        as inline elements.

2006-02-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7235
          Pure CSS Tooltips method renders wrong and creates artifacts

        * manual-tests/bugzilla-7235.html: Added.
        * rendering/render_box.cpp:
        (WebCore::RenderBox::absolutePosition): Copied in here the logic for positioning
        relative to a relpositioned inline from RenderLayer::updateLayerPosition.
        (WebCore::RenderBox::computeAbsoluteRepaintRect): Ditto.

2006-02-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/css/universal-hover-quirk.html

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7218
          Text underlined on mouse over

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::checkOneSelector): Prevent *:hover and *:active
        from matching anything in quirks mode.

2006-02-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/text/whitespace/pre-wrap-spaces-after-newline.html

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7216
          white-space: pre-wrap collapses leading whitespace following a newline

        * rendering/bidi.cpp:
        (khtml::RenderBlock::bidiReorderLine): Use previousLineBrokeCleanly instead of
        resetBidiAtEnd now that the former is always correct.
        (khtml::RenderBlock::layoutInlineChildren): Use new skipTrailingNewline flag.
        (khtml::RenderBlock::findNextLineBreak): Set previousLineBrokeCleanly for line breaks
        caused by newlines as well. Added skipTrailingNewline flag.

2006-02-16  Tim Omernick  <timo@apple.com>

        Reviewed by Adele.

        <rdar://problem/4193286> enabledPlugin returns a non-NULL object even when plugins are
        disabled (4140)

        * khtml/ecma/kjs_navigator.cpp:
        (KJS::MimeType::getValueProperty):
        Only return a Plugin object for the "enabledPlugin" property if plugins are enabled.  This
        matches what other browsers do.
        
2006-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Eric and Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7310
          fix leaks by using RefPtr more

        * bindings/objc/DOM.mm:
        (-[DOMDocument adoptNode:]):
        (-[DOMDocument createElement:]):
        (-[DOMDocument createDocumentFragment]):
        (-[DOMDocument createTextNode:]):
        (-[DOMDocument createComment:]):
        (-[DOMDocument createCDATASection:]):
        (-[DOMDocument createProcessingInstruction::]):
        (-[DOMDocument createEntityReference:]):
        (-[DOMDocument importNode::]):
        (-[DOMDocument createElementNS::]):
        (-[DOMDocument createRange]):
        (-[DOMDocument createCSSStyleDeclaration]):
        (-[DOMDocument createNodeIterator::::]):
        (-[DOMDocument createTreeWalker::::]):
        * bindings/objc/DOMCSS.mm:
        (-[DOMCSSStyleDeclaration getPropertyCSSValue:]):
        * bindings/objc/DOMEvents.mm:
        (-[DOMDocument createEvent:]):
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame):
        (WebCore::MacFrame::freeClipboard):
        (WebCore::MacFrame::setView):
        (WebCore::MacFrame::wheelEvent):
        (WebCore::MacFrame::openURLFromPageCache):
        (WebCore::MacFrame::mouseDownViewIfStillGood):
        (WebCore::MacFrame::khtmlMouseMoveEvent):
        (WebCore::MacFrame::dispatchCPPEvent):
        (WebCore::MacFrame::mouseDown):
        (WebCore::MacFrame::mouseDragged):
        (WebCore::MacFrame::mouseUp):
        (WebCore::MacFrame::mouseMoved):
        (WebCore::MacFrame::sendContextMenuEvent):
        (WebCore::MacFrame::dispatchDragSrcEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge convertToDOMRange:]):
        (-[WebCoreFrameBridge convertNSRangeToDOMRange:]):
        (-[WebCoreFrameBridge selectNSRange:]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        (-[WebCoreFrameBridge typingStyle]):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreFrameBridge concludeDragForDraggingInfo:]):
        * css/css_computedstyle.cpp:
        (WebCore::CSSComputedStyleDeclarationImpl::CSSComputedStyleDeclarationImpl):
        (WebCore::CSSComputedStyleDeclarationImpl::cssText):
        (WebCore::CSSComputedStyleDeclarationImpl::setCssText):
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclarationImpl::getPropertyValue):
        (WebCore::CSSComputedStyleDeclarationImpl::removeProperty):
        (WebCore::CSSComputedStyleDeclarationImpl::setProperty):
        (WebCore::CSSComputedStyleDeclarationImpl::item):
        (WebCore::CSSComputedStyleDeclarationImpl::copyInheritableProperties):
        (WebCore::CSSComputedStyleDeclarationImpl::copy):
        (WebCore::CSSComputedStyleDeclarationImpl::makeMutable):
        * css/css_computedstyle.h:
        * css/css_grammar.y:
        * css/css_ruleimpl.cpp:
        (WebCore::CSSStyleRuleImpl::~CSSStyleRuleImpl):
        (WebCore::CSSStyleRuleImpl::setDeclaration):
        * css/css_ruleimpl.h:
        (DOM::CSSStyleRuleImpl::style):
        (DOM::CSSStyleRuleImpl::declaration):
        * css/css_valueimpl.cpp:
        (WebCore::propertyID):
        (WebCore::quoteStringIfNeeded):
        (WebCore::CSSStyleDeclarationImpl::getPropertyCSSValue):
        (WebCore::CSSStyleDeclarationImpl::getPropertyValue):
        (WebCore::CSSStyleDeclarationImpl::getPropertyPriority):
        (WebCore::CSSStyleDeclarationImpl::getPropertyShorthand):
        (WebCore::CSSStyleDeclarationImpl::isPropertyImplicit):
        (WebCore::CSSStyleDeclarationImpl::setProperty):
        (WebCore::CSSStyleDeclarationImpl::removeProperty):
        (WebCore::CSSStyleDeclarationImpl::isPropertyName):
        (WebCore::CSSMutableStyleDeclarationImpl::getPropertyValue):
        (WebCore::CSSMutableStyleDeclarationImpl::get4Values):
        (WebCore::CSSMutableStyleDeclarationImpl::getShortHandValue):
        (WebCore::CSSMutableStyleDeclarationImpl::getPropertyCSSValue):
        (WebCore::CSSMutableStyleDeclarationImpl::removeProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::setProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::setStringProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::setImageProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::parseDeclaration):
        (WebCore::CSSMutableStyleDeclarationImpl::setLengthProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::item):
        (WebCore::CSSMutableStyleDeclarationImpl::cssText):
        (WebCore::CSSMutableStyleDeclarationImpl::setCssText):
        (WebCore::CSSMutableStyleDeclarationImpl::copyBlockProperties):
        (WebCore::CSSStyleDeclarationImpl::copyPropertiesInSet):
        (WebCore::CSSMutableStyleDeclarationImpl::removePropertiesInSet):
        (WebCore::CSSMutableStyleDeclarationImpl::makeMutable):
        (WebCore::CSSMutableStyleDeclarationImpl::copy):
        (WebCore::CSSInheritedValueImpl::cssText):
        (WebCore::CSSInitialValueImpl::cssText):
        (WebCore::CSSValueListImpl::append):
        (WebCore::CSSValueListImpl::cssText):
        (WebCore::CSSPrimitiveValueImpl::CSSPrimitiveValueImpl):
        (WebCore::CSSPrimitiveValueImpl::cleanup):
        (WebCore::CSSPrimitiveValueImpl::setStringValue):
        (WebCore::CSSPrimitiveValueImpl::getStringValue):
        (WebCore::CSSPrimitiveValueImpl::parseString):
        (WebCore::CSSPrimitiveValueImpl::cssText):
        (WebCore::CSSImageValueImpl::CSSImageValueImpl):
        (WebCore::CSSBorderImageValueImpl::CSSBorderImageValueImpl):
        (WebCore::CSSBorderImageValueImpl::cssText):
        (WebCore::FontFamilyValueImpl::FontFamilyValueImpl):
        (WebCore::FontFamilyValueImpl::cssText):
        (WebCore::FontValueImpl::cssText):
        (WebCore::ShadowValueImpl::ShadowValueImpl):
        (WebCore::ShadowValueImpl::cssText):
        (WebCore::CSSProperty::cssText):
        * css/css_valueimpl.h:
        (WebCore::CSSValueImpl::setCssText):
        (WebCore::CSSValueListImpl::item):
        (WebCore::CSSPrimitiveValueImpl::getFloatValue):
        (WebCore::CSSPrimitiveValueImpl::getCounterValue):
        (WebCore::CSSPrimitiveValueImpl::getRectValue):
        (WebCore::CSSPrimitiveValueImpl::getRGBColorValue):
        (WebCore::CSSPrimitiveValueImpl::getPairValue):
        (WebCore::CSSPrimitiveValueImpl::getDashboardRegionValue):
        (WebCore::CSSPrimitiveValueImpl::):
        (WebCore::CSSQuirkPrimitiveValueImpl::CSSQuirkPrimitiveValueImpl):
        (WebCore::CounterImpl::identifier):
        (WebCore::CounterImpl::listStyle):
        (WebCore::CounterImpl::separator):
        (WebCore::RectImpl::top):
        (WebCore::RectImpl::right):
        (WebCore::RectImpl::bottom):
        (WebCore::RectImpl::left):
        (WebCore::RectImpl::setTop):
        (WebCore::RectImpl::setRight):
        (WebCore::RectImpl::setBottom):
        (WebCore::RectImpl::setLeft):
        (WebCore::PairImpl::first):
        (WebCore::PairImpl::second):
        (WebCore::PairImpl::setFirst):
        (WebCore::PairImpl::setSecond):
        (WebCore::DashboardRegionImpl::DashboardRegionImpl):
        (WebCore::FontFamilyValueImpl::fontName):
        (WebCore::CSSProperty::CSSProperty):
        (WebCore::CSSProperty::value):
        (WebCore::CSSMutableStyleDeclarationImpl::setNode):
        (WebCore::CSSMutableStyleDeclarationImpl::setProperty):
        (WebCore::CSSMutableStyleDeclarationImpl::removeProperty):
        * css/cssparser.cpp:
        (CSSParser::createStyleDeclaration):
        (CSSParser::parseDashboardRegions):
        * css/cssparser.h:
        (WebCore::Value::):
        (WebCore::qString):
        (WebCore::domString):
        (WebCore::atomicString):
        (WebCore::ValueList::current):
        (WebCore::ValueList::next):
        (WebCore::CSSParser::current):
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/DOMImplementationImpl.cpp:
        (DOM::DOMImplementationImpl::createDocument):
        (DOM::DOMImplementationImpl::instance):
        * dom/DOMImplementationImpl.h:
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl):
        (WebCore::DocumentImpl::~DocumentImpl):
        (WebCore::DocumentImpl::setDocType):
        (WebCore::DocumentImpl::createElement):
        (WebCore::DocumentImpl::createDocumentFragment):
        (WebCore::DocumentImpl::createTextNode):
        (WebCore::DocumentImpl::createComment):
        (WebCore::DocumentImpl::createCDATASection):
        (WebCore::DocumentImpl::createProcessingInstruction):
        (WebCore::DocumentImpl::createEntityReference):
        (WebCore::DocumentImpl::createEditingTextNode):
        (WebCore::DocumentImpl::createCSSStyleDeclaration):
        (WebCore::DocumentImpl::importNode):
        (WebCore::DocumentImpl::adoptNode):
        (WebCore::DocumentImpl::createElementNS):
        (WebCore::DocumentImpl::setTitle):
        (WebCore::DocumentImpl::createRange):
        (WebCore::DocumentImpl::createNodeIterator):
        (WebCore::DocumentImpl::createTreeWalker):
        (WebCore::DocumentImpl::setStyleSheet):
        (WebCore::DocumentImpl::setHoverNode):
        (WebCore::DocumentImpl::setActiveNode):
        (WebCore::DocumentImpl::setFocusNode):
        (WebCore::DocumentImpl::defaultView):
        (WebCore::DocumentImpl::createEvent):
        (WebCore::DocumentImpl::setHTMLWindowEventListener):
        (WebCore::DocumentImpl::addWindowEventListener):
        (WebCore::DocumentImpl::createHTMLEventListener):
        (WebCore::DocumentImpl::images):
        (WebCore::DocumentImpl::applets):
        (WebCore::DocumentImpl::embeds):
        (WebCore::DocumentImpl::objects):
        (WebCore::DocumentImpl::links):
        (WebCore::DocumentImpl::forms):
        (WebCore::DocumentImpl::anchors):
        (WebCore::DocumentImpl::all):
        (WebCore::DocumentImpl::windowNamedItems):
        (WebCore::DocumentImpl::documentNamedItems):
        (WebCore::DocumentImpl::getElementsByName):
        * dom/DocumentImpl.h:
        (WebCore::DocumentImpl::realDocType):
        (WebCore::DocumentImpl::createAttribute):
        (WebCore::DocumentImpl::title):
        (WebCore::DocumentImpl::styleSelector):
        (WebCore::DocumentImpl::setRestoreState):
        (WebCore::DocumentImpl::restoreState):
        (WebCore::DocumentImpl::view):
        (WebCore::DocumentImpl::docLoader):
        (WebCore::DocumentImpl::tokenizer):
        (WebCore::DocumentImpl::focusNode):
        (WebCore::DocumentImpl::hoverNode):
        (WebCore::DocumentImpl::activeNode):
        (WebCore::DocumentImpl::policyBaseURL):
        (WebCore::DocumentImpl::setPolicyBaseURL):
        (WebCore::DocumentImpl::):
        (WebCore::DocumentImpl::transformSourceDocument):
        (WebCore::DocumentImpl::domTreeVersion):
        (WebCore::DocumentImpl::decoder):
        * dom/NodeListImpl.cpp:
        (DOM::NodeListImpl::NodeListImpl):
        (DOM::NodeListImpl::~NodeListImpl):
        (DOM::NodeListImpl::recursiveLength):
        (DOM::NodeListImpl::recursiveItem):
        (DOM::NodeListImpl::itemById):
        * dom/NodeListImpl.h:
        * dom/dom2_eventsimpl.cpp:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        * dom/dom2_eventsimpl.h:
        (WebCore::operator!=):
        * dom/dom2_traversalimpl.cpp:
        (DOM::TraversalImpl::TraversalImpl):
        (DOM::NodeIteratorImpl::NodeIteratorImpl):
        (DOM::TreeWalkerImpl::TreeWalkerImpl):
        * dom/dom2_traversalimpl.h:
        (WebCore::TraversalImpl::root):
        (WebCore::TraversalImpl::filter):
        (WebCore::NodeIteratorImpl::referenceNode):
        (WebCore::NodeIteratorImpl::setPointerBeforeReferenceNode):
        (WebCore::NodeIteratorImpl::setDetached):
        (WebCore::NodeIteratorImpl::document):
        (WebCore::TreeWalkerImpl::currentNode):
        * dom/dom_position.cpp:
        (WebCore::Position::computedStyle):
        * dom/dom_position.h:
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::insertErrorMessageBlock):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::createFontElement):
        (WebCore::createStyleSpanElement):
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::updateStartEnd):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::extractTextDecorationStyle):
        (WebCore::ApplyStyleCommand::extractAndNegateTextDecorationStyle):
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        (WebCore::ApplyStyleCommand::computedFontSize):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::style):
        * editing/EditCommand.cpp:
        (WebCore::EditCommandPtr::setTypingStyle):
        (WebCore::EditCommand::setTypingStyle):
        (WebCore::EditCommand::styleAtPosition):
        * editing/EditCommand.h:
        (WebCore::EditCommand::document):
        (WebCore::EditCommand::typingStyle):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::InsertLineBreakCommand):
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::computeAndStoreNodeDesiredStyle):
        (WebCore::NodeDesiredStyle::NodeDesiredStyle):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::NodeDesiredStyle::node):
        (WebCore::NodeDesiredStyle::style):
        (WebCore::ReplacementFragment::root):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::createDefaultParagraphElement):
        (WebCore::createBreakElement):
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        (WebCore::createParagraphContentsFromString):
        * editing/visible_text.cpp:
        (khtml::TextIterator::rangeFromLocationAndLength):
        * editing/visible_text.h:
        (WebCore::isCollapsibleWhitespace):
        (WebCore::WordAwareIterator::range):
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::cssPropertyGetter):
        (KJS::DOMCSSStyleDeclarationProtoFunc::callAsFunction):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDocumentProtoFunc::callAsFunction):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLSelectCollection::put):
        (KJS::OptionConstructorImp::construct):
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::createContextualFragment):
        (WebCore::HTMLElementImpl::setInnerHTML):
        (WebCore::HTMLElementImpl::setOuterHTML):
        (WebCore::HTMLElementImpl::setOuterText):
        * khtml/html/HTMLElementImpl.h:
        * khtml/html/HTMLNameCollectionImpl.cpp:
        (WebCore::HTMLNameCollectionImpl::HTMLNameCollectionImpl):
        (WebCore::HTMLNameCollectionImpl::traverseNextItem):
        * khtml/html/HTMLNameCollectionImpl.h:
        * khtml/html/html_documentimpl.cpp:
        (WebCore::HTMLDocumentImpl::createElement):
        * khtml/html/html_documentimpl.h:
        (WebCore::HTMLDocumentImpl::collectionInfo):
        * khtml/html/htmlfactory.cpp:
        (DOM::htmlConstructor):
        (DOM::headConstructor):
        (DOM::bodyConstructor):
        (DOM::baseConstructor):
        (DOM::linkConstructor):
        (DOM::metaConstructor):
        (DOM::styleConstructor):
        (DOM::titleConstructor):
        (DOM::frameConstructor):
        (DOM::framesetConstructor):
        (DOM::iframeConstructor):
        (DOM::formConstructor):
        (DOM::buttonConstructor):
        (DOM::inputConstructor):
        (DOM::isindexConstructor):
        (DOM::fieldsetConstructor):
        (DOM::labelConstructor):
        (DOM::legendConstructor):
        (DOM::optgroupConstructor):
        (DOM::optionConstructor):
        (DOM::selectConstructor):
        (DOM::textareaConstructor):
        (DOM::dlConstructor):
        (DOM::ulConstructor):
        (DOM::olConstructor):
        (DOM::dirConstructor):
        (DOM::menuConstructor):
        (DOM::liConstructor):
        (DOM::blockquoteConstructor):
        (DOM::divConstructor):
        (DOM::headingConstructor):
        (DOM::hrConstructor):
        (DOM::paragraphConstructor):
        (DOM::preConstructor):
        (DOM::basefontConstructor):
        (DOM::fontConstructor):
        (DOM::modConstructor):
        (DOM::anchorConstructor):
        (DOM::imageConstructor):
        (DOM::mapConstructor):
        (DOM::areaConstructor):
        (DOM::canvasConstructor):
        (DOM::appletConstructor):
        (DOM::embedConstructor):
        (DOM::objectConstructor):
        (DOM::paramConstructor):
        (DOM::scriptConstructor):
        (DOM::tableConstructor):
        (DOM::tableCaptionConstructor):
        (DOM::tableColConstructor):
        (DOM::tableRowConstructor):
        (DOM::tableCellConstructor):
        (DOM::tableSectionConstructor):
        (DOM::brConstructor):
        (DOM::quoteConstructor):
        (DOM::marqueeConstructor):
        (DOM::HTMLElementFactory::createHTMLElement):
        * khtml/html/htmlfactory.h:
        * khtml/html/htmlparser.cpp:
        (HTMLParser::parseToken):
        (HTMLParser::textCreateErrorCheck):
        (HTMLParser::commentCreateErrorCheck):
        (HTMLParser::headCreateErrorCheck):
        (HTMLParser::bodyCreateErrorCheck):
        (HTMLParser::framesetCreateErrorCheck):
        (HTMLParser::iframeCreateErrorCheck):
        (HTMLParser::formCreateErrorCheck):
        (HTMLParser::isindexCreateErrorCheck):
        (HTMLParser::selectCreateErrorCheck):
        (HTMLParser::ddCreateErrorCheck):
        (HTMLParser::dtCreateErrorCheck):
        (HTMLParser::nestedCreateErrorCheck):
        (HTMLParser::nestedStyleCreateErrorCheck):
        (HTMLParser::tableCellCreateErrorCheck):
        (HTMLParser::tableSectionCreateErrorCheck):
        (HTMLParser::noembedCreateErrorCheck):
        (HTMLParser::noframesCreateErrorCheck):
        (HTMLParser::noscriptCreateErrorCheck):
        (HTMLParser::mapCreateErrorCheck):
        (HTMLParser::getNode):
        * khtml/html/htmlparser.h:
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * khtml/html/htmltokenizer.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::createSVGEventListener):
        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        (SVGDOMImplementationImpl::createDocumentType):
        (SVGDOMImplementationImpl::createDocument):
        (SVGDOMImplementationImpl::createCSSStyleSheet):
        * ksvg2/svg/SVGDOMImplementationImpl.h:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        (WebCore::SVGDocumentImpl::createElement):
        (WebCore::SVGDocumentImpl::dispatchZoomEvent):
        (WebCore::SVGDocumentImpl::dispatchKeyEvent):
        (WebCore::SVGDocumentImpl::dispatchUIEvent):
        (WebCore::SVGDocumentImpl::dispatchMouseEvent):
        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGElementImpl.cpp:
        (WebCore::SVGElementImpl::addSVGEventListener):
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (WebCore::SVGSVGElementImpl::addSVGWindowEventListner):
        * page/Frame.cpp:
        (WebCore::Frame::view):
        (WebCore::Frame::begin):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionHasStyle):
        (WebCore::Frame::selectionStartHasStyle):
        (WebCore::Frame::selectionStartStylePropertyValue):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::forceLayout):
        (WebCore::Frame::sendResizeEvent):
        (WebCore::Frame::sendScrollEvent):
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::styleForSelectionStart):
        * page/FramePrivate.h:
        * page/FrameTree.h:
        (WebCore::FrameTree::name):

2006-02-16  David Harrison  <harrison@apple.com>

        Reviewed by Darin.

        Test:
        * manual-tests/mail-attachments.html: Added.
        Automated test not currently possible because widgets do not actually draw when not in a window.
        Geoff and Justin are fixing that and will add this test.

        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget):
        Fix unique param check when processing object tag attributes.

2006-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=7113
        Typing in editable overflow:hidden div doesn't scroll

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge ensureSelectionVisible]):
          Changed scrollRectToVisible call so that it will align to the edge instead of trying to center the selection.  
          Centering looks funny when it happens after typing, deleting, moving the cursor, etc.
        * rendering/render_layer.cpp: (WebCore::RenderLayer::scrollRectToVisible):
          Use scrollWidth() and scrollHeight() functions instead of m_scrollWidth and m_scrollHeight.  
          These functions will cause the correct scroll dimensions to be calculated for overflow:hidden layers.
          Also subtracted scrollbar width and height when calculating the layer bounds. This was causing scroll problems in overflow:scroll.
          I also did some cleanup to use xPos() and yPos() instead of m_x and m_y, and to use scrollYOffset() instead of m_scrollY.

2006-02-16  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6812
        Missing focus ring on new text fields

        Tests:
        * fast/forms/input-appearance-focus.html: Updated.

        * rendering/render_object.cpp: (WebCore::RenderObject::paintOutline): 
         call supportsFocusRing instead of checking the appearance.
        * rendering/render_theme.cpp: (khtml::RenderTheme::supportsFocusRing): Added. 
         Checks appearance.  Theme will draw focus ring if there's an appearance, but not for the new text fields.
        * rendering/render_theme.h:

2006-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - eliminate QFrame and QObject::inherits, fix some strange stuff
          in RenderCanvas that showed up when I tested that change

        * kwq/KWQFrame.h: Removed.
        * kwq/KWQFrame.mm: Removed.

        * bridge/mac/FrameViewMac.mm: Added.

        * WebCore.xcodeproj/project.pbxproj: Updated for adds and removes.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for removes.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:]):
        * khtml/ecma/kjs_window.cpp:
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject doAXTextMarkerForPosition:]):
        * kwq/KWQRenderTreeDebug.cpp:
        (write):
        * page/Frame.cpp:
        (WebCore::isFrameElement):
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        Change QObject::inherits callers to call the "is" functions directly.

        * kwq/KWQObject.h:
        * kwq/KWQObject.cpp: Removed QObject::inherits, QObject::isQFrame,
        and QObject::isQScrollView.

        * kwq/KWQScrollView.h: Inherit from Widget instead of QFrame.
        Remove isQScrollView.
        * kwq/KWQScrollView.mm: Remove isQScrollView.

        * page/FrameView.h:
        * page/FrameView.cpp: Changed underMouse and clickNode to be RefPtr.
        Added m_hasBorder.
        (WebCore::FrameViewPrivate::FrameViewPrivate):
        (WebCore::FrameViewPrivate::~FrameViewPrivate):
        (WebCore::FrameViewPrivate::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::viewportMousePressEvent):
        (WebCore::FrameView::invalidateClick):
        (WebCore::FrameView::viewportMouseReleaseEvent):
        (WebCore::FrameView::keyPressEvent):
        (WebCore::FrameView::dispatchDragEvent): Use RefPtr for MouseEventImpl.
        (WebCore::FrameView::nodeUnderMouse):
        (WebCore::FrameView::dispatchMouseEvent):
        (WebCore::FrameView::setHasBorder): Added.
        (WebCore::FrameView::hasBorder): Added.
        (WebCore::FrameView::borderWidth): Added.

        * rendering/render_canvas.h: Eliminated unneeded setWidth/Height overrides.
        Eliminated viewportWidth(), viewportHeight(), m_rootWidth, m_rootHeight,
        m_viewportWidth, and m_viewportHeight.
        * rendering/render_canvas.cpp:
        (RenderCanvas::calcHeight): Remove unneeded code to set height when there's
        no view.
        (RenderCanvas::calcWidth): Fix code to set width to visibleWidth(). Removed
        incorrect old width setting, and removed unneeded code to set width when
        there's no view. Also removed incorrect margin-setting code.
        (RenderCanvas::layout): Removed incorrect code to set width and height.
        Instead letting calcWidth and calcHeight do the job.
        (RenderCanvas::repaintViewRectangle): Use new FrameView::hasBorder instead
        of QFrame::frameStyle.
        (RenderCanvas::viewRect): Removed unneeded "root width" feature for a canvas
        without a view.

        * rendering/render_frames.cpp:
        (WebCore::RenderFrame::slotViewCleared): Use new setHasBorder.
        (WebCore::RenderPartObject::slotViewCleared): Ditto.

2006-02-17  Eric Seidel  <eseidel@apple.com>

        Reviewed by justing.

        Close several age-old leaks in xslt code.
        Tests already were catching these.

        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::loadChildSheets):
        (WebCore::XSLStyleSheetImpl::locateStylesheetSubResource):
        * khtml/xsl/xslt_processorimpl.cpp:
        (WebCore::docLoaderFunc):

2006-02-16  Tim Omernick  <timo@apple.com>

        Reviewed by Geoff.

        <rdar://problem/4428609> Flash Player 8.0.22 can crash Safari (and WebKit apps)
        with javascript disabled (7015)

        Added a test case, manual-tests/NPN_Invoke.  This is a skeleton of a Netscape
        plugin which uses NPN_Invoke() to call the window.alert() JavaScript function.
        
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::windowScriptNPObject):
        Removed the check Darin added to return 0 when JavaScript is disabled.
        This method cannot return 0, because plugins are not guaranteed to check
        for that.
        Removed my old fix for Radar 4428609 (7015) in favor of a better solution.
        Instead of creating a "dummy" JSObject to represent the window script object
        when JavaScript is disabled, we use the new JavaScriptCore bindings API to 
        create a "no script" NPObject.  This solution is better because it does not
        cause entry into any JavaScript interpreter code.

        * manual-tests/NPN_Invoke: Added.
        * manual-tests/NPN_Invoke/English.lproj: Added.
        * manual-tests/NPN_Invoke/English.lproj/Localized.r: Added.
        * manual-tests/NPN_Invoke/Info.plist: Added.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Added.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj: Added.
        * manual-tests/NPN_Invoke/main.c: Added.
        * manual-tests/NPN_Invoke/test.html: Added.

2006-02-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7274
          Assertion failure in TimerBase::checkHeapIndex() (Timer.cpp:199) !timerHeap->isEmpty()

        * platform/Timer.cpp:
        (WebCore::TimerBase::stop): Call setNextFireTime(0) unconditionally to make sure the timer
        is removed from timersReadyToFire so that fireTimers doesn't try to fire a deleted timer.

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, Eric.

        - WebCore half of fix for <rdar://problem/4176077> CrashTracer: 6569 
        crashes in DashboardClient at com.apple.JavaScriptCore: 
        KJS::Bindings::ObjcFallbackObjectImp::type() 

        WebCore and JavaScriptCore weren't sharing Instance objects very
        nicely. I made them use RefPtrs, and sent them to bed without dessert.

        * khtml/html/html_objectimpl.cpp: 
        (WebCore::HTMLAppletElementImpl::HTMLAppletElementImpl): Made 
        appletInstance a RefPtr
        (WebCore::HTMLAppletElementImpl::getAppletInstance):
        (WebCore::HTMLAppletElementImpl::detach):
        (WebCore::HTMLEmbedElementImpl::HTMLEmbedElementImpl): Made
        embedInstance a RefPtr
        (WebCore::HTMLEmbedElementImpl::getEmbedInstance):
        (WebCore::HTMLEmbedElementImpl::detach):
        (WebCore::HTMLObjectElementImpl::HTMLObjectElementImpl): Made
        objectInstance a RefPtr
        (WebCore::HTMLObjectElementImpl::getObjectInstance): 
        (WebCore::HTMLObjectElementImpl::detach):
        * bindings/js/JSDOMCore.cpp:
        * khtml/ecma/kjs_dom.cpp:
        (KJS::getRuntimeObject):
        * khtml/html/html_objectimpl.h:

2006-02-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Eric.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=4674
        LEAK: WheelEventImpl leaked when mousewheel used

        No test case because it requires manual mouse wheeling.

        * dom/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchWheelEvent): Use a RefPtr instead of just
        leaking the WheelEventImpl.

2006-02-15  Dave Hyatt <hyatt@apple.com>

        Make FontFamily compile on Win32 (just needed a few more
        __APPLE__ ifdefs).

        Clean up the frameBufferAtIndex method of the image decoders
        on Win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * kwq/KWQFont.h:
        * platform/FontFamily.cpp:
        (WebCore::FontFamily::FontFamily):
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/png/PNGImageDecoder.h:

2006-02-15  David Hyatt  <hyatt@apple.com>

        Make KWQFontFamily portable.  Split it out into a cross-platform core and the Mac-specific version.
        Move it to platform and rename it to FontFamily (and FontFamilyMac).

        Reviewed by eric

        * WebCore.xcodeproj/project.pbxproj:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * kwq/KWQFont.h:
        (QFont::firstFamily):
        * kwq/KWQFont.mm:
        (QFont::setFirstFamily):
        * kwq/KWQFontFamily.h: Removed.
        * kwq/KWQFontFamily.mm: Removed.
        * platform/FontFamily.cpp: Added.
        (WebCore::FontFamily::FontFamily):
        (WebCore::FontFamily::~FontFamily):
        (WebCore::FontFamily::operator=):
        (WebCore::FontFamily::setFamily):
        (WebCore::FontFamily::operator==):
        * platform/FontFamily.h: Added.
        (WebCore::FontFamily::family):
        (WebCore::FontFamily::familyIsEmpty):
        (WebCore::FontFamily::next):
        (WebCore::FontFamily::appendFamily):
        (WebCore::FontFamily::operator!=):
        (WebCore::FontFamily::ref):
        (WebCore::FontFamily::deref):
        * platform/mac/FontFamilyMac.mm: Added.
        (WebCore::retainDOMStringImpl):
        (WebCore::releaseDOMStringImpl):
        (WebCore::):
        (WebCore::FontFamily::getNSFamily):
        * rendering/font.h:
        (khtml::FontDef::firstFamily):

2006-02-15  Oliver Hunt  <ojh16@student.canterbury.ac.nz>

        Reviewed by eseidel.  Landed by eseidel.
        
        Implemented feDisplacementMap.
        http://bugs.webkit.org/show_bug.cgi?id=5862

        Test: svg/custom/feDisplacementMap-01.svg

        * WebCore.xcodeproj/project.pbxproj: added files.
        * kcanvas/KCanvasFilters.cpp:
        (WebCore::KCanvasFEDisplacementMap::externalRepresentation):
        * kcanvas/KCanvasFilters.h:
        (WebCore::KCanvasFEDisplacementMap::KCanvasFEDisplacementMap):
        (WebCore::KCanvasFEDisplacementMap::xChannelSelector):
        (WebCore::KCanvasFEDisplacementMap::setXChannelSelector):
        (WebCore::KCanvasFEDisplacementMap::yChannelSelector):
        (WebCore::KCanvasFEDisplacementMap::setYChannelSelector):
        (WebCore::KCanvasFEDisplacementMap::scale):
        (WebCore::KCanvasFEDisplacementMap::setScale):
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::getVectorForChannel):
        (WebCore::KCanvasFEDisplacementMapQuartz::getCIFilter):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (WebCore::KRenderingDeviceQuartz::createFilterEffect):
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.cikernel: Added.
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.h: Added.
        * kcanvas/device/quartz/filters/WKDisplacementMapFilter.m: Added.
        (+[WKDisplacementMapFilter initialize]):
        (+[WKDisplacementMapFilter filterWithName:]):
        (-[WKDisplacementMapFilter init]):
        (-[WKDisplacementMapFilter outputImage]):
        * ksvg2/svg/SVGFEDisplacementMapElementImpl.cpp: Added.
        (SVGFEDisplacementMapElementImpl::SVGFEDisplacementMapElementImpl):
        (SVGFEDisplacementMapElementImpl::~SVGFEDisplacementMapElementImpl):
        (SVGFEDisplacementMapElementImpl::in1):
        (SVGFEDisplacementMapElementImpl::in2):
        (SVGFEDisplacementMapElementImpl::xChannelSelector):
        (SVGFEDisplacementMapElementImpl::yChannelSelector):
        (SVGFEDisplacementMapElementImpl::scale):
        (SVGFEDisplacementMapElementImpl::stringToChannel):
        (SVGFEDisplacementMapElementImpl::parseMappedAttribute):
        (SVGFEDisplacementMapElementImpl::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElementImpl.h: Added.
        * ksvg2/svg/svgtags.in:

2006-02-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Commit change forgotten after editing directory move.

        * editing/markup.cpp:
        (khtml::startMarkup): add support for serializing DOCTYPEs in xml

2006-02-15  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6452
         KURL::appendEscapingBadChars() doesn't know about %u-escaping.

        Test case: fast/encoding/percent-escaping.html

        * kwq/KWQKURL.mm: (appendEscapingBadChars):
        Rather than adding support for %u, remove the existing
        "do what I mean" escaping of percent characters that do not
        look like a result of prior escaping.

2006-02-14  Eric Seidel  <eseidel@apple.com>

        Fix build failure from last minute edit.

        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::parseString):

2006-02-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Add incremental parsing support to XMLTokenizer.
        This patch also does a few other little things:
        - removes (unused) onHold support from Tokenizer
        - adds serialization of DOCTYPEs for xml documents
        - fixes xslt support to no longer depend on synchronous parsing
        - fixes css styling for pages where xsl recursion is blocked
        http://bugs.webkit.org/show_bug.cgi?id=6057

        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl):
        (WebCore::DocumentImpl::createProcessingInstruction):
        (WebCore::DocumentImpl::open):
        (WebCore::DocumentImpl::recalcStyleSelector):
        * dom/dom_xmlimpl.cpp:
        (WebCore::ProcessingInstructionImpl::checkStyleSheet):
        * dom/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        (WebCore::XMLTokenizer::write):
        (WebCore::XMLTokenizer::startElementNs):
        (WebCore::XMLTokenizer::error):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::finish):
        (WebCore::xmlDocPtrForString):
        (WebCore::parseAttributes):
        * dom/xml_tokenizer.h:
        * khtml/editing/markup.cpp:
        (khtml::startMarkup): DOCTYPE serialization
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer): removed onHold
        (WebCore::HTMLTokenizer::reset): removed onHold
        (WebCore::HTMLTokenizer::begin): removed onHold
        (WebCore::HTMLTokenizer::write): removed onHold
        (WebCore::HTMLTokenizer::finish): removed onHold
        * khtml/html/htmltokenizer.h: removed onHold support
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::XSLStyleSheetImpl):
        (WebCore::XSLStyleSheetImpl::~XSLStyleSheetImpl):
        (WebCore::XSLStyleSheetImpl::document):
        (WebCore::XSLStyleSheetImpl::setDocument):
        (WebCore::XSLStyleSheetImpl::parseString):
        (WebCore::XSLStyleSheetImpl::loadChildSheets):
        (WebCore::XSLStyleSheetImpl::compileStyleSheet):
        (WebCore::XSLStyleSheetImpl::locateStylesheetSubResource):
        * khtml/xsl/xsl_stylesheetimpl.h: moved functions to .cpp file

2006-02-14  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=6815
        Calculate correct width for new text fields

        Tests:
        fast/forms/input-appearance-width.html
        fast/forms/input-appearance-minWidth.html

        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::createDivStyle): Remove fixed width for text field.
        (WebCore::RenderTextField::calcMinMaxWidth): Added.  This calls RenderBlock::calcMinMaxWidth and 
         then uses the size attribute to determine what the maxWidth should be.
        * rendering/RenderTextField.h: Added calcMinMaxWidth.
        * rendering/render_theme_mac.h: Added adjustTextFieldStyle.
        * rendering/render_theme_mac.mm: 
        (WebCore::RenderThemeMac::adjustRepaintRect): Remove inflation of rect.  This is no longer necessary.
        (WebCore::RenderThemeMac::paintTextField): ditto.
        (WebCore::RenderThemeMac::setTextFieldCellState): change true to YES.
        (WebCore::RenderThemeMac::adjustTextFieldStyle): Added. This is the temporary home of the code to set the 
         right padding and margins.  When we flip the switch, this will go in html4.css.

2006-02-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.

        removed -[DOMHTMLSelectElement _optionLabels], formerly used only by Safari, now unused.

        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMPrivate.h:

2006-02-14  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Fixed <rdar://problem/4415050> STD: WebCore build steps use echo -n, which will change
        behavior due to POSIX version of sh

        * WebCore.xcodeproj/project.pbxproj: removed the use of echo -n, replaced with printf ""

2006-02-14  Darin Adler  <darin@apple.com>

        Rubber-stamped by Eric.

        - moved editing sources from khtml/editing to editing, and renamed files with single classes

        * WebCore.xcodeproj/project.pbxproj: Added new, removed old.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * bridge/mac/MacFrame.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * dom/DocumentImpl.cpp:
        * dom/dom2_rangeimpl.cpp:
        * dom/dom_position.cpp:
        * khtml/khtml_events.cpp:
        * kwq/KWQAccObject.mm:
        * kwq/KWQAccObjectCache.h:
        * kwq/KWQEditCommand.mm:
        * page/Frame.cpp:
        * page/FramePrivate.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderContainer.cpp:
        * rendering/RenderText.cpp:
        * rendering/render_br.cpp:
        * rendering/render_inline.cpp:
        * rendering/render_object.cpp:
        * rendering/render_replaced.cpp:
        Fixed up includes.

        * editing: Added.
        * editing/AppendNodeCommand.cpp: Added.
        * editing/AppendNodeCommand.h: Added.
        * editing/ApplyStyleCommand.cpp: Added.
        * editing/ApplyStyleCommand.h: Added.
        * editing/BreakBlockquoteCommand.cpp: Added.
        * editing/BreakBlockquoteCommand.h: Added.
        * editing/CompositeEditCommand.cpp: Added.
        * editing/CompositeEditCommand.h: Added.
        * editing/DeleteFromTextNodeCommand.cpp: Added.
        * editing/DeleteFromTextNodeCommand.h: Added.
        * editing/DeleteSelectionCommand.cpp: Added.
        * editing/DeleteSelectionCommand.h: Added.
        * editing/EditCommand.cpp: Added.
        * editing/EditCommand.h: Added.
        * editing/InsertIntoTextNodeCommand.cpp: Added.
        * editing/InsertIntoTextNodeCommand.h: Added.
        * editing/InsertLineBreakCommand.cpp: Added.
        * editing/InsertLineBreakCommand.h: Added.
        * editing/InsertNodeBeforeCommand.cpp: Added.
        * editing/InsertNodeBeforeCommand.h: Added.
        * editing/InsertParagraphSeparatorCommand.cpp: Added.
        * editing/InsertParagraphSeparatorCommand.h: Added.
        * editing/InsertTextCommand.cpp: Added.
        * editing/InsertTextCommand.h: Added.
        * editing/JoinTextNodesCommand.cpp: Added.
        * editing/JoinTextNodesCommand.h: Added.
        * editing/MergeIdenticalElementsCommand.cpp: Added.
        * editing/MergeIdenticalElementsCommand.h: Added.
        * editing/MoveSelectionCommand.cpp: Added.
        * editing/MoveSelectionCommand.h: Added.
        * editing/RebalanceWhitespaceCommand.cpp: Added.
        * editing/RebalanceWhitespaceCommand.h: Added.
        * editing/RemoveCSSPropertyCommand.cpp: Added.
        * editing/RemoveCSSPropertyCommand.h: Added.
        * editing/RemoveNodeAttributeCommand.cpp: Added.
        * editing/RemoveNodeAttributeCommand.h: Added.
        * editing/RemoveNodeCommand.cpp: Added.
        * editing/RemoveNodeCommand.h: Added.
        * editing/RemoveNodePreservingChildrenCommand.cpp: Added.
        * editing/RemoveNodePreservingChildrenCommand.h: Added.
        * editing/ReplaceSelectionCommand.cpp: Added.
        * editing/ReplaceSelectionCommand.h: Added.
        * editing/Selection.cpp:
        * editing/SelectionController.cpp:
        * editing/SetNodeAttributeCommand.cpp: Added.
        * editing/SetNodeAttributeCommand.h: Added.
        * editing/SplitElementCommand.cpp: Added.
        * editing/SplitElementCommand.h: Added.
        * editing/SplitTextNodeCommand.cpp: Added.
        * editing/SplitTextNodeCommand.h: Added.
        * editing/SplitTextNodeContainingElementCommand.cpp: Added.
        * editing/SplitTextNodeContainingElementCommand.h: Added.
        * editing/TypingCommand.cpp: Added.
        * editing/TypingCommand.h: Added.
        * editing/VisiblePosition.cpp: Added.
        * editing/VisiblePosition.h: Added.
        * editing/VisibleRange.cpp: Added.
        * editing/VisibleRange.h: Added.
        * editing/WrapContentsInDummySpanCommand.cpp: Added.
        * editing/WrapContentsInDummySpanCommand.h: Added.
        * editing/append_node_command.cpp: Removed.
        * editing/append_node_command.h: Removed.
        * editing/apply_style_command.cpp: Removed.
        * editing/apply_style_command.h: Removed.
        * editing/break_blockquote_command.cpp: Removed.
        * editing/break_blockquote_command.h: Removed.
        * editing/composite_edit_command.cpp: Removed.
        * editing/composite_edit_command.h: Removed.
        * editing/delete_from_text_node_command.cpp: Removed.
        * editing/delete_from_text_node_command.h: Removed.
        * editing/delete_selection_command.cpp: Removed.
        * editing/delete_selection_command.h: Removed.
        * editing/edit_command.cpp: Removed.
        * editing/edit_command.h: Removed.
        * editing/htmlediting.cpp:
        * editing/insert_into_text_node_command.cpp: Removed.
        * editing/insert_into_text_node_command.h: Removed.
        * editing/insert_line_break_command.cpp: Removed.
        * editing/insert_line_break_command.h: Removed.
        * editing/insert_node_before_command.cpp: Removed.
        * editing/insert_node_before_command.h: Removed.
        * editing/insert_paragraph_separator_command.cpp: Removed.
        * editing/insert_paragraph_separator_command.h: Removed.
        * editing/insert_text_command.cpp: Removed.
        * editing/insert_text_command.h: Removed.
        * editing/join_text_nodes_command.cpp: Removed.
        * editing/join_text_nodes_command.h: Removed.
        * editing/jsediting.cpp:
        * editing/markup.cpp:
        * editing/merge_identical_elements_command.cpp: Removed.
        * editing/merge_identical_elements_command.h: Removed.
        * editing/move_selection_command.cpp: Removed.
        * editing/move_selection_command.h: Removed.
        * editing/rebalance_whitespace_command.cpp: Removed.
        * editing/rebalance_whitespace_command.h: Removed.
        * editing/remove_css_property_command.cpp: Removed.
        * editing/remove_css_property_command.h: Removed.
        * editing/remove_node_attribute_command.cpp: Removed.
        * editing/remove_node_attribute_command.h: Removed.
        * editing/remove_node_command.cpp: Removed.
        * editing/remove_node_command.h: Removed.
        * editing/remove_node_preserving_children_command.cpp: Removed.
        * editing/remove_node_preserving_children_command.h: Removed.
        * editing/replace_selection_command.cpp: Removed.
        * editing/replace_selection_command.h: Removed.
        * editing/set_node_attribute_command.cpp: Removed.
        * editing/set_node_attribute_command.h: Removed.
        * editing/split_element_command.cpp: Removed.
        * editing/split_element_command.h: Removed.
        * editing/split_text_node_command.cpp: Removed.
        * editing/split_text_node_command.h: Removed.
        * editing/split_text_node_containing_element.cpp: Removed.
        * editing/split_text_node_containing_element_command.h: Removed.
        * editing/typing_command.cpp: Removed.
        * editing/typing_command.h: Removed.
        * editing/visible_position.cpp: Removed.
        * editing/visible_position.h: Removed.
        * editing/visible_range.cpp: Removed.
        * editing/visible_range.h: Removed.
        * editing/visible_units.cpp:
        * editing/wrap_contents_in_dummy_span_command.cpp: Removed.
        * editing/wrap_contents_in_dummy_span_command.h: Removed.

        * khtml/editing: Removed.
        * khtml/editing/Selection.cpp: Removed.
        * khtml/editing/Selection.h: Removed.
        * khtml/editing/SelectionController.cpp: Removed.
        * khtml/editing/SelectionController.h: Removed.
        * khtml/editing/append_node_command.cpp: Removed.
        * khtml/editing/append_node_command.h: Removed.
        * khtml/editing/apply_style_command.cpp: Removed.
        * khtml/editing/apply_style_command.h: Removed.
        * khtml/editing/break_blockquote_command.cpp: Removed.
        * khtml/editing/break_blockquote_command.h: Removed.
        * khtml/editing/composite_edit_command.cpp: Removed.
        * khtml/editing/composite_edit_command.h: Removed.
        * khtml/editing/delete_from_text_node_command.cpp: Removed.
        * khtml/editing/delete_from_text_node_command.h: Removed.
        * khtml/editing/delete_selection_command.cpp: Removed.
        * khtml/editing/delete_selection_command.h: Removed.
        * khtml/editing/edit_actions.h: Removed.
        * khtml/editing/edit_command.cpp: Removed.
        * khtml/editing/edit_command.h: Removed.
        * khtml/editing/html_interchange.cpp: Removed.
        * khtml/editing/html_interchange.h: Removed.
        * khtml/editing/htmlediting.cpp: Removed.
        * khtml/editing/htmlediting.h: Removed.
        * khtml/editing/insert_into_text_node_command.cpp: Removed.
        * khtml/editing/insert_into_text_node_command.h: Removed.
        * khtml/editing/insert_line_break_command.cpp: Removed.
        * khtml/editing/insert_line_break_command.h: Removed.
        * khtml/editing/insert_node_before_command.cpp: Removed.
        * khtml/editing/insert_node_before_command.h: Removed.
        * khtml/editing/insert_paragraph_separator_command.cpp: Removed.
        * khtml/editing/insert_paragraph_separator_command.h: Removed.
        * khtml/editing/insert_text_command.cpp: Removed.
        * khtml/editing/insert_text_command.h: Removed.
        * khtml/editing/join_text_nodes_command.cpp: Removed.
        * khtml/editing/join_text_nodes_command.h: Removed.
        * khtml/editing/jsediting.cpp: Removed.
        * khtml/editing/jsediting.h: Removed.
        * khtml/editing/markup.cpp: Removed.
        * khtml/editing/markup.h: Removed.
        * khtml/editing/merge_identical_elements_command.cpp: Removed.
        * khtml/editing/merge_identical_elements_command.h: Removed.
        * khtml/editing/move_selection_command.cpp: Removed.
        * khtml/editing/move_selection_command.h: Removed.
        * khtml/editing/rebalance_whitespace_command.cpp: Removed.
        * khtml/editing/rebalance_whitespace_command.h: Removed.
        * khtml/editing/remove_css_property_command.cpp: Removed.
        * khtml/editing/remove_css_property_command.h: Removed.
        * khtml/editing/remove_node_attribute_command.cpp: Removed.
        * khtml/editing/remove_node_attribute_command.h: Removed.
        * khtml/editing/remove_node_command.cpp: Removed.
        * khtml/editing/remove_node_command.h: Removed.
        * khtml/editing/remove_node_preserving_children_command.cpp: Removed.
        * khtml/editing/remove_node_preserving_children_command.h: Removed.
        * khtml/editing/replace_selection_command.cpp: Removed.
        * khtml/editing/replace_selection_command.h: Removed.
        * khtml/editing/set_node_attribute_command.cpp: Removed.
        * khtml/editing/set_node_attribute_command.h: Removed.
        * khtml/editing/split_element_command.cpp: Removed.
        * khtml/editing/split_element_command.h: Removed.
        * khtml/editing/split_text_node_command.cpp: Removed.
        * khtml/editing/split_text_node_command.h: Removed.
        * khtml/editing/split_text_node_containing_element.cpp: Removed.
        * khtml/editing/split_text_node_containing_element_command.h: Removed.
        * khtml/editing/text_affinity.h: Removed.
        * khtml/editing/text_granularity.h: Removed.
        * khtml/editing/typing_command.cpp: Removed.
        * khtml/editing/typing_command.h: Removed.
        * khtml/editing/visible_position.cpp: Removed.
        * khtml/editing/visible_position.h: Removed.
        * khtml/editing/visible_range.cpp: Removed.
        * khtml/editing/visible_range.h: Removed.
        * khtml/editing/visible_text.cpp: Removed.
        * khtml/editing/visible_text.h: Removed.
        * khtml/editing/visible_units.cpp: Removed.
        * khtml/editing/visible_units.h: Removed.
        * khtml/editing/wrap_contents_in_dummy_span_command.cpp: Removed.
        * khtml/editing/wrap_contents_in_dummy_span_command.h: Removed.

2006-02-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Adele Peterson.
        
        - fixed http://bugs.webkit.org/show_bug.cgi?id=7255
        label attribute in option elements is ignored
        
        Test cases: 
        * dom/html/level2/html/HTMLOptionElement_label01.html
        * dom/html/level2/html/HTMLOptionElement_label02.html
        * dom/html/level2/html/HTMLOptionElement_label03.html

        * rendering/render_form.cpp:
        (WebCore::RenderSelect::updateFromElement):
        use label attribute, if present, when setting text on the widget.

2006-02-14  Vicki Murley <vicki@apple.com>

        Reviewed by Maciej.

        Change formatting in this file to match the style guidelines.  No spaces after
        opening parentheses or before closing parentheses. 

        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::createDocumentFragment):
        (WebCore::DocumentImpl::recalcStyle):
        (WebCore::DocumentImpl::attach):
        (WebCore::DocumentImpl::detach):
        (WebCore::DocumentImpl::open):
        (WebCore::DocumentImpl::write):
        (WebCore::DocumentImpl::writeln):
        (WebCore::DocumentImpl::setUserStyleSheet):
        (WebCore::DocumentImpl::determineParseMode):
        (WebCore::DocumentImpl::processHttpEquiv):
        (WebCore::DocumentImpl::childAllowed):
        (WebCore::DocumentImpl::childTypeAllowed):
        (WebCore::DocumentImpl::recalcStyleSelector):
        (WebCore::DocumentImpl::dispatchImageLoadEventsNow):
        (WebCore::DocumentImpl::domain):
        (WebCore::DocumentImpl::setDomain):
        (WebCore::DocumentImpl::parseQualifiedName):
        (WebCore::DocumentImpl::addMarker):
        (WebCore::DocumentImpl::removeMarkers):

2006-02-14  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.

        Some cleanup from the previous checkin, inspired by Darin's comments
        
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        moved highlightAllMatchesForString out of here
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge highlightAllMatchesForString:caseSensitive:]):
        now converts NSString to QString here, rather than in Frame/MacFrame
        
        * dom/DocumentMarker.h: Added.
        (WebCore::DocumentMarker::):
        (WebCore::DocumentMarker::operator == ):
        (WebCore::DocumentMarker::operator != ):
        moved this struct to its own header file
        
        * dom/DocumentImpl.h:
        moved DocumentMarker out; now includes DocumentMarker.h        
        
        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::highlightAllMatchesForString):
        moved here from MacFrame.[h,mm]. I thought this used other code from
        MacFrame.mm but it doesn't.
        
        * rendering/InlineTextBox.h:
        removed unnecesssary variable names; use DocumentMarker::MarkerType in signature
        of paintAllMarkersOfType
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paintTextMatchMarker):
        better name for a variable, fixed bad indent
        (khtml::InlineTextBox::paintAllMarkersOfType):
        rewrote loop to bail out early if past end, for clarity;
        use DocumentMarker::MarkerType in signature
        
        * WebCore.xcodeproj/project.pbxproj:
        updated for new file        

2006-02-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick.

        Support for highlighting multiple text matches.

        * dom/DocumentImpl.h:
        (WebCore::DocumentMarker::):
        Added new marker type TextMatch

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge highlightAllMatchesForString:caseSensitive:]):
        new method, calls through to MacFrame implementation
        (-[WebCoreFrameBridge clearHighlightedMatches]):
        new method, removes all markers of type TextMatch

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::highlightAllMatchesForString):
        new method, adds a document marker for each range that matches the given string

        * rendering/InlineTextBox.h:
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        Moved DocumentMarker loop into separate method paintAllMarkersOfType. We now call
        that method twice, once for spelling markers (after drawing text) and once for
        text match markers (before drawing text)
        (khtml::InlineTextBox::paintTextMatchMarker):
        new method, paints a color behind a text match marker
        (khtml::InlineTextBox::paintSpellingMarker):
        renamed from paintMarker
        (khtml::InlineTextBox::paintAllMarkersOfType):
        new method, loops through all DocumentMarkers of a particular type and calls the
        appropriate painting method for each one

2006-02-13  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - move pointer from frame to page here from WebKit

        * WebCore.xcodeproj/project.pbxproj: Added PageMac.h.

        * bridge/mac/PageMac.h: Added.

        * bridge/mac/MacFrame.h: Added a page parameter to the constructor.
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame): Pass the page and renderer to the Frame constructor.
        Moved the call to Cache::init up into Frame, and got rid of the call to Frame::init
        since that's now handled by the constructor. Also put the code to create the
        browser extension object here.
        (WebCore::MacFrame::submitForm): Update for new method name.
        (WebCore::MacFrame::createFrame): Ditto.
        (WebCore::MacFrame::sendContextMenuEvent): Update since m_doc is a RefPtr.

        * bridge/mac/WebCoreFrameBridge.h: Changed parameters on init methods. Renamed
        the part method to impl. Added a page method.
        * bridge/mac/WebCoreFrameBridge.mm:
        (frameHasSelection): Change use of part method to impl.
        (-[WebCoreFrameBridge appendChild:]): Use m_frame directly instead of calling part method.
        (-[WebCoreFrameBridge removeChild:]): Ditto.
        (-[WebCoreFrameBridge initMainFrameWithPage:]): Added. Now does the first-time initialization
        only here and create a frame for a main frame.
        (-[WebCoreFrameBridge initSubframeWithRenderer:]): Added. Doesn't do the first-time initialization
        and creates a frame for a subframe.
        (-[WebCoreFrameBridge page]): Added.
        (-[WebCoreFrameBridge setOpener:]): Change to use impl method instead of part.
        (-[WebCoreFrameBridge executionContextForView:]): Ditto.
        (-[WebCoreFrameBridge impl]): Added.

        * bridge/mac/WebCorePageBridge.h: Removed init method and added setMainFrame: method and impl method.
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge init]): Changed to create a PageMac.
        (-[WebCorePageBridge setMainFrame:]): Added.
        (-[WebCorePageBridge impl]): Added.

        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject rendererForView:]):
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]):
        * kwq/KWQFileButton.mm:
        (KWQFileButton::focusPolicy):
        * kwq/KWQSlider.mm:
        (QSlider::focusPolicy):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView _isResizableByUser]):
        (-[KWQTextAreaTextView _trackResizeFromMouseDown:]):
        Change methods to get from bridge back to objects to be named "impl".
        The old one was named "part".

        * page/Frame.h: Added Page and RenderPart parameter to constructor.
        Added a page function. Removed the createBrowserExtension function.
        * page/Frame.cpp:
        (WebCore::parentFromOwnerRenderer): Added. Helper for constructor.
        (WebCore::Frame::Frame): Moved all the code from init into here. Also change
        to set the parent right from the start.
        (WebCore::Frame::stopLoading): Change since m_doc is now a RefPtr.
        (WebCore::Frame::clear): Ditto.
        (WebCore::Frame::document): Ditto.
        (WebCore::Frame::setDocument): Ditto.
        (WebCore::Frame::begin): Ditto.
        (WebCore::Frame::gotoAnchor): Ditto.
        (WebCore::Frame::typingStyle): Change since m_typingStyle is now a RefPtr.
        (WebCore::Frame::setTypingStyle): Ditto.
        (WebCore::Frame::clearTypingStyle): Ditto.
        (WebCore::Frame::isFrameSet): Change since m_doc is now a RefPtr.
        (WebCore::Frame::page): Added.

        * page/FramePrivate.h: Changed initialization to use member-initialization
        syntax. Removed unused m_frames. Changed m_doc and m_typingStyle to use
        RefPtr. Added an m_frame.

        * page/Page.h: Made destructor virtual so we could have a Mac derived class.
        Added a setMainFrame function and removed the mainFrame parameter from the constructor.
        * page/Page.cpp:
        (WebCore::Page::Page): Removed the mainFrame parameter.
        (WebCore::Page::setMainFrame): Added.

2006-02-13  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        - merge VisiblePosition:isCandidate() into Position::inRenderedContent()
          These functions were answering the same question in different ways!  We
          only need one implementation.

        * khtml/editing/visible_position.cpp:
        (khtml::VisiblePosition::init):
        (khtml::VisiblePosition::previousVisiblePosition):
        (khtml::VisiblePosition::nextVisiblePosition):
        (khtml::VisiblePosition::deepEquivalent):
        * khtml/editing/visible_position.h:
        * dom/dom_position.cpp:
        (DOM::hasRenderedChildrenWithHeight):
        (DOM::Position::inRenderedContent):


        - improved table deletion.
          Fixes: delete back by word from just after table did not delete the table
                 delete forward by char or word did not delete the table
                 deleting back to a table and again did not delete the table

        * khtml/editing/htmlediting.cpp:
        (WebCore::isFirstVisiblePositionAfterTableElement):
        simpler implementation
        (WebCore::positionBeforePrecedingTableElement):
        simpler implementation
        (WebCore::isFirstVisiblePositionBeforeTableElement):
        new
        (WebCore::positionAfterFollowingTableElement):
        new
        * khtml/editing/htmlediting.h:
        * khtml/editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRightForward):
        select following table if granularity is char or word
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        select preceding table if granularity is char or word
        * khtml/editing/typing_command.cpp:
        (khtml::TypingCommand::deleteKeyPressed):
        simpler implementation, and let other deleteKeyPressed do boundary checking
        (khtml::TypingCommand::forwardDeleteKeyPressed):
        simpler implementation, and let other forwardDeleteKeyPressed do boundary checking
        (khtml::TypingCommand::insertText):
        standard formatting
        (khtml::TypingCommand::insertLineBreak):
        standard formatting
        (khtml::TypingCommand::insertParagraphSeparatorInQuotedContent):
        standard formatting
        (khtml::TypingCommand::insertParagraphSeparator):
        standard formatting
        (khtml::TypingCommand::insertTextRunWithoutNewlines):
        standard formatting
        (khtml::TypingCommand::deleteKeyPressed):
        use SelectionController to extend selection, to get all the selection
        logic incl. table selection and editable/noneditable boundary checks
        (khtml::TypingCommand::forwardDeleteKeyPressed):
        use SelectionController to extend selection, to get all the selection
        logic incl. table selection and editable/noneditable boundary checks

2006-02-13  David Hyatt  <hyatt@apple.com>

        Fix for bug 5605, XSLT fails to import to arbitrary depth.  Make sure m_embedded is initialized to false
        in the XSLTStyleSheetImpl constructor.

        Reviewed by timo

        Adding xslt-import-depth.xml to fast/xsl

        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (DOM::XSLStyleSheetImpl::XSLStyleSheetImpl):

2006-02-13  Dave Hyatt <hyatt@apple.com>

        Fix Win32 bustage in WebCore.

        Reviewed by darin

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/Timer.cpp:
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::TimerBase::heapPop):

        HUGE_VAL can be used on both Windows and Mac, so replace 1e500 with
        that.

        Add == and != operators for the TimerHeapIterator.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

        Fix my bustage in the PNG decoder where I left off a stray
        parenthesis.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::timerFired):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):

        KillTimer should take 2 arguments.  Add some missing includes.

2006-02-12  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.

        Fix http://bugs.webkit.org/show_bug.cgi?id=7207.

        No testcases as this is not possible to reproduce via anything
        other than manual interaction.

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (WebCore::KCanvasFilterQuartz::getCIFilterStack):

2006-02-13  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - moved QWidget to platform directory, renamed to Widget,
          split into cross-platform and platform-specific parts,
          removed some of the unused bits

        * ForwardingHeaders/qwidget.h: Removed.
        * kwq/KWQWidget.h: Removed.
        * kwq/KWQWidget.mm: Removed.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Update for file removals and adds.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/Widget.h: Moved code here, fixed it up.
        * platform/Widget.cpp: Ditto.
        * platform/mac/WidgetMac.mm: Added.

        * bindings/objc/DOMHTML.mm:
        (viewForElement):
        * bridge/mac/KWQKHTMLView.cpp:
        (WebCore::FrameView::topLevelWidget):
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::createPlugin):
        (WebCore::MacFrame::nextKeyViewInFrame):
        (WebCore::MacFrame::nextKeyViewForWidget):
        (WebCore::MacFrame::currentEventIsMouseDownInWidget):
        (WebCore::MacFrame::bridgeForWidget):
        (WebCore::MacFrame::passMouseDownEventToWidget):
        (WebCore::MacFrame::passSubframeEventToSubframe):
        (WebCore::MacFrame::passWheelEventToChildWidget):
        (WebCore::MacFrame::getAppletInstanceForWidget):
        (WebCore::MacFrame::getEmbedInstanceForWidget):
        (WebCore::MacFrame::getObjectInstanceForWidget):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge createFrameViewWithNSView:marginWidth:marginHeight:]):
        (-[WebCoreFrameBridge copyRenderNode:copier:]):
        (-[WebCoreFrameBridge elementForView:]):
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:]):
        * dom/DocumentImpl.cpp:
        (WebCore::widgetForNode):
        (WebCore::DocumentImpl::setFocusNode):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Screen::getValueProperty):
        (KJS::WindowFunc::callAsFunction):
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        (WebCore::HTMLGenericFormElementImpl::isKeyboardFocusable):
        (WebCore::HTMLGenericFormElementImpl::isMouseFocusable):
        * khtml/html/html_objectimpl.cpp:
        (WebCore::HTMLEmbedElementImpl::getEmbedInstance):
        (WebCore::HTMLObjectElementImpl::getObjectInstance):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject addChildrenToArray:]):
        (-[KWQAccObject attachmentView]):
        (-[KWQAccObject doAXTextMarkerForPosition:]):
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::frameGeometry):
        (QComboBox::setFrameGeometry):
        (QComboBox::setFont):
        (QComboBox::focusPolicy):
        (-[KWQPopUpButtonCell widget]):
        (-[KWQPopUpButton widget]):
        (-[KWQPopUpButton mouseDown:]):
        (-[KWQPopUpButton becomeFirstResponder]):
        (-[KWQPopUpButton resignFirstResponder]):
        (-[KWQPopUpButton nextKeyView]):
        (-[KWQPopUpButton previousKeyView]):
        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (KWQFileButton::focusPolicy):
        * kwq/KWQFrame.h:
        * kwq/KWQKCursor.h:
        * kwq/KWQKJavaAppletWidget.h:
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget):
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::setFont):
        (QLineEdit::setPalette):
        (QLineEdit::focusPolicy):
        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm:
        (QListBox::QListBox):
        (QListBox::focusPolicy):
        (QListBox::setFont):
        (-[KWQListBoxScrollView widget]):
        (-[KWQListBoxScrollView becomeFirstResponder]):
        (-[KWQTableView mouseDown:]):
        (-[KWQTableView widget]):
        * kwq/KWQPainter.h:
        * kwq/KWQRenderTreeDebug.cpp:
        (write):
        * kwq/KWQScrollBar.h:
        * kwq/KWQScrollBar.mm:
        (-[KWQScrollBar widget]):
        (-[KWQScrollBar mouseDown:]):
        (QScrollBar::QScrollBar):
        (QScrollBar::~QScrollBar):
        * kwq/KWQScrollView.h:
        (QScrollView::QScrollView):
        * kwq/KWQScrollView.mm:
        (QScrollView::viewport):
        (QScrollView::childX):
        (QScrollView::childY):
        (QScrollView::addChild):
        (QScrollView::removeChild):
        * kwq/KWQSlider.h:
        * kwq/KWQSlider.mm:
        (-[KWQSlider mouseDown:]):
        (-[KWQSlider widget]):
        (QSlider::setFont):
        (QSlider::focusPolicy):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView widget]):
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm:
        (QTextEdit::QTextEdit):
        (QTextEdit::setFont):
        (QTextEdit::focusPolicy):
        (QTextEdit::setPalette):
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController widget]):
        (-[KWQTextFieldController textView:shouldHandleEvent:]):
        (-[KWQTextFieldController textView:didHandleEvent:]):
        (-[KWQTextField widget]):
        (-[KWQTextField nextKeyView]):
        (-[KWQTextField previousKeyView]):
        (-[KWQSecureTextField widget]):
        (-[KWQSecureTextField nextKeyView]):
        (-[KWQSecureTextField previousKeyView]):
        (-[KWQSearchField widget]):
        (-[KWQSearchField nextKeyView]):
        (-[KWQSearchField previousKeyView]):
        * kwq/KWQView.h:
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::topLevelWidget):
        * page/Frame.cpp:
        (WebCore::isFrameElement):
        (WebCore::Frame::frameForWidget):
        (WebCore::Frame::nodeForWidget):
        (WebCore::Frame::setDocumentFocus):
        (WebCore::Frame::clearDocumentFocus):
        (WebCore::Frame::passWidgetMouseDownEventToWidget):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::init):
        * page/FrameView.h:
        * page/Plugin.h:
        (WebCore::Plugin::Plugin):
        (WebCore::Plugin::view):
        * platform/Screen.h:
        * platform/mac/ScreenMac.mm:
        (WebCore::screen):
        (WebCore::screenDepth):
        (WebCore::screenRect):
        (WebCore::usableScreenRect):
        * rendering/render_applet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/render_form.cpp:
        (WebCore::ComboBoxWidget::ComboBoxWidget):
        (WebCore::RenderSelect::createListBox):
        * rendering/render_form.h:
        * rendering/render_frames.cpp:
        (WebCore::RenderPart::setWidget):
        * rendering/render_frames.h:
        * rendering/render_object.cpp:
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::resizeWidget):
        (WebCore::RenderWidget::setQWidget):
        * rendering/render_replaced.h:
        (WebCore::RenderWidget::widget):
        Change name from QWidget to Widget, a few other changes to get compiling.

=== WebCore-521.7 ===

2006-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7206
          REGRESSION: PDF "images" no longer render within HTML pages

        Test: fast/replaced/page-as-image.html

        * platform/Image.cpp: (WebCore::Image::setNativeData):
        Return false in the case where the PDF document has not been created yet.

2006-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7209
          reimplement Timer so it uses only a single timer from the underlying OS

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed old files, added new.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/Timer.h: Updated for new timer implementation.
        * platform/Timer.cpp: Added. Platform-independent implementation of timers
        in terms of a single shared timer. Uses a heap to implement a priority queue
        so we know which timer to fire first.

        * platform/SharedTimer.h: Added.
        * platform/mac/SharedTimerMac.cpp: Added.
        * platform/win/SharedTimerWin.cpp: Added.

        * platform/mac/TimerMac.cpp: Removed.
        * platform/win/TimerWin.cpp: Removed.

2006-02-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        * loader/CachedXSLStyleSheet.cpp: removed duplicate copy of xbl code.

2006-02-12  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        - fix build

        * bindings/scripts/CodeGeneratorJS.pm: Update for splitting of the
        dom_textimpl.h header.

2006-02-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - rename FrameTreeNode to FrameTree and treeNode() to tree()
        http://bugs.webkit.org/show_bug.cgi?id=7210
        
        This may be slightly less accurate, but reads better.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::submitForm):
        (WebCore::MacFrame::nextKeyViewInFrameHierarchy):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge firstChild]):
        (-[WebCoreFrameBridge lastChild]):
        (-[WebCoreFrameBridge childCount]):
        (-[WebCoreFrameBridge previousSibling]):
        (-[WebCoreFrameBridge nextSibling]):
        (-[WebCoreFrameBridge appendChild:]):
        (-[WebCoreFrameBridge removeChild:]):
        (-[WebCoreFrameBridge setParent:]):
        (-[WebCoreFrameBridge parent]):
        (-[WebCoreFrameBridge setName:]):
        (-[WebCoreFrameBridge name]):
        * dom/DocumentImpl.cpp:
        (WebCore::DocumentImpl::parentDocument):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::WindowFunc::callAsFunction):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::isURLAllowed):
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::process):
        * page/Frame.cpp:
        (WebCore::Frame::stopLoading):
        (WebCore::Frame::clear):
        (WebCore::Frame::stopAnimations):
        (WebCore::Frame::checkCompleted):
        (WebCore::Frame::checkEmitLoadEvent):
        (WebCore::Frame::slotChildCompleted):
        (WebCore::Frame::findFrame):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::frameNames):
        (WebCore::Frame::frames):
        (WebCore::Frame::childFrameNamed):
        (WebCore::Frame::incrementFrameCount):
        (WebCore::Frame::decrementFrameCount):
        (WebCore::Frame::topLevelFrameCount):
        (WebCore::Frame::selectFrameElementInParentIfFullySelected):
        (WebCore::Frame::userGestureHint):
        (WebCore::Frame::canCachePage):
        (WebCore::Frame::updatePolicyBaseURL):
        (WebCore::Frame::setPolicyBaseURL):
        (WebCore::Frame::tree):
        (WebCore::Frame::frameDetached):
        (WebCore::Frame::updateBaseURLForEmptyDocument):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTree.cpp: Added.
        (WebCore::FrameTree::~FrameTree):
        (WebCore::FrameTree::setName):
        (WebCore::FrameTree::appendChild):
        (WebCore::FrameTree::removeChild):
        * page/FrameTree.h: Added.
        (WebCore::FrameTree::FrameTree):
        * page/FrameTreeNode.cpp: Removed.
        * page/FrameTreeNode.h: Removed.
        * rendering/render_frames.cpp:
        (WebCore::isURLAllowed):

2006-02-12  Dave Hyatt <hyatt@apple.com>

        Fix for bug 7182, animated GIFs don't clear previous animation
        frames.  This checkin fixes the decoders in our tree (used on
        Win32 only).  It does not address the problem with ImageIO
        on Mac (which has the same bug).  This has been filed separately
        as Radar bug #4442031.

        Reviewed by mjs

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::rect):
        (WebCore::RGBA32Buffer::setRect):
        (WebCore::RGBA32Buffer::ensureHeight):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2006-02-11  Geoffrey Garen  <ggaren@apple.com>

        - Fixed bad free resulting from 0 legnth StringImpl

        No test case because currently this bug only has the effect of a bad
        free on exit().

        * platform/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Factored varied approaches to
        initialization into two common routines: initWithChar and
        initWithQChar. The common rule is: if we're not going to allocate
        a string, make sure to set s to 0 so fastFree doesn't try to free it
        later. For speed, initWithQChar uses memcpy() -- that's the only
        difference between the two.
        (WebCore::StringImpl::initWithChar):
        (WebCore::StringImpl::initWithQChar):
        * platform/StringImpl.h:

2006-02-11  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - split dom_textimpl.{h,cpp} by class.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bridge/mac/MacFrame.mm:
        * dom/CDATASectionImpl.cpp: Added.
        * dom/CDATASectionImpl.h: Added.
        * dom/CharacterDataImpl.cpp: Added.
        * dom/CharacterDataImpl.h: Added.
        * dom/CommentImpl.cpp: Added.
        * dom/CommentImpl.h: Added.
        * dom/DocumentImpl.cpp:
        * dom/EditingTextImpl.cpp: Added.
        * dom/EditingTextImpl.h: Added.
        * dom/NodeImpl.cpp:
        * dom/TextImpl.cpp: Added.
        * dom/TextImpl.h: Added.
        * dom/dom2_rangeimpl.cpp:
        * dom/dom_elementimpl.cpp:
        * dom/dom_textimpl.cpp: Removed.
        * dom/dom_textimpl.h: Removed.
        * dom/xml_tokenizer.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/editing/apply_style_command.cpp:
        * khtml/editing/break_blockquote_command.cpp:
        * khtml/editing/composite_edit_command.cpp:
        * khtml/editing/delete_from_text_node_command.cpp:
        * khtml/editing/delete_selection_command.cpp:
        * khtml/editing/htmlediting.cpp:
        * khtml/editing/insert_into_text_node_command.cpp:
        * khtml/editing/insert_line_break_command.cpp:
        * khtml/editing/insert_paragraph_separator_command.cpp:
        * khtml/editing/insert_text_command.cpp:
        * khtml/editing/join_text_nodes_command.cpp:
        * khtml/editing/markup.cpp:
        * khtml/editing/rebalance_whitespace_command.cpp:
        * khtml/editing/replace_selection_command.cpp:
        * khtml/editing/split_text_node_command.cpp:
        * khtml/editing/split_text_node_containing_element.cpp:
        * khtml/editing/visible_position.cpp:
        * khtml/html/HTMLElementImpl.cpp:
        * khtml/html/HTMLKeygenElementImpl.cpp:
        * khtml/html/HTMLOptionElementImpl.cpp:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/xsl/xslt_processorimpl.cpp:
        * page/Frame.cpp:
        * rendering/RenderText.h:
        * rendering/render_frames.cpp:

2006-02-11  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.

        - Fixing http://bugs.webkit.org/show_bug.cgi?id=6942
          Implement support for "em" and "ex" relative lengths.

        - Layout tests changes:
            Fixed: svg/W3C-SVG-1.1/coords-units-03-b.svg
            New:   svg/custom/coords-relative-units-transforms.svg

        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::SVGLengthImpl):
        (SVGLengthImpl::value):
        (SVGLengthImpl::updateValue):
        (SVGLengthImpl::updateValueInSpecifiedUnits):
        * ksvg2/svg/SVGLengthImpl.h:

2006-02-11  Darin Adler  <darin@apple.com>

        Rubber-stamped by Eric.

        - renamed all the platform/mac files to have a Mac suffix
          (Hyatt and I discussed this change recently)

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/Color.mm: Removed.
        * platform/mac/ColorMac.mm: Added.
        * platform/mac/FloatPoint.mm: Removed.
        * platform/mac/FloatPointMac.mm: Added.
        * platform/mac/FloatRect.mm: Removed.
        * platform/mac/FloatRectMac.mm: Added.
        * platform/mac/FloatSize.mm: Removed.
        * platform/mac/FloatSizeMac.mm: Added.
        * platform/mac/Image.mm: Removed.
        * platform/mac/ImageMac.mm: Added.
        * platform/mac/ImageSource.cpp: Removed.
        * platform/mac/ImageSourceMac.cpp: Added.
        * platform/mac/IntPoint.mm: Removed.
        * platform/mac/IntPointMac.mm: Added.
        * platform/mac/IntRect.mm: Removed.
        * platform/mac/IntRectMac.mm: Added.
        * platform/mac/IntSize.mm: Removed.
        * platform/mac/IntSizeMac.mm: Added.
        * platform/mac/QString.mm: Removed.
        * platform/mac/QStringMac.mm: Added.
        * platform/mac/Screen.mm: Removed.
        * platform/mac/ScreenMac.mm: Added.
        * platform/mac/SystemTime.cpp: Removed.
        * platform/mac/SystemTimeMac.cpp: Added.
        * platform/mac/Timer.cpp: Removed.
        * platform/mac/TimerMac.cpp: Added.

2006-02-11  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin.

        Push kcanvas into WebCore namespace.
        Fix KSVG2 to use WebCore namespace.
        Remove all uses of khtml:: and KDOM:: from SVG code.
        
        Too many files changed to bother showing here.

2006-02-11  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
         Test: fast/table/edge-offsets.html
 
         Reviewed by Hyatt.
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=7054
           Vertical scroll bars do not appear or do not scroll completely
 
         * rendering/RenderTableSection.cpp:
         (WebCore::RenderTableSection::lowestPosition): Override the superclass implementation
         to return the lowest of all the cells' lowest positions and the section's.
         (WebCore::RenderTableSection::rightmostPosition): Ditto for rightmost.
         (WebCore::RenderTableSection::leftmostPosition): Ditto for leftmost.
         * rendering/RenderTableSection.h:
 
2006-02-11  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
        No test until we figure out how to make one.

         Reviewed by Darin.
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=7189
           XSLT result parsing stops prematurely
 
         * khtml/xsl/xslt_processorimpl.cpp:
         (DOM::XSLTProcessorImpl::createDocumentFromSource): Removed the call to setParsing(false) from here
         since it stopped parsing prematurely. Now the frame will call it when the tokenizer is finished.
         * page/Frame.cpp:
         (WebCore::Frame::clear): Disconnect the finishedParsing signal handler from the document.
         (WebCore::Frame::setDocument): Disconnect the signal handler from the old document and
         connect it to the new document.

2006-02-11  Mitz Pettel  <opendarwin.org@mitzpettel.com>
 
         Reviewed by Hyatt.
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=6821
           Fix for 5983 will not always update hover correctly.
 
         * khtml/xml/DocumentImpl.cpp:
         (WebCore::DocumentImpl::hoveredNodeDetached): Added this method. Moved the hover logic from
         NodeImpl::detach here, modified to use the DOM tree instead of hoverAncestor,
         to handle the case that the hover node is a text node, and to schedule an update
         of hover state.
         (WebCore::DocumentImpl::activeChainNodeDetached): Added this method to trim the
         active chain above the node being detached.
         * khtml/xml/DocumentImpl.h:
         * khtml/xml/NodeImpl.cpp:
         (WebCore::NodeImpl::detach): Moved most of the hover logic out of here into
         DocumentImpl. Reset m_active and m_inActiveChain and call activeChainNodeDetached
         when detaching an active node. 
         * manual-tests/bugzilla-6821.html: Added.
         * page/FrameView.cpp:
         (WebCore::FrameViewPrivate::FrameViewPrivate): Added hover-state update timer.
         (WebCore::FrameViewPrivate::reset):
         (WebCore::FrameView::~FrameView):
         (WebCore::FrameView::viewportMouseMoveEvent):
         (WebCore::FrameView::hoverTimerFired): Call DocumentImpl::prepareMouseEvent
         when the timer fires to cause hover state to update.
         (WebCore::FrameView::scheduleHoverStateUpdate): Added.
         * page/FrameView.h:
 
2006-02-11  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

       - fix http://bugs.webkit.org/show_bug.cgi?id=3400
         setting the .src of an iframe to the same value does not reload page

        Test cases: 
        * fast/frames/frame-set-same-location.html
        * fast/frames/frame-set-same-src.html
        * fast/frames/iframe-set-same-location.html
        * fast/frames/iframe-set-same-src.html

        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::setLocation):
        Remove the check for the new URL being different from the current one.
        Moved updateForNewURL() code into setLocation().
        * khtml/html/html_baseimpl.h:

2006-02-10  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Adding support for external entity declarations in XSLT.
        http://bugs.webkit.org/show_bug.cgi?id=7184
        <rdar://problem/4271696> support external DTD references in XSLT

        * dom/xml_tokenizer.cpp:
        (WebCore::OffsetBuffer::OffsetBuffer): new support class
        (WebCore::OffsetBuffer::readOutBytes): read method
        (WebCore::shouldAllowExternalLoad): for preventing common urls
        (WebCore::openFunc): now does a synchronous data load
        (WebCore::readFunc): returns data from the offset buffer
        (WebCore::closeFunc): deletes offset buffer
        (WebCore::setLoaderForLibXMLCallbacks): helper function
        (WebCore::createQStringParser): cleanup
        (WebCore::XMLTokenizer::finish): 
        * dom/xml_tokenizer.h:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (WebCore::XSLStyleSheetImpl::parseString):
        * khtml/xsl/xsl_stylesheetimpl.h:

2006-02-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt

        Fix for <rdar://problem/4149655> Frequently reported crash, repro 
        at lastminute.se in khtml::RenderBlock::createLineBoxes

        Some crazy combination of an anonymous table, an inline form, and 
        generated content caused table objects to be added to a flow and 
        then split. This is very bad. Once the crash was fixed, there were 
        still some rendering issues that this patch also fixes. We needed 
        to make sure we only special case forms for non-CSS tables so that 
        the form and generated content render as expected.

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::appendChildNode): Assert that if we are 
        a block flow, our child cannot be a table object.
        (WebCore::RenderContainer::insertChildNode): Same.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Only special-case forms if we are 
        not a CSS table.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): Same.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): Same.
        * rendering/render_inline.cpp:
        (WebCore::RenderInline::addChildToFlow): Here is the crash fix. Check to make sure our containing block is a block flow.

2006-02-10  Darin Adler  <darin@apple.com>

        - fixed the build, this time for sure

        * bindings/js/JSDOMCore.cpp: Touch this file, since the project doesn't get
        the dependencies right.
        * bindings/js/JSDOMEvents.cpp: Ditto.

        * bridge/mac/WebCoreFrameBridge.mm: (aeDescFromJSValue): Fix an uninitialized
        variable warning and also tightened the code for Boolean, String, and Number
        up a bit.

2006-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by eric.

        - Fixed build.

        * bridge/mac/WebCoreFrameBridge.mm:
        * khtml/ecma/kjs_binding.h:
        (KJS::DOMFunction::toPrimitive):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::toPrimitive):
        (KJS::DOMNodeList::toPrimitive):
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Location::toPrimitive):
        (KJS::Selection::toPrimitive):
        * khtml/ecma/kjs_window.h:

2006-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/4430614> RenderThemeMac crashes under GC

        * rendering/render_theme_mac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac): Initialize all the pointers.
        (WebCore::RenderThemeMac::setCheckboxCellState): Use KWQRetainNSRelease so
        we can retain a pointer to an ObjC object in a C++ class.
        (WebCore::RenderThemeMac::setRadioCellState): Ditto.
        (WebCore::RenderThemeMac::setButtonCellState): Ditto.
        (WebCore::RenderThemeMac::setTextFieldCellState): Ditto.

        * kwq/KWQResourceLoader.h: Remove unneeded forward declaration.

2006-02-09  Darin Adler  <darin@apple.com>

        Reviewed by Eric and Geoff.

        - changed basic DOM mutation calls to assert that "this"
          is not floating, then added more uses of RefPtr to prevent the
          assertion from firing (at least during my testing and layout tests)

        - removed use of PassRefPtr as the type of a local variable; after talking
          with Maciej and Eric, this type of use is now "deprecated"

        * bindings/js/JSDOMCore.cpp: Touched this file to get things to build.

        * bindings/objc/DOM.mm:
        (-[DOMRange extractContents]):
        (-[DOMRange cloneContents]):
        (-[DOMRange cloneRange]):
        * khtml/ecma/kjs_range.cpp:
        (KJS::DOMRange::getValueProperty):
        (KJS::DOMRangeProtoFunc::callAsFunction):
        * khtml/editing/Selection.cpp:
        (WebCore::Selection::toRange):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge documentFragmentWithMarkupString:baseURLString:]):
        * dom/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::insertBefore):
        (WebCore::ContainerNodeImpl::replaceChild):
        (WebCore::ContainerNodeImpl::removeChild):
        (WebCore::ContainerNodeImpl::appendChild):
        * dom/DocPtr.h: Removed uses of NULL and unused deprecated functions.
        * dom/dom2_rangeimpl.h:
        * dom/dom2_rangeimpl.cpp:
        (WebCore::RangeImpl::RangeImpl):
        (WebCore::RangeImpl::startContainer):
        (WebCore::RangeImpl::endContainer):
        (WebCore::RangeImpl::commonAncestorContainer):
        (WebCore::RangeImpl::setStart):
        (WebCore::RangeImpl::setEnd):
        (WebCore::RangeImpl::collapse):
        (WebCore::RangeImpl::compareBoundaryPoints):
        (WebCore::RangeImpl::boundaryPointsValid):
        (WebCore::RangeImpl::processContents):
        (WebCore::RangeImpl::extractContents):
        (WebCore::RangeImpl::cloneContents):
        (WebCore::RangeImpl::insertNode):
        (WebCore::RangeImpl::createContextualFragment):
        (WebCore::RangeImpl::detach):
        (WebCore::RangeImpl::cloneRange):
        (WebCore::RangeImpl::selectNodeContents):
        (WebCore::RangeImpl::surroundContents):
        (WebCore::RangeImpl::containedByReadOnly):
        (WebCore::RangeImpl::startPosition):
        (WebCore::RangeImpl::endPosition):
        (WebCore::RangeImpl::startNode):
        (WebCore::RangeImpl::editingStartPosition):
        (WebCore::rangeOfContents):
        * dom/dom_elementimpl.h:
        * dom/dom_elementimpl.cpp:
        (WebCore::AttrImpl::AttrImpl):
        (WebCore::AttrImpl::~AttrImpl):
        (WebCore::AttrImpl::setValue):
        (WebCore::AttrImpl::childTypeAllowed):
        (WebCore::AttrImpl::childrenChanged):
        (WebCore::ElementImpl::removeAttributeNode):
        (WebCore::NamedAttrMapImpl::clearAttributes):
        (WebCore::CSSMappedAttributeDeclarationImpl::~CSSMappedAttributeDeclarationImpl):
        (WebCore::MappedAttributeImpl::clone):
        * dom/DocumentFragmentImpl.cpp:
        (DOM::DocumentFragmentImpl::cloneNode):
        * dom/dom_xmlimpl.cpp:
        (WebCore::EntityReferenceImpl::cloneNode):
        (WebCore::ProcessingInstructionImpl::ProcessingInstructionImpl):
        (WebCore::ProcessingInstructionImpl::checkStyleSheet):
        (WebCore::ProcessingInstructionImpl::setStyleSheet):
        * dom/dom_position.cpp:
        * khtml/editing/break_blockquote_command.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * khtml/editing/composite_edit_command.cpp:
        (WebCore::CompositeEditCommand::appendBlockPlaceholder):
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::createBlockPlaceholderElement):
        * khtml/editing/delete_selection_command.cpp:
        (WebCore::DeleteSelectionCommand::insertPlaceholderForAncestorBlockContent):
        (WebCore::DeleteSelectionCommand::moveNodesAfterNode):
        * khtml/editing/html_interchange.cpp:
        * khtml/editing/htmlediting.cpp:
        (WebCore::rebalanceWhitespaceInTextNode):
        (WebCore::nonBreakingSpaceString):
        (WebCore::createDefaultParagraphElement):
        (WebCore::createBreakElement):
        (WebCore::createTabSpanElement):
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.h:
        * khtml/editing/insert_text_command.cpp:
        (khtml::InsertTextCommand::insertTab):
        * khtml/editing/markup.cpp:
        (khtml::createFragmentFromMarkup):
        (khtml::createParagraphContentsFromString):
        (khtml::createFragmentFromText):
        (khtml::createFragmentFromNodeList):
        * khtml/editing/rebalance_whitespace_command.cpp:
        * khtml/editing/replace_selection_command.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplacementFragment::insertFragmentForTestRendering):
        (WebCore::ReplaceSelectionCommand::doApply):
        * khtml/editing/visible_text.cpp:
        (khtml::CharacterIterator::range):
        (khtml::findPlainText):
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::cloneNode):
        * khtml/html/htmlparser.cpp:
        (HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        * ksvg2/svg/SVGTransformableImpl.cpp:
        (SVGTransformableImpl::parseTransformAttribute):
        * ksvg2/svg/SVGUseElementImpl.cpp:
        (SVGUseElementImpl::closeRenderer):

2006-02-09  Alexander Kellett  <lypanov@kde.org>

        Reviewed and landed by Maciej. 
        
        Factor out common parts of Linear/Radial GradientQuartz 
        up into KRenderingPaintServerGradientQuartz.

        Cleanup only, no layout tests needed or affected.

        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (KRenderingPaintServerGradientQuartz::updateQuartzGradientCache):
        (KRenderingPaintServerGradientQuartz::draw):
        (KRenderingPaintServerGradientQuartz::setup):
        (KRenderingPaintServerGradientQuartz::renderPath):
        (KRenderingPaintServerGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        (KRenderingPaintServerLinearGradientQuartz::draw):
        (KRenderingPaintServerLinearGradientQuartz::setup):
        (KRenderingPaintServerLinearGradientQuartz::teardown):
        (KRenderingPaintServerLinearGradientQuartz::renderPath):
        (KRenderingPaintServerRadialGradientQuartz::draw):
        (KRenderingPaintServerRadialGradientQuartz::setup):
        (KRenderingPaintServerRadialGradientQuartz::teardown):
        (KRenderingPaintServerRadialGradientQuartz::renderPath):

2006-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - various Frame cleanup:
        
        Make Frame-related classes Noncopyable.
        Remove nearly all of Frame's friends.
        Remove some unused stuff.
        Remove unneeded class forward declarations from Frame.h

        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameTreeNode.h:
        (WebCore::FrameTreeNode::FrameTreeNode):
        (WebCore::FrameTreeNode::name):
        (WebCore::FrameTreeNode::parent):
        (WebCore::FrameTreeNode::setParent):
        (WebCore::FrameTreeNode::nextSibling):
        (WebCore::FrameTreeNode::previousSibling):
        (WebCore::FrameTreeNode::firstChild):
        (WebCore::FrameTreeNode::lastChild):
        (WebCore::FrameTreeNode::childCount):
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportMouseMoveEvent):
        * page/Page.h:
        (WebCore::Page::mainFrame):
        * page/Plugin.h:
        (WebCore::Plugin::Plugin):
        (WebCore::Plugin::view):

2006-02-09  Dave Hyatt <hyatt@apple.com

        Minor image cleanup.  Move some variables that all the
        image decoders have in common up into the base class.

        Stub out the boring parts of the JPEG decoder also, so that
        the patch that does the decoding will be all meat. :)

        Reviewed by mjs

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::m_failed):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::failed):
        (WebCore::ImageDecoder::setFailed):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::~GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::decodingHalted):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::gifComplete):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Added.
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::~JPEGImageReader):
        (WebCore::JPEGImageReader::close):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::~JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        * platform/image-decoders/png/PNGImageDecoder.h:

2006-02-09  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Hyatt.
        
        - moved khtml/xml to dom

        * dom: moved from khtml/xml
        * WebCore.xcodeproj/project.pbxproj: Updated for new file locations.
        * WebCore+SVG/KDOMHeaders.h: Updated for new header locations.
        * dom/dom2_rangeimpl.cpp: ditto
        * dom/dom2_traversalimpl.cpp: ditto
        * dom/dom_textimpl.cpp: ditto
        * dom/dom_xmlimpl.cpp: ditto
        * khtml/dom/dom2_events.cpp: ditto
        * khtml/ecma/kjs_binding.cpp: ditto
        * khtml/ecma/kjs_dom.cpp: ditto
        * khtml/ecma/kjs_events.cpp: ditto
        * khtml/ecma/kjs_html.cpp: ditto
        * khtml/ecma/kjs_range.cpp: ditto
        * khtml/ecma/kjs_views.cpp: ditto
        * khtml/editing/Selection.cpp: ditto
        * khtml/editing/SelectionController.cpp: ditto
        * khtml/editing/delete_from_text_node_command.cpp: ditto
        * khtml/editing/edit_command.cpp: ditto
        * khtml/editing/insert_into_text_node_command.cpp: ditto
        * khtml/editing/insert_line_break_command.cpp: ditto
        * khtml/editing/insert_paragraph_separator_command.cpp: ditto
        * khtml/editing/insert_text_command.cpp: ditto
        * khtml/editing/join_text_nodes_command.cpp: ditto
        * khtml/editing/markup.cpp: ditto
        * khtml/editing/merge_identical_elements_command.cpp: ditto
        * khtml/editing/rebalance_whitespace_command.cpp: ditto
        * khtml/editing/remove_node_attribute_command.cpp: ditto
        * khtml/editing/set_node_attribute_command.cpp: ditto
        * khtml/editing/split_element_command.cpp: ditto
        * khtml/editing/split_text_node_command.cpp: ditto
        * khtml/editing/split_text_node_containing_element.cpp: ditto
        * khtml/editing/visible_position.cpp: ditto
        * khtml/editing/visible_position.h: ditto
        * khtml/editing/visible_text.cpp: ditto
        * khtml/editing/visible_text.h: ditto
        * khtml/editing/visible_units.cpp: ditto
        * khtml/editing/wrap_contents_in_dummy_span_command.cpp: ditto
        * khtml/html/HTMLElementImpl.h: ditto
        * khtml/html/html_documentimpl.cpp: ditto
        * khtml/html/html_headimpl.cpp: ditto
        * khtml/xbl/xbl_binding_manager.cpp: ditto
        * khtml/xbl/xbl_tokenizer.cpp: ditto
        * khtml/xbl/xbl_tokenizer.h: ditto
        * ksvg2/svg/SVGAElementImpl.cpp: ditto
        * rendering/InlineTextBox.cpp: ditto
        * rendering/RenderContainer.cpp: ditto
        * rendering/RenderText.h: ditto
        * rendering/RenderTextField.cpp: ditto
        * rendering/render_frames.cpp: ditto
        * rendering/render_layer.cpp: ditto

2006-02-08  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/block/positioning/window-height-change.html

        Reviewed by Hyatt.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=5813
          positioned blocks don't update when resizing the window vertically

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Always relayout positioned children of
        the root, since their positions may depend on the viewport's height which
        may have changed.
        * rendering/render_flexbox.cpp:
        (khtml::RenderFlexibleBox::layoutBlock): Ditto.

2006-02-08  Dave Hyatt <hyatt@apple.com>

        Add support for tiling of backgrounds using Cairo.

        Reviewed by darin

        * Image Viewer/ImageView.cpp:
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::tileInRect):

2006-02-08  Boris Daljevic  <boris@backbase.com>

        Reviewed and tweaked by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6648
          Safari strips namespace prefix when using setAttribute(), but should treat it as part of name

        Test: fast/dom/Element/setAttribute-with-colon.html

        * khtml/xml/dom_elementimpl.h: (ElementImpl::setAttribute): Removed body
        * khtml/xml/dom_elementimpl.cpp: (ElementImpl::setAttribute): Changed code so that
        attribute is not parsed into prefix and local name.

2006-02-08  Justin Garcia  <justin.garcia@apple.com>

        Original patch by Graham Dennis, reviewed by me
        Changes made by me, reviewed by thatcher

        <http://bugs.webkit.org/show_bug.cgi?id=3982>
        webViewDidBeginEditing, webViewDidEndEditing notification methods not called on delegate

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::didBeginEditing):
        (WebCore::MacFrame::didEndEditing):
        * bridge/mac/WebCoreFrameBridge.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::didBeginEditing):
        (WebCore::DocumentImpl::didEndEditing):
        (WebCore::DocumentImpl::setFocusNode):
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::ElementImpl::focus):
        * page/Frame.h:
        (WebCore::Frame::didBeginEditing):
        (WebCore::Frame::didEndEditing):

2006-02-08  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/block/positioning/relayout-on-position-change.html

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7095
          Removing positioning from an element does not relayout properly

        * rendering/render_object.cpp:
        (WebCore::RenderObject::setStyle): The second call to setNeedsLayoutAndMinMaxRecalc
        did not mark containing blocks for relayout based on the new position value since
        the object itself was already marked as needing layout. Changed the first call to
        only mark the containing blocks (based on the old position value) and not the
        object itself.

2006-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        RenderPath refactoring:
        
        - Rename the files to RenderPath
        - Push the portable code from KCanvasItemQuartz down to RenderPath
        - Move most of the unportable code from KCanvasItemQuartz to KCanvasPathQuartz
        
        The only thing left in KCanvasItemQuartz is marker support. That should be factored to separate
        iterating the path elements (KCanvasPathQuartz needs to provide that) and drawing the markers
        (which should be done in portable code).

        * ForwardingHeaders/kcanvas/RenderPath.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasItem.cpp: Removed.
        * kcanvas/KCanvasItem.h: Removed.
        * kcanvas/KCanvasPath.h:
        * kcanvas/RenderPath.cpp: Added.
        (RenderPath::mapAbsolutePointToLocal):
        (RenderPath::fillContains):
        (RenderPath::strokeContains):
        (RenderPath::strokeBBox):
        (RenderPath::relativeBBox):
        (RenderPath::setPath):
        (RenderPath::layout):
        (RenderPath::getAbsoluteRepaintRect):
        (RenderPath::requiresLayer):
        (RenderPath::lineHeight):
        (RenderPath::baselinePosition):
        (RenderPath::paint):
        (RenderPath::nodeAtPoint):
        * kcanvas/RenderPath.h: Added.
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasPathQuartz.h:
        * kcanvas/device/quartz/KCanvasPathQuartz.mm:
        (KCanvasPathQuartz::boundingBox):
        (scratchContext):
        (KCanvasPathQuartz::strokeBoundingBox):
        (pathContainsPoint):
        (KCanvasPathQuartz::containsPoint):
        (KCanvasPathQuartz::strokeContainsPoint):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceQuartz::createItem):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        (applyStrokeStyleToContext):
        * ksvg2/svg/SVGStyledElementImpl.cpp:
        (SVGStyledElementImpl::updateCanvasItem):
        (SVGStyledElementImpl::pushAttributeContext):
        * ksvg2/svg/SVGStyledLocatableElementImpl.cpp:
        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
        * kwq/KWQRenderTreeDebug.cpp:

2006-02-08  Adele Peterson  <adele@apple.com>

        Fix broken layout tests.

        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchGenericEvent): iterator is null, so we have to reset it to the first node in the chain.

2006-02-08  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fixed <rdar://problem/4325160> 
          REGRESSION(416.12-420+): window events not stopped by stopPropagation (affects macnn forums)

        Tests:
        * fast/events/window-events-bubble.html
        * fast/events/window-events-bubble2.html
        * fast/events/window-events-capture.html

        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::handleWindowEvent): Added to send events directly to the window.  This code used to be in defaultEventHandler, but that wasn't sending them at the right time.
        (WebCore::DocumentImpl::defaultEventHandler): Moved code to send window events to handleWindowEvent.
        * khtml/xml/DocumentImpl.h: Added handleWindowEvent.
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchGenericEvent): fire window events in capture and bubble phases.
        (WebCore::NodeImpl::dispatchWindowEvent): call handleWindowEvent.

2006-02-08  Anders Carlsson  <andersca@mac.com>

        Rubber stamped by Maciej.

        Move JSCore.cpp to bindings/js/JSDOMCore.cpp and
        rename JSEvents.cpp to JSDOMEvents.cpp
        
        * JSCore.cpp: Removed.
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMCore.cpp: Added.
        * bindings/js/JSDOMEvents.cpp: Added.
        * bindings/js/JSEvents.cpp: Removed.

2006-02-08  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7108
        Autogenerate most of Element
        
        * JSCore.cpp:
        Add JSElement.cpp.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Handle a bunch of new types.
        
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMElement::getValueProperty):
        (KJS::DOMElementProtoFunc::callAsFunction):
        Remove code that is autogenerated now.
        
        (KJS::getDOMNode):
        Create a JSElement instead of a DOMElement.
        
        (KJS::getDOMNodeList):
        Take a PassRefPtr like some of the other get methods.
        
        * khtml/ecma/kjs_dom.h:        
        (KJS::DOMElement::):
        Remove the now unused enums.
        
        * khtml/ecma/kjs_html.cpp:
        (KJS::):
        (KJS::HTMLElement::HTMLElement):
        (KJS::HTMLElement::getOwnPropertySlot):
        (KJS::KJS::HTMLElement::toString):
        (KJS::KJS::HTMLElement::put):
        * khtml/ecma/kjs_html.h:
        Have HTMLElement inherit from JSElement.

        * khtml/xml/Element.idl: Added.

2006-02-08  Dave Hyatt <hyatt@apple.com>

        Make the Cairo image surface only reflect the portion of
        the image that has been decoded so far.   That way we don't
        have to zero fill our RGBA32 buffers, and we avoid painting
        the empty portion.

        Reviewed by timo

        * Viewer/ImageView.cpp:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::height):
        (WebCore::RGBA32Buffer::ensureHeight):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setDuration):
        (WebCore::RGBA32Buffer::setIncludeInNextFrame):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):

2006-02-08  Dave Hyatt <hyatt@apple.com>

        Implement support for PNGs on Win32.  Includes support for
        interlacing and transparency.

        Also optimized the GIF loop that sets the RGBA values to
        increment the pointer through the loop instead of doing multiplies
        and adds from the base every time.

        Reviewed by mjs

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::setRGBA):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::~PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageReader::decodingSizeOnly):
        (WebCore::PNGImageReader::pngPtr):
        (WebCore::PNGImageReader::infoPtr):
        (WebCore::PNGImageReader::interlaceBuffer):
        (WebCore::PNGImageReader::hasAlpha):
        (WebCore::PNGImageReader::setReadOffset):
        (WebCore::PNGImageReader::setHasAlpha):
        (WebCore::PNGImageReader::createInterlaceBuffer):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::~PNGImageDecoder):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::decodingFailed):
        (WebCore::decodingWarning):
        (WebCore::headerAvailable):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::rowAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::pngComplete):
        (WebCore::PNGImageDecoder::pngComplete):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::setFailed):
        (WebCore::PNGImageDecoder::reader):
        (WebCore::PNGImageDecoder::decodingFailed):
        * platform/image-decoders/png/mozpngconf.h:

2006-02-07  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Hyatt.

        - move kwq/KWQString.mm to platform/QString.cpp, split out nonportable parts, speculative
        port of one remaining nonportable bit to windows.

        * ForwardingHeaders/qstring.h:
        * WebCore+SVG/KDOMSettings.h:
        * WebCore+SVG/kdom.h:
        * WebCore.xcodeproj/project.pbxproj:
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.h:
        * khtml/ecma/kjs_window.h:
        * khtml/editing/html_interchange.cpp:
        * khtml/editing/visible_position.h:
        * khtml/editing/visible_text.h:
        * khtml/editing/visible_units.cpp:
        * khtml/html/FormDataList.h:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/htmltokenizer.h:
        * khtml/misc/decoder.h:
        * khtml/misc/formdata.h:
        * khtml/xbl/xbl_protohandler.cpp:
        * khtml/xml/dom_position.cpp:
        * khtml/xsl/xslt_processorimpl.h:
        * ksvg2/svg/SVGHelper.h:
        * ksvg2/svg/SVGPreserveAspectRatioImpl.cpp:
        * ksvg2/svg/SVGStyleElementImpl.cpp:
        * ksvg2/svg/SVGURIReferenceImpl.h:
        * ksvg2/svg/svgpathparser.cpp:
        * kwq/KWQAccObjectCache.mm:
        * kwq/KWQBuffer.h:
        * kwq/KWQEvent.h:
        * kwq/KWQFont.mm:
        * kwq/KWQFontFamily.h:
        * kwq/KWQFontMetrics.h:
        * kwq/KWQKConfigBase.h:
        * kwq/KWQKDebug.h:
        * kwq/KWQKHTMLSettings.h:
        * kwq/KWQKJobClasses.h:
        * kwq/KWQKJobClasses.mm:
        * kwq/KWQKLocale.mm:
        * kwq/KWQKSSLKeyGen.mm:
        * kwq/KWQKURL.h:
        * kwq/KWQLineEdit.h:
        * kwq/KWQRegExp.h:
        * kwq/KWQRenderTreeDebug.h:
        * kwq/KWQString.h: Removed.
        * kwq/KWQString.mm: Removed.
        * kwq/KWQStringList.h:
        * kwq/KWQTextCodec.h:
        * kwq/KWQTextStream.h:
        * kwq/KWQTextUtilities.mm:
        * kwq/WebCoreScriptDebugger.mm:
        * loader/Cache.h:
        * platform/Color.cpp:
        * platform/Color.h:
        * platform/QString.cpp: Added.
        (allocateHandle):
        (KWQStringData::KWQStringData):
        (QString::QString):
        (QString::insert):
        (QString::detach):
        (QString::remove):
        (QString::setLength):
        (QString::fill):
        (initializeHandleNodeBlock):
        (allocateNode):
        (freeHandle):
        * platform/QString.h: Added.
        * platform/SegmentedString.h:
        * platform/StringImpl.h:
        * platform/mac/Image.mm:
        * platform/mac/QString.mm: Added.
        (QString::setBufferFromCFString):
        (QString::fromCFString):
        (QString::fromNSString):
        (QString::getNSString):
        (QString::utf8):
        (QString::fromUtf8):
        * rendering/bidi.h:
        * rendering/break_lines.cpp:

2006-02-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - remove all remains of old-style frame tree, ChildFrame, ObjectContents and FrameList are all gone

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::Window::indexGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::WindowFunc::callAsFunction):
        (KJS::FrameArray::getValueProperty):
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        (KJS::FrameArray::getOwnPropertySlot):
        * kwq/KWQFrame.mm:
        (QFrame::setFrameStyle):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::stopLoading):
        (WebCore::Frame::clear):
        (WebCore::Frame::stopAnimations):
        (WebCore::Frame::checkCompleted):
        (WebCore::Frame::checkEmitLoadEvent):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::requestObject):
        (WebCore::Frame::loadSubframe):
        (WebCore::Frame::findFrame):
        (WebCore::Frame::frameExists):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::frameNames):
        (WebCore::Frame::frames):
        (WebCore::Frame::childFrameNamed):
        (WebCore::Frame::slotPartRemoved):
        (WebCore::Frame::connectChild):
        (WebCore::Frame::disconnectChild):
        (WebCore::Frame::canCachePage):
        (WebCore::Frame::setPolicyBaseURL):
        (WebCore::Frame::treeNode):
        (WebCore::Frame::frameDetached):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTreeNode.h:
        (WebCore::FrameTreeNode::name):
        (WebCore::FrameTreeNode::parent):
        (WebCore::FrameTreeNode::nextSibling):
        (WebCore::FrameTreeNode::previousSibling):
        (WebCore::FrameTreeNode::firstChild):
        (WebCore::FrameTreeNode::lastChild):
        (WebCore::FrameTreeNode::childCount):
        * page/ObjectContents.h: Removed.
        * page/Plugin.h:
        (WebCore::Plugin::view):

2006-02-07  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - Fixed <rdar://problem/3727939> Safari strips \0 characters from HTML tags making them valid 

        Test: fast/encoding/decoder-allow-null-chars.html

        * kwq/KWQTextCodec.cpp:
        (KWQTextDecoder::convertLatin1): Removed stripping of null characters
        (unwanted): ditto.

2006-02-07  David Hyatt <hyatt@apple.com>

        Land the skeleton of a PNG decoder for Win32.

        Reviewed by Eric

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        * platform/image-decoders/png/PNGImageDecoder.cpp: Added.
        (WebCore::PNGImageDecoderPrivate::PNGImageDecoderPrivate):
        (WebCore::PNGImageDecoderPrivate::~PNGImageDecoderPrivate):
        (WebCore::PNGImageDecoderPrivate::decode):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::~PNGImageDecoder):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::size):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h: Added.

2006-02-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Removed ImageSubset, making ImageViewer link directly to WebCore.

        * Viewer.vcproj:
        * WebCore.vcproj/ImageSubset: Removed.
        * WebCore.vcproj/ImageSubset/ImageSubset.vcproj: Removed.
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed <rdar://problem/4425269> REGRESSION: wrong size pop-up when 
        downloading attachment at webmail.mac.com (6882)

        The bug was that the feature string parser didn't always initialize the
        *Set variables, so WebCore assumed a height was set when it wasn't,
        and used a garbage height variable.

        While there, I fixed two other bugs: (1) The parser wasn't chewing up 
        as many characters as I thought it was. (Chewing up extra characters 
        is necessary to match Win IE.) (2) We considered \t and \f to be 
        whitespace, but Win IE doesn't.

        * manual-tests/window-open-features-parsing.html: Added these cases,
        fixed up comments.

        * bridge/BrowserExtension.h: Cleaned up declaration order a bit.
        * khtml/ecma/kjs_window.cpp:
        (KJS::isSeparator): New function, tells you if a character is a
        separator
        (KJS::parseWindowFeatures): Always initialize *Set to false. Drive
        parsing based on invalid characters ('separators') rather than valid 
        ones, to match Win IE.

2006-02-07  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Timothy.

        Convert JavaScript objects to appropriate AppleScript types, instead of only strings
        http://bugs.webkit.org/show_bug.cgi?id=7012

        Tests: fast/AppleScript/*

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (aeDescFromJSValue):
        (-[WebCoreFrameBridge aeDescByEvaluatingJavaScriptFromString:]):

2006-02-07  Dave Hyatt <hyatt@apple.com>

        Rename ImageDecoderPlugin to ImageDecoder.  Rename
        GIFReader to GIFImageReder.  Rename GIFDecoderPlugin to
        GIFImageDecoder.

        Reviewed by mjs

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * platform/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder):
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.h: Added.
        (WebCore::ImageDecoder::~ImageDecoder):
        * platform/image-decoders/ImageDecoderPlugin.h: Removed.
        * platform/image-decoders/gif/GIFDecoderPlugin.cpp: Removed.
        * platform/image-decoders/gif/GIFDecoderPlugin.h: Removed.
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Added.
        (WebCore::GIFImageDecoderPrivate::GIFImageDecoderPrivate):
        (WebCore::GIFImageDecoderPrivate::~GIFImageDecoderPrivate):
        (WebCore::GIFImageDecoderPrivate::decode):
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::~GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::size):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::decodingHalted):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::gifComplete):
        * platform/image-decoders/gif/GIFImageDecoder.h: Added.
        * platform/image-decoders/gif/GIFImageReader.cpp: Added.
        (GIFImageReader::output_row):
        (GIFImageReader::do_lzw):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h: Added.
        (GIFImageReader::GIFImageReader):
        (GIFImageReader::~GIFImageReader):
        * platform/image-decoders/gif/GIFReader.cpp: Removed.
        * platform/image-decoders/gif/GIFReader.h: Removed.

2006-02-07  David Hyatt  <hyatt@apple.com>

        Rename ImageDecoder to ImageSource.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Image.cpp:
        (WebCore::Image::cacheFrame):
        (WebCore::Image::size):
        (WebCore::Image::setNativeData):
        (WebCore::Image::frameCount):
        (WebCore::Image::isSizeAvailable):
        * platform/Image.h:
        * platform/ImageDecoder.h: Removed.
        * platform/ImageSource.h: Added.
        * platform/cairo/ImageCairo.cpp:
        (WebCore::Image::drawInRect):
        * platform/cairo/ImageDecoderCairo.cpp: Removed.
        * platform/cairo/ImageSourceCairo.cpp: Added.
        (WebCore::createDecoderPlugin):
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::initialized):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/mac/Image.mm:
        (WebCore::Image::drawInRect):
        * platform/mac/ImageData.mm: Removed.
        * platform/mac/ImageDecoder.cpp: Removed.
        * platform/mac/ImageSource.cpp: Added.
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::initialized):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):

2006-02-07  David Hyatt  <hyatt@apple.com>

        Combine ImageData and Image (the result ends up in Image).

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMElement _image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::fileWrapperForElement):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEImageQuartz::getCIFilter):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::drawPattern):
        (KJS::_rh):
        (KJS::ImagePattern::createPattern):
        * kwq/KWQClipboard.mm:
        (WebCore::KWQClipboard::dragNSImage):
        * kwq/KWQCursor.h:
        * kwq/KWQCursor.mm:
        (WebCore::createCustomCursor):
        (WebCore::QCursor::QCursor):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::drawImageAtPoint):
        (WebCore::QPainter::drawImageInRect):
        (WebCore::QPainter::drawImage):
        (WebCore::QPainter::drawFloatImage):
        (WebCore::QPainter::drawTiledImage):
        (WebCore::QPainter::drawScaledAndTiledImage):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::image):
        * loader/CachedImage.h:
        * page/FrameView.cpp:
        (WebCore::selectCursor):
        * platform/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::invalidateData):
        (WebCore::Image::cacheFrame):
        (WebCore::Image::isNull):
        (WebCore::Image::size):
        (WebCore::Image::setData):
        (WebCore::Image::setNativeData):
        (WebCore::Image::frameCount):
        (WebCore::Image::isSizeAvailable):
        (WebCore::Image::frameAtIndex):
        (WebCore::Image::frameDurationAtIndex):
        (WebCore::Image::shouldAnimate):
        (WebCore::Image::startAnimation):
        (WebCore::Image::stopAnimation):
        (WebCore::Image::resetAnimation):
        (WebCore::Image::advanceAnimation):
        (WebCore::Image::rect):
        * platform/Image.h:
        (KXMLCore::):
        (WebCore::FrameData::m_duration):
        (WebCore::FrameData::~FrameData):
        (WebCore::Image::currentFrame):
        (WebCore::Image::animationObserver):
        (WebCore::Image::setIsPDF):
        * platform/ImageData.cpp: Removed.
        * platform/ImageData.h: Removed.
        * platform/cairo/ImageCairo.cpp:
        (WebCore::FrameData::clear):
        (WebCore::Image::initNativeData):
        (WebCore::Image::destroyNativeData):
        (WebCore::Image::invalidateNativeData):
        (WebCore::Image::drawInRect):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * platform/mac/Image.mm:
        (WebCore::FrameData::clear):
        (WebCore::Image::initNativeData):
        (WebCore::Image::destroyNativeData):
        (WebCore::Image::invalidateNativeData):
        (WebCore::Image::loadResource):
        (WebCore::Image::supportsType):
        (WebCore::Image::checkForSolidColor):
        (WebCore::Image::getTIFFRepresentation):
        (WebCore::Image::getNSImage):
        (WebCore::Image::getCGImageRef):
        (WebCore::Image::drawInRect):
        (WebCore::drawPattern):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::resetAnimation):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::nullImage):
        * rendering/render_image.h:
        (WebCore::RenderImage::image):
        * rendering/render_list.cpp:
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::paint):
        (RenderListMarker::calcMinMaxWidth):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::paintBorderImage):

2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed "remove frame, renderer and completed flag from ChildFrame, make Frame track these"
        http://bugs.webkit.org/show_bug.cgi?id=7125
        
        - fixed "onload event never called for iframe element with emtpy or about:blank src"
        http://bugs.webkit.org/show_bug.cgi?id=3609
        
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::MacFrame): pass along renderer
        (WebCore::MacFrame::nextKeyViewInFrameHierarchy): get owner element in newfangled way
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge removeChild:]): don't mess with renderer
        (-[WebCoreFrameBridge init]): call new designated initializer
        (-[WebCoreFrameBridge initWithRenderer:]): new designated initializer
        (-[WebCoreFrameBridge dealloc]): don't mess with renderer
        (-[WebCoreFrameBridge finalize]): ditto
        (-[WebCoreFrameBridge installInFrame:]): ditto
        * page/Frame.cpp:
        (WebCore::FrameList::find): get name from frame not ChildFrame
        (WebCore::Frame::init): take renderer parameter
        (WebCore::Frame::clear): clear m_plugins, not m_objects
        (WebCore::Frame::childBegin): updated comment
        (WebCore::Frame::stop): add check-completed for documentless case here
        (WebCore::Frame::checkCompleted): don't track separate completed flag
        in ChildFrame, use the sub Frame object's own
        (WebCore::Frame::checkEmitLoadEvent): ditto
        (WebCore::Frame::requestFrame): don't store renderer and name in ChildFrame,
        instead pass them along
        (WebCore::Frame::requestObject): ditto above
        (WebCore::Frame::loadPlugin): expect renderer parameter
        (WebCore::Frame::loadSubframe): expect renderer and name parameters
        (WebCore::Frame::slotChildStarted): don't mess with ChildFrame
        (WebCore::Frame::slotChildCompleted): ditto
        (WebCore::Frame::childFrame): don't check m_objects
        (WebCore::Frame::frameExists): fix spacing, remove obsolete check and comment
        (WebCore::Frame::frameNames): get name from frame
        (WebCore::Frame::ownerElement): simplify a lot since the Frame knows its owner
        renderer now
        (WebCore::Frame::ownerRenderer): added
        (WebCore::Frame::canCachePage): check m_plugins not m_objects
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::ChildFrame): Remove constructor, most fields.
        (WebCore::FramePrivate::FramePrivate): Pass ownerRenderer
        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget): Make sure to pass name attr
        to requestObject.

2006-02-06  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6944
          REGRESSION: crash when loading page w/ <link> that has a DOMSubtreeModified event listener

        Test: fast/events/event-listener-on-link.html

        * khtml/xml/dom_elementimpl.h: Added createAttrImplIfNeeded, removed allocateImpl, 
         changed AttrImpl contructor to remove createTextChild bool, added createTextChild method, 
         changed getAttributeNode, getAttributeNodeNS, getNamedItem, getNamedItemNS, and item to return PassRefPtrs.
        (DOM::ElementImpl::getAttributeNode):
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::AttributeImpl::createAttrImplIfNeeded): New method to replace allocateImpl.  
         This will use a RefPtr for the AttrImpl, check for an existing AttrImpl, create one if there isn't one,
         and will call the new createTextChild.
        (WebCore::AttrImpl::AttrImpl):  Moved creation of text child to new createTextChild method.  
         If done in the constructor, the ref count is still 0, and the act of appending the text node 
         could cause the AttrImpl to be destroyed.
        (WebCore::AttrImpl::createTextChild): Moved code from AttrImpl contructor.  
         Also, I've added an assert to make sure that any callers of this have ref'd the AttrImpl.
        (WebCore::AttrImpl::cloneNode): Used RefPtr instead of PassRefPtr, and then called release() on it before returning.
        (WebCore::ElementImpl::cloneNode): ditto.
        (WebCore::ElementImpl::getAttributeNodeNS): Changed return type to PassRefPtr.
        (WebCore::NamedAttrMapImpl::getNamedItemNS): ditto.
        (WebCore::NamedAttrMapImpl::getNamedItem): ditto. Changed use of allocateImpl to createAttrImplIfNeeded
        (WebCore::NamedAttrMapImpl::setNamedItem): ditto.
        (WebCore::NamedAttrMapImpl::removeNamedItem): ditto.
        (WebCore::NamedAttrMapImpl::item): ditto.
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::createAttributeNS): Changed return type to PassRefPtr and removed bool from AttrImpl contructor call.
        * khtml/xml/DocumentImpl.h: Now returns a PassRefPtr for createAttribute and createAttributeNS. 
        (WebCore::DocumentImpl::createAttribute):
        * khtml/xml/NamedNodeMapImpl.h: Now returns a PassRefPtr for getNamedItem, getNamedItemNS, and item.
        (WebCore::NamedNodeMapImpl::getNamedItem):
        * bindings/objc/DOM.mm:
        (-[DOMNamedNodeMap getNamedItem:]): Call get() since the methods discussed above now return PassRefPtrs.
        (-[DOMNamedNodeMap item:]): ditto.
        (-[DOMNamedNodeMap getNamedItemNS::]): ditto.
        (-[DOMDocument createAttribute:]): ditto.
        (-[DOMDocument createAttributeNS::]): ditto.
        (-[DOMElement getAttributeNode:]): ditto.
        (-[DOMElement getAttributeNodeNS::]): ditto.

2006-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - fixed 7094: onfocus/onblur on non-form-controls bubble
        http://bugs.webkit.org/show_bug.cgi?id=7094

        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::parseMappedAttribute): connect onfocus/onblur to
        focus/blur, not DOMFocusIn/DOMFocusOut

2006-02-06  Eric Seidel  <eseidel@apple.com>

        Add svn:ignore properties for visual studio internals.

2006-02-06  Dave Hyatt <hyatt@apple.com>

        Commit the image viewer test app, and all the Win32 project
        changes to build both it and Cairo.

        Reviewed by eric

        * Viewer: Added.
        * Viewer.aps: Added.
        * Viewer.cpp: Added.
        * Viewer.h: Added.
        * Viewer.ico: Added.
        * Viewer.rc: Added.
        * Viewer.reg: Added.
        * Viewer.vcproj: Added.
        * Viewer/ImageDocument.cpp: Added.
        * Viewer/ImageDocument.h: Added.
        * Viewer/ImageMainFrame.cpp: Added.
        * Viewer/ImageMainFrame.h: Added.
        * Viewer/ImageView.cpp: Added.
        * Viewer/ImageView.h: Added.
        * Viewer/Resource.h: Added.
        * Viewer/res: Added.
        * Viewer/res/ImageViewer.rc2: Added.
        * Viewer/res/Toolbar.bmp: Added.
        * Viewer/stdafx.cpp: Added.
        * Viewer/stdafx.h: Added.
        * ViewerDoc.ico: Added.
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-02-06  Dave Hyatt <hyatt@apple.com>

        Reviewed by darin

        * khtml/html/html_imageimpl.h:
        (WebCore::HTMLImageElementImpl::compositeOperator):
        * loader/CachedImage.cpp:
        * platform/Array.h:
        * platform/FloatSize.h:
        * platform/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::compositeOperatorFromString):
        * platform/Image.h:
        * platform/ImageData.cpp:
        (WebCore::FrameData::clear):
        (WebCore::ImageData::ImageData):
        (WebCore::ImageData::frameAtIndex):
        * platform/ImageData.h:
        * platform/ImageDecoder.h:
        * platform/Timer.h:
        * platform/cairo/.cvsignore: Added.
        * platform/cairo/ImageCairo.cpp: Added.
        (WebCore::Image::loadResource):
        (WebCore::Image::supportsType):
        (WebCore::graphicsContext):
        (WebCore::setCompositingOperation):
        (WebCore::Image::drawInRect):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * platform/cairo/ImageDecoderCairo.cpp: Added.
        (WebCore::createDecoderPlugin):
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::~ImageDecoder):
        (WebCore::ImageDecoder::initialized):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::repetitionCount):
        (WebCore::ImageDecoder::frameCount):
        (WebCore::ImageDecoder::createFrameAtIndex):
        (WebCore::ImageDecoder::frameDurationAtIndex):
        (WebCore::RGBA32Buffer::setDuration):
        (WebCore::RGBA32Buffer::setIncludeInNextFrame):
        (WebCore::RGBA32Buffer::bytes):
        (WebCore::RGBA32Buffer::status):
        (WebCore::RGBA32Buffer::duration):
        (WebCore::RGBA32Buffer::includeInNextFrame):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoderPlugin::~ImageDecoderPlugin):
        (WebCore::ImageDecoderPlugin::setData):
        (WebCore::ImageDecoderPlugin::frameCount):
        (WebCore::ImageDecoderPlugin::repetitionCount):
        * platform/image-decoders/gif: Added.
        * platform/image-decoders/gif/GIFDecoderPlugin.cpp: Added.
        (WebCore::GIFDecoderPluginPrivate::GIFDecoderPluginPrivate):
        (WebCore::GIFDecoderPluginPrivate::~GIFDecoderPluginPrivate):
        (WebCore::GIFDecoderPluginPrivate::decode):
        (WebCore::GIFDecoderPluginPrivate::frameCount):
        (WebCore::GIFDecoderPluginPrivate::repetitionCount):
        (WebCore::GIFDecoderPluginPrivate::setReadOffset):
        (WebCore::GIFDecoderPluginPrivate::isTransparent):
        (WebCore::GIFDecoderPluginPrivate::getColorMap):
        (WebCore::GIFDecoderPluginPrivate::frameXOffset):
        (WebCore::GIFDecoderPluginPrivate::frameYOffset):
        (WebCore::GIFDecoderPluginPrivate::transparentPixel):
        (WebCore::GIFDecoderPluginPrivate::duration):
        (WebCore::GIFDecoderPlugin::GIFDecoderPlugin):
        (WebCore::GIFDecoderPlugin::~GIFDecoderPlugin):
        (WebCore::GIFDecoderPlugin::setData):
        (WebCore::GIFDecoderPlugin::isSizeAvailable):
        (WebCore::GIFDecoderPlugin::size):
        (WebCore::GIFDecoderPlugin::frameCount):
        (WebCore::GIFDecoderPlugin::repetitionCount):
        (WebCore::GIFDecoderPlugin::frameBufferAtIndex):
        (WebCore::GIFDecoderPlugin::decode):
        (WebCore::GIFDecoderPlugin::sizeNowAvailable):
        (WebCore::GIFDecoderPlugin::decodingHalted):
        (WebCore::GIFDecoderPlugin::haveDecodedRow):
        (WebCore::GIFDecoderPlugin::frameComplete):
        (WebCore::GIFDecoderPlugin::gifComplete):
        * platform/image-decoders/gif/GIFDecoderPlugin.h: Added.
        (WebCore::GIFDecoderPlugin::frameDurationAtIndex):
        (WebCore::GIFDecoderPlugin::):
        * platform/image-decoders/gif/GIFReader.cpp: Added.
        (GIFReader::output_row):
        (GIFReader::do_lzw):
        (GIFReader::read):
        * platform/image-decoders/gif/GIFReader.h: Added.
        (GIFFrameReader::GIFFrameReader):
        (GIFFrameReader::~GIFFrameReader):
        (GIFReader::GIFReader):
        (GIFReader::~GIFReader):
        (GIFReader::close):
        * platform/win/ImageDecoderPlugin.h: Added.
        (WebCore::RGBA32Buffer::):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::setDuration):
        (WebCore::RGBA32Buffer::setIncludeInNextFrame):
        (WebCore::RGBA32Buffer::bytes):
        (WebCore::RGBA32Buffer::status):
        (WebCore::RGBA32Buffer::duration):
        (WebCore::RGBA32Buffer::includeInNextFrame):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoderPlugin::ImageDecoderPlugin):
        (WebCore::ImageDecoderPlugin::~ImageDecoderPlugin):
        (WebCore::ImageDecoderPlugin::setData):
        (WebCore::ImageDecoderPlugin::isSizeAvailable):
        (WebCore::ImageDecoderPlugin::size):
        (WebCore::ImageDecoderPlugin::frameCount):
        (WebCore::ImageDecoderPlugin::repetitionCount):
        (WebCore::ImageDecoderPlugin::frameBufferAtIndex):
        * platform/win/TimerWin.cpp: Added.
        (WebCore::timerFired):
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::startRepeating):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::isActive):
        (WebCore::TimerBase::nextFireInterval):
        (WebCore::TimerBase::repeatInterval):
        (WebCore::TimerBase::fire):
        (WebCore::isDeferringTimers):
        (WebCore::setDeferringTimers):

2006-02-06  Vicki Murley  <vicki@apple.com>

        Reviewed by Darin and Eric.

        - fix <rdar://problem/4414918> REGRESSION: images dragged into contenteditable area
        end up outside of editable area (6525)

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge RenderObject::nodeInfoAtPoint:]): Moved code from
        elementAtPoint to this new method.  This method takes a point and returns a NodeInfo
        for the deepest node at that point.
        (-[WebCoreFrameBridge elementAtPoint:]): Use new nodeInfoAtPoint method.
        (-[WebCoreFrameBridge _visiblePositionForPoint:]): Ditto.

2006-02-04  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7071
          REGRESSION: Jumping to an anchor identifier makes page scroll horizontally

        Test: fast/overflow/scroll-vertical-not-horizontal.html

        * rendering/render_layer.cpp: (WebCore::RenderLayer::getRectToExpose):
        Fixed rectangle intersections so that the X and Y dimensions are independent,
        to fix the bug. Also restructured the function a bit so it's even easier to
        read and understand.

2006-02-06  David Harrison  <harrison@apple.com>

        Suggested by Darin.
        
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::createContextualFragment):
        - make nextChild a RefPtr to survive possible DOM changes

2006-02-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by John and Adele

        Fix for <rdar://problem/4323167> REGRESSION (TOT): Crash in 
        RenderTable::colToEffCol entering text into text input field

        Some of the autofill code assumes that the form's label is in a 
        table cell, but this is not necessarily the case. This fix checks 
        that the renderer is actually a table cell before treating it as 
        such. 

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::searchForLabelsAboveCell): Check if the 
        renderer is a table cell.

2006-02-06  Darin Adler  <darin@apple.com>

        Reviewed by John.

        - fix <rdar://problem/4432562> REGRESSION (TOT):
          Safari's "stop loading" active, "view source" inactive after page load [7058]
          http://bugs.webkit.org/show_bug.cgi?id=7058

        * page/Frame.h: Make redirectionTimerFired virtual.
        * bridge/mac/MacFrame.h: Override redirectionTimerFired.
        * bridge/mac/MacFrame.mm: (WebCore::MacFrame::redirectionTimerFired):
        Send the redirectionTimerCancelled callback here, even though it has
        fired rather than being cancelled.

        * manual-tests/redirect.html: Added.
        * manual-tests/redirection-target.html: Added.

2006-02-06  David Harrison  <harrison@apple.com>

        Reviewed by John.
        
        Fix TOT regression where Mail.app replies were getting truncated.
        Was caused by 1/26/2006 checkin for http://bugs.webkit.org/show_bug.cgi?id=6754

        No layout test because this code cannot be reached via JS operations.
        
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::createContextualFragment):
        - restore code that sampled nextSibling() before node is removed
        - also, add asserts that the DOM mutation methods yield a 0 exception code, so problems
          can be caught closer to the cause.

2006-02-05  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=7091
        Autogenerate even more.

        * JSCore.cpp:
        Add new generated files.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Add "IsIndex" extended attribute for parameters. Any parameter that is "unsigned long" 
        and has this attribute will be checked to make sure that it's not < 0. If it is, an index size error
        exception will be thrown.
        
        * khtml/ecma/kjs_dom.cpp:
        (KJS::toAttr):
        Use JSAttr::info.
        
        (KJS::getDOMNode):
        Use new constructors.
        
        * khtml/ecma/kjs_dom.h:
        Remove classes that are generated now.
        
        * khtml/xml/Attr.idl: Added.
        * khtml/xml/CharacterData.idl: Added.
        * khtml/xml/Entity.idl: Added.
        * khtml/xml/Notation.idl: Added.
        * khtml/xml/ProcessingInstruction.idl: Added.
        * khtml/xml/Text.idl: Added.

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        Re-landed the following with more fixes so it does not break tests:

        - various event cleanup, including fixing of the load event for iframes
        http://bugs.webkit.org/show_bug.cgi?id=7079
        
        Specific changes:
        
        - don't bother to nil-check the document, a node can never have a null document now
        - move temp event forgetting from dispatchEvent to dispatchGenericEvent
        - pass event down using RefPtr::release() to avoid ref thrashing
        - support default handlers even for non-bubbling events (only on
          target node) and skip calling default event handler explicitly in
          callers
        - dispatch a whole separate load event to a frame document's containing frame
        - don't let propagationStopped prevent this new event
        - remove bogus security check for iframe onload
        - dispatch window events on the document, not the body, and also for non-html
        - set onload, onunload, onbeforeunload from frameset tags on the window object
        - don't restrict load/unload events to HTML
        - send default handler to the dispatch object as previously

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::shouldClose):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::parseMappedAttribute):
        (WebCore::HTMLFrameSetElementImpl::parseMappedAttribute):
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::implicitClose):
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchEvent):
        (WebCore::NodeImpl::dispatchGenericEvent):
        (WebCore::NodeImpl::dispatchWindowEvent):
        * khtml/xml/NodeImpl.h:
        * page/Frame.cpp:
        (WebCore::Frame::stopLoading):
        (WebCore::Frame::setWindowHasFocus):

2006-02-05  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/4197997> -[DOMHTMLSelectElement options] always returns an empty list

        * khtml/html/HTMLOptionsCollectionImpl.h: Changed to be a subclass of HTMLCollectionImpl.
        * khtml/html/HTMLOptionsCollectionImpl.cpp: Added.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added new source file.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLOptionsCollection setLength:]): Handle possible exception. 
        (-[DOMHTMLSelectElement options]): Add get() since this is now a PassRefPtr.

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::selectIndexGetter): Call options() instead of optionsHTMLCollection().
        (KJS::HTMLElement::selectGetter): Ditto.
        (KJS::KJS::HTMLElement::put): Ditto.
        (KJS::HTMLElement::selectSetter): Ditto.
        (KJS::KJS::HTMLSelectCollection::put): Ditto.

        * khtml/html/HTMLSelectElementImpl.h: Tweaked formatting. Eliminated m_options.
        Changed m_minwidth and m_size to int instead of short. Removed optionsHTMLCollection().
        Changed options() to return a PassRefPtr.
        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::~HTMLSelectElementImpl): Get rid of code to drop m_options.
        (WebCore::HTMLSelectElementImpl::remove): Remove unnecesssary RefPtr use, since that's
        handled fine by removeChild.
        (WebCore::HTMLSelectElementImpl::options): Change to create a new HTMLOptionsCollectionImpl
        each time, like other collection calls. Maybe we should change this eventually to use a
        HashMap so we can pass out the same collection over and over again, or could have a pointer
        stored in the select element that's managed by the collection itself.

2006-02-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6908
          REGRESSION: Replacing existing <option> shuffles it to the end of the list

        Test: fast/forms/select-replace-option.html

        * khtml/ecma/kjs_html.cpp: (KJS::KJS::HTMLSelectCollection::put):
        Use optionsHTMLCollection, because options isn't really implemented yet.

2006-02-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6941
          Assertion failure in MacFrame::bridgeForWidget() on manual-tests/textfield-onblur.html

        * kwq/KWQTextField.mm: (-[KWQTextFieldController setHasFocus:]):
        Add check for nil in case the blur event causes the KWQLineEdit to be
        destroyed.

2006-02-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6962
          REGRESSION: www.usa.phillips.com crashes due to <param> with no name

        Test: fast/replaced/object-param-no-name.html

        * rendering/render_frames.cpp: (WebCore::RenderPartObject::updateWidget):
        Check for empty name, and skip processing the name/value of that <param> element.

2006-02-05  Darin Adler  <darin@apple.com>

        - rolled out Maciej's event cleanup patch, which is causing problems

        I believe he has a fix, and he'll re-land the patch with the fix later.

        Original fix was <http://bugs.webkit.org/show_bug.cgi?id=7079>.
        Problems described in <http://bugs.webkit.org/show_bug.cgi?id=7084>.

2006-02-05  Darin Adler  <darin@apple.com>

        * ksvg2/css/KSVGCSSParser.cpp: Remove config.h, since this is included by another
        .cpp file -- oops!

2006-02-05  Darin Adler  <darin@apple.com>

        Discussed with Anders (didn't get real review).

        - fix build

        * WebCore+SVG/SVGNamesWrapper.cpp: Touch file, not getting rebuilt even though
        it includes config.h which changed.
        * WebCore+SVG/XLinkNamesWrapper.cpp: Ditto.

        * ksvg2/css/KSVGCSSParser.cpp: Added include of config.h.
        * platform/mac/ImageDecoder.cpp: Ditto.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed IntPoint.cpp and IntSize.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/IntPoint.cpp: Removed. Was empty.
        * platform/IntSize.cpp: Removed. Was empty.

2006-02-05  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7048
          Reproducible crash when onscroll handler deletes the layer or its object

        Test: onscroll-layer-self-destruct.html

        * rendering/render_layer.cpp: (WebCore::RenderLayer::scrollToOffset):
        Don't send the scroll event until after we've done everything else we
        need to do.

2006-02-05  Darin Adler  <darin@apple.com>

        Rubber stamped by Maciej.

        - renamed DOMString and DOMStringImpl to String and StringImpl, and moved into platform

        * config.h: Put in transitional defines so old code can still refer to the classes
        as DOMString and DOMStringImpl.

        * platform/AtomicString.cpp: Added.
        * platform/AtomicString.h: Added.
        * platform/AtomicStringImpl.h: Added.
        * platform/PlatformString.h: Added.
        * platform/String.cpp: Added.
        * platform/StringImpl.cpp: Added.
        * platform/StringImpl.h: Added.
        Moved files here and renamed them. PlatformString.h would be named String.h except
        that conflicts with <string.h> on non-case-sensitive file systems.

        * khtml/xml/dom_atomicstring.cpp: Removed.
        * khtml/xml/dom_atomicstring.h: Removed.
        * khtml/xml/dom_stringimpl.cpp: Removed.
        * khtml/xml/dom_stringimpl.h: Removed.
        * khtml/dom/dom_string.cpp: Removed.
        * khtml/dom/dom_string.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Updated for file adds and removes.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * WebCore+SVG/KDOMHeaders.h:
        * WebCore+SVG/Namespace.h:
        * WebCore+SVG/kdom.h:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMCSS.mm:
        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMInternal.mm:
        * bridge/BrowserExtension.h:
        * css/css_base.h:
        * css/css_computedstyle.cpp:
        * css/css_grammar.y:
        * css/css_ruleimpl.h:
        * css/css_stylesheetimpl.cpp:
        * css/css_stylesheetimpl.h:
        * css/css_valueimpl.cpp:
        * css/csshelper.cpp:
        * css/csshelper.h:
        * css/cssparser.h:
        * css/cssstyleselector.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        * khtml/dom/dom2_events.h:
        * khtml/ecma/JSXMLHttpRequest.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_window.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/editing/apply_style_command.cpp:
        * khtml/editing/delete_from_text_node_command.h:
        * khtml/editing/insert_into_text_node_command.h:
        * khtml/editing/jsediting.h:
        * khtml/editing/rebalance_whitespace_command.h:
        * khtml/editing/remove_css_property_command.h:
        * khtml/editing/typing_command.h:
        * khtml/html/FormDataList.h:
        * khtml/html/HTMLNameCollectionImpl.h:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/khtml_events.h:
        * khtml/xbl/xbl_binding.h:
        * khtml/xbl/xbl_protobinding.h:
        * khtml/xbl/xbl_protohandler.h:
        * khtml/xbl/xbl_protoimplementation.h:
        * khtml/xml/DOMImplementationImpl.cpp:
        * khtml/xml/EventNames.h:
        * khtml/xml/NameNodeListImpl.h:
        * khtml/xml/NamedNodeMapImpl.h:
        * khtml/xml/NodeImpl.cpp:
        * khtml/xml/NodeImpl.h:
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/dom_atomicstringlist.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_qname.h:
        * khtml/xml/dom_xmlimpl.cpp:
        * khtml/xml/xml_tokenizer.h:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        * khtml/xsl/xslt_processorimpl.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/svg/SVGAngleImpl.h:
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp:
        * ksvg2/svg/SVGAnimatedStringImpl.h:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        * ksvg2/svg/SVGColorImpl.h:
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        * ksvg2/svg/SVGElementImpl.cpp:
        * ksvg2/svg/SVGFitToViewBoxImpl.cpp:
        * ksvg2/svg/SVGLangSpaceImpl.cpp:
        * ksvg2/svg/SVGLangSpaceImpl.h:
        * ksvg2/svg/SVGLengthImpl.h:
        * ksvg2/svg/SVGMarkerElementImpl.cpp:
        * ksvg2/svg/SVGPaintImpl.h:
        * ksvg2/svg/SVGPathSegImpl.h:
        * ksvg2/svg/SVGPreserveAspectRatioImpl.cpp:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * ksvg2/svg/SVGScriptElementImpl.cpp:
        * ksvg2/svg/SVGStringListImpl.h:
        * ksvg2/svg/SVGStylableImpl.h:
        * ksvg2/svg/SVGStyleElementImpl.cpp:
        * ksvg2/svg/SVGStyledElementImpl.cpp:
        * ksvg2/svg/SVGSymbolElementImpl.cpp:
        * ksvg2/svg/SVGViewElementImpl.cpp:
        * kwq/KWQAccObject.mm:
        * kwq/KWQFontFamily.h:
        * kwq/KWQFontFamily.mm:
        * kwq/KWQKJobClasses.h:
        * kwq/KWQKJobClasses.mm:
        * loader/Cache.h:
        * loader/CachedObject.h:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.h:
        * page/Frame.cpp:
        * page/FrameTreeNode.h:
        * platform/SegmentedString.h:
        * rendering/render_image.h:
        * rendering/render_style.cpp:
        * xml/xmlhttprequest.cpp:
        Updated all includes to use new filenames.

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - various event cleanup, including fixing of the load event for iframes
        http://bugs.webkit.org/show_bug.cgi?id=7079
        
        Specific changes:
        
        - don't bother to nil-check the document, a node can never have a null document now
        - move temp event forgetting from dispatchEvent to dispatchGenericEvent
        - pass event down using RefPtr::release() to avoid ref thrashing
        - support default handlers even for non-bubbling events (only on
          target node) and skip calling default event handler explicitly in
          callers
        - dispatch a whole separate load event to a frame document's containing frame
        - don't let propagationStopped prevent this new event
        - remove bogus security check for iframe onload

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::shouldClose):
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchEvent):
        (WebCore::NodeImpl::dispatchGenericEvent):
        (WebCore::NodeImpl::dispatchWindowEvent):
        * khtml/xml/NodeImpl.h:

2006-02-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed and landed by Anders.

        * bindings/objc/DOM.mm:
        (-[DOMNode replaceChild::]):
        (KJS::DOMNodeProtoFunc::callAsFunction):
        Return correct child. Fixes test case failures introduced by the fix to
        http://bugs.webkit.org/show_bug.cgi?id=7076
        
2006-02-05  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Darin, landed by ap (with a tweak suggested by Darin).

        - Fixed --no-svg build on http://build.webkit.org/.

        * kwq/KWQPainter.mm: Include "FloatRect.h".

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Just return bool from DOM child mutation methods instead of the node
        http://bugs.webkit.org/show_bug.cgi?id=7076

        * bindings/objc/DOM.mm:
        (-[DOMNode insertBefore::]):
        (-[DOMNode replaceChild::]):
        (-[DOMNode removeChild:]):
        (-[DOMNode appendChild:]):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNodeProtoFunc::callAsFunction):
        * khtml/html/HTMLOptGroupElementImpl.cpp:
        (WebCore::HTMLOptGroupElementImpl::insertBefore):
        (WebCore::HTMLOptGroupElementImpl::replaceChild):
        (WebCore::HTMLOptGroupElementImpl::removeChild):
        (WebCore::HTMLOptGroupElementImpl::appendChild):
        * khtml/html/HTMLOptGroupElementImpl.h:
        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::insertBefore):
        (WebCore::HTMLSelectElementImpl::replaceChild):
        (WebCore::HTMLSelectElementImpl::removeChild):
        (WebCore::HTMLSelectElementImpl::appendChild):
        * khtml/html/HTMLSelectElementImpl.h:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        (WebCore::HTMLTextAreaElementImpl::setDefaultValue):
        * khtml/html/html_tableimpl.cpp:
        (WebCore::HTMLTableElementImpl::createTFoot):
        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::insertBefore):
        (WebCore::ContainerNodeImpl::replaceChild):
        (WebCore::ContainerNodeImpl::removeChild):
        (WebCore::ContainerNodeImpl::appendChild):
        * khtml/xml/ContainerNodeImpl.h:
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::insertBefore):
        (WebCore::NodeImpl::replaceChild):
        (WebCore::NodeImpl::removeChild):
        (WebCore::NodeImpl::appendChild):
        * khtml/xml/NodeImpl.h:
        * khtml/xml/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::insertErrorMessageBlock):

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        - reverted CSS media queries patch, as it causes random crashes on the
        layout tests with a debug build.
        
        * WebCore.xcodeproj/project.pbxproj:
        * css/css_grammar.y:
        * css/css_mediaqueryeval.cpp: Removed.
        * css/css_mediaqueryeval.h: Removed.
        * css/css_mediaqueryimpl.cpp: Removed.
        * css/css_mediaqueryimpl.h: Removed.
        * css/css_stylesheetimpl.cpp:
        (MediaListImpl::MediaListImpl):
        (MediaListImpl::contains):
        (MediaListImpl::deleteMedium):
        (MediaListImpl::mediaText):
        (MediaListImpl::setMediaText):
        * css/css_stylesheetimpl.h:
        (DOM::MediaListImpl::length):
        (DOM::MediaListImpl::item):
        (DOM::MediaListImpl::appendMedium):
        * css/css_valueimpl.h:
        * css/csshelper.h:
        * css/cssmediafeatures.in: Removed.
        * css/cssparser.cpp:
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/cssstyleselector.h:
        * css/makemediafeatures: Removed.
        * css/maketokenizer:
        * css/tokenizer.flex:
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::process):
        (WebCore::HTMLLinkElementImpl::setStyleSheet):
        (WebCore::HTMLStyleElementImpl::childrenChanged):
        * platform/Screen.h:
        * platform/mac/Screen.mm:

2006-02-04  Andrew Wellington  <proton@wiretapped.net>

        Reviewed and tweaked by Darin.

        - fixed regressions caused by fix for bug 5776 earlier today

        * rendering/render_list.h: Remove m_value from RenderListMarker, add it to RenderListItem.
        A few other tweaks, including getting rid of "friend" relationship.
        * rendering/render_list.cpp:
        (RenderListItem::RenderListItem): Initialize m_value.
        (RenderListItem::setStyle): Restore old behavior of making no marker for LNONE case.
        (RenderListItem::calcValue): Work on m_value, not m_marker->m_value.
        (RenderListItem::resetValue): Reset m_value, even if there's no marker.
        (RenderListMarker::RenderListMarker): Remove code to set up m_value.
        (RenderListMarker::calcMinMaxWidth): Get marker value from list item.

        * rendering/RenderContainer.cpp: (updateListMarkerNumbers): Call resetValue by its new name.

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Hyatt.

        - change JavaScript collector statistics calls to use HashCountedSet instead
        of CFSet; other misc cleanup
        http://bugs.webkit.org/show_bug.cgi?id=7072

        * kwq/WebCoreJavaScript.h:
        * kwq/WebCoreJavaScript.mm:
        (+[WebCoreJavaScript protectedObjectCount]): Renamed from referencedObjectCounts
        (+[WebCoreJavaScript rootObjectTypeCounts]): Renamed from rootObjectClasses,
        changed from NSSet to NSCountedSet.

2006-02-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - refactor and simplify code using ChildFrame in preparation for removing it
        http://bugs.webkit.org/show_bug.cgi?id=7065

        * WebCore.xcodeproj/project.pbxproj: reordered slightly.
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::createFrame): Don't take isObject parameter, just check tag name
        * khtml/html/HTMLFormElementImpl.cpp:
        (WebCore::HTMLFormElementImpl::prepareSubmit): remove obsolete hasOnlyLocalReferences check
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::isURLAllowed): remove obsolete hasOnlyLocalReferences check
        * loader/DocLoader.cpp:
        (khtml::DocLoader::requestImage): remove obsolete hasOnlyLocalReferences check
        (khtml::DocLoader::requestStyleSheet): remove obsolete hasOnlyLocalReferences check
        (khtml::DocLoader::requestScript): remove obsolete hasOnlyLocalReferences check
        (khtml::DocLoader::requestXSLStyleSheet): remove obsolete hasOnlyLocalReferences check
        * page/Frame.cpp:
        (WebCore::Frame::requestFrame): refactored and simplified
        (WebCore::Frame::requestObject): ditto
        (WebCore::Frame::shouldUsePlugin): ditto
        (WebCore::Frame::loadPlugin): ditto
        (WebCore::Frame::loadSubframe): ditto
        (WebCore::Frame::frameNames): remove obsolete m_bPreloaded check
        (WebCore::Frame::frames): ditto
        (WebCore::Frame::connectChild): check isFrame, not child type
        (WebCore::Frame::disconnectChild): ditto
        (WebCore::Frame::handleFallbackContent): greatly simplify using onwerElement
        (WebCore::Frame::updateBaseURLForEmptyDocument): use ownerElement, notChildFrame
        (WebCore::Frame::onlyLocalReferences): removed
        (WebCore::Frame::setOnlyLocalReferences): removed
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::ChildFrame::ChildFrame): remove most fields.
        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget): Remove redundant setting of base URL for child document
        of iframe, Frame itself takes care of this already

2006-02-03  Andrew Wellington  <proton@wiretapped.net>

        Reviewed and tweaked by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=5776
          Generated numbers of ordered lists (OL) are not calculated right
  
        Uses the DOM tree to calculate previous nodes and nest correctly

        Tests:
        * fast/lists/olstart.html
        * fast/lists/ol-display-types.html

        * khtml/html/html_listimpl.cpp:
        (DOM::HTMLLIElementImpl::attach): remove calculation of start node value
        * rendering/render_list.cpp:
        (RenderListItem::setStyle): set up an m_marker even if the style is to
        not display the marker, to get the numbering right
        (enclosingList): gets the list enclosing the given node
        (previousListItemElement): gets the previous element in the list
        (RenderListItem::calcListValue): calculate the value correctly

2006-02-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by beth.

        - Fixed <rdar://problem/4394868> window.open fails to parse 
        "width=200px"

        Cause: QString::toInt() is too aggressive; it parses letters as numbers.
        The fix is to switch to DOMString. It's all the rage these days,
        and its toInt() behavior matches what we want.

        * manual-tests/window-open-features-parsing.html: Added "px" case to
        giant evil string.

        * khtml/ecma/kjs_window.cpp:
        (KJS::setWindowFeature):
        (KJS::parseWindowFeatures):
        (KJS::WindowFunc::callAsFunction):

2006-02-03  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Dave Hyatt and Tim H.

        Bug 4127: WebCore doesn't support Media Queries (CSS3 module)
        http://bugs.webkit.org/show_bug.cgi?id=4127

        http://www.w3.org/TR/css3-mediaqueries/

        * WebCore.xcodeproj/project.pbxproj:
        * css/css_grammar.y:
        * css/css_mediaqueryeval.cpp: Added.
        (MediaQueryEvaluator):
        (MediaQueryEvaluator::~MediaQueryEvaluator):
        (MediaQueryEvaluator::mediaTypeMatch):
        (applyRestrictor):
        (MediaQueryEvaluator::eval):
        (parseAspectRatio):
        * css/css_mediaqueryeval.h: Added.
        * css/css_mediaqueryimpl.cpp: Added.
        (MediaQueryExpImpl::MediaQueryExpImpl):
        (MediaQueryExpImpl::~MediaQueryExpImpl):
        (MediaQueryExpImpl::mediaFeature):
        (MediaQueryExpImpl::value):
        (MediaQueryImpl::MediaQueryImpl):
        (MediaQueryImpl::~MediaQueryImpl):
        (MediaQueryImpl::restrictor):
        (MediaQueryImpl::expressions):
        (MediaQueryImpl::mediaType):
        (MediaQueryImpl::operator==):
        * css/css_mediaqueryimpl.h: Added.
        (DOM::MediaQueryExpImpl::operator==):
        (DOM::MediaQueryExpListImpl::MediaQueryExpListImpl):
        (DOM::MediaQueryExpListImpl::append):
        (DOM::MediaQueryExpListImpl::list):
        (DOM::MediaQueryImpl::):
        * css/css_stylesheetimpl.cpp:
        (MediaListImpl::MediaListImpl):
        (MediaListImpl::deleteMedium):
        (mediaQueryAsDOMString):
        (MediaListImpl::mediaText):
        (MediaListImpl::setMediaText):
        (MediaListImpl::item):
        (MediaListImpl::appendMedium):
        (MediaListImpl::appendMediaQuery):
        * css/css_stylesheetimpl.h:
        (DOM::MediaListImpl::length):
        (DOM::MediaListImpl::mediaQueries):
        * css/css_valueimpl.h:
        * css/csshelper.h:
        * css/cssmediafeatures.in: Added.
        * css/cssparser.cpp:
        (CSSParser::parseMediaQuery):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::~CSSStyleSelector):
        (WebCore::CSSStyleSelector::loadDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::defaultStyleForRoot):
        * css/cssstyleselector.h:
        * css/makemediafeatures: Added.
        * css/maketokenizer:
        * css/tokenizer.flex:
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::process):
        (WebCore::HTMLLinkElementImpl::setStyleSheet):
        (WebCore::HTMLStyleElementImpl::childrenChanged):
        * platform/Screen.h:
        * platform/mac/Screen.mm:
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):

2006-02-03  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Justin.

        Renamed configuration names to Debug, Release and Production.

        * WebCore.xcodeproj/project.pbxproj:

2006-02-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        No test cases added because this is an unreproducible crash.

        This is a speculative fix for <rdar://problem/4048026> 
        CrashTracer: [BOUNCE BACK] 1219 crashes in Safari at 
        com.apple.WebCore: KHTMLParser::popOneBlock + 36

        It seems possible that current could be nil when this function is 
        called, so the speculative fix is to add a nil check.

        * khtml/html/htmlparser.cpp:
        (HTMLParser::popOneBlock): Added nil check.

2006-02-03  David Hyatt  <hyatt@apple.com>

        Refactoring of the image classes to make them even more
        portable.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Image.cpp:
        (WebCore::m_animationObserver):
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::resetAnimation):
        (WebCore::Image::setData):
        (WebCore::Image::isNull):
        (WebCore::Image::size):
        (WebCore::Image::rect):
        (WebCore::Image::width):
        (WebCore::Image::height):
        (WebCore::):
        (WebCore::Image::compositeOperatorFromString):
        * platform/ImageData.cpp: Added.
        (WebCore::FrameData::clear):
        (WebCore::ImageData::ImageData):
        (WebCore::ImageData::~ImageData):
        (WebCore::ImageData::invalidateData):
        (WebCore::ImageData::cacheFrame):
        (WebCore::ImageData::isNull):
        (WebCore::ImageData::size):
        (WebCore::ImageData::setData):
        (WebCore::ImageData::setNativeData):
        (WebCore::ImageData::frameCount):
        (WebCore::ImageData::isSizeAvailable):
        (WebCore::ImageData::frameAtIndex):
        (WebCore::ImageData::frameDurationAtIndex):
        (WebCore::ImageData::shouldAnimate):
        (WebCore::ImageData::startAnimation):
        (WebCore::ImageData::stopAnimation):
        (WebCore::ImageData::resetAnimation):
        (WebCore::ImageData::advanceAnimation):
        * platform/ImageData.h: Added.
        (KXMLCore::):
        (WebCore::FrameData::m_duration):
        (WebCore::FrameData::~FrameData):
        (WebCore::ImageData::setIsPDF):
        (WebCore::ImageData::currentFrame):
        * platform/ImageDecoder.h:
        * platform/mac/Image.mm:
        (WebCore::Image::loadResource):
        (WebCore::Image::supportsType):
        (WebCore::Image::getCGImageRef):
        (WebCore::Image::getNSImage):
        (WebCore::Image::getTIFFRepresentation):
        (WebCore::graphicsContext):
        (WebCore::setCompositingOperation):
        (WebCore::fillSolidColorInRect):
        (WebCore::Image::drawInRect):
        (WebCore::drawPattern):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * platform/mac/ImageData.mm: Added.
        (WebCore::setCompositingOperation):
        (WebCore::ImageData::invalidateAppleSpecificData):
        (WebCore::ImageData::checkForSolidColor):
        (WebCore::ImageData::getTIFFRepresentation):
        (WebCore::ImageData::getNSImage):
        * platform/mac/PDFDocumentImage.h: Added.
        * platform/mac/PDFDocumentImage.mm: Added.
        (WebCore::releasePDFDocumentData):
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::~PDFDocumentImage):
        (WebCore::PDFDocumentImage::documentRef):
        (WebCore::PDFDocumentImage::mediaBox):
        (WebCore::PDFDocumentImage::bounds):
        (WebCore::PDFDocumentImage::adjustCTM):
        (WebCore::PDFDocumentImage::setCurrentPage):
        (WebCore::PDFDocumentImage::currentPage):
        (WebCore::PDFDocumentImage::pageCount):
        (WebCore::PDFDocumentImage::draw):

2006-02-03  David Hyatt  <hyatt@apple.com>

        Make a new class called ImageDecoder that wraps a CGImageSource.
        This paves the way for ImageData to become portable as well.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ImageDecoder.h: Added.
        * platform/mac/Image.mm:
        (WebCore::ImageData::~ImageData):
        (WebCore::ImageData::invalidateData):
        (WebCore::ImageData::cacheFrame):
        (WebCore::ImageData::size):
        (WebCore::ImageData::setCFData):
        (WebCore::ImageData::frameCount):
        (WebCore::ImageData::isSizeAvailable):
        (WebCore::ImageData::drawInRect):
        * platform/mac/ImageDecoder.cpp: Added.
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::~ImageDecoder):
        (WebCore::imageSourceOptions):
        (WebCore::ImageDecoder::initialized):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::repetitionCount):
        (WebCore::ImageDecoder::frameCount):
        (WebCore::ImageDecoder::createFrameAtIndex):
        (WebCore::ImageDecoder::frameDurationAtIndex):

2006-02-02  David Hyatt  <hyatt@apple.com>

        Move ImageAnimationObserver into its own file.

        Reviewed by mjs

        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachedImage.h:
        * platform/Image.h:
        * platform/ImageAnimationObserver.h: Added.
        (WebCore::ImageAnimationObserver::~ImageAnimationObserver):
        * platform/mac/Image.mm:

2006-02-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.

        - remove all use of the ChildFrame from outside Frame.cpp, in preparation for removing it

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::frameDetached): Factor out the ChildFrame manipulations into a base
        class method.
        (WebCore::MacFrame::objectContentType): factored out from createPart, calls the bridge to
        determine contents for an Object tag.
        (WebCore::MacFrame::createPlugin): factor out code from createPart that makes a Plugin.
        (WebCore::MacFrame::createFrame): ditto for code that makes a Frame.
        (WebCore::MacFrame::createEmptyDocument): factored out part into the superclass
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::ownerElement): Call new ownerElement method on Frame
        instead of mucking at Frame internals.
        * page/Frame.cpp:
        (WebCore::Frame::createPart): Moved here from MacFrame, but some of the guts were
        factored out.
        (WebCore::Frame::ownerElement): New method, logic moved from DocumentImpl.
        (WebCore::Frame::frameDetached): New virtual method, the part of this that
        pokes at ChildFrame structures.
        (WebCore::Frame::updateBaseURLForEmptyDocument): Helper that looks at the ChildFrame
        array for the benefit of createEmptyDocument.
        * page/Frame.h:
        * page/Page.h: Fix up modeline.
        * page/Plugin.h: Added.
        (WebCore::Plugin::Plugin): Moved here from MacFrame.mm, since it is now used by Frame.
        (WebCore::Plugin::view): ditto

2006-02-02  David Hyatt  <hyatt@apple.com>

        Avoid extra copies of all the decoded image bytes.

        Reviewed by mjs

        * platform/mac/Image.mm:
        (WebCore::ImageData::setData):

2006-02-02  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin, harrison
        
        <http://bugs.webkit.org/show_bug.cgi?id=6586>
        REGRESSION: visible_text.cpp assertion failure in Mail.app

        Calling range() on a WordIterator destroyed its RangeImpl, use
        RefPtr instead of PassRefPtr.
        Turned on continuous spell checking to test the fix, found
        a crasher caused by invalid positions created in
        previousBoundary.

        Added layout test:
        * editing/selection/end-of-document.html

        * khtml/editing/visible_text.h:
        * khtml/editing/visible_units.cpp:
        (khtml::previousBoundary):

2006-02-02  David Hyatt  <hyatt@apple.com>

        Vectorize Image.  Optimize so that we no longer throw away
        all CGImageRefs.  Now we just throw away the last frame.

        Reviewed by mjs

        * platform/mac/Image.mm:
        (WebCore::FrameData::m_duration):
        (WebCore::FrameData::~FrameData):
        (WebCore::FrameData::clear):
        (WebCore::ImageData::invalidateData):
        (WebCore::ImageData::cacheFrame):
        (WebCore::ImageData::frameAtIndex):
        (WebCore::ImageData::frameDurationAtIndex):

2006-01-31  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        Cleaned up some stuff I came across when working with JS enabled/
        disabled code:

        (1) Renamed initScript to initScriptIfNeeded, because that's what it
            does
        (2) Removed dead or otherwise irrelevent code
        (3) Fixed up comments
        (4) Removed NULL checks for interpreter() since it never returns NULL,
            replaced with single assert().

        No test case because there's no change in behavior.

        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxyImpl::evaluate): 1
        (WebCore::KJSProxyImpl::createHTMLEventHandler): 1
        (WebCore::KJSProxyImpl::createSVGEventHandler): 1
        (WebCore::KJSProxyImpl::interpreter): 4
        (WebCore::KJSProxyImpl::initScriptIfNeeded): 1
        * khtml/ecma/kjs_proxy.h: 1
        * page/Frame.cpp:
        (Frame::didOpenURL): 2, 3
        (Frame::stopLoading): 2
        (Frame::jScriptEnabled): 2
        (Frame::jScript): changed method call to data member access to match
                          style of rest of class
        (Frame::javaEnabled): 2
        (Frame::pluginsEnabled): 2
        (Frame::begin): 3
        (Frame::userGestureHint): 4
        (Frame::pauseTimeouts): collapsed a line
        (Frame::resumeTimeouts): ditto
        (Frame::saveInterpreterBuiltins): 4
        (Frame::restoreInterpreterBuiltins): 4
        * page/Frame.h: 2
        * page/FramePrivate.h: 2
        (FramePrivate::FramePrivate): 2

2006-02-02  David Hyatt  <hyatt@apple.com>

        Fix for PLT performance regression.  Make sure that the document's load event timer
        isn't started again if it's already active.

        Reviewed by mjs

        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::dispatchImageLoadEventSoon):

2006-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7000
          REGRESSION: Scrolling is triggering onunload in TOT

        Tests:
        - fast/events/onunload-body-property.html
        - fast/events/onunload-window-property.html

        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::getValueProperty): Change onunload case to use unloadEvent, not scrollEvent.
        (KJS::DOMNode::putValueProperty): Ditto.
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty): Ditto.
        (KJS::Window::putValueProperty): Ditto.

2006-02-02  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6998
          setTimeout(0) tight loop uses almost all CPU (need 10ms minimum for timeout?)

        * khtml/ecma/kjs_window.cpp: (KJS::WindowQObject::installTimeout): When converting
        the timeout number from an integer ms to a double seconds, use a 10 ms minimum.

2006-02-02  Darin Adler  <darin@apple.com>

        - added a FIXME about an incorrect change made to FloatRect
          to fix the Win32 compile

        * platform/FloatRect.cpp: (WebCore::enclosingIntRect): Added FIXME
        because this should do a ceil operation, not a round operation.

2006-02-02  David Hyatt  <hyatt@apple.com>

       Fix for bug 6957, rewrite image rendering in C++ and move it to
       WebCore.  Animation now stops lazily and just uses the CachedObject
       notification system to push updates so that rects no longer need to
       be cached (or sets of animating renderers in specific views).
       
       Reviewed by darin

        * WebCore.exp:
        * bindings/objc/DOM.mm:
        (-[DOMElement _image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * bindings/objc/DOMPrivate.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::khtmlMouseMoveEvent):
        (WebCore::MacFrame::fileWrapperForElement):
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementAtPoint:]):
        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::imageChanged):
        * kcanvas/RenderSVGImage.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEImageQuartz::getCIFilter):
        * khtml/ecma/kjs_html.cpp:
        (KJS::drawPattern):
        * kwq/KWQClipboard.h:
        (WebCore::KWQClipboard::setDragHasStarted):
        * kwq/KWQClipboard.mm:
        (WebCore::KWQClipboard::dragNSImage):
        * kwq/KWQCursor.mm:
        (WebCore::createCustomCursor):
        * kwq/KWQPainter.h:
        (WebCore::QPainter::):
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::drawFloatImage):
        (WebCore::QPainter::drawTiledImage):
        (WebCore::QPainter::drawScaledAndTiledImage):
        * kwq/KWQScrollView.h:
        * kwq/KWQScrollView.mm:
        (QScrollView::inWindow):
        * kwq/WebCoreImageRendererFactory.h:
        * kwq/WebCoreImageRendererFactory.m:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::ref):
        (WebCore::CachedImage::imageRect):
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        (WebCore::CachedImage::shouldStopAnimation):
        (WebCore::CachedImage::animationAdvanced):
        * loader/CachedImage.h:
        (WebCore::CachedImage::canRender):
        * loader/CachedObjectClient.h:
        (WebCore::CachedObjectClient::imageChanged):
        (WebCore::CachedObjectClient::willRenderImage):
        * platform/Image.h:
        (WebCore::ImageAnimationObserver::~ImageAnimationObserver):
        (WebCore::Image::animationObserver):
        (WebCore::Image::):
        * platform/mac/Image.mm:
        (WebCore::releasePDFDocumentData):
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::~PDFDocumentImage):
        (WebCore::PDFDocumentImage::documentRef):
        (WebCore::PDFDocumentImage::mediaBox):
        (WebCore::PDFDocumentImage::bounds):
        (WebCore::PDFDocumentImage::adjustCTM):
        (WebCore::PDFDocumentImage::setCurrentPage):
        (WebCore::PDFDocumentImage::currentPage):
        (WebCore::PDFDocumentImage::pageCount):
        (WebCore::PDFDocumentImage::draw):
        (WebCore::ImageData::setIsPDF):
        (WebCore::ImageData::currentFrame):
        (WebCore::m_PDFDoc):
        (WebCore::ImageData::~ImageData):
        (WebCore::ImageData::invalidateData):
        (WebCore::ImageData::cacheFrame):
        (WebCore::ImageData::checkForSolidColor):
        (WebCore::ImageData::isNull):
        (WebCore::ImageData::size):
        (WebCore::ImageData::setData):
        (WebCore::ImageData::setCFData):
        (WebCore::ImageData::imageSourceOptions):
        (WebCore::ImageData::frameCount):
        (WebCore::ImageData::isSizeAvailable):
        (WebCore::ImageData::frameAtIndex):
        (WebCore::ImageData::getTIFFRepresentation):
        (WebCore::ImageData::getNSImage):
        (WebCore::ImageData::frameDurationAtIndex):
        (WebCore::ImageData::shouldAnimate):
        (WebCore::ImageData::startAnimation):
        (WebCore::ImageData::stopAnimation):
        (WebCore::ImageData::resetAnimation):
        (WebCore::ImageData::advanceAnimation):
        (WebCore::ImageData::setCompositingOperation):
        (WebCore::ImageData::fillSolidColorInRect):
        (WebCore::ImageData::drawInRect):
        (WebCore::drawPattern):
        (WebCore::):
        (WebCore::ImageData::tileInRect):
        (WebCore::ImageData::scaleAndTileInRect):
        (WebCore::Image::loadResource):
        (WebCore::Image::supportsType):
        (WebCore::m_animationObserver):
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::getCGImageRef):
        (WebCore::Image::getNSImage):
        (WebCore::Image::getTIFFRepresentation):
        (WebCore::Image::resetAnimation):
        (WebCore::Image::setData):
        (WebCore::Image::isNull):
        (WebCore::Image::size):
        (WebCore::Image::rect):
        (WebCore::graphicsContext):
        (WebCore::Image::drawInRect):
        (WebCore::Image::tileInRect):
        (WebCore::Image::scaleAndTileInRect):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        * rendering/render_image.h:
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        * rendering/render_list.cpp:
        (RenderListMarker::imageChanged):
        * rendering/render_list.h:
        * rendering/render_object.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::imageChanged):
        (WebCore::RenderObject::willRenderImage):
        * rendering/render_object.h:

2006-02-02  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/block/positioning/height-change.html

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6881
          Block with position:absolute bottom:0 doesn't always move when height
          of containing block changes (affects Safari RSS)

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Relayout positioned children if the
        block's height changed during layout.
        * rendering/render_flexbox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.

2006-02-02  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Move name and parent from Frame to FrameTreeNode
        http://bugs.webkit.org/show_bug.cgi?id=6994

        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::generateFrameName):
        (WebCore::MacFrame::submitForm):
        (WebCore::Frame::frameDetached):
        (WebCore::MacFrame::nextKeyViewInFrameHierarchy):
        (WebCore::MacFrame::createEmptyDocument):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge setParent:]):
        (-[WebCoreFrameBridge parent]):
        (-[WebCoreFrameBridge setName:]):
        (-[WebCoreFrameBridge name]):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::WindowFunc::callAsFunction):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::isURLAllowed):
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::process):
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::ownerElement):
        (WebCore::DocumentImpl::parentDocument):
        * page/Frame.cpp:
        (WebCore::Frame::checkCompleted):
        (WebCore::Frame::redirectionTimerFired):
        (WebCore::Frame::requestFrameName):
        (WebCore::Frame::slotChildCompleted):
        (WebCore::Frame::incrementFrameCount):
        (WebCore::Frame::decrementFrameCount):
        (WebCore::Frame::topLevelFrameCount):
        (WebCore::Frame::selectFrameElementInParentIfFullySelected):
        (WebCore::Frame::handleFallbackContent):
        (WebCore::Frame::userGestureHint):
        (WebCore::Frame::canCachePage):
        (WebCore::Frame::updatePolicyBaseURL):
        * page/Frame.h:
        * page/FramePrivate.h:
        (WebCore::FramePrivate::FramePrivate):
        * page/FrameTreeNode.cpp:
        (WebCore::FrameTreeNode::setName):
        (WebCore::FrameTreeNode::appendChild):
        (WebCore::FrameTreeNode::removeChild):
        * page/FrameTreeNode.h:
        (WebCore::FrameTreeNode::FrameTreeNode):
        (WebCore::FrameTreeNode::name):
        (WebCore::FrameTreeNode::parent):
        (WebCore::FrameTreeNode::setParent):
        * rendering/render_frames.cpp:
        (WebCore::isURLAllowed):

2006-02-01  Darin Adler  <darin@apple.com>

        Checking in without review because I *just* broke this with my last check-in.

        - fix http://bugs.webkit.org/show_bug.cgi?id=7018
          REGRESSION: clearTimeout no longer works

        Test: fast/dom/Window/clear-timeout.html

        * khtml/ecma/kjs_window.cpp: (WindowQObject::clearTimeout): Fixed a
        != that should have been a ==.

2006-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - use Timer for everything, kill timer features of QObject, QTimer, QTimerEvent

        * ForwardingHeaders/kxmlcore/Noncopyable.h: Added.
        * ForwardingHeaders/kxmlcore/OwnArrayPtr.h: Added.
        * ForwardingHeaders/kxmlcore/OwnPtr.h: Added.
        * ForwardingHeaders/qtimer.h: Removed.
        * kwq/KWQTimer.cpp: Removed.
        * kwq/KWQTimer.h: Removed.

        * kwq/KWQObject.h:
        * kwq/KWQObject.cpp: Remove timer-related features.

        * kwq/KWQEvent.h: Remove QTimerEvent.

        * WebCore.xcodeproj/project.pbxproj: Updated for file changes.
        * WebCore.vcproj/WebCore/WebCore.vcproj: Ditto.

        * platform/Timer.h: Change to use nextFireInterval rather than nextFireTime.
        More convenient and also no need to define what the epoch is. Change TimerBase
        to use a virtual function rather than a function pointer. Added setDeferringTimers
        function to ensure timers don't fire while handling an event.
        * platform/mac/Timer.cpp:
        (WebCore::timerFired): Added deferral support.
        (WebCore::fireDeferred): Added.
        (WebCore::TimerBase::TimerBase): Simplify to remove function pointer.
        (WebCore::TimerBase::~TimerBase): Put in here, no longer inline.
        (WebCore::TimerBase::start): Change to use interval.
        (WebCore::TimerBase::startRepeating): Change since we use interval now.
        (WebCore::TimerBase::startOneShot): Ditto.
        (WebCore::TimerBase::stop): Added deferral support.
        (WebCore::TimerBase::nextFireInterval): Added.
        (WebCore::TimerBase::fire): Added.
        (WebCore::isDeferringTimers): Added.
        (WebCore::setDeferringTimers): Added.

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::startRedirectionTimer): Update for change to Timer class.
        (WebCore::MacFrame::passMouseDownEventToWidget): Update to use setDeferringTimers
        instead of QObject::setDefersTimers.

        * khtml/ecma/kjs_window.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::DOMWindowTimer): Added. Class for JavaScript "timeout".
        (KJS::WindowQObject::parentDestroyed): Update to use DOMWindowTimer.
        (KJS::WindowQObject::installTimeout): Ditto.
        (KJS::WindowQObject::pauseTimeouts): Ditto.
        (KJS::WindowQObject::resumeTimeouts): Ditto.
        (KJS::WindowQObject::clearTimeout): Ditto.
        (KJS::WindowQObject::timerFired): Ditto.
        (KJS::DOMWindowTimer::fired): Added.

        * khtml/html/htmltokenizer.h:
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer): Use Timer instead of timer ID.
        (WebCore::HTMLTokenizer::reset): Ditto.
        (WebCore::HTMLTokenizer::continueProcessing): Ditto.
        (WebCore::HTMLTokenizer::write): Ditto.
        (WebCore::HTMLTokenizer::stopParsing): Ditto.
        (WebCore::HTMLTokenizer::processingData): Ditto.
        (WebCore::HTMLTokenizer::timerFired): Ditto.
        (WebCore::HTMLTokenizer::end): Ditto.
        (WebCore::HTMLTokenizer::finish): Ditto.

        * khtml/xml/DocumentImpl.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl): Updated for changes to use RefPtr
        more cases, and not use it for m_svgExtensions.
        (WebCore::DocumentImpl::~DocumentImpl): Delete m_svgExtensions instead of
        just deref'ing it since it's no longer shared.
        (WebCore::DocumentImpl::implementation): Update for RefPtr.
        (WebCore::DocumentImpl::elementSheet): Ditto.
        (WebCore::DocumentImpl::styleSheets): Ditto.
        (WebCore::DocumentImpl::recalcStyleSelector): Ditto.
        (WebCore::DocumentImpl::dispatchImageLoadEventSoon): Update to use new style timer.
        (WebCore::DocumentImpl::removeImage): Ditto.
        (WebCore::DocumentImpl::dispatchImageLoadEventsNow): Ditto.
        (WebCore::DocumentImpl::imageLoadEventTimerFired): Ditto.
        (WebCore::DocumentImpl::svgExtensions): Update for RefPtr.
        (WebCore::DocumentImpl::accessSVGExtensions): Ditto.

        * ksvg2/misc/KSVGTimeScheduler.h:
        (WebCore::TimeScheduler::document):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::downcast):
        (WebCore::SVGTimer::SVGTimer):
        (WebCore::SVGTimer::start):
        (WebCore::SVGTimer::calculateTimePercentage):
        (WebCore::SVGTimer::notifyAll):
        (WebCore::SVGTimer::addNotify):
        (WebCore::SVGTimer::removeNotify):
        (WebCore::TimeScheduler::TimeScheduler):
        (WebCore::TimeScheduler::~TimeScheduler):
        (WebCore::TimeScheduler::addTimer):
        (WebCore::TimeScheduler::connectIntervalTimer):
        (WebCore::TimeScheduler::disconnectIntervalTimer):
        (WebCore::TimeScheduler::startAnimations):
        (WebCore::TimeScheduler::toggleAnimations):
        (WebCore::TimeScheduler::timerFired):
        Rework to use new timer.

        * ksvg2/misc/SVGDocumentExtensions.h:
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        Make SVGDocumentExtensions no longer be shared, be solely owned by the document.

        * ksvg2/svg/SVGDocumentImpl.cpp:
        (WebCore::SVGDocumentImpl::createStyleSelector): Update for RefPtr use.

        * kwq/KWQSlot.cpp: Remove endLifeSupport and timerNotify slots.

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged): Update to use new style timer.
        (WebCore::Frame::caretBlinkTimerFired): Ditto.
        * page/FramePrivate.h: (WebCore::FramePrivate::FramePrivate): Ditto.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameViewPrivate::FrameViewPrivate): Update to use new style timer.
        (WebCore::FrameView::clear): Ditto.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::layoutTimerFired): Ditto.
        (WebCore::FrameView::scheduleRelayout): Ditto.
        (WebCore::FrameView::layoutPending): Ditto.
        (WebCore::FrameView::haveDelayedLayoutScheduled): Ditto.
        (WebCore::FrameView::unscheduleRelayout): Ditto.

        * page/ObjectContents.h: Remove unneeded includes.

        * rendering/render_frames.cpp: Removed include of <qtimer.h>.

        * rendering/render_layer.h:
        * rendering/render_layer.cpp:
        (WebCore::Marquee::Marquee): Use new style timers.
        (WebCore::Marquee::start): Ditto.
        (WebCore::Marquee::suspend): Ditto.
        (WebCore::Marquee::stop): Ditto.
        (WebCore::Marquee::updateMarqueeStyle): Ditto.
        (WebCore::Marquee::timerFired): Ditto.

2006-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        Fix for <rdar://problem/4424126> REGRESSION(412-420+): yellow 
        highlight fails to follow cursor when mousing over star rating
        (6232)

        Event coordinates cannot be calculated until there is a target. 
        This patch restructures the code so that the coordinates are 
        initialized when the mouse event is created but are not calculated
        until the target is set.

        * khtml/xml/dom2_eventsimpl.cpp:
        (WebCore::EventImpl::setTarget): Now calls receivedTarget() if the
        target is not nil.
        (WebCore::EventImpl::receivedTarget): virtual receivedTarget()
        (WebCore::MouseRelatedEventImpl::MouseRelatedEventImpl): Call 
        initCoordinates()
        (WebCore::MouseRelatedEventImpl::initCoordinates): Formerly called 
        computePositions(), this now only initializes the coordinates and 
        lets receivedTarget() take care of the computations. 
        (WebCore::MouseRelatedEventImpl::receivedTarget): Takes care of 
        computing the coordinates.
        (WebCore::MouseEventImpl::initMouseEvent): Call initCoordinates()
        * khtml/xml/dom2_eventsimpl.h:
        (WebCore::EventImpl::target): Fix spacing.
        (WebCore::EventImpl::currentTarget): Same.
        (WebCore::EventImpl::setCurrentTarget): Same.

2006-01-31  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed REGRESSION: assertion failure mousing over DHTML menus at www.worldofwarcraft.com
        http://bugs.webkit.org/show_bug.cgi?id=6931

        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::hitTestLayer): Iterate vectors in a way that won't break on empty ones.

2006-01-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6862
        Input's value doesn't get updated after typing in new text field

        Added test:
        fast/forms/input-changing-value.html

        Added an event listener for a DOMCharacterDataModifiedEvent on the inner div.
        When we get the event, then we update the input element's value field.

        There may be performance problems with this approach that we will have to
        address before flipping the switch to use these new text fields.

        * rendering/RenderTextField.cpp:
        (WebCore::InputMutationListener::handleEvent): calls subtreeHasChanged
        (WebCore::m_mutationListener):
        (WebCore::RenderTextField::~RenderTextField): remove the event listener.
        (WebCore::RenderTextField::setStyle): Remove unnecessary setStyle on text node.  
         It should inherit style from the div already.
        (WebCore::RenderTextField::updateFromElement): add the event listener.
        (WebCore::RenderTextField::subtreeHasChanged): updates the input element's value.
        * rendering/RenderTextField.h:
        (WebCore::InputMutationListener::InputMutationListener): Added.
        (WebCore::InputMutationListener::renderTextField): Added.
        (WebCore::InputMutationListener::setInputElement): Added.

2006-01-31  Antti Koivisto <koivisto@iki.fi>

        Reviewed by Dave Hyatt.
        Landed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=4959
        Bug 4959: inline style not terminated properly after <form>

        * khtml/html/htmlparser.cpp:
        (HTMLParser::isResidualStyleTag): add <span> as residual style tag
        (HTMLParser::isAffectedByResidualStyle): add <form> as tag affected by residual style

2006-01-31  Vicki Murley <vicki@apple.com>

        Reviewed by Geoff.

        - fix <rdar://problem/4426668> REGRESSION: sometimes URLs with named anchors in a
        page don't jump to proper location in document (6916). Added test cases for this
        fix and past link jumping bug fixes.

        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::getUpperLeftCorner): Traverse up the parent node chain
        until you find one that has a sibling.
        * manual-tests/linkjump-1.html: Added a note here - the bug for this test case is
        still broken in TOT.
        * manual-tests/linkjump-2.html: Added. Renamed scrollToAnchor.html, to group it with the
        rest of the link jumping tests.
        * manual-tests/linkjump-3.html: Added. Test case for this bug, <rdar://problem/4426668>.
        * manual-tests/linkjump-4.html: Added. Test case for past fix, <rdar://problem/4247537>.
        * manual-tests/linkjump-5.html: Added. Test case for past fix, <rdar://problem/4256060>.
        * manual-tests/scrollToAnchor.html: Removed.

2006-01-31  David Harrison  <harrison@apple.com>

        Reviewed by John.
        <rdar://problem/4423922> TOT REGRESSION (r12358): first iframe in pair fails to copy

        Layout test added:
        * editing/pasteboard/paste-empty-startcontainer.html
        
        * khtml/xml/dom2_rangeimpl.cpp:
        (DOM::RangeImpl::startNode):
        - use empty non-textual m_startContainer itself if m_startOffset is 0, rather then nextSibling()

2006-01-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/forms/selected-index-assert.html.

        Reviewed by Adele.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6942
          Assertion failure in HTMLSelectElementImpl::selectedIndex (m_multiple)

        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::selectedIndex): Removed bogus assert.
        -1 is the correct value to return if no option is selected.

2006-01-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele.

        Fixing build bustage. Removing include of khtml_factory.h since it 
        has been removed.

        * rendering/font.cpp: No longer include khtml_factory.h

2006-01-31  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6584
          REGRESSION: button after unclosed button gives trouble

        * khtml/html/htmlparser.cpp: (HTMLParser::getNode):
        Add buttonTag to error handling table to take care of unclosed tags.

2006-01-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/parser/script-after-frameset-assert.html

        Reviewed by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6959
          REGRESSION: Assertion failure in HTMLTokenizer::parseTag (!scriptNode) on page with ignored scripts

        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Reset scriptNode to 0 if the
        script is being skipped.

2006-01-31  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6960
          REGRESSION: Assertion failure in table_layout.cpp:216 calcWidthArray()

        * rendering/table_layout.cpp: (WebCore::FixedTableLayout::calcWidthArray):
        Remove the assertion.

2006-01-31  Anders Carlsson  <andersca@mac.com>

        Reviewed by John.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6964
        ImagePatterns are always rendered mirrored
        
        * khtml/ecma/kjs_html.cpp:
        (KJS::ImagePattern::createPattern):
        Don't mirror the x coordinate when creating the pattern.

2006-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - added a Timer class
        - used the Timer class for the redirection timer
        - moved Frame, FrameView, MacFrame, and FrameNodeTree into WebCore namespace
        - removed more KWQ

        * ForwardingHeaders/khtml_factory.h: Removed.
        * kwq/KWQKHTMLFactory.cpp: Removed.
        * kwq/KWQKHTMLFactory.h: Removed.

        * platform/Timer.h: Added.
        * platform/mac/Timer.cpp: Added.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for added and removed files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * page/Frame.h:
        * page/Frame.cpp:
        (WebCore::Frame::init): Remove code to set up slotRedirect.
        (WebCore::Frame::checkCompleted): Call start/stopRedirectionTimer instead of using
        the redirection timer directly.
        (WebCore::Frame::scheduleRedirection): Ditto.
        (WebCore::Frame::scheduleLocationChange): Ditto.
        (WebCore::Frame::scheduleHistoryNavigation): Ditto.
        (WebCore::Frame::cancelRedirection): Ditto.
        (WebCore::Frame::redirectionTimerFired): Renamed from slotRedirect.
        (WebCore::Frame::slotParentCompleted): More startRedirectionTimer.
        (WebCore::Frame::startRedirectionTimer): Added. Virtual bottleneck to start the
        redirection timer.
        (WebCore::Frame::stopRedirectionTimer): Added. Virtual bottleneck to stop the
        redirection timer.

        * page/FramePrivate.h: Changed m_redirectionTimer from a QTimer to a Timer.

        * bridge/mac/MacFrame.mm:
        (WebCore::MacFrame::startRedirectionTimer): Added. Avoids the need for the QTimer
        "monitor" feature that I had added a while back to implement the client-redirected
        callback.
        (WebCore::MacFrame::stopRedirectionTimer): Ditto.

        * kwq/KWQSlot.cpp: Removed slotRedirected.

        * ForwardingHeaders/ksvg2/KSVGPart.h: Removed using to put Frame into various
        namespaces (all of which are WebCore now anyway).

        * bindings/objc/DOMInternal.mm:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/KWQKHTMLView.cpp:
        * bridge/mac/MacFrame.h:
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageBridge.mm:
        * css/cssstyleselector.cpp:
        * css/cssstyleselector.h:
        * khtml/ecma/kjs_binding.cpp:
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_navigator.cpp:
        * khtml/ecma/kjs_navigator.h:
        * khtml/ecma/kjs_proxy.h:
        * khtml/ecma/kjs_window.h:
        * khtml/editing/SelectionController.h:
        * khtml/editing/jsediting.h:
        * khtml/html/html_baseimpl.h:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_headimpl.h:
        * khtml/html/htmlparser.h:
        * khtml/html/htmltokenizer.h:
        * khtml/xml/DOMImplementationImpl.h:
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/xml_tokenizer.h:
        * khtml/xsl/xslt_processorimpl.h:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * kwq/KWQClipboard.h:
        * kwq/KWQComboBox.mm:
        * kwq/KWQFileButton.h:
        * kwq/KWQFrame.mm:
        * kwq/KWQKJavaAppletWidget.h:
        * kwq/KWQListBox.mm:
        * kwq/KWQSignalStubs.cpp:
        * kwq/KWQSlider.mm:
        * kwq/KWQTextField.mm:
        * kwq/KWQWidget.mm:
        * kwq/WebCoreSettings.mm:
        * kwq/WebCoreTextRendererFactory.mm:
        * loader/DocLoader.h:
        * page/FrameTreeNode.cpp:
        * page/FrameTreeNode.h:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/Page.cpp:
        * page/Page.h:
        * rendering/InlineTextBox.h:
        * rendering/font.cpp:
        * rendering/render_canvas.h:
        * rendering/render_frames.h:
        * rendering/render_object.h:
        * rendering/render_replaced.h:
        Updated for namespace and header changes.

2006-01-31  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        The WebCore part of http://bugs.webkit.org/show_bug.cgi?id=6907
        REGRESSION: United.com menus messed up due to document.all/MSIE sniff
        
        * khtml/ecma/kjs_html.h:
        (KJS::HTMLAllCollection::masqueradeAsUndefined):
        Update for name change.
        
2006-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Speculative fix for <rdar://problem/4135845> Crash executing 
        cross-frame script on timeout in KJS::ScheduledAction::execute

        If we ever get a reproducible case of 4135845, I'll add a test for it.

        This is a re-working of Maciej's fix for 3157014 (circa 2003!). Since
        you can't reliably predict what the state of the page will be when
        a timer fires, I've made the timer responsbile for making sure that
        everything is OK to execute.

        I tested @ http://www.javascriptkit.com/script/cut3.shtml with various
        combinations of reload, back, and regular navigations with JS enabled/
        disabled to ensure that the previous crash didn't return. I also ran a 
        leaks test and discovered some, but none unique to this patch. (See 
        <rdar://problem/4427420> TOT REGRESSION: Leaks seen on page with 
        JavaScript timer.)

        * khtml/ecma/kjs_window.cpp:
        (KJS::ScheduledAction::execute): Return early if there's no window
        object. (This happens when JavaScript is disabled.)
        (KJS::Window::retrieveWindow): Reversed a backwards ASSERT, increased
        prettiness. (The assert fired while I was testing. Not sure why we
        haven't seen it before.)
        * page/Frame.cpp:
        (Frame::didOpenURL): Returned setting of JavaScript enabled/disabled
        preference to its rightful place. This introduces a new behavior: now,
        the unload event does not fire after you've disabled JavaScript. That 
        seems like a good thing. (See <rdar://problem/4426506> Disabling 
        JavaScript should immediately end JavaScript execution.)
        (Frame::begin): Ditto.

2006-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Harrison.

        - Fixed <rdar://problem/4378159> crash in KWQKHTMLPart::userGestureHint
        from javascript enabled/disabled inconsistency when pasting webpage 
        into email or blot

        * page/Frame.cpp:
        (Frame::userGestureHint): Check root frame's jScript() for NULL instead
        of checking inner frame's jScript().
        
        After init() has been called on a frame, but before begin() has been 
        called, the frame can have JavaScript enabled when its parent doesn't.
        (That seems wrong, so I've filed <rdar://problem/4426499> Child frame 
        momentarily has JavaScript enabled even though parent frame doesn't.)
        
        Regardless, it's better programming practice to NULL check the actual 
        pointer you're going to use, so that's what I've done here.

        * manual-tests/paste-crash.html: Added.
        (No automated test because the crash depends on JavaScript being
        disabled.)

2006-01-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff

        Fix for <rdar://problem/4298052> Crash in KWQCheckIfReloading at 
        http://www.inquisitorx.com/beta/

        It is possible for the DocLoader's frame to be nil when the 
        DocLoader is not nil, so we need nil checks.

        * kwq/KWQLoader.mm:
        (KWQServeRequest): Nil check.
        (KWQServeSynchronousRequest): Same.
        (KWQCheckIfReloading): Same.
        (KWQCheckCacheObjectStatus): Same.
        (KWQCacheObjectExpiresTime): Same.
        * kwq/KWQPageState.mm: Same.

2006-01-30  Eric Seidel  <eseidel@apple.com>

        Add #import "KWQFontMetrics.h" to fix no-svg build.

        * kwq/KWQPainter.mm:

2006-01-30  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - cleanup of Int/Float-Size/Point/Rect classes

        I did this as part of a redo of QMatrix, but I decided I should
        land this part separately.

        Eliminated the concept of a null rect or point, which used to be
        indicated by negative width and height.

        Changed right and bottom to to be, e.g., 2 for a rect at (0,0) 2x2.
        The old code followed Qt's system that says right is 1 in those cases,
        which is inappropriate for floating point, and old fashioned because
        modern graphics systems use coordinates for lines between pixels, not
        the pixels themselves.

        Other API improvements to the point, size, and rect classes. For example,
        functions named with verbs now always modify the object itself.

        * rendering/render_theme_mac.mm: (RenderThemeMac::paintButton): Fixed
        a bug where it said x() where it should say y().

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * kcanvas/KCanvasContainer.cpp:
        * kcanvas/KCanvasItem.cpp:
        * kcanvas/RenderSVGImage.cpp:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_window.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/html/html_inlineimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/html_objectimpl.h:
        * khtml/misc/khtmllayout.h:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * kwq/KWQAccObject.mm:
        * kwq/KWQComboBox.mm:
        * kwq/KWQFileButton.mm:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        * kwq/KWQRegion.cpp:
        * kwq/KWQRenderTreeDebug.cpp:
        * kwq/KWQScrollView.mm:
        * kwq/KWQWMatrix.cpp:
        * kwq/KWQWidget.h:
        * kwq/KWQWidget.mm:
        * kwq/KWQWindowWidget.mm:
        * loader/CachedImage.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * platform/FloatPoint.cpp:
        * platform/FloatPoint.h:
        * platform/FloatRect.cpp:
        * platform/FloatRect.h:
        * platform/FloatSize.cpp:
        * platform/FloatSize.h:
        * platform/Image.h:
        * platform/IntPoint.cpp:
        * platform/IntPoint.h:
        * platform/IntPointArray.cpp:
        * platform/IntPointArray.h:
        * platform/IntRect.cpp:
        * platform/IntRect.h:
        * platform/IntSize.cpp:
        * platform/IntSize.h:
        * platform/mac/FloatPoint.mm:
        * platform/mac/FloatRect.mm:
        * platform/mac/FloatSize.mm:
        * platform/mac/Image.mm:
        * platform/mac/IntPoint.mm:
        * platform/mac/IntRect.mm:
        * platform/mac/IntSize.mm:
        * platform/mac/Screen.mm:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderText.cpp:
        * rendering/render_box.cpp:
        * rendering/render_canvas.cpp:
        * rendering/render_canvasimage.cpp:
        * rendering/render_flow.cpp:
        * rendering/render_form.cpp:
        * rendering/render_frames.cpp:
        * rendering/render_layer.cpp:
        * rendering/render_line.cpp:
        * rendering/render_list.cpp:
        * rendering/render_object.cpp:
        * rendering/render_object.h:
        * rendering/render_replaced.cpp:

2006-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Remove QSortedList and QPtrList sorting support
        http://bugs.webkit.org/show_bug.cgi?id=6929

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (operator<<): Implement for Vector<KCGradientStop>
        (KRenderingPaintServerGradient::gradientStops): Use a Vector, not a subclass of
        QPtrList that sorts on every insert
        (compareStopOffset): Comparison function for sorting.
        (KRenderingPaintServerGradient::setGradientStops): Add a version that takes a Vector which sorts,
        and another which knows how to copy from another gradient paint server.
        * kcanvas/device/KRenderingPaintServerGradient.h:
        (makeGradientStop): Make a gradient stop pair.
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (KRenderingPaintServerGradientQuartz::~KRenderingPaintServerGradientQuartz): use delete
        on stops cache
        (KRenderingPaintServerGradientQuartz::updateQuartzGradientStopsCache): adapt to Vector
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * khtml/editing/visible_text.cpp:
        (khtml::compareBoxStart): Comparison function for sorting.
        (khtml::TextIterator::handleTextNode): Use Vector and std::sort instead of QSortedList
        for sorting. Keep current position as an index.
        (khtml::TextIterator::handleTextBox): Adapt for Vector use.
        * khtml/editing/visible_text.h:
        * ksvg2/svg/SVGGradientElementImpl.cpp:
        (SVGGradientElementImpl::rebuildStops): Use a Vector. Instead of modifying the existing one,
        make a fresh one and assign it.
        * ksvg2/svg/SVGLinearGradientElementImpl.cpp:
        (SVGLinearGradientElementImpl::buildGradient): don't copy item by item, just assign directly.
        * ksvg2/svg/SVGRadialGradientElementImpl.cpp:
        (SVGRadialGradientElementImpl::buildGradient): ditto
        * ksvg2/svg/SVGStopElementImpl.h:
        * kwq/KWQListImpl.cpp:
        * kwq/KWQPtrList.h:
        (QPtrList::sort): Removed.
        * kwq/KWQSortedList.h: Removed.
        * rendering/InlineTextBox.h: Remove now unneeded operator< and operator=

2006-01-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - killed more KWQ, KWinModule and QVariant

        * ForwardingHeaders/kwinmodule.h: Removed.
        * ForwardingHeaders/qvariant.h: Removed.

        * kwq/KWQKWinModule.h: Removed.
        * kwq/KWQKWinModule.mm: Removed.
        * kwq/KWQVariant.cpp: Removed.
        * kwq/KWQVariant.h: Removed.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for removal.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_binding.cpp: Remove QVariant stuff.

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        * khtml/ecma/kjs_events.cpp: (KJS::JSAbstractEventListener::handleEvent):
        * khtml/ecma/kjs_proxy.h:
        * khtml/ecma/kjs_proxy.cpp: (WebCore::KJSProxyImpl::evaluate):
        * page/Frame.h:
        * page/Frame.cpp:
        (getString):
        (Frame::replaceContentsWithScriptResult):
        (Frame::executeScript):
        (Frame::executeScheduledScript):
        (Frame::changeLocation):
        (Frame::urlSelected):
        (Frame::submitForm):
        Changed to use JSValue instead of QVariant for result of executing JavaScript.

        * kwq/KWQObject.h: Removed a bunch of unneeded includes and forward declarations.

        * bridge/mac/MacFrame.mm:
        * khtml/ecma/kjs_window.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/html/html_inlineimpl.cpp:
        * khtml/html/htmltokenizer.cpp:
        * khtml/xml/DocumentImpl.cpp:
        * khtml/xml/NodeImpl.cpp:
        * khtml/xml/dom2_eventsimpl.cpp:
        * khtml/xml/xml_tokenizer.cpp:
        * kwq/KWQComboBox.mm:
        * kwq/KWQFileButton.mm:
        * kwq/KWQListBox.mm:
        * kwq/KWQObject.cpp:
        * kwq/KWQSlider.mm:
        * kwq/KWQTextArea.mm:
        * kwq/KWQTextField.mm:
        * loader/CachedImage.h:
        * page/FrameView.h:
        * page/FrameView.cpp:
        * rendering/render_form.cpp:
        Updated includes, since KWQObject.h now includes less.
        Also updated callers to executeScript since one overload was removed.

2006-01-29  Eric Seidel <eseidel@apple.com>

        Reviewed by darin.

        Added back #include <qvaluelist.h> to fix WIN32 build.

        * rendering/render_style.h:

2006-01-29  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt (drag image fix) and Maciej (the rest).

        - fixed just-introduced crash dragging images

        I don't know how to make a layout test for this.

        * kwq/KWQClipboard.mm: (WebCore::KWQClipboard::dragImage): Fixed crash on
        dragging by initializing m_dragImage to 0.

        - http://bugs.webkit.org/show_bug.cgi?id=6923
          remove more of KWQ, including the screen functions from QDesktopWidget

        * kwq/KWQApplication.h: Removed.
        * kwq/KWQApplication.mm: Removed.
        * kwq/KWQGlobal.cpp: Removed.
        * kwq/KWQKPartsEvent.cpp: Removed.
        * kwq/KWQKPartsEvent.h: Removed.
        * kwq/KWQPair.h: Removed.
        * kwq/KWQStyle.cpp: Removed.
        * kwq/KWQStyle.h: Removed.

        * ForwardingHeaders/kparts/event.h: Removed.
        * ForwardingHeaders/qapplication.h: Removed.
        * ForwardingHeaders/qstyle.h: Removed.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Updated for above changes.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/Screen.h: Added. Replaces the desktop widget stuff in KWQApplication.mm.
        * platform/mac/Screen.mm: Added.

        * kwq/KWQDef.h: Removed everything except for kMin and kMax from here.
        We should port to std::min and std::max, and then we can get rid of this
        header altogether.

        * kwq/KWQKCursor.h: Removed setAutoHideCursor.
        * kwq/KWQKCursor.mm: Ditto.

        * kwq/KWQWidget.h: Removed style() and setStyle() functions.
        * kwq/KWQWidget.mm: Ditto.

        * khtml/ecma/kjs_window.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Screen::Screen): Store a pointer to the Frame.
        (KJS::Screen::getValueProperty): Port to use the new Screen.h functions.
        (KJS::showModalDialog): Ditto.
        (KJS::Window::getValueProperty): Ditto.
        (KJS::WindowFunc::callAsFunction): Ditto.

        * khtml/khtml_events.h:
        * khtml/khtml_events.cpp: Removed much of the code here.
        This can be cut down even more.

        * khtml/misc/khtmllayout.h: Removed unused stuff and updated for KWQ changes.

        * kwq/KWQCString.cpp:
        * kwq/KWQKURL.mm:
        * kwq/KWQPainter.mm:
        * kwq/KWQRegExp.cpp:
        * kwq/KWQRenderTreeDebug.cpp:
        * kwq/KWQString.h:
        * kwq/KWQString.mm:
        * kwq/KWQTextCodec.cpp:
        * WebCore+SVG/KDOMSettings.cpp:
        * bridge/mac/MacFrame.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/cssparser.cpp:
        * kcanvas/KCanvasItem.cpp:
        * khtml/ecma/kjs_navigator.cpp:
        * khtml/html/HTMLSelectElementImpl.cpp:
        * khtml/html/html_tableimpl.h:
        * khtml/html/htmltokenizer.cpp:
        * khtml/misc/decoder.cpp:
        * ksvg2/css/KSVGCSSParser.cpp:
        * ksvg2/css/SVGRenderStyle.h:
        * page/Frame.h:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        * platform/IntPointArray.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderTable.cpp:
        * rendering/bidi.cpp:
        * rendering/bidi.h:
        * rendering/render_form.cpp:
        * rendering/render_object.cpp:
        * rendering/render_object.h:
        * rendering/render_replaced.cpp:
        * rendering/render_style.h:
        * rendering/table_layout.cpp:
        Updated for above KWQ changes. Changed tabs to spaces.

2006-01-29  Eric Seidel <eseidel@apple.com>

        Reviewed by hyatt.

        Fix build for Win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:

2006-01-29  David Hyatt  <hyatt@apple.com>

        Fix for bug 6910, don't let Image be assignable or copiable.  It will soon represent  the actual
        original Image (including the data) and as such must remain unique.

        Reviewed by darin

        * kcanvas/KCanvasFilters.cpp:
        (KCanvasFEImage::~KCanvasFEImage):
        (KCanvasFEImage::setCachedImage):
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEImage::KCanvasFEImage):
        (KCanvasFEImage::cachedImage):
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEImageQuartz::getCIFilter):
        * khtml/ecma/kjs_events.cpp:
        (KJS::ClipboardProtoFunc::callAsFunction):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::drawPattern):
        (KJS::_rh):
        (KJS::ImagePattern::~ImagePattern):
        (KJS::ImagePattern::createPattern):
        * khtml/ecma/kjs_html.h:
        (KJS::ImagePattern::cachedImage):
        * khtml/html/html_imageimpl.h:
        (WebCore::HTMLImageElementImpl::cachedImage):
        * khtml/xml/dom2_eventsimpl.h:
        * ksvg2/svg/SVGCursorElementImpl.cpp:
        (SVGCursorElementImpl::~SVGCursorElementImpl):
        (SVGCursorElementImpl::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElementImpl.h:
        (KSVG::SVGCursorElementImpl::cachedImage):
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        (SVGFEImageElementImpl::~SVGFEImageElementImpl):
        (SVGFEImageElementImpl::parseMappedAttribute):
        (SVGFEImageElementImpl::notifyFinished):
        * kwq/KWQClipboard.h:
        * kwq/KWQClipboard.mm:
        (WebCore::KWQClipboard::dragImage):
        (WebCore::KWQClipboard::setDragImage):
        (WebCore::KWQClipboard::setDragImageElement):
        (WebCore::KWQClipboard::imageChanged):
        (WebCore::KWQClipboard::dragNSImage):
        * platform/Image.h:

2006-01-29  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6914
          REGRESSION: fast/block/basic/014.html crashes Safari

        * rendering/render_image.h:
        (WebCore::RenderImage::image): Return a null image when m_cachedImage is 0.
        (WebCore::RenderImage::errorOccurred): Return false when m_cachedImage is 0.
        * rendering/render_image.cpp: (WebCore::RenderImage::nullImage): Added.
        Returns a global null image for use when we have no cached image.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6919
          REGRESSION: Background images don't paint when they are finished loading

        * rendering/render_object.h: Renamed the old setImage to imageChanged, the
        new name for the same function.
        * rendering/render_object.cpp: (WebCore::RenderObject::imageChanged): Ditto.
        * rendering/render_list.cpp: (RenderListMarker::imageChanged): Changed the
        call to parent to call the new imageChanged instead of the old setImage.

        - fixed something else that was causing some layout test crashes

        * kwq/KWQRenderTreeDebug.cpp: (externalRepresentation): Rearrange so we won't
        ever dereference a null pointer here.

2006-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - replace QValueVector and QPtrVector use with Vector, and remove them.
        http://bugs.webkit.org/show_bug.cgi?id=6909

        * ForwardingHeaders/q3valuevector.h: Removed.
        * ForwardingHeaders/qptrvector.h: Removed.
        * ForwardingHeaders/qvector.h: Removed.
        * WebCore+SVG/KDOMSettings.cpp:
        (KDOMSettings::init):
        (KDOMSettings::isAdFiltered):
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementWithName:inForm:]):
        (-[WebCoreFrameBridge controlsInForm:]):
        * css/cssstyleselector.h:
        * khtml/html/HTMLCollectionImpl.cpp:
        (WebCore::HTMLCollectionImpl::updateNameCache):
        (WebCore::HTMLCollectionImpl::namedItems):
        * khtml/html/HTMLCollectionImpl.h:
        * khtml/html/HTMLFormCollectionImpl.cpp:
        (WebCore::HTMLFormCollectionImpl::HTMLFormCollectionImpl):
        (WebCore::HTMLFormCollectionImpl::calcLength):
        (WebCore::HTMLFormCollectionImpl::item):
        (WebCore::HTMLFormCollectionImpl::getNamedFormItem):
        (WebCore::HTMLFormCollectionImpl::updateNameCache):
        * khtml/html/HTMLFormElementImpl.cpp:
        (WebCore::HTMLFormElementImpl::~HTMLFormElementImpl):
        (WebCore::HTMLFormElementImpl::length):
        (WebCore::HTMLFormElementImpl::submitClick):
        (WebCore::HTMLFormElementImpl::formData):
        (WebCore::HTMLFormElementImpl::submit):
        (WebCore::HTMLFormElementImpl::reset):
        (WebCore::insertIntoVector):
        (WebCore::removeFromVector):
        (WebCore::HTMLFormElementImpl::formElementIndex):
        (WebCore::HTMLFormElementImpl::registerImgElement):
        * khtml/html/HTMLFormElementImpl.h:
        * ksvg2/svg/SVGTextElementImpl.cpp:
        * kwq/KWQComboBox.h:
        * kwq/KWQListBox.h:
        * kwq/KWQPtrVector.h: Removed.
        * kwq/KWQRenderTreeDebug.cpp:
        (writeLayers):
        * kwq/KWQValueVector.h: Removed.
        * kwq/KWQVectorImpl.cpp: Removed.
        * kwq/KWQVectorImpl.h: Removed.
        * loader/loader.cpp:
        (WebCore::Loader::cancelRequests):
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::compareZIndex):
        (WebCore::RenderLayer::updateZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        * rendering/render_layer.h:
        (khtml::RenderLayer::posZOrderList):
        (khtml::RenderLayer::negZOrderList):

2006-01-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/table/border-collapsing/rtl-border-collapsing.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6888
          Collapsed borders appear on the wrong side or on the wrong cell in RTL tables

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::cellBefore): Renamed cellLeft to this.
        (WebCore::RenderTable::cellAfter): Renamed cellRight to this.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedLeftBorder): Added the RTL case.
        (WebCore::RenderTableCell::collapsedRightBorder): Ditto.
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::collectBorders):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        * rendering/RenderTableCell.h:

2006-01-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6550
          REGRESSION: window.open('myurl', '_self') fails to load myurl in current window

        Tests:
        * fast/dom/Window/window-open-parent-no-parent.html: Added.
        * fast/dom/Window/window-open-parent.html: Added.
        * fast/dom/Window/window-open-self.html: Added.
        * fast/dom/Window/window-open-top.html: Added.

        * khtml/ecma/kjs_window.cpp: (KJS::WindowFunc::callAsFunction):
        Fix check for special frame names. These special frame names are supposed
        to always be unaffected by pop-up blocking. But the code instead was
        saying that the special frame names are always blocked. Oops!

2006-01-29  Darin Adler  <darin@apple.com>

        Suggested by Alexey.

        - fixed something Alexey noticed in the new exception names

        Test: fast/dom/Range/range-exceptions.html

        * khtml/ecma/kjs_binding.cpp: Added 0 to fix an off-by-one error for the
        names of the two DOM range exceptions.

2006-01-29  David Harrison  <harrison@apple.com>

        Reviewed by John.

        Fix two problems with editing around empty list items:
        1) Arrowing up or down to an empty list item skipped the list item
        2) Deleting the content of a list item made it so you could never get the cursor inside the empty item

        Added tests:
        * selection/move-by-line-002.html
        * deleting/delete-listitem-002.html
        
        * khtml/editing/composite_edit_command.cpp:
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        - special check for empty list item because list marker assures non-zero height()
        
        * khtml/xml/dom_position.cpp:
        (DOM::Position::inRenderedContent):
        - fix check wrt BRs because text box is not required
        
        * rendering/bidi.cpp:
        (khtml::RenderBlock::constructLine):
        - make sure that br by itself in a list item gets a text-style box
        
        (khtml::RenderBlock::findNextLineBreak):
        - make sure that br by itself in a list item gets a box at all

2006-01-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt & darin.

        There are a few small, but intertwined fixes in this patch:

        Remaining fixes for SVGTetris:
        http://bugs.webkit.org/show_bug.cgi?id=6889

        Testing blocked by: http://bugs.webkit.org/show_bug.cgi?id=6905

        Fix for CDF support:
        http://bugs.webkit.org/show_bug.cgi?id=6025

        Updated test: svg/custom/simpleCDF.xml

        Fix for filter updating:
        http://bugs.webkit.org/show_bug.cgi?id=6849

        Testing blocked by: http://bugs.webkit.org/show_bug.cgi?id=6904

        Also, as a side effect of 6849, fixed double-apply of filters, improving:
        http://bugs.webkit.org/show_bug.cgi?id=6713

        Results updated for most tests, pixel results improved for filter tests.

        * kcanvas/KCanvasFilters.cpp:
        (KCanvasFilter::filterBBoxForItemBBox): moved into baseclass
        * kcanvas/KCanvasFilters.h:
        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::paint): use relativeBBox
        (RenderSVGImage::relativeBBox): added
        (RenderSVGImage::imageChanged): added
        (RenderSVGImage::getAbsoluteRepaintRect): fixed
        * kcanvas/RenderSVGImage.h:
        (KSVG::RenderSVGImage::imageChanged): added.
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::applyFilter): use new baseclass method
        (KCanvasFEFloodQuartz::getCIFilter): fixed.
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::layout): update width/height
        (KCanvasItemQuartz::getAbsoluteRepaintRect): fixed.
        (KCanvasItemQuartz::requiresLayer): moved to .cpp
        (KCanvasItemQuartz::lineHeight): added.
        (KCanvasItemQuartz::baselinePosition): added.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasContainerQuartz::canHaveChildren): moved to .cpp
        (KCanvasContainerQuartz::requiresLayer): moved to .cpp
        (KCanvasContainerQuartz::lineHeight): added.
        (KCanvasContainerQuartz::baselinePosition): added.
        (KCanvasContainerQuartz::paint): fixed.
        (KCanvasContainerQuartz::viewportTransform): fixed.
        (KCanvasContainerQuartz::getAbsoluteRepaintRect): fixed.
        (KCanvasContainerQuartz::absoluteTransform): fixed.
        * rendering/render_object.cpp:
        (WebCore::RenderObject::absoluteTransform): fixed apply order.

2006-01-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        First set of fixes for SVG Tetris:
        http://bugs.webkit.org/show_bug.cgi?id=6889

        Tests:
        * svg/custom/viewport-update.svg
        Key press test not yet possible:
        http://bugs.webkit.org/show_bug.cgi?id=6906

        * bridge/mac/MacFrame.mm:
        (MacFrame::keyEvent): pass key events to things other than HTML
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (WebCore::SVGSVGElementImpl::parseMappedAttribute): update viewport

2006-01-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Fix SVG layout tests crash due to Vector change.

        * kcanvas/device/KRenderingDevice.cpp:
        (KRenderingDevice::currentContext): check isEmpty, return 0

2006-01-28  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove bogus IntRect operator.

        * platform/FloatRect.h:

2006-01-28  David Hyatt  <hyatt@apple.com>

        Cleanup of RenderImage.  Eliminate unneeded members and methods.

        Reviewed by darin

        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementAtPoint:]):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::drawPattern):
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::attach):
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        (WebCore::HTMLImageElementImpl::attach):
        * khtml/html/html_imageimpl.h:
        (WebCore::HTMLImageElementImpl::compositeOperator):
        * khtml/html/html_objectimpl.cpp:
        (WebCore::HTMLObjectElementImpl::attach):
        * ksvg2/svg/SVGImageElementImpl.cpp:
        (SVGImageElementImpl::attach):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::drawImageAtPoint):
        (WebCore::QPainter::drawImageInRect):
        (WebCore::QPainter::drawImage):
        (WebCore::QPainter::drawFloatImage):
        (WebCore::QPainter::drawTiledImage):
        (WebCore::QPainter::drawScaledAndTiledImage):
        * kwq/WebCoreImageRenderer.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::ref):
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        * loader/CachedImage.h:
        * loader/CachedObjectClient.h:
        (WebCore::CachedObjectClient::imageChanged):
        * platform/Image.h:
        (WebCore::Image::):
        * platform/mac/Image.mm:
        (WebCore::Image::Image):
        (WebCore::Image::resetAnimation):
        (WebCore::Image::operator=):
        (WebCore::Image::stopAnimations):
        (WebCore::):
        (WebCore::Image::compositeOperatorFromString):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/render_canvasimage.cpp:
        (WebCore::RenderCanvasImage::paint):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::setContentObject):
        (WebCore::RenderImage::setCachedImage):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::resetAnimation):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::updateAltText):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/render_image.h:
        (WebCore::RenderImage::cachedImage):
        (WebCore::RenderImage::image):
        (WebCore::RenderImage::errorOccurred):
        * rendering/render_list.cpp:
        (RenderListMarker::paint):
        (RenderListMarker::imageChanged):
        * rendering/render_list.h:
        * rendering/render_object.cpp:
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::setImage):
        * rendering/render_object.h:

2006-01-28  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6711
          crash if an event is dispatched to a listener that uses handleEvent

        Test: fast/events/dispatch-to-handle-event.html

        * khtml/ecma/kjs_events.cpp: (KJS::JSAbstractEventListener::handleEvent):
        Remove boolean that is always false, and correct the one place that was
        checking it to check the correct pointer instead.

2006-01-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - remove QPtrStack, replace with Vector or traverseNextNode as appropriate

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/KRenderingDevice.cpp:
        (KRenderingDevice::currentContext):
        (KRenderingDevice::popContext):
        (KRenderingDevice::pushContext):
        * kcanvas/device/KRenderingDevice.h:
        * khtml/html/html_documentimpl.cpp:
        * khtml/xml/DocumentImpl.cpp:
        * khtml/xml/xml_tokenizer.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject addChildrenToArray:]):
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::save):
        (WebCore::QPainter::restore):
        * kwq/KWQPtrStack.h: Removed.
        * ForwardingHeaders/qptrstack.h: Removed.
        * ForwardingHeaders/q3ptrstack.h: Removed.

2006-01-28  Maciej Stachowiak  <mjs@apple.com>

        - added missing forwarding header to fix build.
        
        * ForwardingHeaders/kxmlcore/Vector.h: Added.

2006-01-28  Darin Adler  <darin@apple.com>

        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Removed extra parameter
        to fix the build.

2006-01-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - converted KWQKURL to use Vector
        http://bugs.webkit.org/show_bug.cgi?id=6900

        Use Vector in place of Array, and in place of the custom stack
        buffers with overflow.
        
        * kwq/KWQKURL.mm:
        (KURL::KURL):
        (KURL::decode_string):
        (KURL::parse):
        (KURL::encode_string):
        (findHostnamesInMailToURL):
        (encodeHostnames):

2006-01-28  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=6895
          include exception names in JavaScript form of DOM exception

        * khtml/ecma/kjs_binding.cpp: (KJS::setDOMException): Include the name of the
        exception in the error message.

2006-01-28  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/table/add-before-anonymous-child.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5868
          Crash on HP.com with ToT and Safari 2.0.2 in khtml::RenderContainer::detach()

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild): If beforeChild is inside an anonymous
        cell, insert into the cell.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): Changed comment.

2006-01-28  David Hyatt  <hyatt@apple.com>

        Eliminate the mask() method on Image.  It's unused.

        * platform/Image.h:
        * platform/mac/Image.mm:

2006-01-28  David Hyatt  <hyatt@apple.com>

        Clean up the Image class.  Eliminate the MIME type member variable.
        Eliminate an unused constructor.  Fix the constructor to take
        a QString rather than an NSString so that it's portable.  Rename
        the receivedData method to decode.  Move canRenderImageType into
        the Image class as a static method.

        Reviewed by mjs

        * khtml/html/html_objectimpl.cpp:
        (WebCore::HTMLObjectElementImpl::isImageType):
        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        (KWQResponseMIMEType):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::data):
        * platform/Image.h:
        * platform/mac/Image.mm:
        (WebCore::Image::supportsType):
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::decode):
        (WebCore::Image::operator=):

2006-01-28  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.

        SourceAlpha does not display until window is redrawn (resized)
        http://bugs.webkit.org/show_bug.cgi?id=6375

        Test: svg/custom/filter-source-alpha.svg

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::inputImage):

2006-01-28  David Hyatt  <hyatt@apple.com>

        Fix CachedImage.h/.cpp up.  Lots of cleanup.  Eliminated
        unused code and cleaned up method and member names.

        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageElementImpl::width):
        (WebCore::HTMLImageElementImpl::height):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::ref):
        (WebCore::CachedImage::deref):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::imageSize):
        (WebCore::CachedImage::decodedRect):
        (WebCore::CachedImage::notifyObservers):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        (WebCore::CachedImage::checkNotify):
        * loader/CachedImage.h:
        (WebCore::CachedImage::isDecoded):
        (WebCore::CachedImage::isErrorImage):
        (WebCore::CachedImage::schedule):
        (WebCore::CachedImage::isImage):
        * loader/CachedImageCallback.cpp: Removed.
        * loader/CachedImageCallback.h: Removed.
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::slotFinished):
        * platform/Image.h:
        * platform/mac/Image.mm:
        (WebCore::Image::receivedData):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::setImage):
        (WebCore::RenderImage::paint):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        * rendering/render_list.cpp:
        (RenderListMarker::setImage):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::setImage):

2006-01-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - GC after destroying the very last frame to avoid node leak false positives
        http://bugs.webkit.org/show_bug.cgi?id=6884

        * ForwardingHeaders/JSLock.h: added
        * page/Page.cpp:
        (Page::~Page): In debug mode, when destroying the last page,
        0 out m_mainFrame to destroy the very last frame and then garbage collect,
        so a GC happens at a time when the stack won't have references into the JS
        heap for the conservative GC to catch.

2006-01-27  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - remove nearly all the substance of ObjectContents and put it on Frame
        http://bugs.webkit.org/show_bug.cgi?id=6885

        * ForwardingHeaders/kjs/JSLock.h: Added.
        * bridge/mac/MacFrame.mm:
        (Plugin::Plugin): renamed from KWQPluginPart, make it able to store a view.
        (Plugin::view): And return the QWidget* view.
        (MacFrame::createPart): Use Plugin instead of KWQPluginPart, avoid setWidget.
        (MacFrame::setView): Don't use m_url directly so much, and use through d-> if
        needed.
        (MacFrame::userAgent): ditto
        (MacFrame::openURLFromPageCache): ditto
        * kwq/KWQObject.cpp:
        (QObject::inherits): Removed case for ObjectContents, which is not long for this
        world.
        * kwq/KWQObject.h:
        * page/Frame.cpp:
        (Frame::init): Don't pass parent() to FramePrivate, we can't possibly have one
        yet.
        (Frame::restoreURL): d->m_url, not m_url
        (Frame::didOpenURL): ditto
        (Frame::executeScript): ditto
        (Frame::receivedFirstData): ditto
        (Frame::begin): ditto
        (Frame::gotoAnchor): ditto
        (Frame::requestObject): ditto, plus only use Frame methods when we really have a Frame.
        (Frame::processObjectRequest): ditto, also get view() not widget().
        (Frame::childFrame): remove excess spaces and pointless assert.
        (Frame::parentFrame): just call parent() (could probably remove this).
        (Frame::reparseConfiguration): d->m_url not m_url
        (Frame::canCachePage): ditto
        (Frame::updatePolicyBaseURL): ditto
        (Frame::scrollToAnchor): ditto
        (Frame::setName): set in FramePrivate
        (Frame::name): get from FramePrivate
        (Frame::setParent): similarly
        (Frame::parent): similarly
        (Frame::url): similarly
        * page/Frame.h:
        * page/FramePrivate.h:
        (FramePrivate::FramePrivate): Added m_parent, m_name and m_url.
        * page/FrameView.cpp:
        (FrameView::viewportMousePressEvent): Call frame directly instead of
        sending through QApplication.
        (FrameView::viewportMouseDoubleClickEvent): ditto
        (FrameView::viewportMouseMoveEvent): ditto
        (FrameView::viewportMouseReleaseEvent): ditto
        * page/ObjectContents.h:
        (ObjectContents::ObjectContents): Removed url, setParent, parent, name,
        setName, openURL, closeURL, widget, setWidget, event and customEvent methods,
        and corresponding fields. Add pure virtual view() method.

2006-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6075
          REGRESSION: event.relatedTarget not working, breaks menus at www.ati.com

        Test: fast/events/related-target.html

        * khtml/xml/NodeImpl.h:
        * khtml/xml/NodeImpl.cpp: (WebCore::NodeImpl::dispatchMouseEvent): Added a
        relatedTarget parameter to a couple overloads.

        * page/FrameView.cpp:
        (FrameView::viewportMouseMoveEvent): Moved code to set prevMouseX/Y out of here
        and into dispatchMouseEvent, because it now handles mouseout and mouseover events,
        and that's what these globals are used for. This fixes DumpRenderTree to work
        properly with mouseout and mouseover (because it delivers only mouse down and up,
        no mouse move events).
        (FrameView::dispatchMouseEvent): Passed in the "other" node as the related target
        for mouseout and mouseover events. Also set prevMouseX/Y.

2006-01-27  David Hyatt  <hyatt@apple.com>

        Fix for 6867.  Rename QPixmap to Image and move it to platform/.
        Eliminate QPaintDevice and QPaintDeviceMetrics completely, since
        they aren't necessary.

        Reviewed by anders

        * ForwardingHeaders/q3paintdevicemetrics.h: Removed.
        * ForwardingHeaders/qpaintdevice.h: Removed.
        * ForwardingHeaders/qpaintdevicemetrics.h: Removed.
        * ForwardingHeaders/qpixmap.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (MacFrame::fileWrapperForElement):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge reapplyStylesForDeviceType:]):
        (nowPrinting):
        (-[WebCoreFrameBridge elementAtPoint:]):
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::computeLength):
        (WebCore::CSSPrimitiveValueImpl::computeLengthFloat):
        * css/css_valueimpl.h:
        * css/csshelper.cpp:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::init):
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapBackgroundXPosition):
        (WebCore::CSSStyleSelector::mapBackgroundYPosition):
        * css/cssstyleselector.h:
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEImage::image):
        (KCanvasFEImage::setImage):
        * kcanvas/KCanvasImage.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEImageQuartz::getCIFilter):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (KCanvasImageQuartz::init):
        * khtml/ecma/kjs_events.cpp:
        (KJS::ClipboardProtoFunc::callAsFunction):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::drawPattern):
        (KJS::_rh):
        (KJS::ImagePattern::createPattern):
        * khtml/ecma/kjs_html.h:
        (KJS::ImagePattern::image):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Screen::getValueProperty):
        * khtml/editing/SelectionController.h:
        * khtml/html/html_imageimpl.h:
        (WebCore::HTMLImageElementImpl::image):
        * khtml/misc/helper.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl):
        (WebCore::DocumentImpl::~DocumentImpl):
        (WebCore::DocumentImpl::recalcStyle):
        (WebCore::DocumentImpl::attach):
        (WebCore::DocumentImpl::detach):
        * khtml/xml/DocumentImpl.h:
        (WebCore::DocumentImpl::printing):
        (WebCore::DocumentImpl::setPrinting):
        * khtml/xml/dom2_eventsimpl.h:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::cssPrimitiveToLength):
        (WebCore::KSVGPainterFactory::strokePainter):
        * ksvg2/svg/SVGCursorElementImpl.cpp:
        (SVGCursorElementImpl::notifyFinished):
        * ksvg2/svg/SVGCursorElementImpl.h:
        (KSVG::SVGCursorElementImpl::image):
        * ksvg2/svg/SVGDocumentImpl.cpp:
        (SVGDocumentImpl::SVGDocumentImpl):
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        (SVGFEImageElementImpl::notifyFinished):
        * ksvg2/svg/SVGMaskElementImpl.cpp:
        (KSVG::SVGMaskElementImpl::drawMaskerContent):
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * kwq/KWQApplication.h:
        * kwq/KWQApplication.mm:
        (QDesktopWidget::screenDepth):
        * kwq/KWQClipboard.h:
        * kwq/KWQClipboard.mm:
        (WebCore::KWQClipboard::dragImage):
        (WebCore::KWQClipboard::setDragImage):
        (WebCore::KWQClipboard::setDragImageElement):
        * kwq/KWQComboBox.mm:
        * kwq/KWQCursor.h:
        * kwq/KWQCursor.mm:
        (WebCore::createCustomCursor):
        (WebCore::QCursor::QCursor):
        * kwq/KWQKPartsEvent.h:
        * kwq/KWQObject.h:
        * kwq/KWQPaintDevice.h: Removed.
        * kwq/KWQPaintDeviceMetrics.h: Removed.
        * kwq/KWQPaintDeviceMetrics.mm: Removed.
        * kwq/KWQPainter.h:
        (WebCore::QPainter::printing):
        * kwq/KWQPainter.mm:
        (WebCore::QPainter::drawImage):
        (WebCore::QPainter::drawFloatImage):
        (WebCore::QPainter::drawTiledImage):
        (WebCore::QPainter::drawScaledAndTiledImage):
        * kwq/KWQPixmap.h: Removed.
        * kwq/KWQPixmap.mm: Removed.
        * kwq/KWQPrinter.h:
        (QPrinter::QPrinter):
        * kwq/KWQWidget.h:
        * loader/Cache.cpp:
        (khtml::Cache::init):
        (khtml::Cache::clear):
        (khtml::Cache::requestImage):
        (khtml::Cache::getStatistics):
        * loader/Cache.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::ref):
        (WebCore::CachedImage::tiled_image):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::image_size):
        (WebCore::CachedImage::do_notify):
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        * loader/CachedImage.h:
        * loader/CachedImageCallback.cpp:
        (WebCore::CachedImageCallback::notifyUpdate):
        (WebCore::CachedImageCallback::notifyFinished):
        (WebCore::CachedImageCallback::handleError):
        * loader/CachedObject.h:
        (WebCore::CachedObject::):
        * loader/CachedObjectClient.h:
        (WebCore::CachedObjectClient::setImage):
        * loader/DocLoader.cpp:
        (khtml::DocLoader::setAutoloadImages):
        (khtml::DocLoader::setShowAnimations):
        * loader/loader.cpp:
        (WebCore::Loader::servePendingRequests):
        (WebCore::Loader::slotFinished):
        * page/Frame.cpp:
        (Frame::paint):
        * page/Frame.h:
        * page/FrameView.cpp:
        (selectCursor):
        * page/FrameView.h:
        * platform/Image.h: Added.
        * platform/mac/Image.mm: Added.
        (WebCore::Image::loadResource):
        (WebCore::Image::Image):
        (WebCore::Image::~Image):
        (WebCore::Image::imageRef):
        (WebCore::Image::resetAnimation):
        (WebCore::Image::setAnimationRect):
        (-[WebImageCallback initWithCallback:WebCore::]):
        (WebCore::Image::shouldUseThreadedDecoding):
        (WebCore::Image::receivedData):
        (WebCore::Image::mask):
        (WebCore::Image::isNull):
        (WebCore::Image::size):
        (WebCore::Image::rect):
        (WebCore::Image::width):
        (WebCore::Image::height):
        (WebCore::Image::resize):
        (WebCore::Image::operator=):
        (WebCore::Image::increaseUseCount):
        (WebCore::Image::decreaseUseCount):
        (WebCore::Image::stopAnimations):
        (WebCore::Image::flushRasterCache):
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderText.h:
        * rendering/font.cpp:
        (khtml::Font::update):
        * rendering/font.h:
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintBackgroundExtended):
        * rendering/render_canvasimage.cpp:
        (WebCore::RenderCanvasImage::paint):
        * rendering/render_flow.cpp:
        (RenderFlow::paintLines):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::setContentObject):
        (WebCore::RenderImage::setImage):
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::layout):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        * rendering/render_image.h:
        (WebCore::RenderImage::image):
        (WebCore::RenderImage::getImage):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        * rendering/render_list.cpp:
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::paint):
        (RenderListMarker::setImage):
        (RenderListMarker::calcMinMaxWidth):
        * rendering/render_list.h:
        * rendering/render_object.cpp:
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder):
        (WebCore::RenderObject::paintBorderImage):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::setImage):
        * rendering/render_object.h:
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/render_replaced.h:
        * rendering/render_theme_mac.mm:
        (khtml::RenderThemeMac::setFontFromControlSize):

2006-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix another part of http://bugs.webkit.org/show_bug.cgi?id=6731
          REGRESSION: change event fires at load time for checked items

        Revised test: fast/forms/radio-button-no-change-event.html

        * khtml/html/HTMLInputElementImpl.cpp: (WebCore::HTMLInputElementImpl::setChecked):
        Don't send a change event for a radio button getting unchecked (matches Gecko at least).

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Leak fixes in SVG code.
        http://bugs.webkit.org/show_bug.cgi?id=6588

        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (teardownShadingWithStyle): delete image and context when through.
        (KRenderingPaintServerGradientQuartz::KRenderingPaintServerGradientQuartz): zero out cached mask
        (KRenderingPaintServerGradientQuartz::~KRenderingPaintServerGradientQuartz): destroy cached mask image.
        (KRenderingPaintServerLinearGradientQuartz::setup): delete mask before making new
        (KRenderingPaintServerRadialGradientQuartz::setup): delete mask before making new
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::sharedSolidPaintServer): forgot "static" keyword
        * ksvg2/svg/SVGPolyElementImpl.cpp:
        (SVGPolyElementImpl::notifyAttributeChange): use RefPtr

2006-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - various leaks on "fast" LayoutTests
        
        http://bugs.webkit.org/show_bug.cgi?id=6819
        http://bugs.webkit.org/show_bug.cgi?id=6823
        http://bugs.webkit.org/show_bug.cgi?id=6824
        
        It turns out these all had the same cause.
        
        * page/Frame.cpp:
        (Frame::clear): If we have a document, make sure to cancel parsing,
        in case it has a tokenizer and parser that are keeping it alive. Use
        cancelParsing to avoid possibly accidentally firing the onload handler.
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::cancelParsing): Factored out of implicitOpen.
        (WebCore::DocumentImpl::implicitOpen): Call cancelParsing now.
        * khtml/xml/DocumentImpl.h:

2006-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/4256504> khtml::RenderBlock::skipWhitespace 
        crashes upon interaction with radio buttons.

        The old code held an assumption that positioned elements would 
        always have line boxes. This is not necessarily the case, so this 
        patch makes sure that the lines are dirtied appropriately.

        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode): Call 
        dirtyLinesFromChangedChild() if oldChild is positioned and has
        inline children.
        (WebCore::RenderContainer::insertChildNode): Only check the the 
        child is not floating; it can be positioned.

2006-01-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/dom/HTMLImageElement/image-without-renderer-width.html

        Reviewed and landed by Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6841
          REGRESSION: WebKit (Thursday, January 26, 2006) crash in HTMLImageElementImpl::width()

        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageElementImpl::width): Return the image's dimensions only if it isn't
        null, but even if it hasn't finished loading.
        (WebCore::HTMLImageElementImpl::height): Ditto.

2006-01-26  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt and Vicki.

        Fix for broken layout tests.

        * khtml/html/HTMLInputElementImpl.cpp: (WebCore::HTMLInputElementImpl::focus): 

2006-01-26  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=6845
        Autogenerate more classes
        
        This makes DocumentType and DOMImplementation autogenerated.
        
        * JSCore.cpp: Added.
        
        * WebCore.xcodeproj/project.pbxproj:
        Add JSCore.cpp
        
        * bindings/scripts/CodeGeneratorJS.pm:
        Add attributes for controlling how null values should be converted
        to and from DOMString objects.
        
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        Remove the extended attributes hash on attribute objects and
        use the one on the signature.

        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNodeProtoFunc::callAsFunction):
        For isSupported, just convert the version argument to an empty string if
        null is passed in. The reason for this change is that the autogenerated
        binding for DOMImplementation::hasFeature does the same thing. This also makes
        us behave like Mozilla and Opera.
        
        (KJS::toDocumentType):
        (KJS::getDOMNode):
        Use JSDocumentType.
        
        (KJS::getDOMDOMImplementation):
        Use JSDOMImplementation.
        
        * khtml/ecma/kjs_dom.h:
        Remove DOMDOMImplementation and DOMDocumentType
        
        * khtml/xml/DOMImplementation.idl: Added.
        * khtml/xml/DocumentType.idl: Added.

2006-01-26  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        <text> elements with a scale on a parent <g> breaks nodeAtPoint
        Fix http://bugs.webkit.org/show_bug.cgi?id=6843
        
        Test: svg/custom/text-hit-test.svg

        * kcanvas/RenderSVGText.cpp:
        (RenderSVGText::nodeAtPoint):

2006-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - fixed a couple hundred node leaks on the traversal layout tests
        http://bugs.webkit.org/show_bug.cgi?id=6828

        There were three basic problems here, any one of which was enough
        to cause the leak.
        
        1) If the filter function for a NodeFilter, NodeIterator or TreeWalker
        had that object in scope, it would cause a GC reference cycle. I fixed
        this by making these JS functions get marked by the corresponding JS object,
        as for XMLHttpRequest.
        
        2) The TraversalImpl class that's a base class for NodeIteratorImpl and 
        TreeWalkerImpl did not have a virtual destructor, leading the Shared
        template to call the base class destructor on deref.
        
        3) ref/deref on the document were mismatched, I fixed all that sort of nonsense
        by using RefPtr instead of manual ref/deref.
        
        * khtml/dom/dom2_traversal.h:
        (DOM::NodeFilterCondition::mark): Add no-op virtual mark method, JS subclass
        will do something useful here.
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::DOMNodeIterator::mark): Mark the DOM-level filter.
        (KJS::DOMNodeFilter::mark): ditto
        (KJS::DOMTreeWalker::mark): ditto
        (KJS::JSNodeFilterCondition::JSNodeFilterCondition): reformatted.
        (KJS::JSNodeFilterCondition::mark): Mark the filter function.
        * khtml/ecma/kjs_traversal.h:
        * khtml/xml/dom2_traversalimpl.cpp:
        (DOM::NodeFilterImpl::NodeFilterImpl): diligently applied RefPtr
        (DOM::TraversalImpl::TraversalImpl): ditto
        (DOM::TraversalImpl::~TraversalImpl): ditto
        (DOM::NodeIteratorImpl::NodeIteratorImpl): ditto
        (DOM::NodeIteratorImpl::~NodeIteratorImpl): ditto
        (DOM::NodeIteratorImpl::setReferenceNode): ditto
        (DOM::TreeWalkerImpl::TreeWalkerImpl): ditto
        (DOM::TreeWalkerImpl::setCurrentNode): ditto
        * khtml/xml/dom2_traversalimpl.h:
        (DOM::NodeFilterImpl::mark): call mark() on the codition
        (DOM::TraversalImpl::root): Use .get()
        (DOM::TraversalImpl::filter): ditto
        (DOM::NodeIteratorImpl::referenceNode): ditto
        (DOM::NodeIteratorImpl::document): ditto
        (DOM::TreeWalkerImpl::currentNode): ditto

2006-01-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - fixed ~40 DOM nodes leaked when running any two of the outerHTML DOM tests (actually just a false positive)
        http://bugs.webkit.org/show_bug.cgi?id=6822

        * kwq/KWQPageState.mm:
        (-[KWQPageState clear]): Garbage collect after deleting a bunch of
        stuff that holds onto JS objects. This should avoid false positive leaks
        and is good in any case since page state deallocation is already deferred.

2006-01-26  Adele Peterson  <adele@apple.com>

        Reviewed by Vicki.

        - fix for <rdar://problem/4422624> REGRESSION: crash loading webmail.mac.com

        Test added:
        fast/forms/input-no-renderer.html

        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::focus): Nil check for renderer.

2006-01-26  David Harrison  <harrison@apple.com>

        Reviewed by Timothy.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6835
          REGRESSION: WebKit crashes when loading a script on Wikipedia

        Test added:
        editing/deleting/delete-listitem-001.html
        
        * rendering/render_list.cpp:
        (RenderListItem::setStyle):
        (RenderListItem::resetMarkerValue):
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::paint):

2006-01-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6388
          REGRESSION: Incomplete repaint when dragging the map on Google maps

        * manual-tests/bugzilla-6388.html: Added.
        * rendering/render_layer.cpp:
        (WebCore::RenderLayer::computeRepaintRects): Cache the object's absolute position
        before update.
        (WebCore::RenderLayer::updateLayerPositions): Use the cached position to determine if
        the object moved. If it did, do a full repaint.
        * rendering/render_layer.h:

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Fixes xcode project to better notice when generated files change.
        Also fixes failing test cases on build slaves.

        * WebCore.xcodeproj/project.pbxproj:

2006-01-26  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, committed by ap.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6278
          REGRESSION: Incomplete repaint when table cell width changes during layout

        * manual-tests/bugzilla-6278.html: Added.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): If during layout a cell changes from
        not needing layout to needing layout, call repaintObjectsBeforeLayout on it.

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        SVG shows up blank in WebKit+SVG
        http://bugs.webkit.org/show_bug.cgi?id=6620
        
        Test: svg/custom/viewport-no-width-height.svg

        * css/svg.css: default to width/height 100% for <svg>

2006-01-26  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6805
        Support constants in IDL files

        * bindings/scripts/CodeGeneratorJS.pm:
        If an interface has constants, generate a constructor
        object and add the constants as properties. Also add a
        getConstructor method to the interface object.
        
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/generate-bindings.pl:
        Add a --force-generation flag to force regeneration of files
        even though nothing has changed.
        
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_events.h:
        Remove MutationEventConstructor and DOMMutationEvent,
        those are autogenerated now.
        
        * bindings/js/JSEvents.cpp:
        Include JSMutationEvent.cpp

        * khtml/ecma/kjs_window.cpp:        
        (KJS::Window::getValueProperty):
        * khtml/ecma/kjs_window.h:
        (KJS::Window::):
        Add MutationEvent property.
        
        * khtml/xml/MutationEvent.idl: Added.

2006-01-25  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel

        Percentage values for width, height are not rendered correctly.
        http://bugs.webkit.org/show_bug.cgi?id=5331
        
        Tests:
        * svg/custom/percentage-rect.svg
        * svg/custom/percentage-rect2.svg

        Create items for even empty paths to prevent an empty render tree.
        Calculate the viewport element on the fly rather than caching it,
        unless there is no context from which to calculate it. Call 
        notifyAttributeChange() on layout to fix usage of viewport
        percentages for lengths. Remove portion of code which appears to 
        do nothing but worsen the situation.

        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::layout):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::value):
        * ksvg2/svg/SVGStyledElementImpl.cpp:
        (SVGStyledElementImpl::createRenderer):

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Disable <animateTransform> to stop layout test crashes.
        http://bugs.webkit.org/show_bug.cgi?id=6780

        * ksvg2/misc/KSVGTimeScheduler.cpp: hack out animateTransform.

2006-01-26  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Deploy RefPtr throughout more of WebCore
        http://bugs.webkit.org/show_bug.cgi?id=6754

        * bridge/mac/MacFrame.mm:
        (MacFrame::shouldClose): no need to call .get()
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::createContextualFragment):
        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::remove):
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        (WebCore::HTMLTextAreaElementImpl::setDefaultValue):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLBodyElementImpl::HTMLBodyElementImpl):
        (WebCore::HTMLBodyElementImpl::~HTMLBodyElementImpl):
        (WebCore::HTMLBodyElementImpl::createLinkDecl):
        (WebCore::HTMLBodyElementImpl::parseMappedAttribute):
        * khtml/html/html_baseimpl.h:
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::HTMLLinkElementImpl):
        (WebCore::HTMLLinkElementImpl::~HTMLLinkElementImpl):
        (WebCore::HTMLLinkElementImpl::process):
        (WebCore::HTMLLinkElementImpl::setStyleSheet):
        (WebCore::HTMLLinkElementImpl::isLoading):
        (WebCore::HTMLStyleElementImpl::HTMLStyleElementImpl):
        (WebCore::HTMLStyleElementImpl::childrenChanged):
        (WebCore::HTMLStyleElementImpl::isLoading):
        * khtml/html/html_headimpl.h:
        (DOM::HTMLLinkElementImpl::sheet):
        (DOM::HTMLStyleElementImpl::sheet):
        * khtml/html/html_tableimpl.cpp:
        (WebCore::HTMLTableElementImpl::parseMappedAttribute):
        (WebCore::HTMLTableSectionElementImpl::insertRow):
        (WebCore::HTMLTableSectionElementImpl::deleteRow):
        (WebCore::HTMLTableRowElementImpl::deleteCell):
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchEvent):
        (WebCore::NodeImpl::dispatchGenericEvent):
        (WebCore::NodeImpl::dispatchWindowEvent):
        (WebCore::NodeImpl::dispatchMouseEvent):
        (WebCore::NodeImpl::dispatchKeyEvent):
        (WebCore::NodeImpl::createRendererIfNeeded):
        * khtml/xml/NodeImpl.h:
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::MappedAttributeImpl::clone):
        (WebCore::StyledElementImpl::StyledElementImpl):
        (WebCore::StyledElementImpl::createInlineStyleDecl):
        (WebCore::StyledElementImpl::destroyInlineStyleDecl):
        (WebCore::StyledElementImpl::getInlineStyleDecl):
        * khtml/xml/dom_elementimpl.h:
        (DOM::MappedAttributeImpl::MappedAttributeImpl):
        (DOM::MappedAttributeImpl::style):
        (DOM::MappedAttributeImpl::decl):
        (DOM::MappedAttributeImpl::setDecl):
        (DOM::StyledElementImpl::inlineStyleDecl):
        * khtml/xml/dom_position.cpp:
        (DOM::Position::Position):
        (DOM::Position::clear):
        * khtml/xml/dom_position.h:
        (DOM::Position::node):

2006-01-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.
        
        - garbage collect a bit later when destroying Frame (fixes node leak false positives)
        http://bugs.webkit.org/show_bug.cgi?id=6818       

        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxyImpl::~KJSProxyImpl): Garbage collect after destroying
        the script interpreter.
        * page/Frame.cpp:
        (Frame::clear): Add a boolean parameter to indicate whether properties
        of the window object should also be cleared (defaults to true).
        (Frame::~Frame): Call clear(false) instead of clear()
        * page/Frame.h:

2006-01-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - Turn on NodeImpl leak counter for debug builds
        http://bugs.webkit.org/show_bug.cgi?id=6808

        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImplCounter::~NodeImplCounter): Uncomment node
        counter now tit won't give a lot of false positives.

2006-01-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.
        
        - fixed "Whole DOM tree can leak if Document is hover/active/focus node on quit"
        http://bugs.webkit.org/show_bug.cgi?id=6809
        
        This fixes 175 reproducible node leaks in the editing layout tests.
        
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::detach): Clear hover, focus and active nodes. It doesn't
        make sense to have these without a view anyway, and if any of them is the document
        it can cause a leak of the whole DOM.

2006-01-25  Adele Peterson  <adele@apple.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=6816
        Crash in dispatchMouseEvent - Missing nil check

        No test added because I was not able to reproduce the crash reliably. 

        * page/FrameView.cpp: (FrameView::dispatchMouseEvent):

2006-01-25  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by mjs
        
        <http://bugs.webkit.org/show_bug.cgi?id=6644>
        TinyMCE: Undo operation crashes Safari
        <rdar://problem/4343068>
        Some shouldChangeSelection calls are nonsensical

        Notify the SelectionController of node removals,
        and blow away the selection when end points are removed.

        Tests added:
        * editing/selection/remove-node-1.html
        * editing/selection/remove-node-2.html
        
        * khtml/editing/SelectionController.cpp:
        (WebCore::MutationListener::handleEvent):
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::~SelectionController):
        (WebCore::SelectionController::operator=):
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::nodeWillBeRemoved):
        (WebCore::SelectionController::clear):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        * khtml/editing/SelectionController.h:
        (WebCore::MutationListener::MutationListener):
        (WebCore::MutationListener::selectionController):
        (WebCore::MutationListener::setSelectionController):
        * rendering/RenderContainer.cpp:
        (WebCore::RenderContainer::removeChildNode):
        * rendering/render_flow.cpp:
        (RenderFlow::destroy):

2006-01-25  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        This change lets us display an aqua appearance for the new text fields.

        Updated results for:
        * fast/forms/input-appearance-focus.html

        * rendering/RenderTextField.cpp: (WebCore::RenderTextField::createDivStyle): 
          remove styling of the div, since RenderTheme handles that now.
        * rendering/render_theme.cpp:
        (khtml::RenderTheme::adjustStyle): call adjustTextFieldStyle.
        (khtml::RenderTheme::paint): call paintTextField.
        (khtml::RenderTheme::adjustTextFieldStyle): added FIXME to turn off appearance later.
        * rendering/render_theme.h: added adjustTextFieldStyle, paintTextField
        * rendering/render_theme_mac.h: added paintTextField, setTextFieldState, and NSTextFieldCell.
        * rendering/render_theme_mac.mm:
        (khtml::): Added static textFieldMargins.
        (khtml::RenderThemeMac::adjustRepaintRect): update text field state and size.
        (khtml::RenderThemeMac::paintTextField): Added. Paints the NSTextFieldCell
        (khtml::RenderThemeMac::setTextFieldCellState): Initialize NSTextFieldCell, and update enabled state.

2006-01-25  David Hyatt  <hyatt@apple.com>

        Rename QBrush to Brush and move it to platform/.  Remove unused QPoint/Size/RectF forwarding
        headers.

        * ForwardingHeaders/QPointF: Removed.
        * ForwardingHeaders/QRectF: Removed.
        * ForwardingHeaders/QSizeF: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/editing/SelectionController.cpp:
        (WebCore::SelectionController::paintCaret):
        * kwq/KWQBrush.h: Removed.
        * kwq/KWQNamespace.h:
        * kwq/KWQObject.h:
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::setBrush):
        (QPainter::brush):
        (QPainter::drawRect):
        (QPainter::drawEllipse):
        (QPainter::drawConvexPolygon):
        (QPainter::fillRect):
        * kwq/KWQPalette.h:
        (QColorGroup::brush):
        * platform/Brush.h: Added.
        (WebCore::Brush::):
        (WebCore::Brush::Brush::Brush):
        (WebCore::Brush::operator==):
        (WebCore::Brush::operator!=):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::fillHorizontalSelectionGap):
        (WebCore::RenderBlock::fillVerticalSelectionGap):
        (WebCore::RenderBlock::fillLeftSelectionGap):
        (WebCore::RenderBlock::fillRightSelectionGap):
        * rendering/render_box.cpp:
        (WebCore::RenderBox::outlineBox):
        * rendering/render_canvasimage.cpp:
        (WebCore::RenderCanvasImage::paint):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_list.cpp:
        (RenderListMarker::paint):
        * rendering/render_replaced.cpp:
        (WebCore::RenderWidget::paint):

2006-01-25  Anders Carlsson  <andersca@mac.com>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=6807
        generate-bindings.pl should not use find command
        
        * bindings/scripts/generate-bindings.pl:
        Use opendir and readdir instead of find.

2006-01-25  David Hyatt <hyatt@apple.com

        Fix Win32 build bustage. Make the autogeneration from .idl work
        just like it does on Mac.  Also update the project to account for
        the move of QPen.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * bindings/scripts/generate-bindings.pl:

2006-01-25  David Hyatt  <hyatt@apple.com>

        Rename QPen to Pen and move it to the platform/ directory.

        * ForwardingHeaders/qpen.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * kwq/KWQNamespace.h:
        (Qt::):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::pen):
        (QPainter::setPen):
        (QPainter::drawRect):
        (QPainter::drawLine):
        (QPainter::drawEllipse):
        (QPainter::drawArc):
        (QPainter::drawConvexPolygon):
        * kwq/KWQPen.cpp: Removed.
        * kwq/KWQPen.h: Removed.
        * platform/Pen.cpp: Added.
        (WebCore::Pen::Pen):
        (WebCore::Pen::color):
        (WebCore::Pen::width):
        (WebCore::Pen::style):
        (WebCore::Pen::setColor):
        (WebCore::Pen::setWidth):
        (WebCore::Pen::setStyle):
        (WebCore::Pen::operator==):
        (WebCore::Pen::operator!=):
        * platform/Pen.h: Added.
        (WebCore::Pen::):
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paintMarkedTextUnderline):
        * rendering/RenderTableCell.cpp:
        (WebCore::outlineBox):
        * rendering/RenderText.cpp:
        * rendering/render_box.cpp:
        (WebCore::RenderBox::outlineBox):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/render_image.cpp:
        * rendering/render_line.cpp:
        * rendering/render_list.cpp:
        * rendering/render_object.cpp:
        (WebCore::RenderObject::drawBorder):

2006-01-25  Timothy Hatcher  <timothy@apple.com>

        Move off of -[NSFont widthOfString:] since it is now deprecated.
        Use the NSStringDrawing -[NSString sizeWithAttributes:] API.

        * bridge/mac/MacFrame.mm:
        (MacFrame::attributedString):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView sizeWithColumns:rows:]):

2006-01-24  Tim Omernick  <timo@apple.com>

        Reviewed by Dave Harrison.

        <rdar://problem/4339024>
        <http://bugs.webkit.org/show_bug.cgi?id=6785> "Fix for possible leak of applet, object, or embed
        (and plugin view)"
        
        No test cases added.  This is a fix for a leak which is difficult to trigger under normal page load
        circumstances, because it requires that the host application modify an <embed> using the Objective C
        API.

        * khtml/html/html_objectimpl.cpp:
        (WebCore::HTMLAppletElementImpl::~HTMLAppletElementImpl):
        Assert that appletInstance has been deleted by detach().
        (WebCore::HTMLAppletElementImpl::detach):
        Delete appletInstance, because it references the widget owned by the renderer we're about to destroy.
        It is assumed elsewhere (getRuntimeObject(), kjs_dom.cpp) that the instance is owned by the applet
        element.  Therefore, it is required that the element destroy the instance in its tear-down phase.
        (WebCore::HTMLEmbedElementImpl::~HTMLEmbedElementImpl):
        Assert that embedInstance has been deleted by detach().
        (WebCore::HTMLEmbedElementImpl::detach):
        Delete embedInstance, same reason.  This is the one that fixes <rdar://problem/4339024>.
        (WebCore::HTMLObjectElementImpl::~HTMLObjectElementImpl):
        Assert that objectInstance has been deleted by detach().
        (WebCore::HTMLObjectElementImpl::detach):
        Delete embedInstance, same reason.
        * khtml/html/html_objectimpl.h:
        Declared HTMLAppletElementImpl::detach() and HTMLEmbedElementImpl::detach().

2006-01-24  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - http://bugs.webkit.org/show_bug.cgi?id=5975
        WebCore needs to use KDOM-like DOM binding autogeneration
        
        This is a first cut at an autogeneration framework based on 
        what KDOM uses, but with some changes to be able to move
        gradually to using autogenerated files. Currently only Javascript
        is supported, but ObjC support could be added by writing a new code
        generator package.
        
        * WebCore.xcodeproj/project.pbxproj:
        Call generate-bindings.pl

        * bindings/js/JSEvents.cpp: Added.
        New file which #includes all generated files in the event module
        (Just JSWheelEvent.cpp for now)
        
        * khtml/xml/WheelEvent.idl: Added.
        
        * bindings/scripts: Added.
        * bindings/scripts/CodeGenerator.pm: Added.
        * bindings/scripts/CodeGeneratorJS.pm: Added.
        * bindings/scripts/IDLParser.pm: Added.
        * bindings/scripts/IDLStructure.pm: Added.
        * bindings/scripts/generate-bindings.pl: Added.
        
        * khtml/ecma/kjs_events.cpp:
        Remove DOMWheelEvent class.
        
        (KJS::getDOMEvent):
        Use JSWheelEvent here.
        
        * khtml/ecma/kjs_events.h:
        Remove DOMWheelEvent class.

2006-01-25  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/3907635> copy/paste of list item text moves list item up one <LI>
        <rdar://problem/3907647> Enhance list editing: return inserts <li></li>
        <rdar://problem/4060158> deleting selection within table deletes more than intended
        <rdar://problem/4061232> Deleting a list can delete unselected content
        <rdar://problem/4062212> after pasting in contents of web.apple.com, typing before start adds to table instead of before table
        <rdar://problem/4064437> After copy/paste from bugweb cannot go back to entering text at left side of page
        <rdar://problem/4259845> Table editing in design mode is broken
        <rdar://problem/4287667> Insertion point goes before table instead of inside first cell
        <rdar://problem/4345749> Editing HTML - Enter at end of <LI> inserts uneditable blank <LI>
        <rdar://problem/4345794> HTML editing: Enter at end of last <LI> does not add new <LI>
        <rdar://problem/4345825> HTML Editing: editing first <LI> element removes first <LI> and more
        <rdar://problem/4345835> HTML editing: editing last <LI> removes everything within <BODY>
        <rdar://problem/4345879> HTML editing: editing first <TD> moves data out of table

        ...also added showTree() static functions because switch to gcc 4.0 makes calling instance methods unreliable

        - numerous small changes to handle empty list items
        - fix numeric list marker updating when adding/deleting list items
        - start to decompose "special element" handling, replacing it with appropriate handling of the different
          kinds of special elements in various situations, rather than giving a blanket treatment.  I will do more
          of this in subsequent checkins.
        - numerous small editing/selection changes to handle VisiblePosition at table offset childNodeCount()
        - simplify and fix equivalentRangeCompliantPosition, rename it to rangeCompliantEquivalent and make it static
        - some minor reformatting to current standards
        - the comments in the list below are for changes not covered by the above comments
        
        * khtml/editing/Selection.cpp:
        (WebCore::Selection::toRange):
        (WebCore::Selection::validate):
        * khtml/editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingLeftBackward):
        - character selection backward from after table selects the table
        (WebCore::showTree):
        * khtml/editing/composite_edit_command.cpp:
        (WebCore::CompositeEditCommand::removeFullySelectedNode):
        - make sure empty cell has some height
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        - check for !isTabSpanTextNode() to make calling this function easier
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        * khtml/editing/delete_selection_command.cpp:
        (WebCore::positionBeforePossibleContainingSpecialElement):
        (WebCore::positionAfterPossibleContainingSpecialElement):
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        - new.  more consistent handling of special element boundaries.
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        - handle childless block (e.g. empty table cell)
        - allow merging across list items
        (WebCore::DeleteSelectionCommand::moveNodesAfterNode):
        - use new isEmpty() method for renderers, to handle empty list items
        * khtml/editing/delete_selection_command.h:
        * khtml/editing/htmlediting.cpp:
        (WebCore::isAtomicNode):
        (WebCore::editingIgnoresContent):
        - new.  smarter check than isReplaced()
        (WebCore::rangeCompliantEquivalent):
        (WebCore::maxDeepOffset):
        (WebCore::isFirstVisiblePositionInSpecialElement):
        (WebCore::positionBeforeContainingSpecialElement):
        (WebCore::isLastVisiblePositionInSpecialElement):
        (WebCore::positionAfterContainingSpecialElement):
        (WebCore::positionOutsideContainingSpecialElement):
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        (WebCore::isListElement):
        (WebCore::isTableElement):
        (WebCore::isFirstVisiblePositionAfterTableElement):
        (WebCore::positionBeforePrecedingTableElement):
        (WebCore::positionAvoidingSpecialElementBoundary):
        * khtml/editing/htmlediting.h:
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::doApply):
        * khtml/editing/insert_text_command.cpp:
        (khtml::InsertTextCommand::prepareForTextInsertion):
        (khtml::InsertTextCommand::input):
        * khtml/editing/replace_selection_command.cpp:
        (WebCore::isMailPasteAsQuotationNode):
        (WebCore::ReplacementFragment::countRenderedBlocks):
        (WebCore::ReplaceSelectionCommand::doApply):
        - allow for fact that fragments have no VisiblePositions
        * khtml/editing/visible_position.cpp:
        (khtml::VisiblePosition::isCandidate):
        (khtml::showTree):
        (khtml::makeRange):
        (khtml::setStart):
        (khtml::setEnd):
        * khtml/editing/visible_position.h:
        * khtml/editing/visible_units.cpp:
        (khtml::previousBoundary):
        (khtml::nextBoundary):
        (khtml::startOfLine):
        - allow for fact that renderers for list markers and other generated content
          have no corresponding NodeImpl.
        (khtml::endOfLine):
        - ditto
        (khtml::nextLinePosition):
        (khtml::startOfParagraph):
        (khtml::endOfParagraph):
        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::getUpperLeftCorner):
        (WebCore::ContainerNodeImpl::childNode):
        * khtml/xml/ContainerNodeImpl.h:
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::childNode):
        (WebCore::NodeImpl::traversePreviousNode):
        (WebCore::NodeImpl::nextEditable):
        (WebCore::showTree):
        * khtml/xml/NodeImpl.h:
        * khtml/xml/dom_position.cpp:
        (DOM::Position::upstream):
        (DOM::Position::downstream):
        (DOM::Position::inRenderedContent):
        (DOM::showTree):
        * khtml/xml/dom_position.h:
        * rendering/render_canvas.cpp:
        (RenderCanvas::selectionRect):
        * rendering/render_list.cpp:
        (RenderListItem::calcListValue):
        (RenderListItem::isEmpty):
        (getParentOfFirstLineBox):
        (RenderListItem::resetMarkerValue):
        (RenderListItem::updateMarkerLocation):
        * rendering/render_list.h:
        (khtml::RenderListMarker::isListMarker):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::nextRenderer):
        (WebCore::RenderObject::previousRenderer):
        (WebCore::showTree):
        * rendering/render_object.h:
        (WebCore::RenderObject::getBaselineOfLastLineBox):
        (WebCore::RenderObject::isEmpty):

2006-01-25  Timothy Hatcher  <timothy@apple.com>

        Build fix, -[NSFont defaultLineHeightForFont] is deprecated.
        We need to use -[NSLayoutManager defaultLineHeightForFont:] instead.

        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        (QLineEdit::baselinePosition):

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6731
          REGRESSION: change event fires at load time for checked items

        Test: fast/forms/radio-button-no-change-event.html

        * khtml/html/HTMLInputElementImpl.cpp: (WebCore::HTMLInputElementImpl::setChecked):
        One of many possible fixes: Don't send the event if the element is not yet in
        a document (as in when parsing the initial attributes).

2006-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        This change will allow the new text field elements to get focus, and to respond to the focus and blur events.

        Added: fast/forms/input-appearance-focus.html

        * khtml/html/HTMLElementImpl.cpp: (WebCore::HTMLElementImpl::isFocusable): 
          Removed recently added code that allowed editable elements with no parent to be focusable.  
          We don't need to do this now that we try to focus the input element, instead of the inner div.
        * khtml/html/HTMLGenericFormElementImpl.cpp: (WebCore::HTMLGenericFormElementImpl::isMouseFocusable): Added case to for text fields.
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::focus): Added. Selects contents of text field.
        (WebCore::HTMLInputElementImpl::setSelectionStart): Added break; in switch statement.
        (WebCore::HTMLInputElementImpl::setSelectionEnd): ditto.
        (WebCore::HTMLInputElementImpl::select): ditto.
        (WebCore::HTMLInputElementImpl::setSelectionRange): ditto.
        * khtml/html/HTMLInputElementImpl.h: Added focus()
        * khtml/xml/dom_elementimpl.h: Made focus() virtual.
        * page/Frame.cpp: (Frame::setFocusNodeIfNeeded):
          Walk up the Render Tree instead of the DOM tree when trying to find a node to focus.  
          This will let us choose the input node instead of one of the nodes in the shadow tree.
        * page/FrameView.cpp: (FrameView::dispatchMouseEvent): ditto.
        * rendering/RenderContainer.cpp: (WebCore::RenderContainer::destroyLeftoverChildren): Corrected misspelling. 
        * rendering/RenderTextField.cpp:
        (WebCore::RenderTextField::select): Implemented.  Select contents of inner div.
        * rendering/RenderTextField.h:
        (WebCore::RenderTextField::renderName): Changed order.
        (WebCore::RenderTextField::removeLeftoverAnonymousBoxes): ditto.

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6782
          REGRESSION: replaceChild broken when node to replace is first (TinyMCE test app broken)

        - fix http://bugs.webkit.org/show_bug.cgi?id=6784
          REGRESSION: 25 layout tests failing (basic DOM operations)

        Test: fast/dom/replace-first-child.html

        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::insertBefore): Change one place that hands off ownership of
        as PassRefPtr that causes us to almost always return 0. Fix test that would screw up when
        both "prev" and "refChild->previousSibling()" were 0.
        (WebCore::ContainerNodeImpl::appendChild): Changed a nearly-identical place handing off
        ownership as above.

2006-01-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.
        
        - fixed crash if a node is removed from the DOM before being reparented due to residual style
        http://bugs.webkit.org/show_bug.cgi?id=6778

        * khtml/html/htmlparser.cpp:
        (HTMLParser::handleResidualStyleCloseTagAcrossBlocks): If the
        block has been removed from the document, then do not remove it
        from its parent or add it to its new location. This prevents the
        crash and matches Mozilla.

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - http://bugs.webkit.org/show_bug.cgi?id=6750
          replace QDateTime with a simpler platform abstraction

        * ForwardingHeaders/qdatetime.h: Removed.
        * kwq/KWQDateTime.cpp: Removed.
        * kwq/KWQDateTime.h: Removed.

        * platform/SystemTime.h: Added.
        * platform/mac/SystemTime.cpp: (WebCore::currentTime): Added.
        * platform/win: Added.
        * platform/win/SystemTime.cpp: (WebCore::currentTime): Added.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added new files, removed old.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * css/css_base.h: Removed include of <qdatetime.h>.
        * css/cssstyleselector.cpp: Ditto.

        * khtml/html/htmltokenizer.h:
        * khtml/html/htmltokenizer.cpp: Convert tabs to spaces.
        (WebCore::HTMLTokenizer::continueProcessing): Change parameter from QTime to double.
        Use currentTime() instead of QTime::elapsed().
        (WebCore::HTMLTokenizer::write): Use currentTime() instead of QTime::elapsed().

        * config.h: Added HAVE_FUNC_USLEEP for now, not sure this is really a
        good way to handle this.
        * khtml/xml/ContainerNodeImpl.cpp: (WebCore::ContainerNodeImpl::setActive):
        Use currentTime() instead of QTime::elapsed(). Use HAVE_FUNC_USLEEP for the if.

        * khtml/xml/DocumentImpl.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl): Use currentTime() instead of QTime::elapsed().
        (WebCore::DocumentImpl::implicitClose): Ditto.
        (WebCore::DocumentImpl::minimumLayoutDelay): Ditto.
        (WebCore::DocumentImpl::elapsedTime): Ditto.

        * khtml/xml/dom2_eventsimpl.cpp: (WebCore::EventImpl::EventImpl): Use currentTime()
        instead of local function called currentTimeStamp().

        * khtml/xml/xml_tokenizer.h: Removed declaration of class QTime.

        * ksvg2/misc/KSVGTimeScheduler.h:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (KSVG::TimeScheduler::TimeScheduler): Use currentTime instead of QTime::elapsed.
        (KSVG::TimeScheduler::startAnimations): Ditto.
        (KSVG::TimeScheduler::toggleAnimations): Ditto.
        (KSVG::TimeScheduler::elapsed): Ditto.

        * page/Frame.cpp: (Frame::clear): Removed unused m_parsetime.
        * page/FramePrivate.h: Ditto.

2006-01-24  David Hyatt  <hyatt@apple.com>

        Fix for bug 6781, convert QColor to Color (and QRgb to RGBA32).  r=maciej.

        * ForwardingHeaders/qcolor.h: Removed.
        * WebCore+SVG/KDOMSettings.h:
        * WebCore+SVG/RGBColorImpl.cpp:
        (RGBColorImpl::RGBColorImpl):
        (RGBColorImpl::red):
        (RGBColorImpl::green):
        (RGBColorImpl::blue):
        * WebCore+SVG/RGBColorImpl.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMCSS.mm:
        (getWrapperForRGB):
        (setWrapperForRGB):
        (removeWrapperForRGB):
        (-[DOMRGBColor dealloc]):
        (-[DOMRGBColor finalize]):
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor _initWithRGB:]):
        (+[DOMRGBColor _RGBColorWithRGB:]):
        (-[DOMRGBColor alpha]):
        (-[DOMRGBColor _color]):
        * bridge/mac/MacFrame.mm:
        (MacFrame::attributedString):
        (MacFrame::fontAttributesForSelectionStart):
        (MacFrame::bodyBackgroundColor):
        (convertAttributesToUnderlines):
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::CSSPrimitiveValueImpl):
        (WebCore::CSSPrimitiveValueImpl::cssText):
        * css/csshelper.h:
        * css/cssparser.cpp:
        (CSSParser::parseColor):
        (CSSParser::parseColorFromValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::):
        (WebCore::colorForCSSValue):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/cssstyleselector.h:
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEDiffuseLighting::lightingColor):
        (KCanvasFEDiffuseLighting::setLightingColor):
        (KCanvasFEFlood::floodColor):
        (KCanvasFEFlood::setFloodColor):
        (KCanvasFESpecularLighting::lightingColor):
        (KCanvasFESpecularLighting::setLightingColor):
        * kcanvas/KCanvasTreeDebug.cpp:
        (operator<<):
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (KCSortedGradientStopList::addStop):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerSolid.cpp:
        (KRenderingPaintServerSolid::color):
        (KRenderingPaintServerSolid::setColor):
        * kcanvas/device/KRenderingPaintServerSolid.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (ciColor):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (setupShadingWithStyle):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerPatternQuartz::setup):
        * khtml/ecma/kjs_css.h:
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::colorRefFromValue):
        (KJS::colorFromValue):
        (KJS::Context2D::putValueProperty):
        (KJS::GradientFunction::callAsFunction):
        * khtml/ecma/kjs_html.h:
        * khtml/editing/apply_style_command.cpp:
        (WebCore::StyleChange::checkForLegacyHTMLStyleChange):
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLBodyElementImpl::parseMappedAttribute):
        * khtml/misc/helper.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::DocumentImpl):
        (WebCore::DocumentImpl::resetLinkColor):
        (WebCore::DocumentImpl::resetVisitedLinkColor):
        * khtml/xml/DocumentImpl.h:
        (WebCore::DocumentImpl::setTextColor):
        (WebCore::DocumentImpl::textColor):
        (WebCore::DocumentImpl::linkColor):
        (WebCore::DocumentImpl::visitedLinkColor):
        (WebCore::DocumentImpl::activeLinkColor):
        (WebCore::DocumentImpl::setLinkColor):
        (WebCore::DocumentImpl::setVisitedLinkColor):
        (WebCore::DocumentImpl::setActiveLinkColor):
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (KDOM::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (WebCore::KSVGPainterFactory::fillPaintServer):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (KSVG::SVGTimer::notifyAll):
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp:
        (SVGAnimateColorElementImpl::handleTimerEvent):
        (SVGAnimateColorElementImpl::clampColor):
        (SVGAnimateColorElementImpl::color):
        (SVGAnimateColorElementImpl::initialColor):
        * ksvg2/svg/SVGAnimateColorElementImpl.h:
        * ksvg2/svg/SVGAnimateElementImpl.cpp:
        (SVGAnimateElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGColorImpl.cpp:
        (SVGColorImpl::setRGBColor):
        (SVGColorImpl::color):
        * ksvg2/svg/SVGColorImpl.h:
        * ksvg2/svg/SVGGradientElementImpl.cpp:
        (SVGGradientElementImpl::rebuildStops):
        * kwq/KWQAccObject.mm:
        (AXAttributeStringSetStyle):
        * kwq/KWQBrush.h:
        (QBrush::QBrush::QBrush):
        (QBrush::color):
        (QBrush::setColor):
        * kwq/KWQColor.h: Removed.
        * kwq/KWQColor.mm: Removed.
        * kwq/KWQColorData.gperf: Removed.
        * kwq/KWQKConfigBase.h:
        * kwq/KWQKConfigBase.mm:
        (KConfig::readColorEntry):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::setPalette):
        * kwq/KWQNamespace.h:
        (Qt::):
        * kwq/KWQObject.h:
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::setPen):
        (QPainter::setBrush):
        (QPainter::drawText):
        (QPainter::drawHighlightForText):
        (QPainter::selectedTextBackgroundColor):
        (_fillRectXX):
        (QPainter::setShadow):
        (QPainter::initFocusRing):
        * kwq/KWQPalette.h:
        (QColorGroup::QColorGroup):
        (QColorGroup::color):
        (QColorGroup::setColor):
        (QColorGroup::background):
        (QColorGroup::foreground):
        (QColorGroup::base):
        (QPalette::QPalette):
        (QPalette::background):
        (QPalette::foreground):
        * kwq/KWQPen.cpp:
        (QPen::QPen):
        (QPen::color):
        (QPen::setColor):
        * kwq/KWQPen.h:
        * kwq/KWQRenderTreeDebug.cpp:
        (operator<<):
        * kwq/KWQTextEdit.mm:
        (QTextEdit::setPalette):
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::tiled_pixmap):
        * loader/CachedImage.h:
        * page/Frame.cpp:
        (Frame::paint):
        * page/Frame.h:
        (MarkedTextUnderline::MarkedTextUnderline):
        * platform/Color.cpp: Added.
        (WebCore::makeRGB):
        (WebCore::makeRGBA):
        (WebCore::parseHexColor):
        (WebCore::Color::Color):
        (WebCore::Color::name):
        (WebCore::Color::setNamedColor):
        (WebCore::Color::hsv):
        (WebCore::Color::setHsv):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        (WebCore::Color::getRgbaF):
        * platform/Color.h: Added.
        (WebCore::Color::Color):
        (WebCore::Color::rgb):
        (WebCore::Color::setRgb):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/ColorData.gperf: Added.
        * rendering/InlineTextBox.cpp:
        (khtml::simpleDifferenceBetweenColors):
        (khtml::correctedTextColor):
        (khtml::InlineTextBox::paint):
        (khtml::InlineTextBox::paintSelection):
        (khtml::InlineTextBox::paintMarkedTextBackground):
        (khtml::InlineTextBox::paintDecoration):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bgColor):
        * rendering/RenderTableCell.cpp:
        (WebCore::outlineBox):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/font.cpp:
        (khtml::Font::drawHighlightForText):
        (khtml::Font::drawText):
        * rendering/font.h:
        * rendering/render_box.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBackgrounds):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::paintBackgroundExtended):
        (WebCore::RenderBox::outlineBox):
        * rendering/render_box.h:
        * rendering/render_flow.cpp:
        (RenderFlow::paintFocusRing):
        (RenderFlow::paintOutlineForLine):
        * rendering/render_form.cpp:
        (RenderFieldset::paintBorderMinusLegend):
        * rendering/render_frames.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/render_image.cpp:
        (WebCore::RenderImage::paint):
        * rendering/render_layer.h:
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paintBackgrounds):
        (WebCore::InlineFlowBox::paintBackground):
        (WebCore::InlineFlowBox::paintBackgroundAndBorder):
        (WebCore::InlineFlowBox::paintDecorations):
        (WebCore::EllipsisBox::paint):
        * rendering/render_line.h:
        * rendering/render_list.cpp:
        (RenderListMarker::paint):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::drawBorder):
        (WebCore::RenderObject::paintBorder):
        (WebCore::RenderObject::paintOutline):
        (WebCore::RenderObject::selectionColor):
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/render_object.h:
        (WebCore::RenderObject::paintBackgroundExtended):
        * rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::selectionColor):
        * rendering/render_replaced.h:
        * rendering/render_style.h:
        (khtml::BorderValue::isTransparent):
        (khtml::CollapsedBorderValue::color):
        (khtml::RenderStyle::hasBackground):
        (khtml::RenderStyle::borderLeftColor):
        (khtml::RenderStyle::borderRightColor):
        (khtml::RenderStyle::borderTopColor):
        (khtml::RenderStyle::borderBottomColor):
        (khtml::RenderStyle::outlineColor):
        (khtml::RenderStyle::color):
        (khtml::RenderStyle::backgroundColor):
        (khtml::RenderStyle::setBackgroundColor):
        (khtml::RenderStyle::setBorderLeftColor):
        (khtml::RenderStyle::setBorderRightColor):
        (khtml::RenderStyle::setBorderTopColor):
        (khtml::RenderStyle::setBorderBottomColor):
        (khtml::RenderStyle::setOutlineColor):
        (khtml::RenderStyle::setColor):
        (khtml::RenderStyle::initialColor):
        * rendering/render_theme.cpp:
        (khtml::RenderTheme::isControlStyled):
        * rendering/render_theme.h:

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by John and Anders.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6732
          REGRESSION: Repro crash at Google Maps

        * khtml/ecma/JSXMLHttpRequest.cpp:
        (KJS::JSXMLHttpRequest::getValueProperty): Clean up a bit, using PassRefPtr where appropriate.
        (KJS::JSXMLHttpRequest::mark): Remove get calls now that getter functions don't return PassRefPtr.
        (KJS::JSXMLHttpRequest::JSXMLHttpRequest): Put the object into the DOM objects map.
        (KJS::JSXMLHttpRequest::~JSXMLHttpRequest): Remove the object from the DOM objects map. Also clear
        out both listeners so the implementation object isn't left with dangling pointers (since we won't
        be around to mark those objects any more).
        (KJS::JSXMLHttpRequestProtoFunc::callAsFunction): Tightened up the code a bit.

        * xml/xmlhttprequest.h:
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::getResponseXML): Change to return just a plain old pointer. Remove
        the unnecessary typeIsXML boolean.
        (WebCore::XMLHttpRequest::onReadyStateChangeListener): Change to return just a plain old pointer.
        Update for name changes.
        (WebCore::XMLHttpRequest::setOnReadyStateChangeListener): Ditto.
        (WebCore::XMLHttpRequest::onLoadListener): Ditto.
        (WebCore::XMLHttpRequest::setOnLoadListener): Ditto.
        (WebCore::XMLHttpRequest::send): Protect the DOM wrapper if any as well as ourselves while
        the load is in progress.
        (WebCore::XMLHttpRequest::abort): Unprotect to balance out the above.
        (WebCore::XMLHttpRequest::slotFinished): Ditto.

        * khtml/ecma/JSXMLHttpRequest.h: Just formatting changes.

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6753
          REGRESSION (r12282-12292): Crash loading TinyMCE test app

        * khtml/xml/ContainerNodeImpl.h: Remove some internals that don't need
        to be member functions.
        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::insertBefore): Improved algorithm to keep
        refs to more things so that we don't end up with a dangling pointer (fixes
        the crash) and so that we do not crash if someone modifies the tree inside
        a DOM mutation event handler (theoretical only at this point, needs test
        cases).
        (WebCore::ContainerNodeImpl::replaceChild): Ditto.
        (WebCore::willRemoveChild): Changed from member function to free function.
        (WebCore::ContainerNodeImpl::removeChild): Fix potential problem if the
        mutation event handler moves the node into a different parent.
        (WebCore::ContainerNodeImpl::appendChild): Made changes like those in
        insertBefore above.
        (WebCore::dispatchChildInsertionEvents): Changed from member function to
        free function. Tightened up handling of some edge cases.
        (WebCore::dispatchChildRemovalEvents): Ditto.

2006-01-24  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6696
          REGRESSION: JavaScript window.opener set incorrectly

        * khtml/ecma/kjs_window.cpp: (KJS::WindowFunc::callAsFunction):
        Fix local variable "frame" that was shadowing another local variable
        named "frame" by naming the one for the new frame "newFrame".

2006-01-24  Maciej Stachowiak  <mjs@apple.com>

        - fix build

        * ksvg2/scripts/make_names.pl: Update script to generate code that
        works with the new HashMap.

2006-01-23  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fixed a storage leak found by running run-webkit-tests fast --leak

        * khtml/xml/dom_xmlimpl.cpp:
        (ProcessingInstructionImpl::checkStyleSheet): Removed bogus deref call,
        since the RefPtr handles it for us. Also deployed PassRefPtr in one place.
        (ProcessingInstructionImpl::setStyleSheet): Removed more bogus ref/deref calls.

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - Made some functions return const AtomicString& instead of
        AtomicString because they could. 
        
        Result of Darin's and Eric's comments on the last patch.

        * khtml/html/HTMLGenericFormElementImpl.cpp:
        (WebCore::HTMLGenericFormElementImpl::name):
        * khtml/html/HTMLGenericFormElementImpl.h:
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::name):
        * khtml/html/HTMLInputElementImpl.h:

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - renamed PointerHash to PtrHash
        - made PtrHash the default hash function for int and pointer types that aren't further specialized
        - added an AtomicStringImpl class to make it easier and more typesafe to identity hash atomic strings
        - did appropriate consequent cleanup (very few places now need to declare a hash function)
        http://bugs.webkit.org/show_bug.cgi?id=6752
        
        * bindings/objc/DOM.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementWithName:inForm:]):
        * css/cssstyleselector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        (WebCore::CSSRuleSet::addToRuleSet):
        * khtml/dom/dom_string.h:
        (KXMLCore::):
        * khtml/ecma/kjs_binding.cpp:
        (KJS::UString::UString):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::mark):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLElement::classInfo):
        (KJS::HTMLElement::accessors):
        (KJS::HTMLElement::selectSetter):
        (KJS::HTMLElement::inputSetter):
        (KJS::HTMLElement::textAreaSetter):
        (KJS::HTMLElement::buttonSetter):
        * khtml/ecma/kjs_window.h:
        * khtml/editing/apply_style_command.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * khtml/html/HTMLCollectionImpl.h:
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::isRecognizedTagName):
        (WebCore::inlineTagList):
        (WebCore::blockTagList):
        * khtml/html/HTMLFormCollectionImpl.cpp:
        (WebCore::HTMLFormCollectionImpl::updateNameCache):
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        (WebCore::HTMLGenericFormElementImpl::name):
        (WebCore::HTMLGenericFormElementImpl::setName):
        * khtml/html/HTMLGenericFormElementImpl.h:
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::name):
        * khtml/html/HTMLInputElementImpl.h:
        * khtml/html/htmlfactory.cpp:
        (DOM::HTMLElementFactory::createHTMLElement):
        * khtml/html/htmlparser.cpp:
        (HTMLParser::isHeaderTag):
        (HTMLParser::isResidualStyleTag):
        (HTMLParser::isAffectedByResidualStyle):
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::checkedRadioButtonForGroup):
        (WebCore::DocumentImpl::removeRadioButtonGroup):
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/NodeImpl.h:
        * khtml/xml/dom_atomicstring.h:
        (DOM::AtomicString::AtomicString):
        (DOM::AtomicString::impl):
        (KXMLCore::):
        * khtml/xml/dom_stringimpl.cpp:
        (DOM::equal):
        * khtml/xml/dom_stringimpl.h:
        (KXMLCore::):
        * khtml/xml/xml_tokenizer.h:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (KSVG::SVGTimer::notifyAll):
        * kwq/KWQKJobClasses.h:
        * kwq/KWQObject.cpp:
        * loader/CachedObject.h:
        * loader/CachedObjectClientWalker.h:
        * loader/loader.h:
        * page/Frame.cpp:
        (Frame::endAllLifeSupport):
        * rendering/render_canvas.cpp:
        (RenderCanvas::selectionRect):
        (RenderCanvas::setSelection):
        * rendering/render_canvas.h:
        * rendering/render_object.h:
        * xml/xmlhttprequest.h:

2006-01-23 Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6733
          REGRESSION: html input doesn't honor change to value

        * rendering/render_form.cpp: (RenderLineEdit::slotTextChanged): Made newText a
        DOMString. Assigning the empty DOMString to a QString and back to a DOMString
        resulted in a null string, which should be avoided here.

        * khtml/dom/dom_string.cpp: (DOM::DOMString::qstring): Don't turn an empty
        DOMString into a null QString; make an empty QString instead.

2006-01-23  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6385
          REGRESSION: Unnamed frames return a generated name as window.frameElement.name

        Test: fast/frames/frame-element-name.html

        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::getOwnPropertySlot):
        Remove the quirk where frame and iframe elements reflect all the
        properties of the window inside the frame. Testing indicates that
        no other browser does this -- not sure why we were doing it.

2006-01-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Tim Hatcher.
        
        - renamed insert() operation on HashSet, HashCountedSet and HashTable to add()
        for consistency with HashMap

        * bridge/mac/MacFrame.mm:
        (MacFrame::didTellBridgeAboutLoad):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::mark):
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::isRecognizedTagName):
        (WebCore::inlineTagList):
        (WebCore::blockTagList):
        * khtml/html/HTMLFormCollectionImpl.cpp:
        (WebCore::HTMLFormCollectionImpl::updateNameCache):
        * khtml/html/htmlparser.cpp:
        (HTMLParser::isHeaderTag):
        (HTMLParser::isResidualStyleTag):
        (HTMLParser::isAffectedByResidualStyle):
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::addElementById):
        (WebCore::DocumentImpl::registerDisconnectedNodeWithEventListeners):
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::registerNodeList):
        * khtml/xml/dom_atomicstring.cpp:
        (DOM::AtomicString::add):
        * khtml/xml/dom_qname.cpp:
        (DOM::QualifiedName::QualifiedName):
        * loader/CachedObject.cpp:
        (WebCore::CachedObject::ref):
        * page/Frame.cpp:
        (Frame::keepAlive):
        * rendering/render_canvas.cpp:
        (RenderCanvas::addWidget):
        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget):
        * rendering/render_line.cpp:
        (WebCore::InlineFlowBox::paint):
        * xml/xmlhttprequest.cpp:
        (WebCore::XMLHttpRequest::addToRequestsByDocument):

2006-01-23  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by thatcher
        
        Turned on -O2 for B&I build.

        * WebCore.xcodeproj/project.pbxproj:

2006-01-23  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6617
          REGRESSION: Crash in cloneChildNodes when clicking element

        Test: fast/dom/clone-node-form-elements-with-attr.html

        Changed cloneNode and some other functions to return PassRefPtr.
        Also made m_render private and changed its name to m_renderer.

        * bindings/objc/DOM.mm: (-[DOMNode cloneNode:]): Add call to get() needed
        now that cloneNode returns a PassRefPtr.

        * khtml/editing/break_blockquote_command.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::doApply):
        * khtml/editing/split_element_command.cpp:
        (khtml::SplitElementCommand::doApply):
        * khtml/html/htmlparser.cpp:
        (HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        (HTMLParser::reopenResidualStyleTags):
        * khtml/xml/dom2_rangeimpl.cpp: (DOM::RangeImpl::processContents):
        * ksvg2/svg/SVGUseElementImpl.cpp: (SVGUseElementImpl::closeRenderer):
        Use RefPtr and PassRefPtr as appropriate, since the result of cloneNode
        is now a referenced object in a PassRefPtr rather than a floating one and
        so needs to be kept referenced until used.

        * khtml/html/HTMLElementImpl.h:
        * khtml/html/HTMLElementImpl.cpp:
        (WebCore::HTMLElementImpl::cloneNode): Changed to return a PassRefPtr.
        (WebCore::HTMLElementImpl::children): Ditto.
        * khtml/xml/DocumentFragmentImpl.h:
        * khtml/xml/DocumentFragmentImpl.cpp:
        (DOM::DocumentFragmentImpl::cloneNode): Changed to return a PassRefPtr.
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/DocumentTypeImpl.h:
        * khtml/xml/DocumentTypeImpl.cpp:
        (DOM::DocumentTypeImpl::cloneNode): Changed to return a PassRefPtr.
        * khtml/xml/NamedNodeMapImpl.h:
        (WebCore::NamedNodeMapImpl::getNamedItem): Changed to return PassRefPtr.
        (WebCore::NamedNodeMapImpl::removeNamedItem): Ditto.
        (WebCore::NamedNodeMapImpl::setNamedItemNS): Ditto.

        * khtml/html/HTMLGenericFormElementImpl.cpp:
        (WebCore::HTMLGenericFormElementImpl::attach): Use renderer() instead of
        getting at m_render directly.
        (WebCore::HTMLGenericFormElementImpl::recalcStyle): Ditto.
        (WebCore::HTMLGenericFormElementImpl::isFocusable): Ditto.
        (WebCore::HTMLGenericFormElementImpl::isKeyboardFocusable): Ditto.
        (WebCore::HTMLGenericFormElementImpl::isMouseFocusable): Ditto.
        * khtml/html/HTMLInputElementImpl.cpp:
        (WebCore::HTMLInputElementImpl::selectionStart): Ditto.
        (WebCore::HTMLInputElementImpl::selectionEnd): Ditto.
        (WebCore::HTMLInputElementImpl::setSelectionStart): Ditto.
        (WebCore::HTMLInputElementImpl::setSelectionEnd): Ditto.
        (WebCore::HTMLInputElementImpl::select): Ditto.
        (WebCore::HTMLInputElementImpl::setSelectionRange): Ditto.
        (WebCore::HTMLInputElementImpl::parseMappedAttribute): Ditto.
        (WebCore::HTMLInputElementImpl::setValue): Ditto.
        (WebCore::HTMLInputElementImpl::defaultEventHandler): Ditto.
        * khtml/html/HTMLSelectElementImpl.cpp:
        (WebCore::HTMLSelectElementImpl::recalcStyle): Ditto.
        (WebCore::HTMLSelectElementImpl::setRecalcListItems): Ditto.
        (WebCore::HTMLSelectElementImpl::reset): Ditto.
        (WebCore::HTMLSelectElementImpl::notifyOptionSelected): Ditto.
        (WebCore::HTMLSelectElementImpl::defaultEventHandler): Ditto.
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        (WebCore::HTMLTextAreaElementImpl::selectionStart): Ditto.
        (WebCore::HTMLTextAreaElementImpl::selectionEnd): Ditto.
        (WebCore::HTMLTextAreaElementImpl::setSelectionStart): Ditto.
        (WebCore::HTMLTextAreaElementImpl::setSelectionEnd): Ditto.
        (WebCore::HTMLTextAreaElementImpl::select): Ditto.
        (WebCore::HTMLTextAreaElementImpl::setSelectionRange): Ditto.
        (WebCore::HTMLTextAreaElementImpl::updateValue): Ditto.
        (WebCore::HTMLTextAreaElementImpl::setValue): Ditto.
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::updateForNewURL): Ditto.
        (WebCore::HTMLFrameElementImpl::openURL): Ditto.
        (WebCore::HTMLFrameElementImpl::attach): Ditto.
        (WebCore::HTMLFrameElementImpl::close): Ditto.
        (WebCore::HTMLFrameElementImpl::willRemove): Ditto.
        (WebCore::HTMLFrameElementImpl::isFocusable): Ditto.
        (WebCore::HTMLFrameElementImpl::setFocus): Ditto.
        (WebCore::HTMLFrameElementImpl::frameWidth): Ditto.
        (WebCore::HTMLFrameElementImpl::frameHeight): Ditto.
        (WebCore::HTMLFrameSetElementImpl::defaultEventHandler): Ditto.
        (WebCore::HTMLFrameSetElementImpl::recalcStyle): Ditto.
        (WebCore::HTMLIFrameElementImpl::attach): Ditto.
        (WebCore::HTMLIFrameElementImpl::recalcStyle): Ditto.
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageElementImpl::parseMappedAttribute): Ditto.
        (WebCore::HTMLImageElementImpl::width): Ditto.
        (WebCore::HTMLImageElementImpl::height): Ditto.
        * khtml/html/html_inlineimpl.cpp:
        (WebCore::HTMLAnchorElementImpl::isFocusable): Ditto.
        * khtml/html/html_listimpl.cpp:
        (DOM::HTMLLIElementImpl::parseMappedAttribute): Ditto.
        (DOM::HTMLLIElementImpl::attach): Ditto.
        * khtml/html/html_objectimpl.cpp:
        (WebCore::HTMLAppletElementImpl::getAppletInstance): Ditto.
        (WebCore::HTMLAppletElementImpl::closeRenderer): Ditto.
        (WebCore::HTMLEmbedElementImpl::getEmbedInstance): Ditto.
        (WebCore::HTMLEmbedElementImpl::attach): Ditto.
        (WebCore::HTMLObjectElementImpl::getObjectInstance): Ditto.
        (WebCore::HTMLObjectElementImpl::parseMappedAttribute): Ditto.
        (WebCore::HTMLObjectElementImpl::attach): Ditto.
        (WebCore::HTMLObjectElementImpl::detach): Ditto.
        (WebCore::HTMLObjectElementImpl::recalcStyle): Ditto.
        * khtml/html/html_tableimpl.cpp:
        (WebCore::HTMLTableElementImpl::parseMappedAttribute): Ditto.
        (WebCore::HTMLTableElementImpl::attach): Ditto.
        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::getUpperLeftCorner): Ditto.
        (WebCore::ContainerNodeImpl::getLowerRightCorner): Ditto.
        (WebCore::ContainerNodeImpl::setActive): Ditto.
        (WebCore::ContainerNodeImpl::setHovered): Ditto.
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::~DocumentImpl): Ditto.
        (WebCore::DocumentImpl::elementFromPoint): Ditto.
        (WebCore::DocumentImpl::recalcStyle): Ditto.
        (WebCore::DocumentImpl::attach): Ditto.
        (WebCore::DocumentImpl::restoreRenderer): Ditto.
        (WebCore::DocumentImpl::detach): Ditto.
        (WebCore::DocumentImpl::setVisuallyOrdered): Ditto.
        (WebCore::DocumentImpl::updateSelection): Ditto.
        (WebCore::DocumentImpl::prepareMouseEvent): Ditto.
        (WebCore::DocumentImpl::cloneNode): Changed to return PassRefPtr.
        (WebCore::DocumentImpl::recalcStyleSelector): Use renderer() instead
        of getting at m_render directly.
        (WebCore::DocumentImpl::setInPageCache): Ditto.

        * khtml/xml/NodeImpl.h:
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::NodeImpl): Changed m_render to m_renderer.
        (WebCore::NodeImpl::~NodeImpl): Changed use of m_render to renderer().
        (WebCore::NodeImpl::getRect): Ditto.
        (WebCore::NodeImpl::attach): Ditto.
        (WebCore::NodeImpl::detach): Ditto.
        (WebCore::NodeImpl::createRendererIfNeeded): Ditto.
        (WebCore::NodeImpl::getElementsByTagName): Changed to return PassRefPtr.
        (WebCore::NodeImpl::getElementsByTagNameNS): Ditto.

        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::AttrImpl::cloneNode): Changed to return PassRefPtr.
        (WebCore::ElementImpl::cloneNode): Ditto.
        (WebCore::ElementImpl::scrollIntoView): Use renderer() instead of m_render.
        (WebCore::ElementImpl::scrollIntoViewIfNeeded): Ditto.
        (WebCore::ElementImpl::recalcStyle): Ditto.
        (WebCore::ElementImpl::setAttributeNode): Changed to return PassRefPtr.
        (WebCore::ElementImpl::removeAttributeNode): Ditto.
        (WebCore::NamedAttrMapImpl::removeNamedItemNS): Ditto.
        (WebCore::NamedAttrMapImpl::setNamedItem): Ditto.
        (WebCore::NamedAttrMapImpl::removeNamedItem): Ditto.
        (DOM::ElementImpl::setAttributeNodeNS): Ditto.

        * khtml/xml/dom_textimpl.h:
        * khtml/xml/dom_textimpl.cpp:
        (CharacterDataImpl::setData): Changed use of m_render to renderer().
        (CharacterDataImpl::appendData): Ditto.
        (CharacterDataImpl::insertData): Ditto.
        (CharacterDataImpl::deleteData): Ditto.
        (CharacterDataImpl::replaceData): Ditto.
        (CommentImpl::cloneNode): Changed to return PassRefPtr.
        (TextImpl::splitText): Changed use of m_render to renderer().
        (TextImpl::cloneNode): Changed to return PassRefPtr.
        (TextImpl::recalcStyle): Changed use of m_render to renderer().
        (CDATASectionImpl::cloneNode): Changed to return PassRefPtr.

        * khtml/xml/dom_xmlimpl.h:
        * khtml/xml/dom_xmlimpl.cpp:
        (DOM::EntityImpl::cloneNode): Changed to return PassRefPtr.
        (DOM::EntityReferenceImpl::cloneNode): Ditto.
        (DOM::NotationImpl::cloneNode): Ditto.
        (DOM::ProcessingInstructionImpl::cloneNode): Ditto.

        - removed unused code

        * khtml/html/html_documentimpl.cpp: Removed unused slotHistoryChanged function.
        * khtml/html/html_documentimpl.h: Ditto.
        * kwq/KWQObject.cpp: (QObject::connect): Removed special case for
        slotHistoryChanged, no longer used.

        - fixed storage leak

        * bridge/mac/MacFrame.mm: (MacFrame::~MacFrame): Delete window widget.

2006-01-23  Anders Carlsson  <andersca@mac.com>

        Forgot to add this as part of 
        http://bugs.webkit.org/show_bug.cgi?id=3869
        
        * manual-tests/resources/webkit-background.png: Added.

2006-01-22  Darin Adler  <darin@apple.com>

        - fix layout tests

        * rendering/RenderTable.cpp: (WebCore::RenderTable::addChild): Added
        missing code to set wrapInAnonymousSection false in the case where
        adding a footer.

2006-01-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.
        
        - Set up Page class and invert Frame / WebCoreFrameBridge ownership
        http://bugs.webkit.org/show_bug.cgi?id=6577

        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (MacFrame::MacFrame): Initialize _bridge
        (MacFrame::~MacFrame): Clear the bridge's frame pointer and release it.
        (Frame::frameDetached): Reverse order of removing from old-style frames
        array and calling frameDetached.
        (MacFrame::createPart): Don't ref the part when creating it, since the child
        bridge is no longer going to own a ref.
        (MacFrame::setBridge): KWQRetain / KWQRelease since we know own the bridge.
        (MacFrame::detachFromView): New method; clear out the view.
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (Bridge): Helper method to get a WebCoreFrameBridge from a Frame.
        (-[WebCoreFrameBridge firstChild]): Call through Frame.
        (-[WebCoreFrameBridge lastChild]): ditto
        (-[WebCoreFrameBridge childCount]): ditto
        (-[WebCoreFrameBridge previousSibling]): ditto
        (-[WebCoreFrameBridge nextSibling]): ditto
        (-[WebCoreFrameBridge isDescendantOfFrame:]): No need to cast parent
        pointer.
        (-[WebCoreFrameBridge appendChild:]): Call through Frame.
        (-[WebCoreFrameBridge _clearRenderPart]): New helper method to free
        the renderPart when removing a child.
        (-[WebCoreFrameBridge removeChild:]): Clear child's render part
        and call through to Frame.
        (-[WebCoreFrameBridge dealloc]): Remove unneeded m_frame-related code.
        (-[WebCoreFrameBridge finalize]): ditto
        (-[WebCoreFrameBridge clearFrame]): New helper method, needed now that
        bridge can outlive frame.
        (-[WebCoreFrameBridge handleFallbackContent]): Make safe against a null
        frame.
        (-[WebCoreFrameBridge removeFromFrame]): ditto
        * bridge/mac/WebCorePageBridge.h:
        * bridge/mac/WebCorePageBridge.mm:
        (-[WebCorePageBridge initWithMainFrame:]): Create a Page instance.
        (-[WebCorePageBridge dealloc]): Delete the Page.
        (-[WebCorePageBridge mainFrame]): Get the main frame from the Page.
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::globalExec): Override; keep frame alive, then
        call superclass.
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_proxy.cpp:
        (KJSProxyImpl::clear): Don't pass exec to window.
        (KJSProxyImpl::interpreter): Don't do keepAlive.
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::isSafeScript): If the active part's document is gone, use the frame's
        URL for security check purposes.
        (KJS::Window::clear): Don't take an ExecState parameter any more - it
        wasn't used.
        * khtml/ecma/kjs_window.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::implicitOpen): If we've got a tokenizer, delete
        it before closing - you don't ever want to fire an onload handler because of
        an open.
        * page/Frame.cpp:
        (Frame::init): Pass `this' to FramePrivate constructor.
        (FrameCounter::~FrameCounter): Added debug counting of leftover
        Frame objects on exit.
        (Frame::Frame): Moved out-of-line. Increment debug counter.
        (Frame::~Frame): Assert that there is no life support going, either at the
        start or end of this method. Decrement frame counter.
        (Frame::stopLoading): tweaked for the fact that ChildFrame::m_frame is now
        a RefPtr.
        (Frame::clear): ditto
        (Frame::stop): ditto
        (Frame::stopAnimations): ditto
        (Frame::checkEmitLoadEvent): ditto
        (Frame::processObjectRequest): ditto
        (Frame::childFrame): ditto
        (Frame::findFrame): ditto
        (Frame::setZoomFactor): ditto
        (Frame::frames): ditto
        (Frame::connectChild): ditto
        (Frame::disconnectChild): ditto
        (Frame::endAllLifeSupport): Method that, in debug mode, will clear
        all life suppor timers so the Frame exit counter works.
        (Frame::keepAlive): In debug mode, add proper support for
        endAllLifeSupport
        (Frame::slotEndLifeSupport): ditto
        (Frame::setPolicyBaseURL): Update for the fact that ChildFrame::m_frame is now
        a RefPtr.
        (Frame::treeNode): New helper method, get the FrameTreeNode class that implements
        frame tree traversal.
        (Frame::nextSibling): Simple wrapper that calls through to treeNode().
        (Frame::previousSibling): ditto
        (Frame::firstChild): ditto
        (Frame::lastChild): ditto
        (Frame::childCount): ditto
        (Frame::appendChild): ditto
        (Frame::removeChild): ditto
        (Frame::detachFromView): no-op, just a virtual base for the MAcFrame method.
        * page/Frame.h:
        * page/FramePrivate.h:
        (FramePrivate::FramePrivate): Add FrameTreeNode member.
        * page/FrameTreeNode.cpp: Added.
        (FrameTreeNode::~FrameTreeNode): detach all children from their view
        (FrameTreeNode::appendChild): implemented
        (FrameTreeNode::removeChild): implemented - make sure to detach child
        from its view.
        * page/FrameTreeNode.h: Added.
        (FrameTreeNode::FrameTreeNode): New; initialize fields tht need it.
        (FrameTreeNode::nextSibling): Trivial inline.
        (FrameTreeNode::previousSibling): ditto
        (FrameTreeNode::firstChild): ditto
        (FrameTreeNode::lastChild): ditto
        (FrameTreeNode::childCount): ditto
        * page/Page.cpp: Added.
        (Page::Page): Initialize mainFrame and bump pageCount appropriately.
        (Page::~Page): Detach main frame from view, handle ending life support
        when last frame is destroyed.
        * page/Page.h: Added.
        (Page::mainFrame): Trivial inline.
        * WebCore.xcodeproj/project.pbxproj: Add new files.

2006-01-22  Darin Adler  <darin@apple.com>

        * Info.plist: Updated Apple copyright date. Need to update others
        too at some point.

        * WebCore-svg.exp: Removed unused empty file.

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Make <animateColor> work again (broke during DOM merger).
        http://bugs.webkit.org/show_bug.cgi?id=5964
        
        No layout test possible.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::getAbsoluteRepaintRect): moved to .cpp file
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::implicitClose): start svg animations
        (WebCore::DocumentImpl::svgExtensions): svg document extensions
        (WebCore::DocumentImpl::accessSVGExtensions): svg doc extensions
        * khtml/xml/DocumentImpl.h:
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (KDOM::CSSStyleSelector::applySVGProperty):
        * ksvg2/svg/SVGAElementImpl.cpp:
        (SVGAElementImpl::defaultEventHandler): cleanup
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp:
        (SVGAnimateColorElementImpl::handleTimerEvent): update css lookup
        * ksvg2/svg/SVGAnimateElementImpl.cpp:
        (SVGAnimateElementImpl::handleTimerEvent): fix css property lookup
        * ksvg2/svg/SVGAnimateTransformElementImpl.cpp:
        (SVGAnimateTransformElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        (SVGAnimationElementImpl::closeRenderer): use doc extensions
        (SVGAnimationElementImpl::targetAttribute): fix css properties
        (SVGAnimationElementImpl::setTargetAttribute): fix css properties
        * ksvg2/svg/SVGDocumentImpl.cpp:
        (SVGDocumentImpl::svgView): remove unnecessary static cast
        (SVGDocumentImpl::executeScripts):
        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGElementImpl.cpp:
        (WebCore::SVGElementImpl::addSVGEventListener): helper function
        (WebCore::SVGElementImpl::parseMappedAttribute): use helper
        * ksvg2/svg/SVGElementImpl.h:
        * ksvg2/svg/SVGGElementImpl.cpp:
        * ksvg2/svg/SVGGElementImpl.h:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (WebCore::SVGSVGElementImpl::SVGSVGElementImpl):
        (WebCore::SVGSVGElementImpl::~SVGSVGElementImpl):
        (WebCore::SVGSVGElementImpl::addSVGWindowEventListner): helper
        (WebCore::SVGSVGElementImpl::parseMappedAttribute): use helper
        * ksvg2/svg/SVGSVGElementImpl.h:
        * ksvg2/svg/SVGSetElementImpl.cpp:
        (SVGSetElementImpl::handleTimerEvent): use doc extensions
        * ksvg2/svg/SVGStyledElementImpl.h:
        * page/Frame.cpp:
        (Frame::pauseTimeouts): pause svg animation
        (Frame::resumeTimeouts): resume svg animation
        * rendering/render_canvas.h:

2006-01-22  Darin Adler  <darin@apple.com>

        - fix deployment builds

        * rendering/RenderTable.cpp: (WebCore::RenderTable::addChild): Init bool.

2006-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5731
          Form element as display table-cell hangs Safari (will eventually crash)

        Test: fast/table/form-with-table-style.html

        Hang was caused by the fact that RenderContainer has code to wrap table
        styled elements in appropriate anonymous table elements, but the table
        elements themselves have a special case for form elements that causes them
        to call through, which led to infinite recursion as RenderContainer kept
        making new tables which kept calling through to RenderContainer::addChild.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): Improved logic about wrapping children
        in anonymous table sections in the following ways: (1) Do wrap a form
        properly it has a table display style (such as table-cell or table-row).
        (2) When an item has a particular display style, check that it has the
        right type of render object before casting it to that type. Also
        restructured the code a little to make it slightly more readable.
        (WebCore::RenderTable::layout): Added a FIXME about forms that have a
        display style that makes it a table section, since they will be skipped
        here in the loop to lay children out.
        (WebCore::RenderTable::recalcSections): Added checks similar to the ones
        in addChild above.

        * rendering/RenderTableSection.cpp: (WebCore::RenderTableSection::addChild):
        Moved form tag logic inside render object type check so that a table row
        that happens to be a form element won't be affected by the special form
        tag logic. Also added an explicit check for the table-cell style so we
        will wrap it in a row rather than just putting the form at this level.

        * rendering/RenderTableRow.h: Removed removeChildNode and dump functions
        that just called through to the base class.
        * rendering/RenderTableRow.cpp: (WebCore::RenderTableRow::addChild):
        Moved form tag logic inside render object type check so that a table cell
        that happens to be a form element won't be affected by the special form
        tag logic. Removed unnecessary null check of section() at end of function.

        * rendering/RenderTableCol.h: Removed addChild because all it did was
        assert (incorrectly) and then call through to the base class. Changed
        _span to be m_span.
        * rendering/RenderTableCol.cpp: Removed addChild function. Updated for
        change in name of m_span field.

2006-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3518
          REGRESSION (312-412): mojibake left behind when scrolling a clipped <select>

        * kwq/KWQListBox.mm: (QListBox::QListBox): Call setCopiesOnScroll:NO.
        * kwq/KWQTextArea.mm: (-[KWQTextArea initWithFrame:]): Ditto.

2006-01-22  David Kilzer  <ddkilzer@kilzer.net>

        Reviewed by Maciej.

        - fix for http://bugs.webkit.org/show_bug.cgi?id=5656
        REGRESSION: Buttons on Yahoo! Mail misplaced in ToT
        <rdar://problem/4404335>
        Tests whether white-space mode on buttons is inheritied and not forced.
        Originally broken in Subversion revision r10909.

        * css/html4.css: Remove default white-space value for <button> tag to
        allow it to be inherited.
        * rendering/render_theme_mac.mm:
        (khtml::RenderThemeMac::adjustButtonStyle): Fix misleading comment.

        * css/UserAgentStyleSheets.cpp: Touched this file to make the rebuild
        of html4.css work (shouldn't have to do this).

2006-01-22  Darin Adler  <darin@apple.com>

        * css/make-css-file-arrays.pl: Fix typo that was resulting in a bunch
        of whitespace that was supposed to go into a derived source file going
        to the console instead.

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        SVG needs to support "evt" instead of "event" in event handlers.
        http://bugs.webkit.org/show_bug.cgi?id=5874
        
        Test: svg/custom/evt-onload.svg

        * WebCore.xcodeproj/project.pbxproj: added new classes
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_events.h:
        * khtml/ecma/kjs_proxy.cpp:
        (WebCore::KJSProxyImpl::createHTMLEventHandler): simplified
        (WebCore::KJSProxyImpl::createSVGEventHandler): new
        * khtml/ecma/kjs_proxy.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/ecma/kjs_window.h:
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::createHTMLEventListener): simplified
        (WebCore::DocumentImpl::createSVGEventListener): new
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchEvent): use RefPtr
        * ksvg2/events/JSSVGLazyEventListener.cpp: Added.
        (WebCore::JSSVGLazyEventListener::JSSVGLazyEventListener): added.
        (WebCore::JSSVGLazyEventListener::eventParameterName): added.
        * ksvg2/events/JSSVGLazyEventListener.h: Added.
        * ksvg2/svg/SVGElementImpl.cpp:
        (SVGElementImpl::parseMappedAttribute): use new SVG event handler
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (SVGSVGElementImpl::parseMappedAttribute): use new SVG event handler
        * page/Frame.cpp: updated KJSProxyImpl namespace
        * page/Frame.h: updated KJSProxyImpl namespace
        * page/FramePrivate.h: updated KJSProxyImpl namespace

2006-01-22  Darin Adler  <darin@apple.com>

       Reviewed by Maciej.

       - fix http://bugs.webkit.org/show_bug.cgi?id=3508
         REGRESSION (125-412): problem with negative margin-top and position: absolute (vre.aitg.com)
         <rdar://problem/4093277> REGRESSION (125-312): layout problem at vre.aitg.com (3508)

       Test: fast/css/position-negative-top-margin.html

       * rendering/RenderBlock.cpp: (WebCore::RenderBlock::adjustPositionedBlock):
       Fixed two different problems that contributed to the bug: (1) Added a call to calcVerticalMargins
       otherwise the margin will always be 0. (2) Corrected logic for the negative margin case, which
       was comparing a negative margin-top to a number representing the absolute value of the margin.

2006-01-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

       - fix http://bugs.webkit.org/show_bug.cgi?id=3702
         Web page is laid out incorrectly after printing with print-specific style sheet.
         <rdar://problem/3706259> Web page distorts after printing with print-specific style sheet (3702)

        Also replaced tabs with spaces in the changed files.

        Test cases: 
        * fast/table/append-cells.html
        * fast/table/append-cells2.html
        * fast/table/remove-td-display-none.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSections): Shrink columns and columnPos to the
          actual number of columns.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::numColumns): New function.
        (WebCore::RenderTableSection::dump): Use gridRows instead of grid.size() for row count,
          preventing crashes.

        * rendering/RenderTableSection.h: Added numColumns() and a comment about cCol/cRow.

2006-01-22  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - http://bugs.webkit.org/show_bug.cgi?id=6705
          use PassRefPtr in more of the basic DOM operations

        Once we do the same with cloneNode, I believe we'll fix one of our P1 bugs,
        but cloneNode was a little too much to do without doing this first pass.

        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::childNodes): Updated for parameter changes.
        (WebCore::NodeImpl::insertBefore): Ditto.
        (WebCore::NodeImpl::replaceChild): Ditto.
        (WebCore::NodeImpl::removeChild): Ditto.
        (WebCore::NodeImpl::appendChild): Ditto.
        (WebCore::NodeImpl::addChild): Ditto.
        (WebCore::NodeImpl::addEventListener): Ditto.
        (WebCore::NodeImpl::setHTMLEventListener): Ditto.
        (WebCore::NodeImpl::isDefaultNamespace): Updated for changed name of ancestorElement.
        (WebCore::NodeImpl::lookupPrefix): Ditto.
        (WebCore::NodeImpl::lookupNamespaceURI): Ditto.
        (WebCore::NodeImpl::lookupNamespacePrefix): Ditto.
        (WebCore::NodeImpl::ancestorElement): Changed name from getAncestorElement.
        * khtml/xml/NodeImpl.h: Changed most functions where it makes sense to take and return
        PassRefPtr instead of raw pointers. Even non-obvious cases like appendChild, where the
        return value has to be PassRefPtr only because it might be removed when the JavaScript
        triggered by the DOM mutation event runs (normally, there's no need to return an "owning"
        pointer because the tree now owns the newly-inserted node). Made the ancestorElement
        function private.

        * khtml/xml/ContainerNodeImpl.cpp:
        (WebCore::ContainerNodeImpl::ContainerNodeImpl): Updated for changes from
        _first to m_firstChild and _last to m_lastChild.
        (WebCore::ContainerNodeImpl::removeAllChildren): Ditto.
        (WebCore::ContainerNodeImpl::firstChild): Ditto.
        (WebCore::ContainerNodeImpl::lastChild): Ditto.
        (WebCore::ContainerNodeImpl::insertBefore): Updated for parameter changes.
        (WebCore::ContainerNodeImpl::replaceChild): Ditto.
        (WebCore::ContainerNodeImpl::willRemove): Updated for m_lastChild.
        (WebCore::ContainerNodeImpl::removeChild): Updated for parameter changes.
        (WebCore::ContainerNodeImpl::removeChildren): Updated for m_first/lastChild.
        (WebCore::ContainerNodeImpl::appendChild): Updated for parameter changes.
        (WebCore::ContainerNodeImpl::hasChildNodes): Updated for m_firstChild.
        (WebCore::ContainerNodeImpl::addChild): Updated for parameter changes.
        (WebCore::ContainerNodeImpl::attach): Updated for m_firstChild.
        (WebCore::ContainerNodeImpl::detach): Ditto.
        (WebCore::ContainerNodeImpl::insertedIntoDocument): Ditto.
        (WebCore::ContainerNodeImpl::removedFromDocument): Ditto.
        (WebCore::ContainerNodeImpl::insertedIntoTree): Ditto.
        (WebCore::ContainerNodeImpl::removedFromTree): Ditto.
        * khtml/xml/ContainerNodeImpl.h: Removed unused checkSameDocument and checkIsChild.
        Made more things private, updated parameters for NodeImpl functions.

        * khtml/html/HTMLSelectElementImpl.cpp:
        (DOM::HTMLSelectElementImpl::insertBefore): Ditto.
        (DOM::HTMLSelectElementImpl::replaceChild): Ditto.
        (DOM::HTMLSelectElementImpl::removeChild): Ditto.
        (DOM::HTMLSelectElementImpl::appendChild): Ditto.
        (DOM::HTMLSelectElementImpl::addChild): Ditto.
        * khtml/html/HTMLSelectElementImpl.h: Ditto.

        * khtml/html/HTMLOptGroupElementImpl.cpp:
        (WebCore::HTMLOptGroupElementImpl::insertBefore): Updated for parameter type change.
        Also changed to look at return value, not exception code, to check for success.
        (WebCore::HTMLOptGroupElementImpl::replaceChild): Ditto.
        (WebCore::HTMLOptGroupElementImpl::removeChild): Ditto.
        (WebCore::HTMLOptGroupElementImpl::appendChild): Ditto.
        (WebCore::HTMLOptGroupElementImpl::addChild): Ditto.
        * khtml/html/HTMLOptGroupElementImpl.h: Ditto.

        * WebCore+SVG/kdom.h: Renamed enum from ExceptionCode to ExceptionCodes
        to avoid conflict with a typedef ExceptionCode I added.

        * bindings/objc/DOM.mm:
        (-[DOMNode insertBefore::]): Added get() call since return value is a PassRefPtr.
        (-[DOMNode replaceChild::]): Ditto.
        (-[DOMNode removeChild:]): Ditto.
        (-[DOMNode appendChild:]): Ditto.

        * khtml/ecma/kjs_dom.h: Changed getDOMNode to take PassRefPtr.
        * khtml/ecma/kjs_dom.cpp: (KJS::getDOMNode): Changed to take PassRefPtr.

        * khtml/html/HTMLElementImpl.cpp: Added dom2_events.h include, now needed.
        Re-sorted includes.
        * ksvg2/svg/SVGElementImpl.cpp: Ditto.

        * khtml/html/html_documentimpl.cpp: (WebCore::HTMLDocumentImpl::documentElement):
        Changed access to now-private data member _first to equivalent inline function
        fastFirstChild().
        * khtml/xml/DocumentImpl.cpp: (WebCore::DocumentImpl::recalcStyle): Ditto.
        * khtml/xml/dom_elementimpl.cpp: (WebCore::ElementImpl::recalcStyle): Ditto.

        * khtml/html/html_tableimpl.cpp:
        (WebCore::HTMLTableElementImpl::setCaption): Updated to work with new replaceChild
        that returns PassRefPtr.
        (WebCore::HTMLTableElementImpl::setTHead): Ditto.
        (WebCore::HTMLTableElementImpl::setTFoot): Ditto.
        (WebCore::HTMLTableElementImpl::setTBody): Ditto.
        (WebCore::HTMLTableElementImpl::addChild): Updated for parameter type change.
        (WebCore::HTMLTableSectionElementImpl::addChild): Ditto.
        (WebCore::HTMLTableRowElementImpl::addChild): Ditto.
        * khtml/html/html_tableimpl.h: Ditto.

        * khtml/html/htmlparser.cpp: (HTMLParser::handleResidualStyleCloseTagAcrossBlocks):
        Removed an unneeded explicit call to removeChild. appendChild already takes care of
        removing the child from its own location. This avoids the fact that removeChild was
        removing the parent, the only thing keeping the node alive. This is sort of the
        "flip side" of our removeChild leaks -- code that depended on the behavior that
        caused the leaks.

        * khtml/xml/xml_tokenizer.cpp: (WebCore::XMLTokenizer::startElementNs):
        Removed unneeded isHTMLElement() calls from before the "qualified name" change.

2006-01-22  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by anders.

        Remove WebCore-no-SVG target and wrap files in #if SVG_SUPPORT
        http://bugs.webkit.org/show_bug.cgi?id=6633

2006-01-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=6642
          Split XMLHttpRequest class into JS binding and implementation

        * WebCore.xcodeproj/project.pbxproj: Adjusted for moved and renamed files.
        New group "xml" to match directory structure.
        * xml: Added.
        * khtml/ecma/JSXMLHttpRequest.cpp: Added.
        * khtml/ecma/JSXMLHttpRequest.h: Added.
        * khtml/ecma/xmlhttprequest.cpp: Removed.
        * khtml/ecma/xmlhttprequest.h: Removed.
        * xml/xmlhttprequest.cpp: Added.
        * xml/xmlhttprequest.h: Added.
        * khtml/ecma/kjs_binding.cpp:
        (KJS::jsStringOrUndefined): Moved from kjs_events.cpp.
        * khtml/ecma/kjs_binding.h: Added prototype for jsStringOrUndefined().
        * khtml/ecma/kjs_events.cpp: Removed jsStringOrUndefined().
        * khtml/ecma/kjs_window.cpp: 
        (KJS::Window::getValueProperty): Use new class name for JSXMLHttpRequest.
        * kwq/KWQSlot.cpp: XMLHttpRequestQObject is now in WebCore, not KJS.
        * page/Frame.cpp:
        (Frame::stopLoading): XMLHttpRequest is now in WebCore, not KJS.

2006-01-22  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Add support for custom fill/strokes on text.
        http://bugs.webkit.org/show_bug.cgi?id=6448
        
        40+ layout tests already cover this.

        * kcanvas/RenderSVGText.cpp:
        (RenderSVGText::paint): use new painter setup/teardown infrastructure
        * kcanvas/device/KRenderingPaintServer.h:
        (KRenderingPaintServer::KRenderingPaintServer):
        (KRenderingPaintServer::setup):
        (KRenderingPaintServer::render):
        (KRenderingPaintServer::teardown):
        (KRenderingPaintServer::isPaintingText):
        (KRenderingPaintServer::setPaintingText):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (setupShadingWithStyle):
        (renderShadingWithStyle):
        (teardownShadingWithStyle):
        (KRenderingPaintServerLinearGradientQuartz::draw):
        (KRenderingPaintServerLinearGradientQuartz::setup):
        (KRenderingPaintServerLinearGradientQuartz::render):
        (KRenderingPaintServerLinearGradientQuartz::teardown):
        (KRenderingPaintServerRadialGradientQuartz::draw):
        (KRenderingPaintServerRadialGradientQuartz::setup):
        (KRenderingPaintServerRadialGradientQuartz::render):
        (KRenderingPaintServerRadialGradientQuartz::teardown):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        (KRenderingPaintServerPatternQuartz::KRenderingPaintServerPatternQuartz):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerQuartzHelper::strokePath):
        (KRenderingPaintServerQuartzHelper::clipToStrokePath):
        (KRenderingPaintServerQuartzHelper::fillPath):
        (KRenderingPaintServerQuartzHelper::clipToFillPath):
        (KRenderingPaintServerSolidQuartz::draw):
        (KRenderingPaintServerSolidQuartz::setup):
        (KRenderingPaintServerSolidQuartz::render):
        (KRenderingPaintServerSolidQuartz::teardown):
        (KRenderingPaintServerPatternQuartz::draw):
        (KRenderingPaintServerPatternQuartz::setup):
        (KRenderingPaintServerPatternQuartz::render):
        (KRenderingPaintServerPatternQuartz::teardown):
        * kcanvas/device/quartz/QuartzSupport.h: fix prototype
        * kcanvas/device/quartz/QuartzSupport.mm:
        (applyStrokeStyleToContext):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (KSVGPainterFactory::fillPaintServer):
        (KSVGPainterFactory::strokePaintServer):
        (KSVGPainterFactory::cssPrimitiveToLength):
        (KSVGPainterFactory::strokePainter):
        (KSVGPainterFactory::fillPainter):
        * ksvg2/misc/KCanvasRenderingStyle.h:

2006-01-21  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=3509
          REGRESSION(125-412) Portion of nested table is not painted correctly on cafepress site
          <rdar://problem/4039615> REGRESSION(125-188) Portion of nested table is not painted correctly on cafepress site

        * manual-tests/bugzilla-3509.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): Force repaint if the child didn't move but
        didn't repaint correctly during layout because it was not at its final position then.

2006-01-21  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=3869
        Should use HTML Image element instead of JS Image object
        <rdar://problem/3852987> JavaScript image.complete property never returns true (3869)

        * khtml/ecma/kjs_events.cpp:
        (KJS::ClipboardProtoFunc::callAsFunction):
        Don't check Image object. Instead, if the element passed in
        is an image element which isn't in any document, use its pixmap.
        
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::imageGetter):
        Add complete.
        
        (KJS::ImageConstructorImp::construct):
        Take a QPixmap instead of an Image.
        
        (KJS::KJS::Context2DFunction::callAsFunction):
        Remove usage of Image and use HTMLImageElementImpl instead.

        * khtml/ecma/kjs_html.h:
        Remove Image class.
        
        (KJS::HTMLElement::):
        Add ImgComplete.
        
        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLImageElementImpl::width):
        (WebCore::HTMLImageElementImpl::height):
        If the element has no renderer but its image size is known
        return that instead.
        
        (WebCore::HTMLImageElementImpl::complete):
        New function, returns true if an image has finished loading.
        
        * khtml/html/html_imageimpl.h:
        Add complete.
        
        * manual-tests/drag-image.html: Added.

2006-01-21  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - fixes http://bugs.webkit.org/show_bug.cgi?id=6691
        TinyMCE: strikethrough unimplemented
        
        * khtml/editing/jsediting.cpp:
        Add support for the "Strikethrough" command.
        
2006-01-21  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/dynamic/hovered-detach.html

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5983
          REGRESSION: onmouseover-powered navbar at MacNN renders incorrectly
          <rdar://problem/4403730> REGRESSION: onmouseover powered navbar renders incorrectly at macnn.com (5983)

        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::detach): Set m_hovered to false and set the document's
        hoverNode to an hovered ancestor that still has a renderer.
        * rendering/render_layer.cpp: Changed static method hoverAncestor() into a
        RenderObject instance method.
        (WebCore::commonAncestor):
        (WebCore::RenderLayer::updateHoverActiveState):
        * rendering/render_object.cpp: Ditto.
        (WebCore::RenderObject::hoverAncestor)
        * rendering/render_object.h: Ditto.

2006-01-20  David Hyatt  <hyatt@apple.com>

        Fix for bug 6666, pseudo-element rules incorrectly displayed
        in Web Inspector.
        
        Reviewed by darin

        Added fast/inspector/matchedrules.html as test case.

        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):

2006-01-20  Timothy Hatcher  <timothy@apple.com>

        Reviewed by John.

        Removes code that is no longer needed with the new Web Inspector.

        * bridge/mac/WebCoreFrameBridge.h: removes the WebCoreDOMTreeCopier protocol.
        * bridge/mac/WebCoreFrameBridge.mm: removes copyDOMNode:copier:

2006-01-21  Anders Carlsson  <andersca@mac.com>

        Reviewed by David Hyatt.

        Rename Frame::xmlDocImpl => Frame::document and
        Frame::replaceDocImpl => Frame::setDocument
        
        * bridge/mac/MacFrame.mm:
        (MacFrame::findString):
        (MacFrame::advanceToNextMisspelling):
        (MacFrame::nextKeyViewInFrame):
        (MacFrame::nextKeyViewInFrameHierarchy):
        (MacFrame::keyEvent):
        (MacFrame::dispatchCPPEvent):
        (MacFrame::setDisplaysWithFocusAttributes):
        (MacFrame::bodyBackgroundColor):
        (MacFrame::markMisspellings):
        (MacFrame::respondToChangedSelection):
        (MacFrame::setMarkedTextRange):
        (MacFrame::dashboardRegionsDictionary):
        (MacFrame::shouldClose):
        * bridge/mac/WebCoreFrameBridge.mm:
        (updateRenderingForBindings):
        (frameHasSelection):
        (-[WebCoreFrameBridge addData:]):
        (-[WebCoreFrameBridge didNotOpenURL:pageCache:]):
        (-[WebCoreFrameBridge saveDocumentState]):
        (-[WebCoreFrameBridge restoreDocumentState]):
        (-[WebCoreFrameBridge saveDocumentToPageCache]):
        (-[WebCoreFrameBridge _documentTypeString]):
        (-[WebCoreFrameBridge deselectAll]):
        (-[WebCoreFrameBridge reapplyStylesForDeviceType:]):
        (nowPrinting):
        (-[WebCoreFrameBridge _setupRootForPrinting:]):
        (-[WebCoreFrameBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebCoreFrameBridge copyDOMTree:]):
        (-[WebCoreFrameBridge URLWithAttributeString:]):
        (-[WebCoreFrameBridge unmarkAllMisspellings]):
        (-[WebCoreFrameBridge nextKeyView]):
        (-[WebCoreFrameBridge previousKeyView]):
        (-[WebCoreFrameBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge previousKeyViewInsideWebFrameViews]):
        (-[WebCoreFrameBridge DOMDocument]):
        (-[WebCoreFrameBridge baseURL]):
        (-[WebCoreFrameBridge domain]):
        (-[WebCoreFrameBridge numPendingOrLoadingRequests]):
        (-[WebCoreFrameBridge doneProcessingData]):
        (-[WebCoreFrameBridge selectionColor]):
        (-[WebCoreFrameBridge accessibilityTree]):
        (-[WebCoreFrameBridge setSelectedDOMRange:affinity:closeTyping:]):
        (-[WebCoreFrameBridge convertToNSRange:]):
        (-[WebCoreFrameBridge convertToDOMRange:]):
        (-[WebCoreFrameBridge replaceMarkedTextWithText:]):
        (-[WebCoreFrameBridge smartDeleteRangeForProposedRange:]):
        (-[WebCoreFrameBridge documentFragmentWithMarkupString:baseURLString:]):
        (-[WebCoreFrameBridge documentFragmentWithText:]):
        (-[WebCoreFrameBridge documentFragmentWithNodesAsParagraphs:]):
        (-[WebCoreFrameBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreFrameBridge insertLineBreak]):
        (-[WebCoreFrameBridge insertParagraphSeparator]):
        (-[WebCoreFrameBridge insertParagraphSeparatorInQuotedContent]):
        (-[WebCoreFrameBridge insertText:selectInsertedText:]):
        (-[WebCoreFrameBridge moveSelectionToDragCaret:smartMove:]):
        (-[WebCoreFrameBridge deleteSelectionWithSmartDelete:]):
        (-[WebCoreFrameBridge deleteKeyPressedWithSmartDelete:]):
        (-[WebCoreFrameBridge forwardDeleteKeyPressedWithSmartDelete:]):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLDocument::putValueProperty):
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::Window::getValueProperty):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::Window::isSafeScript):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::updateLayout):
        (KJS::ScheduledAction::execute):
        (KJS::Location::put):
        (KJS::LocationFunc::callAsFunction):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequestProtoFunc::callAsFunction):
        * khtml/editing/jsediting.cpp:
        * khtml/html/html_baseimpl.cpp:
        (WebCore::HTMLFrameElementImpl::contentDocument):
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::parentDocument):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::XSLTProcessorImpl::createDocumentFromSource):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject textUnderElement]):
        (-[KWQAccObject doAXTextMarkerForPosition:]):
        (-[KWQAccObject rendererForView:]):
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget):
        * page/Frame.cpp:
        (Frame::document):
        (Frame::setDocument):
        (Frame::setFocusNodeIfNeeded):
        (Frame::isPointInsideSelection):
        (Frame::computeAndSetTypingStyle):
        (Frame::applyStyle):
        (Frame::applyParagraphStyle):
        (Frame::selectionComputedStyle):
        (Frame::selectFrameElementInParentIfFullySelected):
        (Frame::renderer):
        (Frame::scrollOverflow):
        (Frame::paint):
        (Frame::adjustPageHeight):
        (Frame::updatePolicyBaseURL):
        (Frame::setPolicyBaseURL):
        (Frame::forceLayoutWithPageWidthRange):
        (Frame::sendScrollEvent):
        (Frame::clearTimers):
        (Frame::styleForSelectionStart):
        (Frame::setSelectionFromNone):
        (Frame::setWindowHasFocus):
        (Frame::backslashAsCurrencySymbol):
        * page/Frame.h:
        * page/FrameView.cpp:
        (FrameView::~FrameView):
        (FrameView::clear):
        (FrameView::resizeEvent):
        (FrameView::adjustViewSize):
        (FrameView::layout):
        (FrameView::updateDashboardRegions):
        (FrameView::viewportMousePressEvent):
        (FrameView::viewportMouseDoubleClickEvent):
        (FrameView::viewportMouseMoveEvent):
        (FrameView::viewportMouseReleaseEvent):
        (FrameView::keyPressEvent):
        (FrameView::dispatchDragEvent):
        (FrameView::updateDragAndDrop):
        (FrameView::focusNextPrevNode):
        (FrameView::dispatchMouseEvent):
        (FrameView::viewportWheelEvent):
        (FrameView::timerEvent):
        (FrameView::scheduleRelayout):
        (FrameView::unscheduleRelayout):
        * rendering/render_frames.cpp:
        (WebCore::RenderPartObject::updateWidget):

2006-01-20  Chris Petersen  <cpetersen@apple.com>

        Reviewed by eseidel.

        Build fix.

        * khtml/xml/DocumentImpl.cpp:

2006-01-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Unbreak build (partial commit of animation patch)

        * khtml/xml/DocumentImpl.cpp:
        (WebCore::DocumentImpl::implicitClose):
        * khtml/xml/DocumentImpl.h:

2006-01-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Missed the kcanvas directory in my previous commit.
        http://bugs.webkit.org/show_bug.cgi?id=6683

        * kcanvas/KCanvasContainer.h:
        * kcanvas/RenderForeignObject.h:
        * kcanvas/RenderSVGText.h:

2006-01-20  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/overflow/image-selection-highlight.html

        Reviewed by Darin, committed by Adele.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6673
          Selection highlight doesn't scroll along with an image contained in an overflow:scroll block

        * rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::selectionRect): Subtract the containing block's scroll offset.

2006-01-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by beth.

        Break classes in render_table out into separate files.
        Move render_block to RenderBlock.
        Move render_container to RenderContainer.
        http://bugs.webkit.org/show_bug.cgi?id=6683

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        * kcanvas/KCanvasContainer.h:
        * kcanvas/RenderForeignObject.h:
        * kcanvas/RenderSVGText.h:
        * khtml/editing/visible_units.cpp:
        * khtml/html/html_tableimpl.cpp:
        (WebCore::HTMLTableElementImpl::insertRow):
        * khtml/xml/dom2_rangeimpl.cpp:
        * khtml/xml/dom_position.cpp:
        * kwq/KWQRenderTreeDebug.cpp:
        * page/Frame.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.cpp: Added.
        * rendering/RenderBlock.h: Added.
        * rendering/RenderContainer.cpp: Added.
        (WebCore::RenderContainer::addChild):
        * rendering/RenderContainer.h: Added.
        * rendering/RenderTable.cpp: Added.
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::updateFirstLetter):
        * rendering/RenderTable.h: Added.
        * rendering/RenderTableCell.cpp: Added.
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::updateFromElement):
        * rendering/RenderTableCell.h: Added.
        * rendering/RenderTableCol.cpp: Added.
        (WebCore::RenderTableCol::RenderTableCol):
        (WebCore::RenderTableCol::updateFromElement):
        * rendering/RenderTableCol.h: Added.
        * rendering/RenderTableRow.cpp: Added.
        (WebCore::RenderTableRow::RenderTableRow):
        * rendering/RenderTableRow.h: Added.
        * rendering/RenderTableSection.cpp: Added.
        (WebCore::RenderTableSection::RenderTableSection):
        * rendering/RenderTableSection.h: Added.
        * rendering/RenderText.cpp:
        * rendering/bidi.cpp:
        * rendering/render_block.cpp: Removed.
        * rendering/render_block.h: Removed.
        * rendering/render_box.cpp:
        * rendering/render_canvas.h:
        * rendering/render_container.cpp: Removed.
        * rendering/render_container.h: Removed.
        * rendering/render_flexbox.h:
        * rendering/render_flow.cpp:
        * rendering/render_flow.h:
        * rendering/render_form.h:
        * rendering/render_frames.h:
        * rendering/render_inline.cpp:
        * rendering/render_inline.h:
        * rendering/render_line.cpp:
        * rendering/render_list.h:
        * rendering/render_object.cpp:
        * rendering/render_replaced.h:
        * rendering/render_table.cpp: Removed.
        * rendering/render_table.h: Removed.
        * rendering/table_layout.cpp:

2006-01-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        <embed> and <object> tags show up blank when going back/forward.
        http://bugs.webkit.org/show_bug.cgi?id=6679

        No test currently possible.

        * page/Frame.cpp:
        (Frame::canCachePage):

2006-01-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Split html_miscimpl.* into separate files and move html_elementimpl
        http://bugs.webkit.org/show_bug.cgi?id=6670

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        * bindings/objc/DOMHTML.mm:
        * bridge/mac/WebCoreFrameBridge.mm:
        * css/css_valueimpl.cpp:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/editing/apply_style_command.cpp:
        * khtml/editing/markup.cpp:
        * khtml/editing/replace_selection_command.cpp:
        * khtml/html/HTMLBaseFontElementImpl.cpp: Added.
        * khtml/html/HTMLBaseFontElementImpl.h: Added.
        * khtml/html/HTMLButtonElementImpl.cpp:
        * khtml/html/HTMLCollectionImpl.cpp: Added.
        (WebCore::HTMLCollectionImpl::traverseNextItem):
        * khtml/html/HTMLCollectionImpl.h: Added.
        * khtml/html/HTMLElementImpl.cpp: Added.
        * khtml/html/HTMLElementImpl.h: Added.
        * khtml/html/HTMLFieldSetElementImpl.cpp:
        * khtml/html/HTMLFormCollectionImpl.cpp: Added.
        * khtml/html/HTMLFormCollectionImpl.h: Added.
        * khtml/html/HTMLFormElementImpl.cpp:
        * khtml/html/HTMLFormElementImpl.h:
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        * khtml/html/HTMLGenericFormElementImpl.h:
        * khtml/html/HTMLInputElementImpl.cpp:
        * khtml/html/HTMLIsIndexElementImpl.cpp:
        * khtml/html/HTMLLabelElementImpl.h:
        * khtml/html/HTMLLegendElementImpl.cpp:
        * khtml/html/HTMLNameCollectionImpl.cpp: Added.
        * khtml/html/HTMLNameCollectionImpl.h: Added.
        * khtml/html/HTMLOptGroupElementImpl.cpp:
        * khtml/html/HTMLOptGroupElementImpl.h:
        * khtml/html/HTMLOptionElementImpl.h:
        * khtml/html/HTMLSelectElementImpl.cpp:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_baseimpl.h:
        * khtml/html/html_blockimpl.cpp:
        * khtml/html/html_blockimpl.h:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_elementimpl.cpp: Removed.
        * khtml/html/html_elementimpl.h: Removed.
        * khtml/html/html_headimpl.cpp:
        (WebCore::HTMLLinkElementImpl::setStyleSheet):
        (WebCore::HTMLLinkElementImpl::isLoading):
        * khtml/html/html_headimpl.h:
        * khtml/html/html_imageimpl.cpp:
        * khtml/html/html_inlineimpl.cpp:
        * khtml/html/html_inlineimpl.h:
        * khtml/html/html_listimpl.h:
        * khtml/html/html_miscimpl.cpp: Removed.
        * khtml/html/html_miscimpl.h: Removed.
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/html_tableimpl.h:
        * khtml/html/htmlfactory.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/html/htmltokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        * khtml/xml/DocumentImpl.cpp:
        * khtml/xml/dom2_rangeimpl.cpp:
        * khtml/xml/dom_elementimpl.cpp:
        * kwq/KWQAccObject.mm:
        * loader/loader.cpp:
        * page/Frame.cpp:
        (Frame::restoreURL):
        (Frame::stopLoading):
        (Frame::receivedFirstData):
        (Frame::gotoAnchor):
        (Frame::requestObject):
        (Frame::processObjectRequest):
        (Frame::submitForm):
        (Frame::slotParentCompleted):
        (Frame::findFrame):
        (Frame::executeScript):
        * page/FrameView.cpp:
        (FrameView::useSlowRepaints):
        * rendering/render_applet.cpp:
        * rendering/render_applet.h:
        * rendering/render_box.cpp:
        (WebCore::RenderBox::contentWidth):
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::getClipRect):
        (WebCore::RenderBox::calcWidth):
        (WebCore::RenderBox::calcHeight):
        * rendering/render_canvasimage.cpp:
        * rendering/render_canvasimage.h:
        * rendering/render_frames.cpp:
        * rendering/render_image.cpp:
        * rendering/render_image.h:
        * rendering/render_layer.cpp:

2006-01-19  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6653
        CSSStyleDeclaration returns empty string when trying to access shorthand 
        properties using JS accessors.
        
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::cssPropertyGetter):
        if getCSSPropertyValue returns 0 (which is true for shorthand properties), 
        try getPropertyValue instead.

2006-01-19  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt and Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6665
        Implement NSView-less version of <input type="text">
        
        Initial implementation of new and improved text fields.  
        This will only be turned on if an input element has khtml-appearance: textfield.

        * WebCore.xcodeproj/project.pbxproj: Added RenderTextField.h and RenderTextField.cpp
        * css/cssvalues.in: Fixed omitted button-bevel value.  
          This was causing an off-by-one error when getting khtml-appearance value.
        * khtml/html/HTMLInputElementImpl.cpp: Added checks for khtml-appearance to decide 
          when to use RenderTextField instead of RenderLineEdit.
        (DOM::HTMLInputElementImpl::selectionStart):
        (DOM::HTMLInputElementImpl::selectionEnd):
        (DOM::HTMLInputElementImpl::setSelectionStart):
        (DOM::HTMLInputElementImpl::setSelectionEnd):
        (DOM::HTMLInputElementImpl::select):
        (DOM::HTMLInputElementImpl::setSelectionRange):
        (DOM::HTMLInputElementImpl::createRenderer):
        (DOM::HTMLInputElementImpl::defaultEventHandler):
        * khtml/html/HTMLInputElementImpl.h:
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::isFocusable): Also allow editable elements with no parent to be focusable.
        * khtml/xml/NodeImpl.h:
        (WebCore::NodeImpl::setAttached): Added to set m_attached without having to call attach().
        * rendering/RenderTextField.cpp: Added.
        (khtml:::RenderBlock):
        (khtml::RenderTextField::~RenderTextField):
        (khtml::RenderTextField::addChild):
        (khtml::RenderTextField::removeChild):
        (khtml::RenderTextField::setStyle):
        (khtml::RenderTextField::getDivStyle):
        (khtml::RenderTextField::updateFromElement):
        (khtml::RenderTextField::selectionStart):
        (khtml::RenderTextField::selectionEnd):
        (khtml::RenderTextField::setSelectionStart):
        (khtml::RenderTextField::setSelectionEnd):
        (khtml::RenderTextField::select):
        (khtml::RenderTextField::setSelectionRange):
        * rendering/RenderTextField.h: Added.
        (khtml::RenderTextField::removeLeftoverAnonymousBoxes):
        (khtml::RenderTextField::renderName):
        * rendering/render_container.cpp:
        (RenderContainer::destroy): use renamed destroyLeftoverChildren.
        (RenderContainer::destroyLeftoverChildren): renamed from destroyLeftoverAnonymousChildren.
        * rendering/render_container.h:
        * rendering/render_flow.cpp:
        (RenderFlow::destroy): use renamed destroyLeftoverChildren.

2006-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - removed all use of QMap

        * ForwardingHeaders/qmap.h: Removed.
        * WebCore.xcodeproj/project.pbxproj: Removed KWQMap.h, KWQMapImpl.h, KWQMapImpl.cpp.
        * kwq/KWQMap.h: Removed.
        * kwq/KWQMapImpl.cpp: Removed.
        * kwq/KWQMapImpl.h: Removed.

        * bridge/BrowserExtension.h: (WebCore::URLArgs::metaData): Converted from QMap of QString
        to HashMap of DOMString.
        * bridge/mac/BrowserExtensionMac.mm: Ditto.
        * bridge/mac/MacFrame.mm:
        (MacFrame::openURLRequest): Ditto.
        (MacFrame::urlSelected): Ditto.
        (MacFrame::createPart): Ditto.
        * khtml/ecma/kjs_window.cpp:
        (KJS::parseModalDialogFeatures): Ditto.
        (KJS::boolFeature): Ditto.
        (KJS::intFeature): Ditto.
        (KJS::createNewWindow): Ditto.
        (KJS::showModalDialog): Ditto.
        (KJS::WindowFunc::callAsFunction): Ditto.
        * khtml/html/html_objectimpl.cpp: (WebCore::HTMLAppletElementImpl::createRenderer): Ditto.
        * khtml/xml/dom_xmlimpl.cpp: (DOM::ProcessingInstructionImpl::checkStyleSheet): Ditto.
        * khtml/xml/xml_tokenizer.cpp:
        (WebCore::toString): Added. Converts to DOMString instead of QString.
        (WebCore::attributesStartElementNsHandler): Converted from QMap of QString to HashMap of DOMString.
        (WebCore::parseAttributes): Ditto.
        * khtml/xml/xml_tokenizer.h: (WebCore::Tokenizer::setTransformSource): Ditto.
        * ksvg2/misc/KSVGTimeScheduler.cpp: (KSVG::SVGTimer::notifyAll): Ditto.
        * kwq/KWQKJavaAppletWidget.h: Ditto.
        * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::KJavaAppletWidget): Ditto.
        * kwq/KWQKJobClasses.h: Ditto.
        * kwq/KWQKJobClasses.mm: (KIO::TransferJob::addMetaData): Ditto.
        * page/Frame.cpp:
        (Frame::didOpenURL): Ditto.
        (Frame::changeLocation): Ditto.
        (Frame::mark): Ditto.
        (Frame::setMark): Ditto.
        (Frame::urlSelected): Ditto.
        (Frame::requestObject): Ditto.
        (Frame::processObjectRequest): Ditto.
        (Frame::submitForm): Ditto.
        * rendering/render_applet.cpp:
        (WebCore::RenderApplet::RenderApplet): Ditto.
        (WebCore::RenderApplet::createWidgetIfNecessary): Ditto.
        (WebCore::RenderApplet::layout): Ditto.
        * rendering/render_applet.h:
        (WebCore::RenderApplet::renderName): Ditto.
        (WebCore::RenderApplet::element): Ditto.
        (WebCore::RenderEmptyApplet::renderName): Ditto.

        * khtml/dom/dom_string.h:
        (WebCore::DOMString::createCFString): Added. Not yet implemented or used.
        (WebCore::DOMString::operator NSString*): Updated to call through to DOMStringImpl.
        Added hash functions and hash traits so you can use DOMString in hash tables.
        * khtml/xml/dom_stringimpl.h: Added conversion to and from CFStringRef/NSString.
        * khtml/xml/dom_stringimpl.cpp: Took out an excess "DOM::".

        * bindings/objc/DOMInternal.mm: (DOMStringImpl::operator NSString *): Moved from DOMString
        to DOMStringImpl.

        - changed the mark from a SelectionController to a Selection
          (maybe it can be a Position instead?)

        * page/Frame.h: Changed mark() and setMark() to use a Selection.
        * page/FramePrivate.h: Changed mark to a Selection.

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge setMarkDOMRange:]):
        Updated for change from SelectionController to Selection.

        - removed extraneous includes

        * kwq/KWQKHTMLSettings.h: Removed include of "KWQMap.h".
        * kwq/KWQKIOGlobal.h: Ditto.

        * khtml/editing/htmlediting.h: Removed extraneous includes and namespace prefixes.

        * khtml/html/html_canvasimpl.h: Removed extraneous includes and moved into the
        WebCore namespace.
        * khtml/html/html_canvasimpl.cpp: Ditto.
        * khtml/html/htmltokenizer.cpp: Ditto.
        * khtml/html/htmltokenizer.h: Ditto.
        * khtml/xml/DocumentImpl.cpp: Ditto.
        * kwq/KWQEditCommand.mm: Ditto.
        * rendering/render_canvasimage.h: Ditto.
        * rendering/render_image.h: Ditto.

        * khtml/editing/composite_edit_command.cpp: Updated includes because of ones
        that were removed from headers.
        * khtml/editing/htmlediting.cpp: Ditto.
        * khtml/editing/jsediting.cpp: Ditto.
        * khtml/editing/replace_selection_command.cpp: Ditto.
        * rendering/render_canvasimage.cpp: Ditto.
        * rendering/render_image.cpp: Ditto.

        * loader/loader.cpp: (WebCore::Loader::servePendingRequests): Removed code to add the
        cache control string, since that was hardcoded to empty string anyway.

2006-01-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin & anders.

        Fix opacity crasher for <text> and <image>.
        http://bugs.webkit.org/show_bug.cgi?id=6668
        Even though the crash is fixed, opacity still doesn't work.
        http://bugs.webkit.org/show_bug.cgi?id=6669
        
        Test: svg/custom/text-image-opacity.svg

        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::paint):
        * kcanvas/RenderSVGText.cpp:
        (RenderSVGText::paint):

2006-01-19  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove CFDictionary usage from KWQObject.*
        http://bugs.webkit.org/show_bug.cgi?id=6468

        * kwq/KWQObject.cpp:
        (KWQObjectTimer::KWQObjectTimer):
        (QObject::restartTimer):
        (QObject::timerIntervals):
        (KWQObjectTimer::deleteTimer):
        (QObject::killTimer):
        (QObject::killTimers):
        (sendDeferredTimerEvent):

2006-01-18  David Hyatt <hyatt@apple.com

        Fix for bug 6657, remove all uses of MacFrame from cross-platform
        code.  Also remove uses of BrowserExtensionMac (and make the
        frame responsible for instantiation of the appropriate
        platform-specific object).

        Also #ifdef out all the Dashboard code in the engine for non-Apple
        platforms.

        Reviewed by anders

        * ForwardingHeaders/khtml_ext.h: Removed.
        * ForwardingHeaders/kparts/browserextension.h: Removed.
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * bridge/BrowserExtension.h: Added.
        (WebCore::BrowserExtension::BrowserExtension):
        * bridge/mac/BrowserExtensionMac.h: Added.
        * bridge/mac/BrowserExtensionMac.mm: Added.
        * bridge/mac/KWQKHTMLPartBrowserExtension.h: Removed.
        * bridge/mac/KWQKHTMLPartBrowserExtension.mm: Removed.
        * bridge/mac/KWQKPartsBrowserExtension.h: Removed.
        * bridge/mac/MacFrame.h:
        (MacFrame::createBrowserExtension):
        (MacFrame::markedTextRange):
        * css/css_computedstyle.cpp:
        (DOM::):
        (DOM::CSSComputedStyleDeclarationImpl::getPropertyCSSValue):
        * css/css_valueimpl.cpp:
        (WebCore::CSSPrimitiveValueImpl::cleanup):
        (WebCore::CSSPrimitiveValueImpl::cssText):
        * css/css_valueimpl.h:
        (DOM::CSSPrimitiveValueImpl::):
        * css/cssparser.cpp:
        (CSSParser::parseValue):
        * css/cssparser.h:
        * css/cssstyleselector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::getValueProperty):
        * khtml/ecma/kjs_proxy.cpp:
        (KJSProxyImpl::evaluate):
        (KJSProxyImpl::initScript):
        * khtml/ecma/kjs_window.cpp:
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::Window::scheduleClose):
        (KJS::Window::isSafeScript):
        (KJS::parseWindowFeatures):
        (KJS::constrainToVisible):
        (KJS::WindowFunc::callAsFunction):
        (KJS::ScheduledAction::execute):
        (KJS::BarInfo::getValueProperty):
        (KJS::History::getValueProperty):
        * khtml/editing/jsediting.cpp:
        * khtml/editing/typing_command.cpp:
        (khtml::TypingCommand::markMisspellingsAfterTyping):
        * khtml/html/HTMLFormElementImpl.cpp:
        (DOM::HTMLFormElementImpl::formData):
        (DOM::HTMLFormElementImpl::submit):
        * khtml/html/html_objectimpl.cpp:
        (DOM::HTMLAppletElementImpl::getAppletInstance):
        (DOM::HTMLEmbedElementImpl::getEmbedInstance):
        (DOM::HTMLObjectElementImpl::getObjectInstance):
        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::updateTitle):
        (DocumentImpl::implicitClose):
        (DocumentImpl::referrer):
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::ElementImpl::focus):
        * page/Frame.cpp:
        (Frame::init):
        (Frame::didOpenURL):
        (Frame::browserExtension):
        (Frame::begin):
        (Frame::scheduleHistoryNavigation):
        (Frame::changeLocation):
        (Frame::setSelection):
        (Frame::urlSelected):
        (Frame::requestFrameName):
        (Frame::requestObject):
        (Frame::processObjectRequest):
        (Frame::submitForm):
        (Frame::slotChildCompleted):
        (Frame::shouldChangeSelection):
        (Frame::appliedEditing):
        (Frame::unappliedEditing):
        (Frame::reappliedEditing):
        (Frame::copyToPasteboard):
        (Frame::cutToPasteboard):
        (Frame::pasteFromPasteboard):
        (Frame::pasteAndMatchStyle):
        (Frame::transpose):
        (Frame::redo):
        (Frame::undo):
        (Frame::paint):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (KHTMLView::layout):
        (KHTMLView::updateDashboardRegions):
        (KHTMLView::viewportMousePressEvent):
        (KHTMLView::viewportMouseDoubleClickEvent):
        (KHTMLView::viewportMouseMoveEvent):
        (KHTMLView::viewportMouseReleaseEvent):
        (KHTMLView::mediaType):
        (KHTMLView::viewportWheelEvent):
        * page/FrameView.h:
        * rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        * rendering/render_form.cpp:
        * rendering/render_layer.cpp:
        (khtml::RenderLayer::scrollToOffset):
        (khtml::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/render_object.cpp:
        (WebCore::RenderObject::setStyle):
        * rendering/render_replaced.cpp:

2006-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - change KWQList to use qsort instead of CFArraySort

        * kwq/KWQListImpl.cpp:
        (compareFuncWrapper): Wrapper that uses global variables to overcome the lack
        of a "data" pointer in qsort. Could have used qsort_r but that would be less portable.
        (KWQListImpl::sort): Use qsort instead of CFArraySortValues.

2006-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - changed the three signal/slot related files from ObjC++ to C++ files

        * WebCore.xcodeproj/project.pbxproj:
        * kwq/KWQSignal.cpp: Added.
        * kwq/KWQSignal.mm: Removed.
        * kwq/KWQSignalStubs.cpp: Added.
        * kwq/KWQSignalStubs.mm: Removed.
        * kwq/KWQSlot.cpp: Added.
        * kwq/KWQSlot.mm: Removed.

2006-01-18  David Hyatt <hyatt@apple.com>
        
        Make Win32 build again.  Update the scripts and deal
        with all the recent file moves.

        Reviewed by xenon

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * rendering/render_container.cpp:
        * rendering/render_object.cpp:

2006-01-18  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/overflow/overflow-rtl-inline-scrollbar.html

        Reviewed by Hyatt.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6618
          Inline in RTL block with overflow:auto and left border makes scroll bar appear
        
        Inline flows were always returning 0 for leftmostPosition(). Their real leftmost
        edges are determined by their inline boxes, which
        RenderBlock::leftmostPosition already takes into account.

        * khtml/rendering/render_flow.cpp:
        (RenderFlow::lowestPosition): Don't descend into inline flows.
        (RenderFlow::rightmostPosition): Ditto.
        (RenderFlow::leftmostPosition): Ditto.

2006-01-18  Anders Carlsson  <andersca@mac.com>

        Fix build.
        
        * khtml/ecma/kjs_navigator.cpp:
        * page/FrameView.cpp:
        Remove kstandarddirs.h includes.
        
2006-01-18  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6646
          compile CSS sources in instead of reading them from disk

        * css/make-css-file-arrays.pl: Added. Used to generate C array forms of the ".css" files.
        * css/UserAgentStyleSheets.cpp: Added. Used to indirectly compile the generated file.

        * WebCore.xcodeproj/project.pbxproj: Added new source files. Added a build phase to
        invoke the make-css-file-arrays.pl script. Removed the .css files, which no longer need
        to be installed as part of the final package.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Added new files.
        * WebCore.vcproj/WebCore/build-generated-files.sh: Added make-css-file-arrays.pl script
        section; not tested.

        * css/cssstyleselector.cpp: (WebCore::parseUASheet): Removed code to read user agent
        sheets from disk. Replaced with code that gets them from compiled-in arrays instead.
        Uses a pretty lame DOMString hack that could be reworked some day.
        (WebCore::CSSStyleSelector::loadDefaultStyle): Change to load from arrays intead of disk.

        * css/html4.css: Added missing license header, tweaked format a bit.
        * css/quirks.css: Added missing license header, tweaked format.
        * css/svg.css: Moved from ksvg2/css directory.
        * ksvg2/css/svg.css: Moved to top level css directory.

        * page/Frame.cpp: Removed includes of qfile.h and kstandarddirs.h.

        * ForwardingHeaders/kstandarddirs.h: Removed.
        * ForwardingHeaders/qfile.h: Removed.
        * kwq/KWQFile.h: Removed.
        * kwq/KWQFile.mm: Removed.
        * kwq/KWQKStandardDirs.h: Removed.
        * kwq/KWQKStandardDirs.mm: Removed.

2006-01-17  Alexander Kellett  <lypanov@kde.org>

        Reviewed by Maciej.

        - Remove the now-unused KRenderingPaintServerImage[Quartz].

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasTreeDebug.cpp:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/KRenderingPaintServerImage.cpp: Removed.
        * kcanvas/device/KRenderingPaintServerImage.h: Removed.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        * kwq/KWQPainter.mm:

2006-01-17  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6377
          <rdar://problem/4400315> All XML crashes in TOT with JavaScript disabled (6377)

        * bridge/mac/MacFrame.mm:
        (MacFrame::bindingRootObject): Assert that this is only called when JavaScript is enabled.
        (MacFrame::windowScriptObject): Return 0 if JavaScript is disabled.
        (MacFrame::windowScriptNPObject): Ditto.
        (MacFrame::partClearedInBegin): Don't call the "window script object available" call if
        JavaScript is disabled.

2006-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=6632>
        REGRESSION: Selection includes spaces that it shouldn't
        <rdar://problem/4407845> 
        REGRESSION (TOT): blank space before found text selected at http://www.schepers.cc/comiclinks.html
        
        Layout test added:
        * editing/selection/after-line-wrap.html

        * khtml/editing/visible_position.cpp:
        (khtml::VisiblePosition::previous): Don't stop at the first candidate,
        it may be visually equivalent to the original position.
        * khtml/xml/dom_position.cpp:
        (DOM::Position::upstream): Don't move to a position on a different line.
        (DOM::Position::downstream): Ditto.

2006-01-17  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eric.
        
        Deployment builds now use -O2

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/html/htmltokenizer.cpp: Turned off inlining to fix
        link error.

2006-01-17  David Hyatt  <hyatt@apple.com>
       
        Move khtml/rendering to WebCore/rendering.

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/rendering: Removed.
        * khtml/rendering/DataRef.h: Removed.
        * khtml/rendering/InlineTextBox.cpp: Removed.
        * khtml/rendering/InlineTextBox.h: Removed.
        * khtml/rendering/RenderText.cpp: Removed.
        * khtml/rendering/RenderText.h: Removed.
        * khtml/rendering/RenderTextFragment.cpp: Removed.
        * khtml/rendering/RenderTextFragment.h: Removed.
        * khtml/rendering/bidi.cpp: Removed.
        * khtml/rendering/bidi.h: Removed.
        * khtml/rendering/break_lines.cpp: Removed.
        * khtml/rendering/break_lines.h: Removed.
        * khtml/rendering/font.cpp: Removed.
        * khtml/rendering/font.h: Removed.
        * khtml/rendering/render_applet.cpp: Removed.
        * khtml/rendering/render_applet.h: Removed.
        * khtml/rendering/render_arena.cpp: Removed.
        * khtml/rendering/render_arena.h: Removed.
        * khtml/rendering/render_block.cpp: Removed.
        * khtml/rendering/render_block.h: Removed.
        * khtml/rendering/render_box.cpp: Removed.
        * khtml/rendering/render_box.h: Removed.
        * khtml/rendering/render_br.cpp: Removed.
        * khtml/rendering/render_br.h: Removed.
        * khtml/rendering/render_button.cpp: Removed.
        * khtml/rendering/render_button.h: Removed.
        * khtml/rendering/render_canvas.cpp: Removed.
        * khtml/rendering/render_canvas.h: Removed.
        * khtml/rendering/render_canvasimage.cpp: Removed.
        * khtml/rendering/render_canvasimage.h: Removed.
        * khtml/rendering/render_container.cpp: Removed.
        * khtml/rendering/render_container.h: Removed.
        * khtml/rendering/render_flexbox.cpp: Removed.
        * khtml/rendering/render_flexbox.h: Removed.
        * khtml/rendering/render_flow.cpp: Removed.
        * khtml/rendering/render_flow.h: Removed.
        * khtml/rendering/render_form.cpp: Removed.
        * khtml/rendering/render_form.h: Removed.
        * khtml/rendering/render_frames.cpp: Removed.
        * khtml/rendering/render_frames.h: Removed.
        * khtml/rendering/render_image.cpp: Removed.
        * khtml/rendering/render_image.h: Removed.
        * khtml/rendering/render_inline.cpp: Removed.
        * khtml/rendering/render_inline.h: Removed.
        * khtml/rendering/render_layer.cpp: Removed.
        * khtml/rendering/render_layer.h: Removed.
        * khtml/rendering/render_line.cpp: Removed.
        * khtml/rendering/render_line.h: Removed.
        * khtml/rendering/render_list.cpp: Removed.
        * khtml/rendering/render_list.h: Removed.
        * khtml/rendering/render_object.cpp: Removed.
        * khtml/rendering/render_object.h: Removed.
        * khtml/rendering/render_replaced.cpp: Removed.
        * khtml/rendering/render_replaced.h: Removed.
        * khtml/rendering/render_style.cpp: Removed.
        * khtml/rendering/render_style.h: Removed.
        * khtml/rendering/render_table.cpp: Removed.
        * khtml/rendering/render_table.h: Removed.
        * khtml/rendering/render_theme.cpp: Removed.
        * khtml/rendering/render_theme.h: Removed.
        * khtml/rendering/render_theme_mac.h: Removed.
        * khtml/rendering/render_theme_mac.mm: Removed.
        * khtml/rendering/table_layout.cpp: Removed.
        * khtml/rendering/table_layout.h: Removed.
        * rendering: Added.
        * rendering/DataRef.h: Added.
        * rendering/InlineTextBox.cpp: Added.
        * rendering/InlineTextBox.h: Added.
        * rendering/RenderText.cpp: Added.
        * rendering/RenderText.h: Added.
        * rendering/RenderTextFragment.cpp: Added.
        * rendering/RenderTextFragment.h: Added.
        * rendering/bidi.cpp: Added.
        * rendering/bidi.h: Added.
        * rendering/break_lines.cpp: Added.
        * rendering/break_lines.h: Added.
        * rendering/font.cpp: Added.
        * rendering/font.h: Added.
        * rendering/render_applet.cpp: Added.
        * rendering/render_applet.h: Added.
        * rendering/render_arena.cpp: Added.
        * rendering/render_arena.h: Added.
        * rendering/render_block.cpp: Added.
        * rendering/render_block.h: Added.
        * rendering/render_box.cpp: Added.
        * rendering/render_box.h: Added.
        * rendering/render_br.cpp: Added.
        * rendering/render_br.h: Added.
        * rendering/render_button.cpp: Added.
        * rendering/render_button.h: Added.
        * rendering/render_canvas.cpp: Added.
        * rendering/render_canvas.h: Added.
        * rendering/render_canvasimage.cpp: Added.
        * rendering/render_canvasimage.h: Added.
        * rendering/render_container.cpp: Added.
        * rendering/render_container.h: Added.
        * rendering/render_flexbox.cpp: Added.
        * rendering/render_flexbox.h: Added.
        * rendering/render_flow.cpp: Added.
        * rendering/render_flow.h: Added.
        * rendering/render_form.cpp: Added.
        * rendering/render_form.h: Added.
        * rendering/render_frames.cpp: Added.
        * rendering/render_frames.h: Added.
        * rendering/render_image.cpp: Added.
        * rendering/render_image.h: Added.
        * rendering/render_inline.cpp: Added.
        * rendering/render_inline.h: Added.
        * rendering/render_layer.cpp: Added.
        * rendering/render_layer.h: Added.
        * rendering/render_line.cpp: Added.
        * rendering/render_line.h: Added.
        * rendering/render_list.cpp: Added.
        * rendering/render_list.h: Added.
        * rendering/render_object.cpp: Added.
        * rendering/render_object.h: Added.
        * rendering/render_replaced.cpp: Added.
        * rendering/render_replaced.h: Added.
        * rendering/render_style.cpp: Added.
        * rendering/render_style.h: Added.
        * rendering/render_table.cpp: Added.
        * rendering/render_table.h: Added.
        * rendering/render_theme.cpp: Added.
        * rendering/render_theme.h: Added.
        * rendering/render_theme_mac.h: Added.
        * rendering/render_theme_mac.mm: Added.
        * rendering/table_layout.cpp: Added.
        * rendering/table_layout.h: Added.

2006-01-17  David Hyatt  <hyatt@apple.com>

        Land support for a style method on DOMAttr from JS that will
        allow the Web Inspector to include presentational attributes
        in the style list.
        
        Reviewed by xenon

        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMAttr::getValueProperty):
        * khtml/ecma/kjs_dom.h:
        (KJS::DOMAttr::):

2006-01-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt and Darin

        Fix for <rdar://problem/4405836> REGRESSION: crash at webmail.aol.com 
        when deleting mail in khtml::RenderTableCell::collapsedBottomBorder() const 
        + 232

        RenderTableCell::collapsedBottomBorder() gets nextCell by calling 
        table()->cellBelow(this). In the case of the crash, cellBelow() returns 
        a pointer to a table cell that was already destroyed. cellBelow() thinks 
        that the pointer is still good because the grid of cells has not been updated 
        because all of this code is called through the hitTest and the hitTest does 
        not update the layout. The fix that I have is simply it have the hitTest call 
        updateLayout(). This is the only change in behavior. The rest of the patch 
        preserves behavior for simulated clicks. fast/events/stopPropagation-submit 
        caught this problem that arose from calling updateLayout() in the hitTest; 
        we should always have an x and y position of 0 for simulated clicks. This 
        preserves that behavior by keeping track of whether a click is simulated or not.

        * khtml/html/HTMLInputElementImpl.cpp:
        (DOM::HTMLInputElementImpl::defaultEventHandler): If the click is simulated, 
        set xPos and yPos to 0.
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::setContentEditable): Fix spacing.
        (HTMLElementImpl::click): It isn't necessary to check if there is a renderer.
        * khtml/rendering/render_layer.cpp:
        (khtml::RenderLayer::hitTest): Call updateLayout().
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::dispatchSimulatedMouseEvent): Set isSimulated to true.
        (WebCore::NodeImpl::dispatchMouseEvent): Keep track of isSimulated.
        * khtml/xml/NodeImpl.h: Same.
        * khtml/xml/dom2_eventsimpl.cpp:
        (DOM::MouseRelatedEventImpl::MouseRelatedEventImpl): Add isSimulated to
        MouseRelatedEventImpl().
        (DOM::MouseRelatedEventImpl::computePositions): Only change the offsets if 
        it's not simulated.
        (DOM::MouseEventImpl::MouseEventImpl): Add isSimulated to MouseEventImpl()
        * khtml/xml/dom2_eventsimpl.h: 
        (DOM::MouseRelatedEventImpl::isSimulated): Declarations of isSimulated
        (DOM::MouseEventImpl::isSimulated): Same.

2006-01-17  Duncan Wilcox  <duncan@mclink.it>

        Reviewed by Darin, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6609
          Use Selection instead of SelectionController where possible

        This patch replaces the use of SelectionController with Selection in the edit commands.

        It also cleans up the relationship between Selection and SelectionController: 
        SelectionController used to need to be friend to Selection to call validate() 
        on it, now validation is enforced on every update of Selection.

        * khtml/editing/Selection.cpp:
        (WebCore::Selection::Selection):
        (WebCore::Selection::expandUsingGranularity):
        (WebCore::Selection::validate):
        * khtml/editing/Selection.h:
        (WebCore::Selection::setExtent):
        (WebCore::Selection::granularity):
        (WebCore::operator==):
        * khtml/editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::expandUsingGranularity):
        (WebCore::SelectionController::clear):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        * khtml/editing/SelectionController.h:
        (WebCore::SelectionController::selection):
        * khtml/editing/apply_style_command.cpp:
        (WebCore::ApplyStyleCommand::updateStartEnd):
        (WebCore::ApplyStyleCommand::doApply):
        * khtml/editing/break_blockquote_command.cpp:
        (khtml::BreakBlockquoteCommand::doApply):
        * khtml/editing/composite_edit_command.cpp:
        (WebCore::CompositeEditCommand::deleteSelection):
        (WebCore::CompositeEditCommand::rebalanceWhitespace):
        * khtml/editing/composite_edit_command.h:
        * khtml/editing/delete_selection_command.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        (WebCore::DeleteSelectionCommand::clearTransientState):
        (WebCore::DeleteSelectionCommand::doApply):
        * khtml/editing/delete_selection_command.h:
        * khtml/editing/edit_command.cpp:
        (WebCore::EditCommandPtr::startingSelection):
        (WebCore::EditCommandPtr::endingSelection):
        (WebCore::EditCommandPtr::setStartingSelection):
        (WebCore::EditCommandPtr::setEndingSelection):
        (WebCore::EditCommand::EditCommand):
        (WebCore::EditCommand::setStartingSelection):
        (WebCore::EditCommand::setEndingSelection):
        * khtml/editing/edit_command.h:
        (WebCore::EditCommand::startingSelection):
        (WebCore::EditCommand::endingSelection):
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::doApply):
        * khtml/editing/insert_text_command.cpp:
        (khtml::InsertTextCommand::input):
        * khtml/editing/move_selection_command.cpp:
        (khtml::MoveSelectionCommand::doApply):
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplaceSelectionCommand::doApply):
        (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
        * khtml/editing/typing_command.cpp:
        (khtml::TypingCommand::deleteKeyPressed):
        (khtml::TypingCommand::forwardDeleteKeyPressed):
        * page/Frame.cpp:
        (Frame::appliedEditing):
        (Frame::unappliedEditing):
        (Frame::reappliedEditing):
        * page/Frame.h:

2006-01-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/dom/generic-form-element-assert.html

        Reviewed and reworked by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=5926
          Assertion failure in HTMLGenericFormElementImpl::removedFromTree

        * khtml/html/HTMLGenericFormElementImpl.cpp: Tweaked formatting and namespaces
        a bit. Removed unneeded includes.
        (WebCore::findRoot): Added helper function.
        (WebCore::HTMLGenericFormElementImpl::removedFromTree): Rewrote to do the check
        in a simpler way, since the two separate cases amounted to the same check.

2006-01-17  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Landed by eseidel.

        Fix second part of WebCore-no-SVG fails to build.
        http://bugs.webkit.org/show_bug.cgi?id=6607

        * WebCore.xcodeproj/project.pbxproj:
        Mark three headers as private rather than project in the WebCore-no-SVG target.

2006-01-17  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by hyatt

        * kwq/KWQVectorImpl.cpp:
        (KWQVectorImpl::append): Assign the new item to index m_count, not m_size.

2006-01-17  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel.  Landed by eseidel.

        WebCore-no-SVG fails to build.
        http://bugs.webkit.org/show_bug.cgi?id=6607

        * WebCore.xcodeproj/project.pbxproj:
        Fix build of WebCore-no-SVG target.  Removes SVG specific files and adds new
        files omitted from the target.

2006-01-16  David Hyatt  <hyatt@apple.com>

        (1) Fix build bustage by properly marking the moved Obj-C
        bindings files as private.
        (2) Move khtml/css to WebCore/css.
        (3) Eliminate the kdom/css forwarding headers.

        * ForwardingHeaders/kdom/css: Removed.
        * ForwardingHeaders/kdom/css/CSSPrimitiveValueImpl.h: Removed.
        * ForwardingHeaders/kdom/css/CSSStyleDeclarationImpl.h: Removed.
        * ForwardingHeaders/kdom/css/CSSStyleRuleImpl.h: Removed.
        * ForwardingHeaders/kdom/css/CSSStyleSelector.h: Removed.
        * ForwardingHeaders/kdom/css/CSSStyleSheetImpl.h: Removed.
        * ForwardingHeaders/kdom/css/CSSValueImpl.h: Removed.
        * ForwardingHeaders/kdom/css/CSSValueListImpl.h: Removed.
        * ForwardingHeaders/kdom/css/KDOMCSSParser.h: Removed.
        * ForwardingHeaders/kdom/css/MediaListImpl.h: Removed.
        * ForwardingHeaders/kdom/css/RGBColorImpl.h: Removed.
        * ForwardingHeaders/kdom/css/RenderStyle.h: Removed.
        * ForwardingHeaders/kdom/css/StyleSheetListImpl.h: Removed.
        * WebCore+SVG/RGBColorImpl.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * css: Added.
        * css/css_base.cpp: Added.
        * css/css_base.h: Added.
        * css/css_computedstyle.cpp: Added.
        * css/css_computedstyle.h: Added.
        * css/css_grammar.y: Added.
        * css/css_ruleimpl.cpp: Added.
        * css/css_ruleimpl.h: Added.
        * css/css_stylesheetimpl.cpp: Added.
        * css/css_stylesheetimpl.h: Added.
        * css/css_valueimpl.cpp: Added.
        * css/css_valueimpl.h: Added.
        * css/csshelper.cpp: Added.
        * css/csshelper.h: Added.
        * css/cssparser.cpp: Added.
        * css/cssparser.h: Added.
        * css/cssproperties.in: Added.
        * css/cssstyleselector.cpp: Added.
        * css/cssstyleselector.h: Added.
        * css/cssvalues.in: Added.
        * css/html4.css: Added.
        * css/makeprop: Added.
        * css/maketokenizer: Added.
        * css/makevalues: Added.
        * css/quirks.css: Added.
        * css/tokenizer.flex: Added.
        * khtml/css: Removed.
        * khtml/css/css_base.cpp: Removed.
        * khtml/css/css_base.h: Removed.
        * khtml/css/css_computedstyle.cpp: Removed.
        * khtml/css/css_computedstyle.h: Removed.
        * khtml/css/css_grammar.y: Removed.
        * khtml/css/css_ruleimpl.cpp: Removed.
        * khtml/css/css_ruleimpl.h: Removed.
        * khtml/css/css_stylesheetimpl.cpp: Removed.
        * khtml/css/css_stylesheetimpl.h: Removed.
        * khtml/css/css_valueimpl.cpp: Removed.
        * khtml/css/css_valueimpl.h: Removed.
        * khtml/css/csshelper.cpp: Removed.
        * khtml/css/csshelper.h: Removed.
        * khtml/css/cssparser.cpp: Removed.
        * khtml/css/cssparser.h: Removed.
        * khtml/css/cssproperties.in: Removed.
        * khtml/css/cssstyleselector.cpp: Removed.
        * khtml/css/cssstyleselector.h: Removed.
        * khtml/css/cssvalues.in: Removed.
        * khtml/css/html4.css: Removed.
        * khtml/css/makeprop: Removed.
        * khtml/css/maketokenizer: Removed.
        * khtml/css/makevalues: Removed.
        * khtml/css/quirks.css: Removed.
        * khtml/css/tokenizer.flex: Removed.
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        * ksvg2/ecma/Ecma.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        * ksvg2/svg/SVGClipPathElementImpl.cpp:
        * ksvg2/svg/SVGColorImpl.cpp:
        * ksvg2/svg/SVGColorImpl.h:
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * ksvg2/svg/SVGElementImpl.cpp:
        * ksvg2/svg/SVGGradientElementImpl.cpp:
        * ksvg2/svg/SVGMaskElementImpl.cpp:
        * ksvg2/svg/SVGStyleElementImpl.cpp:
        * ksvg2/svg/SVGStyledElementImpl.h:
        * ksvg2/svg/SVGTextElementImpl.cpp:

2006-01-16  David Hyatt  <hyatt@apple.com>

        Move the Objective-C dom bindings from kwq to bindings/objc.

        Reviewed by eseidel

        * WebCore.xcodeproj/project.pbxproj:
        * bindings: Added.
        * bindings/js: Added.
        * bindings/objc: Added.
        * bindings/objc/DOM.h: Added.
        * bindings/objc/DOM.mm: Added.
        * bindings/objc/DOMCSS.h: Added.
        * bindings/objc/DOMCSS.mm: Added.
        * bindings/objc/DOMCore.h: Added.
        * bindings/objc/DOMEvents.h: Added.
        * bindings/objc/DOMEvents.mm: Added.
        * bindings/objc/DOMEventsInternal.h: Added.
        * bindings/objc/DOMExtensions.h: Added.
        * bindings/objc/DOMHTML.h: Added.
        * bindings/objc/DOMHTML.mm: Added.
        * bindings/objc/DOMHTMLInternal.h: Added.
        * bindings/objc/DOMInternal.h: Added.
        * bindings/objc/DOMInternal.mm: Added.
        * bindings/objc/DOMPrivate.h: Added.
        * bindings/objc/DOMRange.h: Added.
        * bindings/objc/DOMStylesheets.h: Added.
        * bindings/objc/DOMTraversal.h: Added.
        * bindings/objc/DOMUtility.mm: Added.
        * bindings/objc/DOMViews.h: Added.
        * bindings/objc/DOMViews.mm: Added.
        * bindings/objc/DOMViewsInternal.h: Added.
        * kwq/DOM-CSS.mm: Removed.
        * kwq/DOM.h: Removed.
        * kwq/DOM.mm: Removed.
        * kwq/DOMCSS.h: Removed.
        * kwq/DOMCore.h: Removed.
        * kwq/DOMEvents.h: Removed.
        * kwq/DOMEvents.mm: Removed.
        * kwq/DOMEventsInternal.h: Removed.
        * kwq/DOMExtensions.h: Removed.
        * kwq/DOMHTML.h: Removed.
        * kwq/DOMHTML.mm: Removed.
        * kwq/DOMHTMLInternal.h: Removed.
        * kwq/DOMInternal.h: Removed.
        * kwq/DOMInternal.mm: Removed.
        * kwq/DOMPrivate.h: Removed.
        * kwq/DOMRange.h: Removed.
        * kwq/DOMStylesheets.h: Removed.
        * kwq/DOMTraversal.h: Removed.
        * kwq/DOMUtility.mm: Removed.
        * kwq/DOMViews.h: Removed.
        * kwq/DOMViews.mm: Removed.
        * kwq/DOMViewsInternal.h: Removed.

2006-01-16  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt, landed by ap.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6473
          REGRESSION: Serious painting problems on new iLife and iWorks pages

        * khtml/css/css_grammar.y:
        (DOM::getPropertyID): Undo the mapping of -moz-opacity and -moz-border-radius to
        opacity and border-radius, respectively.
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle): Set the object's layer to 0 before removing the layer,
        to allow child layers to update their positions correctly.
        * khtml/rendering/render_layer.cpp:
        (khtml::RenderLayer::removeOnlyThisLayer): Update the positions of all children
        of the layer being removed.
        * manual-tests/bugzilla-6473.html: Added.

2006-01-16  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by Darin, landed by ap.

        Fix typo in CSSPrimitiveValueImpl::setStringValue.

        * khtml/css/css_valueimpl.cpp:
        (DOM::CSSPrimitiveValueImpl::setStringValue): Change >> to > and fix formatting.

2006-01-16  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5401
          [WebCoreBridge firstRectForDOMRange:] works incorrectly for the first character after a line wrap

        Test: editing/input/wrapped-line-char-rect.html

        * bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge firstRectForDOMRange:]):
         Use DOWNSTREAM affinity for the range start

2006-01-16  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=5127>
        REGRESSION: problems making selection with left edge at right edge of image
        <rdar://problem/4364427>
        triple-click includes first item on next line (www.apple.com, but I think I've seen it elsewhere)
        
        Don't paint the selection tint on replaced elements
        if the selections starts at the end or ends at the start.

        * khtml/rendering/render_image.cpp:
        (RenderImage::paint):
        * khtml/rendering/render_replaced.cpp:
        (WebCore::RenderReplaced::isSelected):
        (WebCore::RenderWidget::paint):
        * khtml/rendering/render_replaced.h:

2006-01-16  Tim Omernick  <timo@apple.com>

        Reviewed by John Sullivan.

        WebCore part of <rdar://problem/4211707> NPAPI ref count behavior differs with Mozilla

        * bridge/mac/MacFrame.mm:
        (MacFrame::setView):
        Call _NPN_DeallocateObject() instead of _NPN_ReleaseObject() so that we don't leak if a plugin fails to release
        the window script object properly.
        Our old NPN_GetValue() did not properly retain the returned window script object.  Because of this, many plugins
        have WebKit-specific workarounds to not release said window script object.  Forcibly deallocating it here
        should prevent any such issues.  This shouldn't cause any problems for plugins, since they should already be
        stopped and destroyed at this point.
        This also fixes a preexisting leak of the window script NPObject -- it was never actually being freed!

2006-01-16  Darin Adler  <darin@apple.com>

        - actually removed QPtrDict itself

        * ForwardingHeaders/qptrdict.h: Removed.
        * WebCore.xcodeproj/project.pbxproj: Removed KWQPtrDict* files.
        * kwq/KWQPtrDict.h: Removed.
        * kwq/KWQPtrDictImpl.cpp: Removed.
        * kwq/KWQPtrDictImpl.h: Removed.

2006-01-16  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - removed all uses of QPtrDict, most uses of QMap

        * khtml/ecma/kjs_dom.cpp: Converted tabs to spaces.
        (KJS::DOMNode::mark): Switched from QPtrDict to HashSet.
        * khtml/ecma/kjs_events.cpp: Converted tabs to spaces.
        (KJS::JSUnprotectedEventListener::JSUnprotectedEventListener): Use HashMap.
        (KJS::JSEventListener::JSEventListener): Use HashMap.
        (KJS::JSLazyEventListener::parseCode): Use HashMap.
        * khtml/ecma/kjs_html.cpp: Convert tabs to spaces.
        (KJS::KJS::HTMLElement::classInfo): Use HashMap.
        * khtml/ecma/kjs_window.cpp: Convert tabs to spaces.
        (KJS::Window::~Window): Use HashMap.
        (KJS::Window::getJSEventListener): Ditto.
        (KJS::Window::getJSUnprotectedEventListener): Ditto.
        (KJS::WindowQObject::parentDestroyed): Ditto.
        (KJS::WindowQObject::installTimeout): Ditto.
        (KJS::WindowQObject::pauseTimeouts): Ditto.
        (KJS::WindowQObject::resumeTimeouts): Ditto.
        (KJS::WindowQObject::clearTimeout): Ditto.
        (KJS::WindowQObject::timerEvent): Ditto.
        * khtml/ecma/kjs_window.h: Use HashMap.
        * khtml/ecma/xmlhttprequest.cpp: Convert tabs to spaces.
        (KJS::XMLHttpRequest::requestsByDocument): Use HashMap/Set.
        (KJS::XMLHttpRequest::addToRequestsByDocument): Ditto.
        (KJS::XMLHttpRequest::removeFromRequestsByDocument): Ditto.
        (KJS::XMLHttpRequest::cancelRequests): Ditto.
        * khtml/ecma/xmlhttprequest.h: Ditto.
        * khtml/editing/apply_style_command.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Use HashMap.
        * khtml/rendering/render_canvas.cpp:
        (RenderCanvas::selectionRect): Use HashMap.
        (RenderCanvas::setSelection): Ditto.
        * khtml/rendering/render_flow.cpp: (RenderFlow::paintLines): Use HashSet.
        * khtml/rendering/render_line.cpp: (khtml::InlineFlowBox::paint): Use HashSet.
        * khtml/rendering/render_object.h: Used HashSet.
        Converted tabs to spaces and did namespace changes too.
        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::DocumentImpl): Use HashSet and HashMap.
        (DocumentImpl::~DocumentImpl): Ditto.
        (DocumentImpl::registerDisconnectedNodeWithEventListeners): Ditto.
        (DocumentImpl::unregisterDisconnectedNodeWithEventListeners): Ditto.
        (DocumentImpl::removeAllDisconnectedNodeEventListeners): Ditto.
        (DocumentImpl::addImageMap): Ditto.
        (DocumentImpl::removeImageMap): Ditto.
        (DocumentImpl::getImageMap): Ditto.
        (DocumentImpl::addMarker): Ditto.
        (DocumentImpl::copyMarkers): Ditto.
        (DocumentImpl::removeMarkers): Ditto.
        (DocumentImpl::markersForNode): Ditto.
        (DocumentImpl::shiftMarkers): Ditto.
        (DocumentImpl::radioButtonChecked): Ditto.
        (DocumentImpl::checkedRadioButtonForGroup): Ditto.
        (DocumentImpl::removeRadioButtonGroup): Ditto.
        * khtml/xml/DocumentImpl.h: Use HashSet and HashMap.
        * khtml/xml/NodeImpl.cpp:
        (WebCore::NodeImpl::registerNodeList): Use HashSet.
        (WebCore::NodeImpl::unregisterNodeList): Ditto.
        (WebCore::NodeImpl::notifyLocalNodeListsAttributeChanged): Ditto.
        (WebCore::NodeImpl::notifyNodeListsAttributeChanged): Ditto.
        (WebCore::NodeImpl::notifyLocalNodeListsChildrenChanged): Ditto.
        (WebCore::NodeImpl::notifyNodeListsChildrenChanged): Ditto.
        (WebCore::NodeImpl::getElementsByTagName): Moved here so we don't have
        to include NodeListImpl.h in the header.
        * khtml/xml/NodeImpl.h: Use HashSet. Reduced includes.
        * khtml/xml/dom_elementimpl.cpp:
        (WebCore::MappedAttributeKey): Added. Hash table key.
        (WebCore::MappedAttributeKeyTraits): Added. Hash table key traits.
        (WebCore::MappedAttributeHash): Added. Hash function.
        (WebCore::StyledElementImpl::getMappedAttributeDecl): Use HashMap.
        (WebCore::StyledElementImpl::setMappedAttributeDecl): Ditto.
        (WebCore::StyledElementImpl::removeMappedAttributeDecl): Ditto.
        (WebCore::MappedAttributeHash::hash): Added. Hash function.
        * khtml/xml/dom_elementimpl.h: Use HashMap.

        * khtml/html/html_imageimpl.cpp:
        (WebCore::HTMLMapElementImpl::parseMappedAttribute): Update m_name handling
        to use AtomicString.
        * khtml/html/html_imageimpl.h:
        (WebCore::HTMLMapElementImpl::getName): Change to return const AtomicString&.

        * khtml/dom/dom_string.h: Added a default argument to substring, also
        reduced includes and updated namespace.
        * khtml/xml/dom_stringimpl.h: Ditto.

        * bridge/mac/WebCoreFrameBridge.mm: Switched to new WebCore namespace.
        Updated includes for header changes.
        * kcanvas/RenderForeignObject.cpp: Ditto.
        * kcanvas/RenderForeignObject.h: Ditto.
        * kcanvas/RenderSVGImage.h: Ditto.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h: Ditto.
        * khtml/css/css_ruleimpl.cpp: Ditto.
        * khtml/css/css_valueimpl.h: Ditto.
        * khtml/ecma/kjs_dom.h: Ditto.
        * khtml/ecma/kjs_html.h: Ditto.
        * khtml/editing/composite_edit_command.cpp: Ditto.
        * khtml/editing/delete_selection_command.cpp: Ditto.
        * khtml/html/html_tableimpl.cpp: Ditto.
        * khtml/khtml_events.cpp: Ditto.
        * khtml/rendering/RenderText.cpp: Ditto.
        * khtml/rendering/render_block.cpp: Ditto.
        * khtml/rendering/render_br.cpp: Ditto.
        * khtml/rendering/render_inline.cpp: Ditto.
        * khtml/rendering/render_object.cpp: Ditto.
        * khtml/rendering/render_replaced.cpp: Ditto.
        * khtml/xml/dom2_rangeimpl.cpp: Ditto.
        * kwq/DOM.mm: Ditto.
        * page/Frame.cpp: Ditto.

        * kcanvas/KCanvasResources.cpp: (KCanvasMarker::draw): Updated because a
        constant moved into the WebCore namespace.
        * kcanvas/RenderSVGText.cpp: (RenderSVGText::nodeAtPoint): Ditto.
        * kcanvas/RenderSVGText.h: Ditto.
        * kcanvas/device/quartz/KCanvasItemQuartz.h: Ditto.
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::paint): Ditto.
        (KCanvasItemQuartz::nodeAtPoint): Ditto.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasContainerQuartz::paint): Ditto.

        * khtml/xbl/xbl_binding_manager.cpp: Removed include of qptrddict.h.
        * khtml/xbl/xbl_binding_manager.h: Removed include of qptrddict.h.
        * khtml/xbl/xbl_docimpl.h: Removed include of qptrddict.h.

        * khtml/xml/dom_xmlimpl.cpp: Changed to use RefPtr for strings.
        * khtml/xml/dom_xmlimpl.h: Ditto.

        * ksvg2/css/SVGRenderStyle.h: Reduced includes a bit and added newly-needed ones.
        * ksvg2/misc/KSVGTimeScheduler.cpp: Ditto.
        * ksvg2/svg/SVGPointImpl.cpp: Ditto.

        * kwq/KWQNamespace.h: Removed QColor, QCursor, and redundant declaration of QRgb
        (now in qcolor.h). Also converted tabs to spaces.

        * kwq/KWQPainter.h: Added newly-needed include.

        * kwq/KWQPtrVector.h: Added append function.
        * kwq/KWQVectorImpl.cpp: (KWQVectorImpl::append): Added.
        * kwq/KWQVectorImpl.h: Added append.

        * kwq/KWQRenderTreeDebug.cpp: Updated to no longer use transparentColor constant.

        * kwq/KWQWMatrix.cpp: Changed name to QMatrix to allow forward declarations.
        * kwq/KWQWMatrix.h: Ditto.

        * loader/Cache.cpp: (khtml::Cache::clear): Use deleteAllValues for clearer code.

        * loader/CachedCSSStyleSheet.cpp: Reduced includes a lot, moving them from .h to .cpp.
        * loader/CachedCSSStyleSheet.h: Ditto.
        * loader/CachedImage.cpp: Ditto.
        * loader/CachedImage.h: Ditto.
        * loader/CachedImageCallback.cpp: Ditto.
        * loader/CachedObject.cpp: Ditto.
        * loader/CachedObject.h: Ditto.
        * loader/CachedObjectClient.h: Ditto.
        * loader/CachedObjectClientWalker.cpp: Ditto.
        * loader/CachedObjectClientWalker.h: Ditto.
        * loader/CachedScript.cpp: Ditto.
        * loader/CachedScript.h: Ditto.
        * loader/CachedXSLStyleSheet.cpp: Ditto.

        * loader/loader.cpp:
        (WebCore::Loader::Loader): Changed to use HashMap.
        (WebCore::Loader::~Loader): Ditto.
        (WebCore::Loader::servePendingRequests): Ditto.
        (WebCore::Loader::slotFinished): Ditto.
        (WebCore::Loader::slotReceivedResponse): Ditto.
        (WebCore::Loader::slotData): Ditto.
        (WebCore::Loader::numRequests): Ditto.
        (WebCore::Loader::cancelRequests): Ditto.
        (WebCore::Loader::jobForRequest): Ditto.
        * loader/loader.h: Ditto.

2006-01-16  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Move config.h in project file to match
        where it is in the source tree.

2006-01-15  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Darin.

        Support for the new DOM Inspector.

        * khtml/ecma/kjs_dom.cpp: exposes scrollIntoViewIfNeeded to JS
        * khtml/ecma/kjs_dom.h:
        * khtml/rendering/RenderText.cpp:
        (RenderText::lineBoxRects): returns text run rects
        * khtml/rendering/RenderText.h:
        * khtml/rendering/render_container.cpp:
        (RenderContainer::lineBoxRects): returns all child line box rects
        * khtml/rendering/render_container.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::lineBoxRects): returns an empty list
        * khtml/rendering/render_object.h:
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::scrollIntoViewIfNeeded): scrolls only if needed, bool decides to center to align to nearest edge
        * khtml/xml/dom_elementimpl.h: Ditto
        * kwq/DOM.mm:
        (-[DOMNode boundingBox]): returns the bounding box for a node
        (-[DOMNode lineBoxRects]): returns text runs for a node
        * kwq/DOMCore.h: added missing @protocol DOMEventListener and @class DOMEvent
        * kwq/DOMExtensions.h: removes methods that haven't been API reviewed
        * kwq/DOMPrivate.h: new pending public API added for the Inspector

2006-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - changed WebCore namespace change to work on Win32 as well as Mac OS X

        * WebCorePrefix.h: Removed things needed cross-platform.

        * config.h: Moved from khtml subdirectory. Added defines from
        WebCorePrefix.h, and added a define that makes KSVG a synonym for WebCore.
        * khtml/config.h: Removed.

        * khtml/css/css_grammar.y: Changed SVG functions to use function name rather
        than namespace to avoid collision with the XML and HTML DOM. Changes tabs to spaces.
        * khtml/css/css_valueimpl.cpp:
        (WebCore::propertyID): Add SVG properties ot the ones understood here.
        This allows us to set SVG properties from JavaScript.

        * ksvg2/scripts/cssmakeprops: Put functions inside the namespace to avoid compiler
        warning, and renamed functions to include CSS and SVG.
        * ksvg2/scripts/cssmakevalues: Ditto.

        * ksvg2/svg/SVGStyledElementImpl.cpp: (SVGStyledElementImpl::parseMappedAttribute):
        Use property ID function by its new name.

        * ksvg2/ksvg.h: Renamed ExceptionCode to SVGExceptionCode.

        * khtml/ecma/XSLTProcessor.cpp: Moved "config.h" header up above the ifdef so that
        the ifdef works.
        * khtml/xbl/xbl_binding.cpp: Ditto.
        * khtml/xbl/xbl_binding_manager.cpp: Ditto.
        * khtml/xbl/xbl_docimpl.cpp: Ditto.
        * khtml/xbl/xbl_protobinding.cpp: Ditto.
        * khtml/xbl/xbl_tokenizer.cpp: Ditto.
        * khtml/xsl/xsl_stylesheetimpl.cpp: Ditto.
        * khtml/xsl/xslt_processorimpl.cpp: Ditto.
        * loader/CachedXBLDocument.cpp: Ditto.

        * ksvg2/svg/SVGFELightElementImpl.h: Removed include of "config.h". That's supposed
        to only be included by code files, not headers.

        * ksvg2/svg/SVGFEDistantLightElementImpl.cpp: Added missing include of "config.h".
        Did a few other tweaks to the file.
        * ksvg2/svg/SVGFEPointLightElementImpl.cpp: Ditto.
        * ksvg2/svg/SVGFESpotLightElementImpl.cpp: Ditto.

2006-01-15  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by darin.

        Updated files w/ missing copyrights from Oliver.

        * kcanvas/device/quartz/filters/WKArithmeticFilter.cikernel:
        * kcanvas/device/quartz/filters/WKDistantLightFilter.cikernel:
        * kcanvas/device/quartz/filters/WKPointLightFilter.cikernel:
        * kcanvas/device/quartz/filters/WKSpotLightFilter.cikernel:
        * ksvg2/svg/SVGAnimatedColorImpl.cpp:
        * ksvg2/svg/SVGAnimatedColorImpl.h:
        * ksvg2/svg/SVGFEDiffuseLightingElementImpl.cpp:
        * ksvg2/svg/SVGFEDiffuseLightingElementImpl.h:
        * ksvg2/svg/SVGFEDistantLightElementImpl.cpp:
        * ksvg2/svg/SVGFEDistantLightElementImpl.h:
        * ksvg2/svg/SVGFELightElementImpl.cpp:
        * ksvg2/svg/SVGFELightElementImpl.h:
        * ksvg2/svg/SVGFEPointLightElementImpl.cpp:
        * ksvg2/svg/SVGFEPointLightElementImpl.h:
        * ksvg2/svg/SVGFESpecularLightingElementImpl.cpp:
        * ksvg2/svg/SVGFESpecularLightingElementImpl.h:
        * ksvg2/svg/SVGFESpotLightElementImpl.cpp:
        * ksvg2/svg/SVGFESpotLightElementImpl.h:

2006-01-15  Duncan Wilcox  <duncan@mclink.it>

        Reviewed and tweaked a bit by Darin.

        Fix for <http://bugs.webkit.org/show_bug.cgi?id=6523>
        "Extract data from SelectionController"

        This patch refactors the data portions of SelectionController into its
        own class, "Selection".

        The extracted data are the base/extent/start/end positions and cursor
        affinity. Also a couple cached values generated by validation are kept around
        in the new class.

        This patch does away with all the different affinities
        (start/end/base/extent) that were never implemented properly, since affinity
        only makes sense when the selection is a caret (as per discussion with mjs and
        darin on #webkit).

        No test cases added because this is a refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (MacFrame::findString):
        (MacFrame::advanceToNextMisspelling):
        (MacFrame::baseWritingDirectionForSelectionStart):
        (MacFrame::respondToChangedSelection):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge selectionState]):
        (-[WebCoreFrameBridge selectNSRange:]):
        (-[WebCoreFrameBridge selectionAffinity]):
        (-[WebCoreFrameBridge setMarkDOMRange:]):
        (-[WebCoreFrameBridge ensureSelectionVisible]):
        (-[WebCoreFrameBridge rangeOfCharactersAroundCaret]):
        * khtml/editing/Selection.cpp: Added.
        (khtml::Selection::Selection):
        (khtml::Selection::clear):
        (khtml::Selection::toRange):
        (khtml::Selection::validate):
        (khtml::Selection::adjustForEditableContent):
        (khtml::Selection::debugPosition):
        * khtml/editing/Selection.h: Added.
        (khtml::Selection::):
        (khtml::Selection::state):
        (khtml::Selection::setAffinity):
        (khtml::Selection::affinity):
        (khtml::Selection::setBase):
        (khtml::Selection::setExtent):
        (khtml::Selection::setStart):
        (khtml::Selection::setEnd):
        (khtml::Selection::base):
        (khtml::Selection::extent):
        (khtml::Selection::start):
        (khtml::Selection::end):
        (khtml::Selection::isNone):
        (khtml::Selection::isCaret):
        (khtml::Selection::isRange):
        (khtml::Selection::isCaretOrRange):
        (khtml::Selection::isBaseFirst):
        (khtml::operator==):
        (khtml::operator!=):
        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::SelectionController):
        (khtml::SelectionController::operator=):
        (khtml::SelectionController::moveTo):
        (khtml::SelectionController::setModifyBias):
        (khtml::SelectionController::modifyExtendingRightForward):
        (khtml::SelectionController::modifyMovingRightForward):
        (khtml::SelectionController::modifyExtendingLeftBackward):
        (khtml::SelectionController::modifyMovingLeftBackward):
        (khtml::SelectionController::modify):
        (khtml::SelectionController::expandUsingGranularity):
        (khtml::SelectionController::xPosForVerticalArrowNavigation):
        (khtml::SelectionController::clear):
        (khtml::SelectionController::setBase):
        (khtml::SelectionController::setExtent):
        (khtml::SelectionController::toString):
        (khtml::SelectionController::getRangeAt):
        (khtml::SelectionController::frame):
        (khtml::SelectionController::collapseToEnd):
        (khtml::SelectionController::collapseToStart):
        (khtml::SelectionController::layout):
        (khtml::SelectionController::caretRect):
        (khtml::SelectionController::needsCaretRepaint):
        (khtml::SelectionController::paintCaret):
        (khtml::SelectionController::debugRenderer):
        (khtml::SelectionController::formatForDebugger):
        (khtml::SelectionController::showTree):
        * khtml/editing/SelectionController.h:
        (khtml::SelectionController::state):
        (khtml::SelectionController::affinity):
        (khtml::SelectionController::base):
        (khtml::SelectionController::extent):
        (khtml::SelectionController::start):
        (khtml::SelectionController::end):
        (khtml::SelectionController::isNone):
        (khtml::SelectionController::isCaret):
        (khtml::SelectionController::isRange):
        (khtml::SelectionController::isCaretOrRange):
        (khtml::SelectionController::toRange):
        (khtml::SelectionController::baseNode):
        (khtml::SelectionController::extentNode):
        (khtml::SelectionController::baseOffset):
        (khtml::SelectionController::extentOffset):
        (khtml::SelectionController::anchorNode):
        (khtml::SelectionController::anchorOffset):
        (khtml::SelectionController::focusNode):
        (khtml::SelectionController::focusOffset):
        (khtml::operator==):
        * khtml/editing/apply_style_command.cpp:
        (khtml::ApplyStyleCommand::updateStartEnd):
        * khtml/editing/break_blockquote_command.cpp:
        (khtml::BreakBlockquoteCommand::doApply):
        * khtml/editing/delete_selection_command.cpp:
        (khtml::DeleteSelectionCommand::initializePositionData):
        (khtml::DeleteSelectionCommand::handleGeneralDelete):
        (khtml::DeleteSelectionCommand::doApply):
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::doApply):
        * khtml/editing/insert_text_command.cpp:
        (khtml::InsertTextCommand::input):
        * khtml/editing/move_selection_command.cpp:
        (khtml::MoveSelectionCommand::doApply):
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplaceSelectionCommand::doApply):
        (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
        * khtml/editing/typing_command.cpp:
        (khtml::TypingCommand::deleteKeyPressed):
        (khtml::TypingCommand::forwardDeleteKeyPressed):
        (khtml::TypingCommand::markMisspellingsAfterTyping):
        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::updateSelection):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject accessibilityAttributeValue:]):
        (-[KWQAccObject doAXTextMarkerRangeForLine:]):
        * kwq/KWQRenderTreeDebug.cpp:
        (writeSelection):
        * page/Frame.cpp:
        (Frame::selectContentsOfNode):
        (Frame::shouldChangeSelection):
        (Frame::computeAndSetTypingStyle):
        (Frame::applyStyle):
        (Frame::applyParagraphStyle):
        (Frame::selectFrameElementInParentIfFullySelected):
        (Frame::revealSelection):
        (Frame::centerSelectionInVisibleArea):
        (Frame::styleForSelectionStart):
        
        * <a few other files, including editing ones>: Added includes since Selection.h and
        SelectionController.h now include fewer things.

2006-01-15  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Test: fast/text/whitespace/pre-wrap-overflow-selection.html
        
        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5619
          CSS2: pre-wrap has overflow/selection problems

        * khtml/rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::selectionRect): Clip selection rect to the text box
        (khtml::InlineTextBox::paintSelection): Clip selection painting to the text box.
        * khtml/rendering/bidi.cpp: (khtml::RenderBlock::computeHorizontalPositionsForLine):
        Remove code that re-added border width, since it is already included in availableWidth.

2006-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - fix regression in duplicate ID layout test

        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::getElementById): Change to take AtomicString, so we can use
        the string pointer as a hash key and not worry about ref'ing the pointer or
        about object lifetime since the string will be stored for the lifetime of the
        ID attribute. Also update for the counted set formerly named m_idCount to use
        its new name, m_duplicateIds.
        (DocumentImpl::addElementById): Ditto.
        (DocumentImpl::removeElementById): Ditto.
        (DocumentImpl::recalcStyleSelector): Pass a DOMStringImpl* (see below).
        * khtml/xml/DocumentImpl.h: Change functions to take AtomicString.

        * kcanvas/KCanvasFilters.cpp: (getFilterById): Use AtomicString.
        * kcanvas/KCanvasFilters.h: Ditto.
        * kcanvas/KCanvasResources.cpp:
        (getResourceById): Ditto.
        (getMarkerById): Ditto.
        (getClipperById): Ditto.
        (getMaskerById): Ditto.
        (getPaintServerById): Ditto.
        * kcanvas/KCanvasResources.h: Ditto.
        * khtml/ecma/kjs_window.cpp: (KJS::Window::getOwnPropertySlot): Ditto.
        * khtml/html/HTMLLabelElementImpl.cpp:
        (DOM::HTMLLabelElementImpl::formElement): Ditto.
        * khtml/xml/NodeListImpl.cpp: (DOM::NodeListImpl::itemById): Ditto.
        * khtml/xml/NodeListImpl.h: Ditto. Also removed unnecessary "virtual".

        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMStyleSheetList::nameGetter): Pass a DOMStringImpl*, which gets
        converted to an AtomicString implicitly, rather than a DOMString, which
        does not. (But that's a crazy rule -- we should change this around long term.)
        (KJS::DOMStyleSheetList::getOwnPropertySlot): Ditto.
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNodeList::nameGetter): Ditto.
        (KJS::DOMNodeList::getOwnPropertySlot): Ditto.
        (KJS::DOMDocumentProtoFunc::callAsFunction): Ditto.

        - Merge khtml, DOM, and KDOM into one big namespace, WebCore.

        * WebCorePrefix.h: Use defined to map the old namespace names to WebCore.
        Now that this is done in the prefix, we can start actually calling it by
        that name, phase out the old names, then remove the defines.

        - other changes

        * khtml/xml/DocumentTypeImpl.cpp: Converted tabs to spaces.
        * khtml/xml/dom2_eventsimpl.cpp: Ditto.

2006-01-15  Alexander Kellett  <lypanov@kde.org>

        Reviewed and landed by Anders.

        http://bugs.webkit.org/show_bug.cgi?id=6553
        Remove KCanvasCommonArgs and pass around RenderPath objects instead.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasCreator.h:
        * kcanvas/KCanvasItem.cpp:
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasTypes.h: Removed.
        * kcanvas/device/KRenderingDevice.cpp:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingFillPainter.h:
        * kcanvas/device/KRenderingPaintServer.h:
        * kcanvas/device/KRenderingStrokePainter.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::paint):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (drawShadingWithStyle):
        (KRenderingPaintServerLinearGradientQuartz::draw):
        (KRenderingPaintServerRadialGradientQuartz::draw):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.h:
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerSolidQuartz::draw):
        (KRenderingPaintServerPatternQuartz::draw):
        (KRenderingPaintServerImageQuartz::draw):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/svg/SVGPatternElementImpl.h:

2006-01-15  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6528
          remove all use of QDict from WebCore

        I ran performance tests and the change results in a slight improvement.

        * bridge/mac/MacFrame.h: Removed include of KWQDict.h. Changed didTellBridgeAboutLoad
        and haveToldBridgeAboutLoad functions to take DOMString instead of QString. Changed
        urlsBridgeKnowsAbout from a QDict to a HashMap.
        * bridge/mac/MacFrame.mm:
        (MacFrame::didTellBridgeAboutLoad): Updated to use QDict and DOMString.
        (MacFrame::haveToldBridgeAboutLoad): Ditto.

        * khtml/editing/jsediting.h: Removed include of qdict.h.

        * khtml/rendering/render_frames.cpp: Removed include of qdict.h. Put file inside the
        khtml namespace instead of just using the namespace. Changed tabs to spaces.
        (khtml::RenderPartObject::updateWidget): Changed the local variable uniqueParamNames
        to be a HashSet instead of a QDict.

        * khtml/xml/DocumentImpl.h: Removed include of qdict.h, changed m_elementsById, m_idCount,
        and m_elementsByAccessKey to use HashMap and HashCountedSet instead of QDict.
        * khtml/xml/DocumentImpl.cpp: Changed tabs to spaces.
        (DocumentImpl::getElementById): Updated to use HashMap for m_elementsById and HashCountedSet
        for m_idCount.
        (DocumentImpl::addElementById): Ditto. Remove code to clear m_accessKeyDictValid,
        since setDocumentChanged already takes care of that.
        (DocumentImpl::removeElementById): Ditto.
        (DocumentImpl::getElementByAccessKey): Updated to use HashMap for m_elementsByAccessKey.
        (DocumentImpl::setDocumentChanged): Rearranged to do a couple fewer branches. Clear out
        the m_elementsByAccessKey map when clearing m_accessKeyMapValid to avoid keeping stale
        pointers around.

        * ksvg2/svg/SVGDocumentImpl.cpp: Removed include of q3dict.h.

        * WebCore.vcproj/WebCore/WebCore.vcproj: Removed obsolete QDict sources.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * ForwardingHeaders/q3dict.h: Removed.
        * ForwardingHeaders/qdict.h: Removed.
        * kwq/KWQDict.h: Removed.
        * kwq/KWQDictImpl.cpp: Removed.
        * kwq/KWQDictImpl.h: Removed.

        * WebCore+SVG/SVGNamesWrapper.cpp: Touched this file just so I could build again.

        * kwq/KWQKURL.h: Removed unused canonicalURL, _path, _user, _pass, and _host functions.
        * kwq/KWQKURL.mm: Changed tabs to spaces, removed unused functions, replaced NULL with 0.

        * kwq/KWQLoader.mm: Changed tabs to spaces.
        (KWQServeRequest): Removed QString conversion from call to didTellBridgeAboutLoad.
        (KWQServeSynchronousRequest): Ditto.
        (KWQCheckCacheObjectStatus): Ditto. Same for haveToldBridgeAboutLoad.

        * loader/Cache.h: Removed include of qdict.h. Changed declaration of the LRUList struct
        to just be a forward declaration. Changed tabs to spaces. Removed the static data member
        called "cache". Added a static member function called get. Renamed removeCacheEntry to remove.
        * loader/Cache.cpp: Put file inside the khtml namespace instead of just using the
        namespace. Changed tabs to spaces. Changed the main cache itself to a HashMap and
        made it a static variable local to this file instead of a static data member of Cache
        to hide its type from the header. Also made the LRUList type private to this file.
        (khtml::Cache::init): Create a HashMap instead of a QDict.
        (khtml::Cache::clear): To replace the use of setAutoDelete, write a loop to delete all the
        items in the cache map.
        (khtml::Cache::requestImage): Change code to use HashMap functions instead of QDict.
        (khtml::Cache::requestStyleSheet): Ditto.
        (khtml::Cache::preloadStyleSheet): Ditto.
        (khtml::Cache::requestScript): Ditto.
        (khtml::Cache::preloadScript): Ditto.
        (khtml::Cache::requestXSLStyleSheet): Ditto.
        (khtml::Cache::requestXBLDocument): Ditto.
        (khtml::Cache::removeCacheEntry): Ditto.
        (khtml::Cache::FastLog2): Fixed this for 64-bit compiles.
        (khtml::Cache::getStatistics): Ditto.
        (khtml::Cache::flushAll): Ditto.
        (khtml::Cache::get): Added. Function used by the loader.

        * loader/CachedObject.h: Removed include of qdict.h.

        * loader/DocLoader.h: Removed include of qdict.h.
        * loader/DocLoader.cpp: (khtml::DocLoader::needReload): Changed to use new get function of
        Cache instead of getting at the map directly. Also changed call to removeCacheEntry
        to remove because it was renamed.

        * loader/CachedImage.cpp: (khtml::CachedImage::data): Changed call to removeCacheEntry
        to remove because it was renamed.
        * loader/CachedImageCallback.cpp: (khtml::CachedImageCallback::handleError): Ditto.
        * loader/loader.cpp:
        (khtml::Loader::slotFinished): Ditto.
        (khtml::Loader::cancelRequests): Ditto.

2006-01-15  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        <mask> inside <defs> crashes Safari.
        http://bugs.webkit.org/show_bug.cgi?id=6548
        
        Test: svg/custom/mask-inside-defs.svg

        * ksvg2/svg/SVGMaskElementImpl.cpp:
        (KSVG::SVGMaskElementImpl::drawMaskerContent):

2006-01-15  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Add basic <tspan> support using RenderInline.
        http://bugs.webkit.org/show_bug.cgi?id=6428
        Also fix <text transform=""> while we're at it.
        http://bugs.webkit.org/show_bug.cgi?id=6552
        
        Covered by several existing tests.

        * ksvg2/svg/SVGGradientElementImpl.cpp:
        (SVGGradientElementImpl::parseMappedAttribute): code cleanup
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (SVGPatternElementImpl::parseMappedAttribute): code cleanup
        * ksvg2/svg/SVGStyledTransformableElementImpl.cpp:
        (SVGStyledTransformableElementImpl::parseMappedAttribute): cleanup
        * ksvg2/svg/SVGTSpanElementImpl.cpp:
        (SVGTSpanElementImpl::childShouldCreateRenderer): added.
        (SVGTSpanElementImpl::createRenderer): added.
        * ksvg2/svg/SVGTSpanElementImpl.h:
        (KSVG::SVGTSpanElementImpl::rendererIsNeeded): added.
        * ksvg2/svg/SVGTextElementImpl.cpp:
        (SVGTextElementImpl::transform): added.
        (SVGTextElementImpl::localMatrix): added.
        (SVGTextElementImpl::parseMappedAttribute): support transform.
        (SVGTextElementImpl::updateLocalTransform): added.
        (SVGTextElementImpl::attach): added.
        (SVGTextElementImpl::childShouldCreateRenderer): allow tspan.
        * ksvg2/svg/SVGTextElementImpl.h:
        * ksvg2/svg/SVGTransformableImpl.cpp:
        (SVGTransformableImpl::parseTransformAttribute): code cleanup.
        * ksvg2/svg/SVGTransformableImpl.h:

2006-01-14  David Hyatt  <hyatt@apple.com>

        Move arena.cpp/.h out of khtml/misc and into platform/Arena.cpp/h.  Also removed another unused
        header, khtmldata.h.

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/misc/arena.cpp: Removed.
        * khtml/misc/arena.h: Removed.
        * khtml/misc/khtmldata.h: Removed.
        * khtml/rendering/render_arena.h:
        * platform/Arena.cpp: Added.
        * platform/Arena.h: Added.

2006-01-14  David Hyatt  <hyatt@apple.com>

        Rename TokenizerString to SegmentedString and place it in the platform directory.

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::processListing):
        (khtml::HTMLTokenizer::parseSpecial):
        (khtml::HTMLTokenizer::scriptHandler):
        (khtml::HTMLTokenizer::scriptExecution):
        (khtml::HTMLTokenizer::parseComment):
        (khtml::HTMLTokenizer::parseServer):
        (khtml::HTMLTokenizer::parseProcessingInstruction):
        (khtml::HTMLTokenizer::parseText):
        (khtml::HTMLTokenizer::parseEntity):
        (khtml::HTMLTokenizer::parseTag):
        (khtml::HTMLTokenizer::write):
        (khtml::HTMLTokenizer::timerEvent):
        (khtml::HTMLTokenizer::notifyFinished):
        (khtml::HTMLTokenizer::setSrc):
        * khtml/html/htmltokenizer.h:
        * khtml/misc/stringit.cpp: Removed.
        * khtml/misc/stringit.h: Removed.
        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::write):
        * khtml/xml/xml_tokenizer.h:
        * platform/SegmentedString.cpp: Added.
        (WebCore::SegmentedString::length):
        (WebCore::SegmentedString::clear):
        (WebCore::SegmentedString::append):
        (WebCore::SegmentedString::prepend):
        (WebCore::SegmentedString::advanceSubstring):
        (WebCore::SegmentedString::toString):
        * platform/SegmentedString.h: Added.
        (WebCore::SegmentedSubstring::SegmentedSubstring):
        (WebCore::SegmentedString::SegmentedString):

2006-01-14  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - added bridging infrastructure for Page class
        
        The Page class itself is coming very soon.

        * WebCore.exp: Export WebCorePageBridge.
        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * bridge/mac/WebCorePageBridge.h: Added.
        * bridge/mac/WebCorePageBridge.mm: Added.
        (-[WebCorePageBridge initWithMainFrame:]): Added new class, obvious
        (-[WebCorePageBridge dealloc]): ditto
        (-[WebCorePageBridge mainFrame]): ditto
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge init]): Fixed style a bit.

2006-01-14  David Hyatt  <hyatt@apple.com>

        Win32 finds more khtml namespace issues with the movement
        of Shared that gcc missed.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * khtml/xml/dom2_rangeimpl.cpp:
        (DOM::RangeImpl::text):
        * khtml/xml/dom_position.cpp:

2006-01-14  David Hyatt  <hyatt@apple.com>

        Move shared.h from khtml/misc into the platform directory and move it into the WebCore namespace.

        Reviewed by eseidel

        * ForwardingHeaders/kdom/Shared.h: Removed.
        * WebCore+SVG/DOMList.h:
        * WebCore+SVG/KDOMHeaders.h:
        * WebCore+SVG/RGBColorImpl.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreFrameBridge.mm:
        * kcanvas/KCanvasPath.h:
        * khtml/css/css_base.h:
        * khtml/css/css_ruleimpl.h:
        * khtml/css/css_stylesheetimpl.h:
        * khtml/css/css_valueimpl.h:
        * khtml/dom/dom2_events.h:
        * khtml/dom/dom2_traversal.h:
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/ecma/xmlserializer.cpp:
        (KJS::XMLSerializerProtoFunc::callAsFunction):
        * khtml/editing/SelectionController.h:
        * khtml/editing/edit_command.h:
        * khtml/editing/htmlediting.h:
        * khtml/editing/visible_position.h:
        * khtml/html/HTMLOptionsCollectionImpl.h:
        * khtml/html/html_miscimpl.h:
        * khtml/misc/shared.h: Removed.
        * khtml/rendering/render_line.h:
        * khtml/rendering/render_style.h:
        * khtml/xml/DOMImplementationImpl.h:
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/NamedNodeMapImpl.h:
        * khtml/xml/NodeImpl.h:
        * khtml/xml/NodeListImpl.h:
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/dom2_rangeimpl.h:
        * khtml/xml/dom2_traversalimpl.h:
        * khtml/xml/dom2_viewsimpl.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_qname.h:
        * khtml/xml/dom_stringimpl.h:
        * khtml/xsl/xslt_processorimpl.h:
        * ksvg2/css/SVGRenderStyle.cpp:
        (SVGRenderStyle::SVGRenderStyle):
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleFillData::StyleFillData):
        (StyleStrokeData::StyleStrokeData):
        (StyleStopData::StyleStopData):
        (StyleClipData::StyleClipData):
        (StyleMaskData::StyleMaskData):
        (StyleMarkerData::StyleMarkerData):
        (StyleMiscData::StyleMiscData):
        * ksvg2/css/SVGRenderStyleDefs.h:
        * ksvg2/svg/SVGAngleImpl.cpp:
        (SVGAngleImpl::SVGAngleImpl):
        * ksvg2/svg/SVGAngleImpl.h:
        * ksvg2/svg/SVGAnimatedBooleanImpl.cpp:
        (SVGAnimatedBooleanImpl::SVGAnimatedBooleanImpl):
        * ksvg2/svg/SVGAnimatedBooleanImpl.h:
        * ksvg2/svg/SVGAnimatedEnumerationImpl.cpp:
        (SVGAnimatedEnumerationImpl::SVGAnimatedEnumerationImpl):
        * ksvg2/svg/SVGAnimatedEnumerationImpl.h:
        * ksvg2/svg/SVGAnimatedIntegerImpl.cpp:
        (SVGAnimatedIntegerImpl::SVGAnimatedIntegerImpl):
        * ksvg2/svg/SVGAnimatedIntegerImpl.h:
        * ksvg2/svg/SVGAnimatedLengthListImpl.h:
        * ksvg2/svg/SVGAnimatedNumberImpl.cpp:
        (SVGAnimatedNumberImpl::SVGAnimatedNumberImpl):
        * ksvg2/svg/SVGAnimatedNumberImpl.h:
        * ksvg2/svg/SVGAnimatedNumberListImpl.h:
        * ksvg2/svg/SVGAnimatedPreserveAspectRatioImpl.h:
        * ksvg2/svg/SVGAnimatedTemplate.h:
        (KSVG::SVGAnimatedTemplate::SVGAnimatedTemplate):
        * ksvg2/svg/SVGAnimatedTransformListImpl.h:
        * ksvg2/svg/SVGDocumentImpl.cpp:
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::SVGLengthImpl):
        * ksvg2/svg/SVGLengthImpl.h:
        * ksvg2/svg/SVGMatrixImpl.cpp:
        (SVGMatrixImpl::SVGMatrixImpl):
        * ksvg2/svg/SVGMatrixImpl.h:
        * ksvg2/svg/SVGNumberImpl.cpp:
        (SVGNumberImpl::SVGNumberImpl):
        * ksvg2/svg/SVGNumberImpl.h:
        * ksvg2/svg/SVGPathSegImpl.cpp:
        (SVGPathSegImpl::SVGPathSegImpl):
        * ksvg2/svg/SVGPathSegImpl.h:
        * ksvg2/svg/SVGPointImpl.cpp:
        (SVGPointImpl::SVGPointImpl):
        * ksvg2/svg/SVGPointImpl.h:
        * ksvg2/svg/SVGPreserveAspectRatioImpl.cpp:
        (SVGPreserveAspectRatioImpl::SVGPreserveAspectRatioImpl):
        * ksvg2/svg/SVGPreserveAspectRatioImpl.h:
        * ksvg2/svg/SVGRectImpl.cpp:
        (SVGRectImpl::SVGRectImpl):
        * ksvg2/svg/SVGRectImpl.h:
        * ksvg2/svg/SVGTransformImpl.cpp:
        (SVGTransformImpl::SVGTransformImpl):
        * ksvg2/svg/SVGTransformImpl.h:
        * kwq/DOM-CSS.mm:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQMapImpl.cpp:
        * kwq/KWQRegExp.cpp:
        * kwq/KWQValueListImpl.cpp:
        (KWQValueListImpl::KWQValueListPrivate::KWQValueListPrivate):
        * kwq/KWQVariant.cpp:
        * platform/ArrayImpl.h:
        * platform/Shared.h: Added.

2006-01-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Implement basic <foreignObject> support:
        http://bugs.webkit.org/show_bug.cgi?id=5974
        Also fixed <image> to support clip, filter and mask
        Updated <text> to support hit testing and clip, filter, mask
        
        Tests:
        * svg/custom/image-with-transform-clip-filter.svg
        * svg/custom/foreign-object-skew.svg

        * WebCore.xcodeproj/project.pbxproj: added files.
        * kcanvas/RenderForeignObject.cpp: Added.
        (RenderForeignObject::RenderForeignObject):
        (RenderForeignObject::translationForAttributes):
        (RenderForeignObject::paint):
        (RenderForeignObject::nodeAtPoint):
        * kcanvas/RenderForeignObject.h: Added.
        (RenderForeignObject::renderName): added.
        (RenderForeignObject::localTransform): added.
        (RenderForeignObject::setLocalTransform): added.
        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::paint): added filter, clip mask support
        * kcanvas/RenderSVGImage.h:
        (KSVG::RenderSVGImage::localTransform): added.
        (KSVG::RenderSVGImage::setLocalTransform): added.
        * kcanvas/RenderSVGText.cpp:
        (RenderSVGText::translationTopToBaseline): return qmatrix
        (RenderSVGText::translationForAttributes): return qmatrix
        (RenderSVGText::paint): added filter, clip, mask support
        (RenderSVGText::nodeAtPoint): added.
        * kcanvas/RenderSVGText.h:
        (RenderSVGText::localTransform): added.
        (RenderSVGText::setLocalTransform): added.
        * khtml/rendering/render_object.h:
        (khtml::RenderObject::setLocalTransform): added assert(0)
        * ksvg2/css/svg.css: added foreignObject display: block
        * ksvg2/svg/SVGForeignObjectElementImpl.cpp: Added.
        (KSVG::SVGForeignObjectElementImpl::SVGForeignObjectElementImpl):
        (KSVG::SVGForeignObjectElementImpl::~SVGForeignObjectElementImpl):
        (KSVG::SVGForeignObjectElementImpl::x):
        (KSVG::SVGForeignObjectElementImpl::y):
        (KSVG::SVGForeignObjectElementImpl::width):
        (KSVG::SVGForeignObjectElementImpl::height):
        (KSVG::SVGForeignObjectElementImpl::parseMappedAttribute):
        (KSVG::SVGForeignObjectElementImpl::createRenderer):
        (KSVG::SVGForeignObjectElementImpl::childShouldCreateRenderer):
        * ksvg2/svg/SVGForeignObjectElementImpl.h: Added.
        (KSVG::SVGForeignObjectElementImpl::isValid): added
        (KSVG::SVGForeignObjectElementImpl::rendererIsNeeded): added
        * ksvg2/svg/SVGImageElementImpl.cpp:
        (SVGImageElementImpl::attach): fixed static_cast
        * ksvg2/svg/SVGLocatableImpl.cpp:
        (SVGLocatableImpl::nearestViewportElement): foreignObject support
        (SVGLocatableImpl::farthestViewportElement): foreignObject support
        * ksvg2/svg/svgtags.in: added foreignObject
        * kwq/KWQWMatrix.cpp:
        (QWMatrix::isInvertible): fixed

2006-01-14  Eric Seidel  <eseidel@apple.com>

        Fix build break. (oops!)

        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::XMLTokenizer):

2006-01-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Initialize m_isXHTMLDocument(false) properly.
        No tests possible, random failure only.

        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::XMLTokenizer):

2006-01-15  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Add support for svg css property writing-mode.
        
        No tests possible.
        
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (KDOM::CSSStyleSelector::applySVGProperty):
        * ksvg2/css/SVGRenderStyle.h:
        (KSVG::SVGRenderStyle::InheritedFlags::):
        (KSVG::SVGRenderStyle::setBitDefaults):
        * ksvg2/css/SVGRenderStyleDefs.h:
        (KSVG::):

2006-01-14  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Refactor out cases of KCanvasRenderingStyle used as an instance to
        store the current style. Temporarily unify the data passing via 
        KCanvasCommonArgs.
        
        No tests needed, no functional change.

        * kcanvas/KCanvasItem.cpp: Removing override of setStyle used to hook
        into KCanvasRenderingStyle::updateStyle.
        (RenderPath::commonArgs): 
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (writeStyle):
        * kcanvas/KCanvasTypes.h:
        * kcanvas/device/KRenderingDevice.cpp:
        (KCanvasCommonArgs::KCanvasCommonArgs):
        (KCanvasCommonArgs::renderStyle):
        (KCanvasCommonArgs::setRenderStyle):
        (KCanvasCommonArgs::renderPath):
        (KCanvasCommonArgs::setRenderPath):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::paint):
        (KCanvasItemQuartz::bboxForPath):
        (KCanvasItemQuartz::hitsPath):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (drawShadingWithStyle):
        (KRenderingPaintServerLinearGradientQuartz::draw):
        (KRenderingPaintServerRadialGradientQuartz::draw):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerSolidQuartz::draw):
        (KRenderingPaintServerPatternQuartz::draw):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        (applyStrokeStyleToContext):
        * ksvg2/misc/KCanvasRenderingStyle.cpp: Remove overrideFillPaintServer
        and overrideStrokePaintServer hacks and make most other methods
        static, remove most instance variables.
        (KCanvasRenderingStyle::KCanvasRenderingStyle):
        (KCanvasRenderingStyle::isFilled):
        (KCanvasRenderingStyle::fillPaintServer):
        (KCanvasRenderingStyle::isStroked):
        (KCanvasRenderingStyle::strokePaintServer):
        (KCanvasRenderingStyle::strokePainter): Merged stroke logic in from
        updateStyle.
        (KCanvasRenderingStyle::fillPainter): Merged fill logic in from
        updateStyle.
        * ksvg2/misc/KCanvasRenderingStyle.h:

2006-01-14  David Hyatt  <hyatt@apple.com>

        Move loader_client.h to CachedObjectClient.h.

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/css/css_ruleimpl.h:
        * khtml/css/css_valueimpl.h:
        * khtml/ecma/kjs_html.h:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_headimpl.h:
        * khtml/html/htmltokenizer.h:
        * khtml/rendering/render_object.h:
        * khtml/xbl/xbl_binding.h:
        * khtml/xml/dom_xmlimpl.h:
        * khtml/xsl/xsl_stylesheetimpl.h:
        * loader/CachedObject.h:
        * loader/CachedObjectClient.h: Added.
        * loader/CachedObjectClientWalker.h:
        * loader/loader_client.h: Removed.

2006-01-14  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric and Hyatt.

        - http://bugs.webkit.org/show_bug.cgi?id=6544
        Remove unused headers.

        * ForwardingHeaders/kglobalsettings.h: Removed.
        * ForwardingHeaders/kimageio.h: Removed.
        * ForwardingHeaders/qasyncio.h: Removed.
        * ForwardingHeaders/qstylesheet.h: Removed.
        * kwq/KWQAsyncIO.h: Removed.
        * kwq/KWQKGlobalSettings.h: Removed.
        * kwq/KWQKImageIO.h: Removed.
        * kwq/KWQStyleSheet.h: Removed.
        
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/ecma/kjs_window.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::recalcStyle):        
        * loader/CachedImageCallback.cpp:
        * loader/CachedObject.cpp:
        * page/Frame.cpp:
        * page/FrameView.cpp:
        (KHTMLView::KHTMLView):
        Remove header inclusions
        
2006-01-14  David Hyatt  <hyatt@apple.com>

        Shift the loader-related files out of the khtml/misc directory and into a new loader directory.
        Remove the use of paths when including files from misc.

        * WebCore+SVG/KDOMHeaders.h:
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasPath.h:
        * khtml/css/css_base.h:
        * khtml/css/css_ruleimpl.cpp:
        * khtml/css/css_ruleimpl.h:
        * khtml/css/css_stylesheetimpl.cpp:
        * khtml/css/css_valueimpl.h:
        * khtml/css/csshelper.cpp:
        * khtml/css/cssparser.cpp:
        * khtml/css/cssstyleselector.cpp:
        * khtml/dom/dom2_events.h:
        * khtml/dom/dom2_traversal.h:
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/editing/SelectionController.h:
        * khtml/editing/edit_command.h:
        * khtml/editing/visible_position.h:
        * khtml/editing/visible_units.cpp:
        * khtml/html/HTMLOptionsCollectionImpl.h:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_baseimpl.h:
        * khtml/html/html_canvasimpl.h:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/html_headimpl.h:
        * khtml/html/html_imageimpl.h:
        * khtml/html/html_miscimpl.h:
        * khtml/html/htmltokenizer.h:
        * khtml/misc/Cache.cpp: Removed.
        * khtml/misc/Cache.h: Removed.
        * khtml/misc/CachedCSSStyleSheet.cpp: Removed.
        * khtml/misc/CachedCSSStyleSheet.h: Removed.
        * khtml/misc/CachedImage.cpp: Removed.
        * khtml/misc/CachedImage.h: Removed.
        * khtml/misc/CachedImageCallback.cpp: Removed.
        * khtml/misc/CachedImageCallback.h: Removed.
        * khtml/misc/CachedObject.cpp: Removed.
        * khtml/misc/CachedObject.h: Removed.
        * khtml/misc/CachedObjectClientWalker.cpp: Removed.
        * khtml/misc/CachedObjectClientWalker.h: Removed.
        * khtml/misc/CachedScript.cpp: Removed.
        * khtml/misc/CachedScript.h: Removed.
        * khtml/misc/CachedXBLDocument.cpp: Removed.
        * khtml/misc/CachedXBLDocument.h: Removed.
        * khtml/misc/CachedXSLStyleSheet.cpp: Removed.
        * khtml/misc/CachedXSLStyleSheet.h: Removed.
        * khtml/misc/DocLoader.cpp: Removed.
        * khtml/misc/DocLoader.h: Removed.
        * khtml/misc/Request.cpp: Removed.
        * khtml/misc/Request.h: Removed.
        * khtml/misc/loader.cpp: Removed.
        * khtml/misc/loader.h: Removed.
        * khtml/misc/loader_client.h: Removed.
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_canvasimage.cpp:
        * khtml/rendering/render_form.cpp:
        * khtml/rendering/render_image.cpp:
        * khtml/rendering/render_line.h:
        * khtml/rendering/render_list.cpp:
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_style.h:
        * khtml/rendering/render_table.h:
        * khtml/rendering/table_layout.h:
        * khtml/xbl/xbl_binding.cpp:
        * khtml/xbl/xbl_binding.h:
        * khtml/xml/DOMImplementationImpl.h:
        * khtml/xml/DocumentImpl.cpp:
        * khtml/xml/DocumentImpl.h:
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/dom2_rangeimpl.h:
        * khtml/xml/dom2_traversalimpl.h:
        * khtml/xml/dom2_viewsimpl.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_nodeimpl.h:
        * khtml/xml/dom_stringimpl.h:
        * khtml/xml/dom_xmlimpl.h:
        * khtml/xml/xml_tokenizer.h:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        * khtml/xsl/xslt_processorimpl.h:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQMapImpl.cpp:
        * kwq/KWQRegExp.cpp:
        * kwq/KWQValueListImpl.cpp:
        * kwq/KWQVariant.cpp:
        * loader: Added.
        * loader/Cache.cpp: Added.
        * loader/Cache.h: Added.
        * loader/CachedCSSStyleSheet.cpp: Added.
        * loader/CachedCSSStyleSheet.h: Added.
        * loader/CachedImage.cpp: Added.
        * loader/CachedImage.h: Added.
        * loader/CachedImageCallback.cpp: Added.
        * loader/CachedImageCallback.h: Added.
        * loader/CachedObject.cpp: Added.
        * loader/CachedObject.h: Added.
        * loader/CachedObjectClientWalker.cpp: Added.
        * loader/CachedObjectClientWalker.h: Added.
        * loader/CachedScript.cpp: Added.
        * loader/CachedScript.h: Added.
        * loader/CachedXBLDocument.cpp: Added.
        * loader/CachedXBLDocument.h: Added.
        * loader/CachedXSLStyleSheet.cpp: Added.
        * loader/CachedXSLStyleSheet.h: Added.
        * loader/DocLoader.cpp: Added.
        * loader/DocLoader.h: Added.
        * loader/Request.cpp: Added.
        * loader/Request.h: Added.
        * loader/loader.cpp: Added.
        * loader/loader.h: Added.
        * loader/loader_client.h: Added.
        * page/Frame.cpp:
        * page/FramePrivate.h:
        * page/FrameView.cpp:

2006-01-14  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt

        break classes in dom_nodeimpl.* into separate files (one per class)
        http://bugs.webkit.org/show_bug.cgi?id=6543

        * ForwardingHeaders/kdom/core/NodeImpl.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        * khtml/css/css_base.h:
        * khtml/css/css_stylesheetimpl.cpp:
        * khtml/css/css_valueimpl.cpp:
        * khtml/css/css_valueimpl.h:
        * khtml/ecma/kjs_binding.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/editing/append_node_command.cpp:
        * khtml/editing/htmlediting.cpp:
        * khtml/editing/htmlediting.h:
        * khtml/editing/insert_node_before_command.cpp:
        * khtml/editing/remove_node_attribute_command.h:
        * khtml/editing/remove_node_command.cpp:
        * khtml/editing/remove_node_preserving_children_command.cpp:
        * khtml/editing/set_node_attribute_command.h:
        * khtml/editing/visible_position.cpp:
        * khtml/editing/visible_text.cpp:
        * khtml/html/HTMLOptionElementImpl.cpp:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/khtml_events.cpp:
        * khtml/rendering/render_block.cpp:
        * khtml/rendering/render_box.cpp:
        * khtml/rendering/render_flow.cpp:
        * khtml/rendering/render_frames.h:
        * khtml/rendering/render_line.cpp:
        * khtml/rendering/render_object.h:
        * khtml/xml/ChildNodeListImpl.cpp: Added.
        * khtml/xml/ChildNodeListImpl.h: Added.
        * khtml/xml/ContainerNodeImpl.cpp: Added.
        (DOM::ContainerNodeImpl::removeAllChildren):
        (DOM::ContainerNodeImpl::checkSameDocument):
        (DOM::ContainerNodeImpl::getRect):
        (DOM::ContainerNodeImpl::dispatchChildRemovalEvents):
        * khtml/xml/ContainerNodeImpl.h: Added.
        * khtml/xml/DocumentFragmentImpl.cpp:
        * khtml/xml/DocumentFragmentImpl.h:
        * khtml/xml/DocumentImpl.cpp:
        * khtml/xml/DocumentImpl.h:
        (DOM::DocumentImpl::setTextColor):
        * khtml/xml/DocumentTypeImpl.cpp:
        * khtml/xml/DocumentTypeImpl.h:
        * khtml/xml/NameNodeListImpl.cpp: Added.
        * khtml/xml/NameNodeListImpl.h: Added.
        * khtml/xml/NamedNodeMapImpl.h: Added.
        (DOM::NamedNodeMapImpl::NamedNodeMapImpl):
        (DOM::NamedNodeMapImpl::~NamedNodeMapImpl):
        * khtml/xml/NodeImpl.cpp: Added.
        (DOM::TagNodeListImpl::TagNodeListImpl):
        (DOM::TagNodeListImpl::length):
        (DOM::TagNodeListImpl::item):
        (DOM::TagNodeListImpl::nodeMatches):
        (DOM::NodeImpl::getRect):
        * khtml/xml/NodeImpl.h: Added.
        * khtml/xml/NodeListImpl.cpp: Added.
        * khtml/xml/NodeListImpl.h: Added.
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_nodeimpl.cpp: Removed.
        * khtml/xml/dom_nodeimpl.h: Removed.
        * khtml/xml/dom_position.cpp:
        * khtml/xml/dom_textimpl.h:
        * khtml/xml/dom_xmlimpl.cpp:
        * khtml/xml/dom_xmlimpl.h:
        * khtml/xml/xml_tokenizer.cpp:
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        * khtml/xsl/xslt_processorimpl.h:
        * ksvg2/svg/SVGURIReferenceImpl.cpp:
        * kwq/DOM.mm:
        * kwq/DOMHTML.mm:
        * kwq/DOMUtility.mm:
        * kwq/KWQClipboard.h:
        * page/FrameView.cpp:

2006-01-14  David Hyatt  <hyatt@apple.com>

        Convert QMemArray to Array.  QByteArray becomes ByteArray.
        KWQArrayImpl becomes ArrayImpl.

        Reviewed by anders

        * ForwardingHeaders/qmemarray.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/css/cssstyleselector.h:
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::send):
        (KJS::XMLHttpRequest::processSyncLoadResults):
        * khtml/ecma/xmlhttprequest.h:
        * khtml/html/HTMLOptionElementImpl.cpp:
        (DOM::HTMLOptionElementImpl::index):
        * khtml/html/HTMLSelectElementImpl.cpp:
        (DOM::HTMLSelectElementImpl::selectedIndex):
        (DOM::HTMLSelectElementImpl::setSelectedIndex):
        (DOM::HTMLSelectElementImpl::length):
        (DOM::HTMLSelectElementImpl::remove):
        (DOM::HTMLSelectElementImpl::value):
        (DOM::HTMLSelectElementImpl::setValue):
        (DOM::HTMLSelectElementImpl::state):
        (DOM::HTMLSelectElementImpl::restoreState):
        (DOM::HTMLSelectElementImpl::appendFormData):
        (DOM::HTMLSelectElementImpl::optionToListIndex):
        (DOM::HTMLSelectElementImpl::listToOptionIndex):
        (DOM::HTMLSelectElementImpl::reset):
        (DOM::HTMLSelectElementImpl::notifyOptionSelected):
        * khtml/html/HTMLSelectElementImpl.h:
        (DOM::HTMLSelectElementImpl::listItems):
        * khtml/misc/formdata.cpp:
        (khtml::FormData::flatten):
        (khtml::FormData::flattenToString):
        * khtml/misc/formdata.h:
        (khtml::FormDataElement::FormDataElement):
        * khtml/rendering/bidi.cpp:
        (khtml::RenderBlock::layoutInlineChildren):
        * khtml/rendering/render_form.cpp:
        (RenderSelect::updateFromElement):
        (RenderSelect::layout):
        (RenderSelect::slotSelected):
        (RenderSelect::slotSelectionChanged):
        (RenderSelect::updateSelection):
        * khtml/rendering/render_table.cpp:
        (RenderTableSection::addCell):
        (RenderTableSection::setCellWidths):
        * khtml/rendering/render_table.h:
        * khtml/rendering/table_layout.cpp:
        (FixedTableLayout::layout):
        * khtml/rendering/table_layout.h:
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::docLoaderFunc):
        * kwq/KWQArrayImpl.cpp: Removed.
        * kwq/KWQArrayImpl.h: Removed.
        * kwq/KWQBuffer.cpp:
        (QBuffer::setBuffer):
        * kwq/KWQBuffer.h:
        (QBuffer::QBuffer):
        (QBuffer::buffer):
        * kwq/KWQCString.cpp:
        (QCString::QCString):
        (QCString::resize):
        (QCString::append):
        * kwq/KWQCString.h:
        * kwq/KWQKURL.mm:
        (findHostnamesInMailToURL):
        (encodeHostnames):
        * kwq/KWQLoader.h:
        * kwq/KWQLoader.mm:
        (KWQServeSynchronousRequest):
        * kwq/KWQMemArray.h: Removed.
        * kwq/KWQPixmap.h:
        * kwq/KWQPixmap.mm:
        (QPixmap::QPixmap):
        (QPixmap::receivedData):
        * kwq/KWQString.h:
        * kwq/KWQString.mm:
        (QString::QString):
        * kwq/KWQTextCodec.cpp:
        (QTextCodec::toUnicode):
        * kwq/KWQTextCodec.h:
        * kwq/KWQTextStream.cpp:
        (QTextStream::QTextStream):
        * kwq/KWQTextStream.h:
        * page/Frame.h:
        * platform/Array.h: Added.
        (WebCore::Array::Array):
        (WebCore::Array::duplicate):
        (WebCore::Array::assign):
        (WebCore::Array::operator==):
        (WebCore::Array::operator!=):
        * platform/ArrayImpl.cpp: Added.
        (WebCore::ArrayImpl::ArrayPrivate::ArrayPrivate):
        (WebCore::ArrayImpl::ArrayPrivate::~ArrayPrivate):
        (WebCore::ArrayImpl::ArrayImpl):
        (WebCore::ArrayImpl::~ArrayImpl):
        (WebCore::ArrayImpl::operator=):
        (WebCore::ArrayImpl::data):
        (WebCore::ArrayImpl::resize):
        (WebCore::ArrayImpl::duplicate):
        (WebCore::ArrayImpl::detach):
        (WebCore::ArrayImpl::fill):
        (WebCore::ArrayImpl::operator==):
        * platform/ArrayImpl.h: Added.
        (WebCore::ArrayImpl::size):
        * platform/IntPointArray.cpp:
        (IntPointArray::setPoint):
        * platform/IntPointArray.h:
        (WebCore::IntPointArray::IntPointArray):

2006-01-14  David Hyatt  <hyatt@apple.com>

        Convert QRect/QRectF -> IntRect/FloatRect.  Same drill as point
        and size.

        Reviewed by mjs

        * ForwardingHeaders/qrect.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (MacFrame::snapshotDragImage):
        (MacFrame::setDisplaysWithFocusAttributes):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge drawRect:withPainter:]):
        (-[WebCoreFrameBridge firstRectForDOMRange:]):
        (-[WebCoreFrameBridge ensureSelectionVisible]):
        * kcanvas/KCanvasContainer.cpp:
        (KCanvasContainer::relativeBBox):
        (KCanvasContainer::getAspectRatio):
        * kcanvas/KCanvasContainer.h:
        * kcanvas/KCanvasFilters.cpp:
        (KCanvasFilterEffect::subRegion):
        (KCanvasFilterEffect::setSubRegion):
        * kcanvas/KCanvasFilters.h:
        (KCanvasFilter::filterRect):
        (KCanvasFilter::setFilterRect):
        * kcanvas/KCanvasItem.cpp:
        (RenderPath::relativeBBox):
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasResources.cpp:
        (KCanvasMarker::draw):
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (operator<<):
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::paint):
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (KRenderingPaintServerPattern::setBbox):
        (KRenderingPaintServerPattern::bbox):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::prepareFilter):
        (KCanvasFilterQuartz::applyFilter):
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        (KCanvasItemQuartz::getAbsoluteRepaintRect):
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (drawMarkerWithData):
        (KCanvasItemQuartz::drawMarkersIfNeeded):
        (KCanvasItemQuartz::bboxForPath):
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (KCanvasMaskerQuartz::applyMask):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (KCanvasContainerQuartz::getAbsoluteRepaintRect):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasContainerQuartz::layout):
        (KCanvasContainerQuartz::paint):
        (KCanvasContainerQuartz::setViewport):
        (KCanvasContainerQuartz::viewport):
        (KCanvasContainerQuartz::setViewBox):
        (KCanvasContainerQuartz::viewBox):
        (KCanvasContainerQuartz::absoluteTransform):
        (KCanvasClipperQuartz::applyClip):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceContextQuartz::mapFromVisual):
        (KRenderingDeviceContextQuartz::mapToVisual):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerImageQuartz::draw):
        * kcanvas/device/quartz/QuartzSupport.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Screen::getValueProperty):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::constrainToVisible):
        (KJS::WindowFunc::callAsFunction):
        * khtml/editing/SelectionController.cpp:
        (khtml::caretY):
        (khtml::SelectionController::layout):
        (khtml::SelectionController::caretRect):
        (khtml::SelectionController::caretRepaintRect):
        (khtml::SelectionController::paintCaret):
        * khtml/editing/SelectionController.h:
        * khtml/html/html_imageimpl.cpp:
        (DOM::HTMLAreaElementImpl::getRect):
        * khtml/html/html_imageimpl.h:
        * khtml/html/html_inlineimpl.cpp:
        (DOM::HTMLAnchorElementImpl::isFocusable):
        * khtml/misc/CachedImage.cpp:
        (khtml::CachedImage::valid_rect):
        (khtml::CachedImage::do_notify):
        (khtml::CachedImage::error):
        * khtml/misc/CachedImage.h:
        * khtml/misc/khtmllayout.h:
        (khtml::GapRects::left):
        (khtml::GapRects::center):
        (khtml::GapRects::right):
        (khtml::GapRects::uniteLeft):
        (khtml::GapRects::uniteCenter):
        (khtml::GapRects::uniteRight):
        (khtml::GapRects::operator IntRect):
        * khtml/misc/loader_client.h:
        (khtml::CachedObjectClient::setPixmap):
        * khtml/rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::selectionRect):
        (khtml::InlineTextBox::nodeAtPoint):
        * khtml/rendering/InlineTextBox.h:
        * khtml/rendering/RenderText.cpp:
        (khtml::RenderText::absoluteRects):
        (khtml::RenderText::caretRect):
        (khtml::RenderText::getAbsoluteRepaintRect):
        (khtml::RenderText::selectionRect):
        * khtml/rendering/RenderText.h:
        * khtml/rendering/bidi.cpp:
        (khtml::RenderBlock::layoutInlineChildren):
        * khtml/rendering/font.cpp:
        (khtml::Font::selectionRectForText):
        * khtml/rendering/font.h:
        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::overflowRect):
        (khtml::RenderBlock::layoutBlock):
        (khtml::RenderBlock::getAbsoluteRepaintRectIncludingFloats):
        (khtml::RenderBlock::paint):
        (khtml::RenderBlock::fillHorizontalSelectionGap):
        (khtml::RenderBlock::fillVerticalSelectionGap):
        (khtml::RenderBlock::fillLeftSelectionGap):
        (khtml::RenderBlock::fillRightSelectionGap):
        (khtml::RenderBlock::floatRect):
        (khtml::RenderBlock::isPointInScrollbar):
        (khtml::RenderBlock::nodeAtPoint):
        * khtml/rendering/render_block.h:
        (khtml::RenderBlock::selectionRect):
        * khtml/rendering/render_box.cpp:
        (RenderBox::nodeAtPoint):
        (RenderBox::paintBoxDecorations):
        (RenderBox::paintBackgroundExtended):
        (RenderBox::getOverflowClipRect):
        (RenderBox::getClipRect):
        (RenderBox::getAbsoluteRepaintRect):
        (RenderBox::computeAbsoluteRepaintRect):
        (RenderBox::caretRect):
        * khtml/rendering/render_box.h:
        (khtml::RenderBox::borderBox):
        * khtml/rendering/render_br.cpp:
        (khtml::RenderBR::caretRect):
        * khtml/rendering/render_br.h:
        (khtml::RenderBR::selectionRect):
        * khtml/rendering/render_button.cpp:
        (khtml::RenderButton::paintObject):
        * khtml/rendering/render_canvas.cpp:
        (RenderCanvas::repaintViewRectangle):
        (RenderCanvas::getAbsoluteRepaintRect):
        (RenderCanvas::computeAbsoluteRepaintRect):
        (RenderCanvas::absoluteRects):
        (RenderCanvas::selectionRect):
        (RenderCanvas::viewRect):
        * khtml/rendering/render_canvas.h:
        (khtml::RenderCanvas::printRect):
        (khtml::RenderCanvas::setPrintRect):
        * khtml/rendering/render_canvasimage.cpp:
        (RenderCanvasImage::paint):
        (RenderCanvasImage::layout):
        * khtml/rendering/render_flexbox.cpp:
        (khtml::RenderFlexibleBox::layoutBlock):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::getAbsoluteRepaintRect):
        (RenderFlow::caretRect):
        (RenderFlow::paintOutlines):
        (RenderFlow::paintOutlineForLine):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::userResize):
        (RenderPart::updateWidgetPosition):
        * khtml/rendering/render_image.cpp:
        (RenderImage::setImage):
        (RenderImage::setPixmap):
        (RenderImage::paint):
        (RenderImage::layout):
        * khtml/rendering/render_image.h:
        * khtml/rendering/render_inline.cpp:
        (RenderInline::absoluteRects):
        * khtml/rendering/render_inline.h:
        * khtml/rendering/render_layer.cpp:
        (khtml::RenderLayer::updateLayerPositions):
        (khtml::RenderLayer::scrollRectToVisible):
        (khtml::RenderLayer::getRectToExpose):
        (khtml::RenderLayer::positionScrollbars):
        (khtml::RenderLayer::updateScrollInfoAfterLayout):
        (khtml::RenderLayer::paintScrollbars):
        (khtml::RenderLayer::paint):
        (khtml::setClip):
        (khtml::restoreClip):
        (khtml::RenderLayer::paintLayer):
        (khtml::RenderLayer::hitTest):
        (khtml::RenderLayer::hitTestLayer):
        (khtml::RenderLayer::calculateClipRects):
        (khtml::RenderLayer::calculateRects):
        (khtml::mustExamineRenderer):
        (khtml::RenderLayer::intersectsDamageRect):
        (khtml::RenderLayer::containsPoint):
        * khtml/rendering/render_layer.h:
        (khtml::ClipRects::m_refCnt):
        (khtml::ClipRects::overflowClipRect):
        (khtml::ClipRects::fixedClipRect):
        (khtml::ClipRects::posClipRect):
        (khtml::RenderLayer::repaintRect):
        * khtml/rendering/render_line.cpp:
        (khtml::InlineBox::canAccommodateEllipsis):
        (khtml::InlineFlowBox::nodeAtPoint):
        (khtml::InlineFlowBox::paintBackground):
        (khtml::InlineFlowBox::paintBackgroundAndBorder):
        (khtml::EllipsisBox::nodeAtPoint):
        * khtml/rendering/render_list.cpp:
        (RenderListItem::getAbsoluteRepaintRect):
        (RenderListMarker::setPixmap):
        * khtml/rendering/render_list.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::paintBorderImage):
        (RenderObject::paintBorder):
        (RenderObject::absoluteRects):
        (RenderObject::absoluteBoundingBoxRect):
        (RenderObject::addAbsoluteRectForLayer):
        (RenderObject::paintingRootRect):
        (RenderObject::repaintRectangle):
        (RenderObject::repaintAfterLayoutIfNeeded):
        (RenderObject::getAbsoluteRepaintRectWithOutline):
        (RenderObject::getAbsoluteRepaintRect):
        (RenderObject::getAbsoluteRepaintRectIncludingFloats):
        (RenderObject::computeAbsoluteRepaintRect):
        (RenderObject::viewRect):
        (RenderObject::caretRect):
        (RenderObject::addDashboardRegions):
        (RenderObject::setPixmap):
        * khtml/rendering/render_object.h:
        (khtml::RenderObject::getOverflowClipRect):
        (khtml::RenderObject::getClipRect):
        (khtml::RenderObject::relativeBBox):
        (khtml::RenderObject::PaintInfo::PaintInfo):
        (khtml::RenderObject::RepaintInfo::m_repaintRect):
        (khtml::RenderObject::borderBox):
        (khtml::RenderObject::overflowRect):
        (khtml::RenderObject::floatRect):
        (khtml::RenderObject::selectionRect):
        (khtml::RenderObject::SelectionInfo::rect):
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::selectionRect):
        (RenderWidget::paint):
        (RenderWidget::updateWidgetPosition):
        * khtml/rendering/render_replaced.h:
        * khtml/rendering/render_table.cpp:
        (RenderTable::layout):
        (RenderTableRow::getAbsoluteRepaintRect):
        (RenderTableCell::computeAbsoluteRepaintRect):
        (RenderTableCell::getAbsoluteRepaintRect):
        (RenderTableCell::paintBoxDecorations):
        * khtml/rendering/render_table.h:
        * khtml/rendering/render_theme.cpp:
        (khtml::RenderTheme::paint):
        * khtml/rendering/render_theme.h:
        (khtml::RenderTheme::adjustRepaintRect):
        * khtml/rendering/render_theme_mac.h:
        * khtml/rendering/render_theme_mac.mm:
        (khtml::RenderThemeMac::adjustRepaintRect):
        (khtml::RenderThemeMac::inflateRect):
        (khtml::RenderThemeMac::paintCheckbox):
        (khtml::RenderThemeMac::setCheckboxCellState):
        (khtml::RenderThemeMac::paintRadio):
        (khtml::RenderThemeMac::setRadioCellState):
        (khtml::RenderThemeMac::setButtonCellState):
        (khtml::RenderThemeMac::paintButton):
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::scrollIntoView):
        * khtml/xml/dom_nodeimpl.cpp:
        (DOM::NodeImpl::getRect):
        (DOM::ContainerNodeImpl::getRect):
        * khtml/xml/dom_nodeimpl.h:
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/svg/SVGFilterElementImpl.cpp:
        (SVGFilterElementImpl::canvasResource):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributesImpl.cpp:
        (SVGFilterPrimitiveStandardAttributesImpl::setStandardAttributes):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::value):
        * ksvg2/svg/SVGLocatableImpl.cpp:
        (SVGLocatableImpl::getBBox):
        * ksvg2/svg/SVGMaskElementImpl.cpp:
        (KSVG::SVGMaskElementImpl::drawMaskerContent):
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (SVGPatternElementImpl::drawPatternContentIntoTile):
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (SVGSVGElementImpl::checkIntersection):
        (SVGSVGElementImpl::checkEnclosure):
        (SVGSVGElementImpl::createRenderer):
        * kwq/KWQAccObject.mm:
        (boundingBoxRect):
        (-[KWQAccObject position]):
        (-[KWQAccObject size]):
        (-[KWQAccObject doAXBoundsForTextMarkerRange:]):
        * kwq/KWQApplication.h:
        * kwq/KWQApplication.mm:
        (QDesktopWidget::screenGeometry):
        (QDesktopWidget::availableGeometry):
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::frameGeometry):
        (QComboBox::setFrameGeometry):
        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (KWQFileButton::frameGeometry):
        (KWQFileButton::setFrameGeometry):
        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::selectionRectForText):
        (QFontMetrics::boundingRect):
        * kwq/KWQKWinModule.h:
        * kwq/KWQKWinModule.mm:
        (KWinModule::workArea):
        * kwq/KWQObject.h:
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::xForm):
        (QPainter::drawPixmap):
        (QPainter::fillRect):
        (QPainter::addClip):
        (QPainter::addRoundedRectClip):
        * kwq/KWQPixmap.h:
        * kwq/KWQPixmap.mm:
        (QPixmap::setAnimationRect):
        (QPixmap::rect):
        * kwq/KWQRect.h: Removed.
        * kwq/KWQRect.mm: Removed.
        * kwq/KWQRectF.h: Removed.
        * kwq/KWQRectF.mm: Removed.
        * kwq/KWQRegion.cpp:
        (QRegion::QRegion):
        (QRegion::boundingRect):
        * kwq/KWQRegion.h:
        * kwq/KWQRenderTreeDebug.cpp:
        (operator<<):
        (write):
        (writeLayers):
        (externalRepresentation):
        * kwq/KWQScrollView.h:
        * kwq/KWQScrollView.mm:
        (QScrollView::updateContents):
        * kwq/KWQWMatrix.cpp:
        (QWMatrix::mapRect):
        * kwq/KWQWMatrix.h:
        * kwq/KWQWidget.h:
        * kwq/KWQWidget.mm:
        (QWidget::resize):
        (QWidget::move):
        (QWidget::frameGeometry):
        (QWidget::setFrameGeometry):
        (QWidget::paint):
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::frameGeometry):
        (KWQWindowWidget::setFrameGeometry):
        * page/Frame.cpp:
        (Frame::gotoAnchor):
        (Frame::paintCaret):
        (Frame::paintDragCaret):
        (Frame::selectionRect):
        (Frame::revealSelection):
        (Frame::paint):
        (Frame::adjustPageHeight):
        (Frame::centerSelectionInVisibleArea):
        * page/Frame.h:
        * page/FrameView.cpp:
        (KHTMLView::addRepaintInfo):
        (KHTMLView::scrollTo):
        (KHTMLView::focusNextPrevNode):
        (KHTMLView::repaintRectangle):
        * page/FrameView.h:
        * platform/FloatRect.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::isNull):
        (WebCore::FloatRect::isValid):
        (WebCore::FloatRect::isEmpty):
        (WebCore::FloatRect::right):
        (WebCore::FloatRect::bottom):
        (WebCore::FloatRect::topLeft):
        (WebCore::FloatRect::topRight):
        (WebCore::FloatRect::bottomRight):
        (WebCore::FloatRect::bottomLeft):
        (WebCore::FloatRect::size):
        (WebCore::FloatRect::unite):
        (WebCore::FloatRect::normalize):
        (WebCore::FloatRect::intersects):
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::inflate):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/FloatRect.h: Added.
        (WebCore::FloatRect::contains):
        (WebCore::FloatRect::operator&):
        (WebCore::enclosingIntRect):
        * platform/IntPointArray.cpp:
        (IntPointArray::IntPointArray):
        (IntPointArray::boundingRect):
        * platform/IntPointArray.h:
        * platform/IntRect.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::isNull):
        (WebCore::IntRect::isValid):
        (WebCore::IntRect::isEmpty):
        (WebCore::IntRect::right):
        (WebCore::IntRect::bottom):
        (WebCore::IntRect::topLeft):
        (WebCore::IntRect::topRight):
        (WebCore::IntRect::bottomRight):
        (WebCore::IntRect::bottomLeft):
        (WebCore::IntRect::size):
        (WebCore::IntRect::unite):
        (WebCore::IntRect::normalize):
        (WebCore::IntRect::intersects):
        (WebCore::IntRect::intersect):
        (WebCore::IntRect::inflate):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/IntRect.h: Added.
        (WebCore::IntRect::contains):
        (WebCore::IntRect::operator&):
        * platform/mac/FloatRect.mm: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator NSRect):
        (WebCore::FloatRect::operator CGRect):
        * platform/mac/IntRect.mm: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator NSRect):
        (WebCore::IntRect::operator CGRect):

2006-01-13  David Hyatt  <hyatt@apple.com>

        Convert QPointF to FloatPoint and move it to the platform
        directory.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasContainer.cpp:
        (KCanvasContainer::fillContains):
        (KCanvasContainer::strokeContains):
        * kcanvas/KCanvasContainer.h:
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEConvolveMatrix::kernelUnitLength):
        (KCanvasFEConvolveMatrix::setKernelUnitLength):
        * kcanvas/KCanvasItem.cpp:
        (RenderPath::fillContains):
        (RenderPath::strokeContains):
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (operator<<):
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (KRenderingPaintServerLinearGradient::gradientStart):
        (KRenderingPaintServerLinearGradient::setGradientStart):
        (KRenderingPaintServerLinearGradient::gradientEnd):
        (KRenderingPaintServerLinearGradient::setGradientEnd):
        (KRenderingPaintServerRadialGradient::gradientCenter):
        (KRenderingPaintServerRadialGradient::setGradientCenter):
        (KRenderingPaintServerRadialGradient::gradientFocal):
        (KRenderingPaintServerRadialGradient::setGradientFocal):
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (ciVector):
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::nodeAtPoint):
        (KCanvasItemQuartz::hitsPath):
        * ksvg2/svg/SVGLinearGradientElementImpl.cpp:
        (SVGLinearGradientElementImpl::buildGradient):
        * ksvg2/svg/SVGRadialGradientElementImpl.cpp:
        (SVGRadialGradientElementImpl::buildGradient):
        * kwq/KWQPointF.h: Removed.
        * kwq/KWQPointF.mm: Removed.
        * kwq/KWQRectF.h:
        (QRectF::contains):
        * kwq/KWQRectF.mm:
        (QRectF::QRectF):
        (QRectF::topLeft):
        (QRectF::topRight):
        (QRectF::bottomRight):
        (QRectF::bottomLeft):
        * platform/FloatPoint.cpp: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::yCoord):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):
        * platform/FloatPoint.h: Added.
        (WebCore::FloatPoint::operator -=):
        * platform/mac/FloatPoint.mm: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator NSPoint):
        (WebCore::FloatPoint::operator CGPoint):

2006-01-13  David Hyatt  <hyatt@apple.com>

        Convert QPoint and QPointArray to IntPoint and IntPointArray.
        Factor out the Objective-C-specific logic into a .mm file
        for IntPoint.
        
        * ForwardingHeaders/qpoint.h: Removed.
        * ForwardingHeaders/qpointarray.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/KWQKHTMLView.cpp:
        (KHTMLView::viewportToGlobal):
        * bridge/mac/KWQKPartsBrowserExtension.h:
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (MacFrame::khtmlMouseMoveEvent):
        (MacFrame::dragSourceMovedTo):
        (MacFrame::dragSourceEndedAt):
        (MacFrame::dispatchDragSrcEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge elementAtPoint:]):
        (-[WebCoreFrameBridge dragOperationForDraggingInfo:]):
        (-[WebCoreFrameBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreFrameBridge concludeDragForDraggingInfo:]):
        (-[WebCoreFrameBridge dragSourceMovedTo:]):
        (-[WebCoreFrameBridge dragSourceEndedAt:operation:]):
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (operator<<):
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * khtml/ecma/kjs_events.cpp:
        (KJS::ClipboardProtoFunc::callAsFunction):
        * khtml/ecma/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::layout):
        (khtml::SelectionController::caretRect):
        * khtml/editing/SelectionController.h:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_imageimpl.cpp:
        (DOM::HTMLAreaElementImpl::mapMouseEvent):
        (DOM::HTMLAreaElementImpl::getRegion):
        * khtml/rendering/render_image.cpp:
        (RenderImage::paint):
        * khtml/rendering/render_list.cpp:
        (RenderListMarker::paint):
        * khtml/rendering/render_object.cpp:
        (RenderObject::drawBorder):
        * khtml/xml/dom2_eventsimpl.h:
        * ksvg2/svg/SVGPointImpl.cpp:
        (SVGPointImpl::SVGPointImpl):
        * ksvg2/svg/SVGPointImpl.h:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (SVGSVGElementImpl::createSVGPoint):
        * ksvg2/svg/SVGSVGElementImpl.h:
        * kwq/KWQClipboard.h:
        * kwq/KWQClipboard.mm:
        (KWQClipboard::dragLocation):
        (KWQClipboard::setDragImage):
        (KWQClipboard::setDragImageElement):
        * kwq/KWQCursor.h:
        * kwq/KWQEvent.h:
        (QMouseEvent::pos):
        (QWheelEvent::QWheelEvent):
        (QWheelEvent::pos):
        (QWheelEvent::globalPos):
        * kwq/KWQEvent.mm:
        (positionForEvent):
        (globalPositionForEvent):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::drawConvexPolygon):
        (QPainter::drawPixmap):
        * kwq/KWQPixmap.mm:
        (QPixmap::rect):
        * kwq/KWQPoint.mm: Removed.
        * kwq/KWQPointArray.cpp: Removed.
        * kwq/KWQPointArray.h: Removed.
        * kwq/KWQPointF.h:
        * kwq/KWQPointF.mm:
        (yCoord):
        * kwq/KWQRect.h:
        (QRect::moveTopLeft):
        (QRect::contains):
        * kwq/KWQRect.mm:
        (QRect::QRect):
        (QRect::topLeft):
        (QRect::topRight):
        (QRect::bottomRight):
        (QRect::bottomLeft):
        * kwq/KWQRegion.cpp:
        (QRegion::QRegion):
        (QRegion::contains):
        * kwq/KWQRegion.h:
        * kwq/KWQScrollView.h:
        * kwq/KWQScrollView.mm:
        (QScrollView::contentsToViewport):
        * kwq/KWQWidget.h:
        * kwq/KWQWidget.mm:
        (QWidget::pos):
        (QWidget::move):
        (QWidget::mapFromGlobal):
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::mapFromGlobal):
        (KWQWindowWidget::viewportToGlobal):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameView.cpp:
        (KHTMLView::dispatchDragEvent):
        (KHTMLView::updateDragAndDrop):
        (KHTMLView::cancelDragAndDrop):
        (KHTMLView::performDragAndDrop):
        * page/FrameView.h:
        * platform/IntPoint.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):
        * platform/IntPoint.h: Added.
        (WebCore::IntPoint::x):
        (WebCore::IntPoint::y):
        (WebCore::IntPoint::setX):
        (WebCore::IntPoint::setY):
        (WebCore::IntPoint::isNull):
        (WebCore::IntPoint::operator -=):
        * platform/IntPointArray.cpp: Added.
        (IntPointArray::IntPointArray):
        (IntPointArray::copy):
        (IntPointArray::boundingRect):
        (IntPointArray::point):
        (IntPointArray::setPoint):
        (IntPointArray::setPoints):
        * platform/IntPointArray.h: Added.
        (WebCore::IntPointArray::IntPointArray):

2006-01-13  David Hyatt  <hyatt@apple.com>
        
        Convert QSizeF to FloatSize and move it to the platform
        directory.
        
        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEConvolveMatrix::kernelSize):
        (KCanvasFEConvolveMatrix::setKernelSize):
        (KCanvasFEConvolveMatrix::targetOffset):
        (KCanvasFEConvolveMatrix::setTargetOffset):
        * kcanvas/KCanvasTreeDebug.cpp:
        (operator<<):
        * kcanvas/KCanvasTreeDebug.h:
        * kwq/KWQRectF.h:
        * kwq/KWQRectF.mm:
        (QRectF::QRectF):
        (QRectF::size):
        * kwq/KWQSizeF.h: Removed.
        * kwq/KWQSizeF.mm: Removed.
        * platform/FloatSize.cpp: Added.
        (FloatSize::FloatSize):
        (FloatSize::isValid):
        (FloatSize::expandedTo):
        (operator+):
        (operator==):
        (operator!=):
        * platform/FloatSize.h: Added.
        * platform/mac/FloatSize.mm: Added.
        (FloatSize::FloatSize):
        (FloatSize::operator NSSize):
        (FloatSize::operator CGSize):

2006-01-13  David Hyatt  <hyatt@apple.com>

        Fix build bustage from QSize -> IntSize change.
        
        Reviewed by darin

        * kwq/KWQObject.h:
        * kwq/KWQSizeF.h:

2006-01-13  David Hyatt  <hyatt@apple.com>

        Eliminate QSize and add the new class IntSize in the
        platform subdirectory.  Factor out the Objective-C portion
        of IntSize into a platform-specific IntSize.mm that resides
        in the mac subdirectory.

        Win32 can just compile IntSize.cpp and doesn't need any
        platform-specific extension here.
        
        Reviewed by darin

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/KCanvasImage.h:
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (KCanvasImageQuartz::init):
        (KCanvasImageQuartz::size):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceQuartz::contextForImage):
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::applyProperty):
        * khtml/ecma/kjs_html.cpp:
        (KJS::Image::getValueProperty):
        * khtml/ecma/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * khtml/misc/CachedImage.cpp:
        (khtml::CachedImage::pixmap_size):
        (khtml::CachedImage::data):
        * khtml/misc/CachedImage.h:
        * khtml/misc/CachedImageCallback.cpp:
        (khtml::CachedImageCallback::notifyUpdate):
        (khtml::CachedImageCallback::notifyFinished):
        * khtml/rendering/render_applet.cpp:
        (RenderApplet::createWidgetIfNecessary):
        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::calcMinMaxWidth):
        (RenderFileButton::calcMinMaxWidth):
        (RenderSelect::layout):
        (RenderTextArea::calcMinMaxWidth):
        (RenderSlider::calcMinMaxWidth):
        * khtml/rendering/render_image.cpp:
        (RenderImage::paint):
        * khtml/rendering/render_object.cpp:
        (RenderObject::paintBorder):
        * khtml/rendering/render_style.h:
        (khtml::RenderStyle::borderTopLeftRadius):
        (khtml::RenderStyle::borderTopRightRadius):
        (khtml::RenderStyle::borderBottomLeftRadius):
        (khtml::RenderStyle::borderBottomRightRadius):
        (khtml::RenderStyle::setBorderTopLeftRadius):
        (khtml::RenderStyle::setBorderTopRightRadius):
        (khtml::RenderStyle::setBorderBottomLeftRadius):
        (khtml::RenderStyle::setBorderBottomRightRadius):
        (khtml::RenderStyle::setBorderRadius):
        (khtml::RenderStyle::initialBorderRadius):
        * khtml/rendering/render_theme_mac.h:
        * khtml/rendering/render_theme_mac.mm:
        (khtml::RenderThemeMac::inflateRect):
        (khtml::RenderThemeMac::setControlSize):
        (khtml::RenderThemeMac::sizeForFont):
        (khtml::RenderThemeMac::setSizeFromFont):
        (khtml::RenderThemeMac::checkboxSizes):
        (khtml::RenderThemeMac::setCheckboxCellState):
        (khtml::RenderThemeMac::radioSizes):
        (khtml::RenderThemeMac::setRadioCellState):
        (khtml::RenderThemeMac::buttonSizes):
        (khtml::RenderThemeMac::setButtonCellState):
        (khtml::RenderThemeMac::paintButton):
        * ksvg2/svg/SVGMaskElementImpl.cpp:
        (KSVG::SVGMaskElementImpl::attributeChanged):
        (KSVG::SVGMaskElementImpl::drawMaskerContent):
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (SVGPatternElementImpl::drawPatternContentIntoTile):
        (SVGPatternElementImpl::notifyAttributeChange):
        * ksvg2/svg/SVGPatternElementImpl.h:
        * kwq/KWQComboBox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::sizeHint):
        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (KWQFileButton::sizeForCharacterWidth):
        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::size):
        * kwq/KWQKJavaAppletWidget.h:
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget):
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm:
        (QListBox::sizeForNumberOfLines):
        * kwq/KWQObject.h:
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::addRoundedRectClip):
        * kwq/KWQPixmap.h:
        * kwq/KWQPixmap.mm:
        (QPixmap::QPixmap):
        (QPixmap::size):
        (QPixmap::resize):
        * kwq/KWQRect.h:
        * kwq/KWQRect.mm:
        (QRect::QRect):
        (QRect::size):
        * kwq/KWQSize.h: Removed.
        * kwq/KWQSize.mm: Removed.
        * kwq/KWQSizeF.h:
        * kwq/KWQSizeF.mm:
        (QSizeF::QSizeF):
        * kwq/KWQSlider.h:
        * kwq/KWQSlider.mm:
        (QSlider::sizeHint):
        * kwq/KWQStyle.cpp:
        (QStyle::sizeFromContents):
        * kwq/KWQStyle.h:
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm:
        (QTextEdit::sizeWithColumnsAndRows):
        * kwq/KWQWidget.h:
        * kwq/KWQWidget.mm:
        (QWidget::sizeHint):
        (QWidget::size):
        (QWidget::resize):
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::sizeHint):
        * platform: Added.
        * platform/IntSize.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::isValid):
        (WebCore::IntSize::expandedTo):
        (WebCore::operator+):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/IntSize.h: Added.
        * platform/mac: Added.
        * platform/mac/IntSize.mm: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator NSSize):
        (WebCore::IntSize::operator CGSize):

2006-01-13  Maks Orlovich <maksim@kde.org>

        Reviewed, redone a bit, and landed by Darin (help from Eric too).

        - fix http://bugs.webkit.org/show_bug.cgi?id=4586
          rowIndex calculation doesn't consider head to come before body.

        Test: fast/table/rowindex.html

        * khtml/html/html_tableimpl.cpp: (DOM::HTMLTableRowElementImpl::rowIndex):
        Change algorithm so the rows are numbered in this order: (a) all rows in the
        table header section, (b) all rows in all table body sections, (c) all rows
        in the table footer section. Rows in extra table header or footer sections
        don't get row numbers (rowIndex returns -1). This matches Firefox.

2006-01-13  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed, tweaked, and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6509
          content property with supported value followed by currently unsupported open-quote displays duplicated content

        Test: fast/css-generated-content/no-openclose-quote.html

        * khtml/css/cssparser.cpp: (CSSParser::parseContent): Make sure parsedValue
        is always initialized to 0 (in particular for the CSS_IDENT case which is
        currently unimplemented).

2006-01-13  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6418
          Incorrect scrollbar when using overflow:auto and word-wrap:break-word; in some cases
        
        Test: fast/text/basic/015.html

        * khtml/rendering/bidi.cpp:
        (khtml::RenderBlock::findNextLineBreak):
        Avoid inconsistent width measurement when breaking in the middle of a
        word is allowed. Eliminate the relaxation by 1 of the width overflow
        check that was supposed to compensate for the inconsistency but didn't
        always work, and on the other hand sometimes resulted in allowing text
        to overflow its container by one pixel.
        Also applied start and end width correctly in the break-words case.

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - rename WebCoreBridge to WebCoreFrameBridge

        * WebCore.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow):
        * bridge/mac/MacFrame.h:
        (MacFrame::bridge):
        * bridge/mac/MacFrame.mm:
        (MacFrame::submitForm):
        (MacFrame::createPart):
        (MacFrame::bridgeForWidget):
        (MacFrame::documentViewForNode):
        (MacFrame::setBridge):
        * bridge/mac/WebCoreBridge.h: Removed.
        * bridge/mac/WebCoreBridge.mm: Removed.
        * bridge/mac/WebCoreFrameBridge.h: Added.
        * bridge/mac/WebCoreFrameBridge.mm: Added.
        (-[WebCoreFrameBridge executionContextForView:]):
        (frameHasSelection):
        (-[WebCoreFrameBridge firstChild]):
        (-[WebCoreFrameBridge lastChild]):
        (-[WebCoreFrameBridge previousSibling]):
        (-[WebCoreFrameBridge nextSibling]):
        (-[WebCoreFrameBridge isDescendantOfFrame:]):
        (-[WebCoreFrameBridge traverseNextFrameStayWithin:]):
        (-[WebCoreFrameBridge appendChild:]):
        (-[WebCoreFrameBridge removeChild:]):
        (-[WebCoreFrameBridge childFrameNamed:]):
        (-[WebCoreFrameBridge _deepLastChildFrame]):
        (-[WebCoreFrameBridge nextFrameWithWrap:]):
        (-[WebCoreFrameBridge previousFrameWithWrap:]):
        (-[WebCoreFrameBridge _shouldAllowAccessFrom:]):
        (-[WebCoreFrameBridge _descendantFrameNamed:sourceFrame:]):
        (-[WebCoreFrameBridge _frameInAnyWindowNamed:sourceFrame:]):
        (-[WebCoreFrameBridge findFrameNamed:]):
        (+[WebCoreFrameBridge bridgeForDOMDocument:]):
        (-[WebCoreFrameBridge setParent:]):
        (-[WebCoreFrameBridge parent]):
        (nowPrinting):
        (-[WebCoreFrameBridge opener]):
        (-[WebCoreFrameBridge setOpener:]):
        (+[WebCoreFrameBridge stringWithData:textEncodingName:]):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject rendererForView:]):
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]):
        * kwq/KWQFileButton.mm:
        (KWQFileButton::focusPolicy):
        * kwq/KWQFrame.mm:
        * kwq/KWQKJavaAppletWidget.mm:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQListBox.mm:
        (-[KWQTableView keyDown:]):
        (-[KWQTableView keyUp:]):
        * kwq/KWQLoader.mm:
        (KWQServeRequest):
        (KWQServeSynchronousRequest):
        (KWQCheckCacheObjectStatus):
        (KWQCacheObjectExpiresTime):
        * kwq/KWQSlider.mm:
        (QSlider::focusPolicy):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView textDidChange:]):
        (-[KWQTextAreaTextView _trackResizeFromMouseDown:]):
        (-[KWQTextAreaTextView keyDown:]):
        (-[KWQTextAreaTextView keyUp:]):
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController controlTextDidBeginEditing:]):
        (-[KWQTextFieldController controlTextDidEndEditing:]):
        (-[KWQTextFieldController controlTextDidChange:]):
        (-[KWQTextFieldController control:textView:doCommandBySelector:]):
        (-[KWQTextFieldController textView:shouldHandleEvent:]):
        * kwq/KWQWidget.mm:
        (QWidget::setFocus):
        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::KWQWindowWidget):
        * kwq/WebCoreFrameNamespaces.h:
        * kwq/WebCoreFrameNamespaces.m:
        (+[WebCoreFrameNamespaces addFrame:toNamespace:]):
        * kwq/WebCoreFrameView.h:
        * kwq/WebCoreSettings.mm:
        * kwq/WebCoreTextRendererFactory.mm:
        * kwq/WebCoreViewFactory.h:

2006-01-13  Darin Adler  <darin@apple.com>

        - Replaced tabs with spaces in source files that had less than 10 lines with tabs.
        - Set allow-tabs Subversion property in source files that have more than 10 lines with tabs.

2006-01-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove CG dependencies from kcanvas/device/quartz
        http://bugs.webkit.org/show_bug.cgi?id=6521
        Adding file omitted from last commit.

        * kcanvas/RenderSVGImage.cpp:
        (RenderSVGImage::paint): removed cg calls

2006-01-13  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove CG dependencies from kcanvas/device/quartz
        http://bugs.webkit.org/show_bug.cgi?id=6521

        * kcanvas/KCanvasFilters.h:
        * kcanvas/KCanvasResources.h:
        * kcanvas/device/KRenderingDevice.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::prepareFilter): removed parameter
        (KCanvasFilterQuartz::applyFilter): removed parameter
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::drawMarkersIfNeeded): removed cg call
        (KCanvasItemQuartz::paint): removed cg calls
        (getSharedContext): spacing
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h:
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm:
        (KCanvasMaskerQuartz::applyMask): removed parameter
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (KCanvasClipperQuartz::KCanvasClipperQuartz):
        (KCanvasImageQuartz::KCanvasImageQuartz):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasContainerQuartz::paint): removed CG calls
        (KCanvasClipperQuartz::applyClip): removed parameter
        (KCanvasImageQuartz::~KCanvasImageQuartz):
        (KCanvasImageQuartz::cgLayer): spacing
        (KCanvasImageQuartz::setCGLayer): spacing
        * kcanvas/device/quartz/KRenderingDeviceQuartz.h:
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceContextQuartz::clearPath): added.
        (KRenderingDeviceContextQuartz::addPath): added.
        (KRenderingDeviceQuartz::quartzContext): spacing

2006-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6508
          retire APPLE_CHANGES

        * WebCore.vcproj/WebCore/WebCore.vcproj: Don't set APPLE_CHANGES or
        HAVE_CONFIG_H any more.

        * WebCore.xcodeproj/project.pbxproj: Don't set APPLE_CHANGES or
        KHTML_NO_CPLUSPLUS_DOM any more.

        * kcanvas/KCanvasFilters.h:
        Use __APPLE__ instead of APPLE_CHANGES.

        * bridge/mac/MacFrame.mm: (MacFrame::respondToChangedContents):
        * kcanvas/KCanvasTreeDebug.cpp:
        * ksvg2/svg/SVGAElementImpl.cpp: (SVGAElementImpl::defaultEventHandler):
        * ksvg2/svg/SVGElementImpl.h: (KSVG::svg_dynamic_cast):
        * ksvg2/svg/SVGScriptElementImpl.cpp: (SVGScriptElementImpl::executeScript):
        * page/Frame.cpp: (Frame::paint):
        Make some APPLE_CHANGES code unconditional.

        * WebCore+SVG/kdom.h:
        * ksvg2/ecma/Ecma.cpp: (Ecma::setupDocument):
        * ksvg2/svg/SVGCursorElementImpl.cpp:
        * ksvg2/svg/SVGImageElementImpl.cpp:
        Remove some !APPLE_CHANGES code.

        * ksvg2/svg/SVGDocumentImpl.h:
        Remove some unneeded APPLE_CHANGES code.

        * khtml/rendering/render_flexbox.cpp: (khtml::RenderFlexibleBox::layoutVerticalBox):
        Remove a misleading mention of APPLE_CHANGES in a comment.

        Also changed tabs to spaces in files I am committing.

2006-01-12  David Hyatt <hyatt@apple.com>

        Get the misc directory compiling on Win32.

        * ForwardingHeaders/kio/jobclasses.h:
        * ForwardingHeaders/qasyncio.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * khtml/misc/CachedImage.cpp:
        (khtml::CachedImage::data):
        * khtml/misc/decoder.cpp:
        (KanjiCode::):

2006-01-12  David Hyatt <hyatt@apple.com>

        Make the ecma directory compile on Win32.

        * ForwardingHeaders/kconfig.h:
        * ForwardingHeaders/kwinmodule.h:
        * ForwardingHeaders/qguardedptr.h:
        * ForwardingHeaders/qstylesheet.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * WebCore.vcproj/WebCore/build-generated-files.sh:
        * khtml/ecma/XSLTProcessor.cpp:
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::createLanguageInstanceForValue):
        * khtml/ecma/kjs_css.h:
        * khtml/ecma/kjs_dom.cpp:
        (KJS::getRuntimeObject):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::Context2D::setShadow):
        (KJS::Context2D::updateFillImagePattern):
        (KJS::Context2D::updateStrokeImagePattern):
        (KJS::Context2D::putValueProperty):
        (KJS::Gradient::commonInit):
        (KJS::Gradient::~Gradient):
        (KJS::_rh):
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_window.cpp:
        (KJS::intFeature):

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dave Hyatt.

        - removed leftover files from form split, fix remaining include of the header.

        * khtml/html/html_formimpl.cpp: Removed.
        * khtml/html/html_formimpl.h: Removed.
        * page/Frame.cpp:

2006-01-12  David Hyatt <hyatt@apple.com>

        Make the editing directory compile on Win32.

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * khtml/editing/jsediting.cpp:

2006-01-12  David Hyatt <hyatt@apple.com>

        Get the HTML, XML, and Rendering directories compiling on
        Win32.  Add the bash script for generated files as well.

        * ForwardingHeaders/kio/job.h:
        * ForwardingHeaders/ksslkeygen.h:
        * ForwardingHeaders/qpoint.h:
        * ForwardingHeaders/qpointarray.h:
        * ForwardingHeaders/qtextstream.h:
        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * khtml/html/HTMLSelectElementImpl.cpp:
        (DOM::HTMLSelectElementImpl::state):
        * khtml/html/html_canvasimpl.cpp:
        (HTMLCanvasElementImpl::createRenderer):
        * khtml/html/html_imageimpl.h:
        (DOM::):
        * khtml/rendering/render_object.h:
        * khtml/xml/DocumentImpl.cpp:
        (DocumentImpl::detach):
        (DocumentImpl::getAccObjectCache):
        (DocumentImpl::updateSelection):
        (DocumentImpl::implicitClose):
        (DocumentImpl::setFocusNode):
        * kwq/KWQAccObjectCache.h:
        * kwq/KWQKJobClasses.h:

2006-01-12  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5153
        deleteRule and insertRule do not work
        
        This also makes updating the disabled flag on style sheets work.
        It also adds the IE-only removeRule which is the counterpart to
        the already existing addRule.
        
        * khtml/css/css_stylesheetimpl.cpp:
        (CSSStyleSheetImpl::insertRule):
        (CSSStyleSheetImpl::deleteRule):
        Call styleSheetChanged()
        
        (CSSStyleSheetImpl::styleSheetChanged):
        Call DocumentImpl::updateStyleSelector()
        
        * khtml/css/css_stylesheetimpl.h:        
        (DOM::StyleSheetImpl::setDisabled):
        Call styleSheetChanged();
        
        (DOM::StyleSheetImpl::styleSheetChanged):
        New function.
        
        (DOM::CSSStyleSheetImpl::removeRule):
        New IE extension function, simply calls deleteRule.
        
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::CSSStyleSelector):
        Ignore disabled style sheets.
        
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleSheetProtoFunc::callAsFunction):
        * khtml/ecma/kjs_css.h:
        (KJS::DOMCSSStyleSheet::):
        Add removeRule.

2006-01-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.
        
        Test: fast/css/rtl-ordering.html
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6334
          REGRESSION: <input type="button"> text is reversed on "visual Hebrew" pages

        * khtml/css/cssparser.cpp: (CSSParser::parseValue): Parse the new -khtml-rtl-ordering property.
        * khtml/css/cssproperties.in: Added -khtml-rtl-ordering property.
        * khtml/css/cssstyleselector.cpp: (CSSStyleSelector::applyProperty): Apply the new property.
        * khtml/css/cssvalues.in: Added "logical" and "visual" values for the -khtml-rtl-ordering property.
        * khtml/css/html4.css: Force logical ordering in input-buttons.
        * khtml/css/makeprop: Fixed maximum property length computation.
        * khtml/rendering/render_style.h: Added initial value for visuallyOrdered.
        * ksvg2/scripts/cssmakeprops: Ensure no overlap between KHTML and SVG CSS properties.
        * ksvg2/scripts/cssmakevalues: Ensure no overlap between KHTML and SVG CSS values.

2006-01-12  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6219
          Perf regression: -[NSImage initWithData:] called repeatedly while
          moving the cursor over an image

        * khtml/rendering/render_image.h: (khtml::RenderImage::pixmap):
        Return a const QPixmap&.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge elementAtPoint:]):
        Avoid copying the QPixmap and its renderer.

2006-01-12  Justin Haygood  <justin@xiondigital.net>

        Reviewed, tweaked, and landed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6497
          Use #include, not #import, in KWQ C++ files

        * bridge/mac/KWQKHTMLView.cpp:
        * kcanvas/RenderSVGText.cpp:
        * khtml/css/css_computedstyle.cpp:
        * kwq/KWQArrayImpl.cpp:
        * kwq/KWQBuffer.cpp:
        * kwq/KWQCString.cpp:
        * kwq/KWQCharsets.cpp:
        * kwq/KWQDateTime.cpp:
        * kwq/KWQDictImpl.cpp:
        * kwq/KWQGuardedPtr.cpp:
        * kwq/KWQKHTMLFactory.cpp:
        * kwq/KWQKPartsEvent.cpp:
        * kwq/KWQListImpl.cpp:
        * kwq/KWQMapImpl.cpp:
        * kwq/KWQObject.cpp:
        * kwq/KWQPen.cpp:
        * kwq/KWQPointArray.cpp:
        * kwq/KWQPtrDictImpl.cpp:
        * kwq/KWQRegion.cpp:
        * kwq/KWQStyle.cpp:
        * kwq/KWQTextCodec.cpp:
        * kwq/KWQTextStream.cpp:
        * kwq/KWQTimer.cpp:
        * kwq/KWQValueListImpl.cpp:
        * kwq/KWQVariant.cpp:
        * kwq/KWQVectorImpl.cpp:
        * kwq/KWQWMatrix.cpp:
        Replaced #import with #include.

        * kwq/KWQRegExp.cpp: Replaced #import with #include.
        Also changed <JavaScriptCore/pcre.h> to <pcre/pcre.h>.
        * ForwardingHeaders/pcre: Added.
        * ForwardingHeaders/pcre/pcre.h: Added.

2006-01-12  Eric Seidel  <eseidel@apple.com>

        Reviewed by anders & mjs.

        Split dom_docimpl.* out into separate files (one per class):
        http://bugs.webkit.org/show_bug.cgi?id=6502

        * ForwardingHeaders/kdom/core/DOMImplementationImpl.h: Removed.
        * ForwardingHeaders/kdom/core/DocumentImpl.h: Removed.
        * ForwardingHeaders/kdom/core/DocumentTypeImpl.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/WebCoreBridge.mm:
        * kcanvas/KCanvasResources.cpp:
        * kcanvas/RenderSVGText.h:
        * khtml/css/css_base.cpp:
        * khtml/css/css_computedstyle.cpp:
        * khtml/css/css_ruleimpl.cpp:
        * khtml/css/css_valueimpl.cpp:
        * khtml/css/cssparser.cpp:
        * khtml/css/parser.y:
        * khtml/ecma/XSLTProcessor.cpp:
        * khtml/ecma/domparser.cpp:
        * khtml/ecma/kjs_css.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_range.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/ecma/kjs_views.cpp:
        * khtml/ecma/kjs_window.cpp:
        * khtml/ecma/xmlhttprequest.cpp:
        * khtml/ecma/xmlserializer.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/editing/apply_style_command.cpp:
        * khtml/editing/composite_edit_command.cpp:
        * khtml/editing/delete_selection_command.cpp:
        * khtml/editing/edit_command.cpp:
        * khtml/editing/htmlediting.cpp:
        * khtml/editing/insert_line_break_command.cpp:
        * khtml/editing/insert_paragraph_separator_command.cpp:
        * khtml/editing/insert_text_command.cpp:
        * khtml/editing/join_text_nodes_command.cpp:
        * khtml/editing/jsediting.cpp:
        * khtml/editing/markup.cpp:
        * khtml/editing/markup.h:
        * khtml/editing/merge_identical_elements_command.cpp:
        * khtml/editing/move_selection_command.cpp:
        * khtml/editing/rebalance_whitespace_command.cpp:
        * khtml/editing/replace_selection_command.cpp:
        * khtml/editing/split_text_node_command.cpp:
        * khtml/editing/typing_command.cpp:
        * khtml/editing/visible_position.cpp:
        * khtml/editing/visible_text.cpp:
        * khtml/editing/visible_units.cpp:
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        * khtml/html/HTMLInputElementImpl.cpp:
        * khtml/html/HTMLKeygenElementImpl.cpp:
        * khtml/html/HTMLLabelElementImpl.cpp:
        * khtml/html/HTMLOptionElementImpl.cpp:
        * khtml/html/HTMLSelectElementImpl.cpp:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_documentimpl.h:
        * khtml/html/html_listimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/htmlfactory.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/html/htmltokenizer.cpp:
        * khtml/misc/Cache.cpp:
        * khtml/misc/DocLoader.cpp:
        * khtml/rendering/InlineTextBox.cpp:
        * khtml/rendering/bidi.cpp:
        * khtml/rendering/render_applet.cpp:
        * khtml/rendering/render_block.cpp:
        * khtml/rendering/render_box.cpp:
        * khtml/rendering/render_br.cpp:
        * khtml/rendering/render_button.cpp:
        * khtml/rendering/render_canvas.cpp:
        * khtml/rendering/render_container.cpp:
        * khtml/rendering/render_flow.cpp:
        * khtml/rendering/render_form.cpp:
        * khtml/rendering/render_frames.cpp:
        * khtml/rendering/render_inline.cpp:
        * khtml/rendering/render_layer.cpp:
        * khtml/rendering/render_line.cpp:
        * khtml/rendering/render_list.cpp:
        * khtml/rendering/render_object.cpp:
        * khtml/rendering/render_replaced.cpp:
        * khtml/rendering/render_table.cpp:
        * khtml/rendering/render_theme.cpp:
        * khtml/rendering/render_theme_mac.mm:
        * khtml/xml/DOMImplementationImpl.cpp: Added.
        * khtml/xml/DOMImplementationImpl.h: Added.
        * khtml/xml/DocumentFragmentImpl.cpp: Added.
        * khtml/xml/DocumentFragmentImpl.h: Added.
        * khtml/xml/DocumentImpl.cpp: Added.
        (DocumentImpl::setDocType):
        (DocumentImpl::getElementsByName):
        * khtml/xml/DocumentImpl.h: Added.
        * khtml/xml/DocumentTypeImpl.cpp: Added.
        * khtml/xml/DocumentTypeImpl.h: Added.
        * khtml/xml/dom2_eventsimpl.cpp:
        * khtml/xml/dom2_rangeimpl.cpp:
        * khtml/xml/dom2_traversalimpl.cpp:
        * khtml/xml/dom2_viewsimpl.cpp:
        * khtml/xml/dom_docimpl.cpp: Removed.
        * khtml/xml/dom_docimpl.h: Removed.
        * khtml/xml/dom_elementimpl.cpp:
        * khtml/xml/dom_nodeimpl.cpp:
        * khtml/xml/dom_textimpl.cpp:
        * khtml/xml/dom_xmlimpl.cpp:
        * khtml/xml/xml_tokenizer.cpp:
        * khtml/xsl/xslt_processorimpl.cpp:
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        * ksvg2/misc/SVGImageLoader.cpp:
        * ksvg2/svg/SVGAElementImpl.cpp:
        * ksvg2/svg/SVGAnimationElementImpl.cpp:
        * ksvg2/svg/SVGClipPathElementImpl.cpp:
        * ksvg2/svg/SVGCursorElementImpl.cpp:
        * ksvg2/svg/SVGDOMImplementationImpl.cpp:
        * ksvg2/svg/SVGDOMImplementationImpl.h:
        * ksvg2/svg/SVGDocumentImpl.h:
        * ksvg2/svg/SVGElementImpl.cpp:
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        * ksvg2/svg/SVGGradientElementImpl.cpp:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        * ksvg2/svg/SVGPolyElementImpl.cpp:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * ksvg2/svg/SVGStopElementImpl.cpp:
        * ksvg2/svg/SVGStyleElementImpl.cpp:
        * ksvg2/svg/SVGStyledElementImpl.cpp:
        * ksvg2/svg/SVGUseElementImpl.cpp:
        * kwq/DOM-CSS.mm:
        * kwq/DOM.mm:
        * kwq/DOMEvents.mm:
        * kwq/DOMHTML.mm:
        * kwq/DOMInternal.mm:
        * kwq/DOMViews.mm:
        * kwq/KWQAccObject.mm:
        * kwq/KWQAccObjectCache.mm:
        * kwq/KWQKJavaAppletWidget.mm:
        * kwq/KWQPageState.mm:
        * kwq/KWQRenderTreeDebug.cpp:
        * kwq/KWQSlot.mm:
        * page/Frame.cpp:

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.
        
        - fixed build breakage

        * ksvg2/misc/SVGImageLoader.cpp: Add dom_docimpl.h include

2006-01-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - remove dom_documentimpl.h include from other headers where possible,
        move down to impl files instead, so less rebuilds when you touch it

        * bridge/mac/MacFrame.mm:
        (MacFrame::openURLFromPageCache):
        * kcanvas/KCanvasResources.cpp:
        * khtml/css/css_computedstyle.cpp:
        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::frame):
        * khtml/editing/SelectionController.h:
        * khtml/editing/composite_edit_command.cpp:
        * khtml/editing/delete_selection_command.cpp:
        * khtml/editing/jsediting.cpp:
        * khtml/editing/jsediting.h:
        * khtml/editing/markup.h:
        * khtml/editing/visible_position.cpp:
        * khtml/editing/visible_text.cpp:
        * khtml/html/HTMLGenericFormElementImpl.cpp:
        * khtml/html/HTMLInputElementImpl.cpp:
        * khtml/html/HTMLLabelElementImpl.cpp:
        * khtml/html/HTMLOptionElementImpl.cpp:
        * khtml/html/HTMLSelectElementImpl.cpp:
        * khtml/html/HTMLTextAreaElementImpl.cpp:
        * khtml/html/htmltokenizer.h:
        * khtml/rendering/InlineTextBox.cpp:
        * khtml/rendering/bidi.cpp:
        * khtml/rendering/render_br.cpp:
        * khtml/rendering/render_button.cpp:
        * khtml/rendering/render_object.cpp:
        (RenderObject::documentBeingDestroyed):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_theme.cpp:
        * khtml/rendering/render_theme_mac.mm:
        * khtml/xbl/xbl_docimpl.h:
        * khtml/xml/dom2_rangeimpl.cpp:
        * ksvg2/svg/SVGAElementImpl.cpp:
        * ksvg2/svg/SVGClipPathElementImpl.cpp:
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        * ksvg2/svg/SVGHelper.cpp:
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        * ksvg2/svg/SVGUseElementImpl.cpp:
        * kwq/KWQAccObjectCache.mm:
        * kwq/KWQPageState.h:
        * kwq/KWQPageState.mm:

2006-01-12  Anders Carlsson  <andersca@mac.com>

        Fix build

        * khtml/ecma/kjs_window.cpp:
        Remove include.

2006-01-12  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej

        http://bugs.webkit.org/show_bug.cgi?id=6501
        - Merge KParts::BrowserInterface with KParts::BrowserExtension.
        
        * ForwardingHeaders/kparts/browserinterface.h: Removed.
        * bridge/mac/KWQKPartsBrowserInterface.mm: Removed.
        * kwq/KWQKPartsBrowserInterface.h: Removed.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/KWQKHTMLPartBrowserExtension.h:
        * bridge/mac/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::KHTMLPartBrowserExtension):
        (KHTMLPartBrowserExtension::getHistoryLength):
        (KHTMLPartBrowserExtension::goBackOrForward):        
        * bridge/mac/KWQKPartsBrowserExtension.h:
        (KParts::BrowserExtension::BrowserExtension):
        * khtml/ecma/kjs_window.cpp:
        (KJS::History::getValueProperty):
        * khtml/xml/xml_tokenizer.cpp:
        * page/Frame.cpp:
        (Frame::slotRedirect):
        * page/FrameView.cpp:
        Add getHistoryLength and goBackOrForward to BrowserExtension and
        use them.

2006-01-12  Eric Seidel  <eseidel@apple.com>

        Build fix, files missing from previous <image> commit:
        http://bugs.webkit.org/show_bug.cgi?id=5965 

        * kcanvas/RenderSVGImage.cpp: Added.
        (RenderSVGImage::RenderSVGImage):
        (RenderSVGImage::~RenderSVGImage):
        (RenderSVGImage::paint):
        (RenderSVGImage::translateForAttributes):
        * kcanvas/RenderSVGImage.h: Added.
        * ksvg2/misc/SVGImageLoader.cpp: Added.
        (SVGImageLoader::SVGImageLoader):
        (SVGImageLoader::~SVGImageLoader):
        (SVGImageLoader::updateFromElement):
        * ksvg2/misc/SVGImageLoader.h: Added.

2006-01-12  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=6496
        - Merge KParts::Part with KParts::ReadOnly part and rename it to
        ObjectContents.
        
        * ForwardingHeaders/kparts/part.h: Removed.
        * kwq/KWQKPartsPart.h: Removed.
        * kwq/KWQKPartsPart.mm: Removed.
        * kwq/KWQObject.cpp:
        
        page/ObjectContents.h: Added
        (ObjectContents::ObjectContents):
        (ObjectContents::url):
        (ObjectContents::setName):
        (ObjectContents::widget):
        (ObjectContents::setWidget):
        (ObjectContents::ref):
        (ObjectContents::deref):
        (ObjectContents::event):
        (ObjectContents::customEvent):
        (ObjectContents::isObjectContents):

        Renames:
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/KWQKHTMLPartBrowserExtension.h:
        * bridge/mac/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow):
        * bridge/mac/KWQKPartsBrowserExtension.h:
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        (MacFrame::createPart):
        * bridge/mac/WebCoreBridge.mm:
        (-[WebCoreBridge saveDocumentToPageCache]):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSLazyEventListener::parseCode):
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::Window::indexGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::WindowFunc::callAsFunction):
        (KJS::FrameArray::getValueProperty):
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        (KJS::FrameArray::getOwnPropertySlot):
        (QObject::inherits):
        (QObject::isObjectContents):
        * kwq/KWQObject.h:
        * page/Frame.cpp:
        (Frame::stopLoading):
        (Frame::stopAnimations):
        (Frame::checkEmitLoadEvent):
        (Frame::processObjectRequest):
        (Frame::childFrame):
        (Frame::findFrame):
        (Frame::setZoomFactor):
        (Frame::frames):
        (Frame::customEvent):
        (Frame::slotPartRemoved):
        (Frame::connectChild):
        (Frame::disconnectChild):
        (Frame::setPolicyBaseURL):
        (Frame::setName):
        * page/Frame.h:
        (Frame::Frame):
        * page/FramePrivate.h:

2006-01-12  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Refactor HTMLImageLoader to make subclassing possible. Implement
        RenderSVGText-style RenderImage subclass. Use this to reimplement
        SVGImageElementImpl.

        As a side effect, this should fix:
        http://bugs.webkit.org/show_bug.cgi?id=5965
        
        Already covered by several existing tests.
        Re-enabled disabled image tests.

        * WebCore.xcodeproj/project.pbxproj:
        * kcanvas/RenderSVGImage.cpp: Added.
        (RenderSVGImage::RenderSVGImage):
        (~RenderSVGImage::RenderSVGImage):
        (RenderSVGImage::paint):
        (RenderSVGImage::translateForAttributes):
        * kcanvas/RenderSVGImage.h: Added.
        * khtml/html/html_imageimpl.cpp:
        (DOM::HTMLImageLoader::setLoadingImage): trivial method extraction
        (DOM::HTMLImageLoader::updateFromElement): make virtual
        * khtml/html/html_imageimpl.h:
        (DOM::):
        * ksvg2/misc/SVGImageLoader.cpp: Added.
        (SVGImageLoader::SVGImageLoader):
        (~SVGImageLoader:SVGImageLoader):
        (SVGImageLoader::updateFromElement):
        * ksvg2/misc/SVGImageLoader.h: Added.
        * ksvg2/svg/SVGImageElementImpl.cpp:
        (SVGImageElementImpl::SVGImageElementImpl):
        (SVGImageElementImpl::parseMappedAttribute):
        (SVGImageElementImpl::createRenderer):
        (SVGImageElementImpl::attach):
        * ksvg2/svg/SVGImageElementImpl.h:

2006-01-11  David Hyatt  <hyatt@apple.com>

        Changes to get the XML directory nearly compiling on Win32.
        Down to just the gperf of cssvalues.in and a need to replace
        usleep.

        Reviewed by darin

        * WebCore.vcproj/WebCore/WebCore.vcproj:
        * khtml/config.h:
        * khtml/xml/dom_stringimpl.cpp:
        (DOM::DOMStringImpl::toCoordsArray):
        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::error):

2006-01-11  Justin Garcia  <justin.garcia@apple.com>

        Replaced two asserts that I accidently removed in
        the build bustage fix.

        * page/Frame.cpp:
        (Frame::revealSelection):
        (Frame::centerSelectionInVisibleArea):

2006-01-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by kevin

        The removal of Frame::clearSelection() broke a layout 
        test. clearSelection did setSelection(SelectionController()), which
        is not the same as selection().clear().  setSelection() notifies
        the editing delegate of a selection change.  This is non obvious
        and should be fixed.  Filed:
        <http://bugs.webkit.org/show_bug.cgi?id=6498>
        SelectionController's setters should notify delegates of selection changes

        * bridge/mac/WebCoreBridge.mm:
        (-[WebCoreBridge deselectText]):
        * khtml/editing/jsediting.cpp:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::clearSelectionIfNeeded):

2006-01-11  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by darin
        
        <http://bugs.webkit.org/show_bug.cgi?id=5870>
        Double-clicking on an SVG dies in HTML editing code
        <rdar://problem/4393815>
        Assertion failure: result != *this (khtml::VisiblePosition::previous())
        + build bustage fix from previous checkin

        Tests added (+ expected results):
        * editing/selection/iframe.html: Added.
        * editing/selection/inline-table.html: Added.
        * editing/selection/select-box.html: Added.
        
        Test results changed (change looks funny but is correct):
        * editing/inserting/editing-empty-divs.html
        
        Account for replaced elements with children in isCandidate and maxDeepOffset
        Stop at candidates in VisiblePosition::deepEquivalent, descending will
        yield positions that aren't visually equivalent.
        Fixed a caret painting regression (removed downstreamDeepEquivalent)
        Moved isAtomicNode and maxDeepOffset out of NodeImpl
        Removed redundant code
        
        Todo: 
        Move more editing functions out of NodeImpl
        Improve the selection of VP candidates to fix 6476

        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::SelectionController):
        (khtml::SelectionController::xPosForVerticalArrowNavigation):
        (khtml::SelectionController::getRangeAt):
        (khtml::SelectionController::layout):
        (khtml::SelectionController::adjustForEditableContent):
        * khtml/editing/apply_style_command.cpp:
        (khtml::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (khtml::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        * khtml/editing/delete_selection_command.cpp:
        (khtml::DeleteSelectionCommand::handleSpecialCaseBRDelete):
        (khtml::DeleteSelectionCommand::handleGeneralDelete):
        * khtml/editing/htmlediting.cpp:
        (khtml::isAtomicNode):
        (khtml::maxDeepOffset):
        (khtml::isLastVisiblePositionInSpecialElement):
        (khtml::positionAfterContainingSpecialElement):
        * khtml/editing/htmlediting.h:
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplaceSelectionCommand::fixupNodeStyles):
        (khtml::ReplaceSelectionCommand::doApply):
        * khtml/editing/visible_position.cpp:
        (khtml::VisiblePosition::previousVisiblePosition):
        (khtml::VisiblePosition::isCandidate):
        (khtml::VisiblePosition::deepEquivalent):
        (khtml::VisiblePosition::character):
        (khtml::makeRange):
        (khtml::setStart):
        (khtml::setEnd):
        (khtml::enclosingBlockFlowElement):
        (khtml::isFirstVisiblePositionInNode):
        (khtml::isLastVisiblePositionInNode):
        * khtml/editing/visible_position.h:
        (khtml::VisiblePosition::setAffinity):
        * khtml/editing/visible_units.cpp:
        (khtml::previousLinePosition):
        (khtml::nextLinePosition):
        * khtml/xml/dom2_rangeimpl.cpp:
        (DOM::RangeImpl::editingStartPosition):
        * khtml/xml/dom_nodeimpl.cpp:
        (DOM::NodeImpl::previousNodeConsideringAtomicNodes):
        (DOM::NodeImpl::nextNodeConsideringAtomicNodes):
        (DOM::NodeImpl::previousLeafNode):
        (DOM::NodeImpl::nextLeafNode):
        (DOM::NodeImpl::isBlockFlowOrBlockTable):
        (DOM::NodeImpl::enclosingBlockFlowOrTableElement):
        * khtml/xml/dom_nodeimpl.h:
        * khtml/xml/dom_position.cpp:
        (DOM::Position::previous):
        (DOM::Position::next):
        (DOM::Position::atEnd):
        (DOM::isStreamer):
        (DOM::Position::upstream):
        (DOM::Position::downstream):
        * khtml/xml/dom_position.h:
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject doAXUIElementForTextMarker:]):
        * page/Frame.cpp:
        (Frame::selectContentsOfNode):
        
2006-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - remove some selection-related methods on Frame that are just simple wrappers
        of Selection methods.

        * bridge/mac/MacFrame.mm:
        (MacFrame::findString):
        (MacFrame::advanceToNextMisspelling):
        * bridge/mac/WebCoreBridge.mm:
        (-[WebCoreBridge deselectText]):
        (-[WebCoreBridge selectedAttributedString]):
        (-[WebCoreBridge attributedStringFrom:startOffset:to:endOffset:]):
        * khtml/editing/jsediting.cpp:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::clearSelectionIfNeeded):
        * page/Frame.cpp:
        (Frame::selection):
        (Frame::currentForm):
        (Frame::revealSelection):
        (Frame::centerSelectionInVisibleArea):
        * page/Frame.h:
        * page/FrameView.cpp:
        (KHTMLView::clear):

2006-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - reduce the number of files that rebuild when you touch Frame.h

        * ForwardingHeaders/ksvg2/KSVGView.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/MacFrame.mm:
        (convertAttributesToUnderlines):
        * khtml/ecma/kjs_window.cpp:
        * khtml/editing/htmlediting.cpp:
        * khtml/editing/typing_command.cpp:
        * khtml/html/HTMLKeygenElementImpl.cpp:
        (DOM::HTMLKeygenElementImpl::appendFormData):
        * khtml/html/html_imageimpl.cpp:
        * khtml/rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        (khtml::InlineTextBox::paintMarkedTextUnderline):
        * khtml/rendering/InlineTextBox.h:
        * khtml/rendering/render_layer.cpp:
        * khtml/xml/dom_docimpl.cpp:
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject value]):
        * kwq/KWQFileButton.h:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQRenderTreeDebug.cpp:
        (write):
        * page/Frame.cpp:
        (Frame::markedTextUnderlines):
        * page/Frame.h:
        (MarkedTextUnderline::MarkedTextUnderline):

2006-01-11  Anders Carlsson  <andersca@mac.com>

        Build fix.
        
        * ForwardingHeaders/ksvg2/KSVGView.h:
        Rename KHTMLView to FrameView and include FrameView.h

2006-01-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - renamed KHTMLPartPrivate to FramePrivate and KHTMLView to FrameView
        http://bugs.webkit.org/show_bug.cgi?id=6490

        (also corresponding header renames, remove headers where not
        needed, and a few substantive changes to allow more header removal)

        * khtml/xml/dom_docimpl.h: moved m_selectedStylesheetSet here from
        KHTMLPartPrivate, since this was the only class using it.
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::processHttpEquiv): ditto
        (DocumentImpl::selectedStylesheetSet): ditto
        (DocumentImpl::setSelectedStylesheetSet): ditto
        (DocumentImpl::recalcStyleSelector): ditto
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDocument::getValueProperty): Use new isCompleted method
        on Frame instead of accessing private field directly.
        (KJS::getDOMDocumentNode): remove gratuitous use of view()
        
        Just the renames:
        
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/mac/KWQKHTMLView.cpp:
        * bridge/mac/MacFrame.h:
        * bridge/mac/MacFrame.mm:
        * bridge/mac/WebCoreBridge.mm:
        * khtml/css/cssstyleselector.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/ecma/kjs_window.cpp:
        * khtml/ecma/xmlhttprequest.cpp:
        * khtml/editing/SelectionController.cpp:
        * khtml/editing/htmlediting.cpp:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_elementimpl.cpp:
        * khtml/html/html_headimpl.cpp:
        * khtml/html/html_imageimpl.cpp:
        * khtml/html/html_inlineimpl.cpp:
        (DOM::HTMLAnchorElementImpl::defaultEventHandler):
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/html_tableimpl.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/html/htmltokenizer.cpp:
        * khtml/rendering/bidi.cpp:
        * khtml/rendering/render_applet.cpp:
        * khtml/rendering/render_block.cpp:
        * khtml/rendering/render_box.cpp:
        * khtml/rendering/render_canvas.cpp:
        * khtml/rendering/render_flow.cpp:
        * khtml/rendering/render_form.cpp:
        * khtml/rendering/render_frames.cpp:
        * khtml/rendering/render_layer.cpp:
        * khtml/rendering/render_line.cpp:
        * khtml/rendering/render_object.cpp:
        * khtml/rendering/render_replaced.cpp:
        * khtml/rendering/render_table.cpp:
        * khtml/rendering/render_theme_mac.mm:
        * khtml/xml/dom2_eventsimpl.cpp:
        * khtml/xml/dom_elementimpl.cpp:
        * khtml/xml/dom_nodeimpl.cpp:
        * khtml/xml/xml_tokenizer.cpp:
        * khtml/xsl/xslt_processorimpl.cpp:
        * kwq/KWQAccObject.mm:
        * kwq/KWQFrame.mm:
        * kwq/KWQKJavaAppletWidget.mm:
        * kwq/KWQPageState.mm:
        * kwq/KWQRenderTreeDebug.cpp:
        * kwq/KWQSignalStubs.mm:
        * kwq/KWQWidget.mm:
        * page/Frame.cpp:
        (Frame::init):
        (Frame::submitForm):
        (Frame::isComplete):
        * page/Frame.h:
        * page/FramePrivate.h: Added.
        (FramePrivate::FramePrivate):
        (FramePrivate::~FramePrivate):
        * page/FrameView.cpp: Added.
        * page/FrameView.h: Added.
        * page/khtmlpart_p.h: Removed.
        * page/khtmlview.cpp: Removed.
        * page/khtmlview.h: Removed.

2006-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - moved files related to the Frame class and the forthcoming Page class
        to WebCore/page
        
        - moved files related to the MacFrame class and other bridging-related classes
        to WebCore/bridge/mac

        * ForwardingHeaders/ksvg2/KSVGPart.h:
        * ForwardingHeaders/ksvg2/KSVGView.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge: Added.
        * bridge/mac: Added.
        * bridge/mac/KWQKHTMLPartBrowserExtension.h: Added.
        * bridge/mac/KWQKHTMLPartBrowserExtension.mm: Added.
        * bridge/mac/KWQKHTMLView.cpp: Added.
        * bridge/mac/KWQKPartsBrowserExtension.h: Added.
        * bridge/mac/KWQKPartsBrowserInterface.mm: Added.
        * bridge/mac/MacFrame.h: Added.
        * bridge/mac/MacFrame.mm: Added.
        * bridge/mac/WebCoreBridge.h: Added.
        * bridge/mac/WebCoreBridge.mm: Added.
        * khtml/Frame.cpp: Removed.
        * khtml/Frame.h: Removed.
        * khtml/khtmlpart_p.h: Removed.
        * khtml/khtmlview.cpp: Removed.
        * khtml/khtmlview.h: Removed.
        * kwq/KWQKHTMLPartBrowserExtension.h: Removed.
        * kwq/KWQKHTMLPartBrowserExtension.mm: Removed.
        * kwq/KWQKHTMLView.cpp: Removed.
        * kwq/KWQKPartsBrowserExtension.h: Removed.
        * kwq/KWQKPartsBrowserInterface.mm: Removed.
        * kwq/MacFrame.h: Removed.
        * kwq/MacFrame.mm: Removed.
        * kwq/WebCoreBridge.h: Removed.
        * kwq/WebCoreBridge.mm: Removed.
        * page: Added.
        * page/Frame.cpp: Added.
        * page/Frame.h: Added.
        * page/khtmlpart_p.h: Added.
        * page/khtmlview.cpp: Added.
        * page/khtmlview.h: Added.

2006-01-10  David Hyatt  <hyatt@apple.com>

        #if Win32 the KWQMemArray overloads, since they're working around
        a Windows compiler bug.
        
        * kwq/KWQMemArray.h:

2006-01-10  David Hyatt  <hyatt@apple.com>

        Fix the broken ifdef in KWQString.h

        * kwq/KWQString.h:

2006-01-10  hyatt@apple.com

        Fix for bugzilla bug 6458, get rendering dir of WebCore
        compiling on Windows.
        
        Reviewed by darin

        * ForwardingHeaders/QRectF:
        * ForwardingHeaders/java/kjavaappletwidget.h:
        * ForwardingHeaders/kcursor.h:
        * ForwardingHeaders/kdebug.h:
        * ForwardingHeaders/kglobalsettings.h:
        * ForwardingHeaders/khtml_ext.h:
        * ForwardingHeaders/khtml_factory.h:
        * ForwardingHeaders/khtml_settings.h:
        * ForwardingHeaders/kio/global.h:
        * ForwardingHeaders/klocale.h:
        * ForwardingHeaders/kparts/browserextension.h:
        * ForwardingHeaders/kparts/event.h:
        * ForwardingHeaders/kparts/part.h:
        * ForwardingHeaders/kurl.h:
        * ForwardingHeaders/qapplication.h:
        * ForwardingHeaders/qbuffer.h:
        * ForwardingHeaders/qcolor.h:
        * ForwardingHeaders/qdatetime.h:
        * ForwardingHeaders/qdict.h:
        * ForwardingHeaders/qevent.h:
        * ForwardingHeaders/qfont.h:
        * ForwardingHeaders/qfontmetrics.h:
        * ForwardingHeaders/qlist.h:
        * ForwardingHeaders/qmap.h:
        * ForwardingHeaders/qmemarray.h:
        * ForwardingHeaders/qobject.h:
        * ForwardingHeaders/qpaintdevicemetrics.h:
        * ForwardingHeaders/qpainter.h:
        * ForwardingHeaders/qpalette.h:
        * ForwardingHeaders/qpen.h:
        * ForwardingHeaders/qpixmap.h:
        * ForwardingHeaders/qptrdict.h:
        * ForwardingHeaders/qptrlist.h:
        * ForwardingHeaders/qptrqueue.h:
        * ForwardingHeaders/qptrstack.h:
        * ForwardingHeaders/qptrvector.h:
        * ForwardingHeaders/qrect.h:
        * ForwardingHeaders/qregexp.h:
        * ForwardingHeaders/qregion.h:
        * ForwardingHeaders/qscrollbar.h:
        * ForwardingHeaders/qscrollview.h:
        * ForwardingHeaders/qsortedlist.h:
        * ForwardingHeaders/qstring.h:
        * ForwardingHeaders/qstringlist.h:
        * ForwardingHeaders/qstyle.h:
        * ForwardingHeaders/qtextcodec.h:
        * ForwardingHeaders/qtextedit.h:
        * ForwardingHeaders/qtimer.h:
        * ForwardingHeaders/qvaluelist.h:
        * ForwardingHeaders/qvariant.h:
        * ForwardingHeaders/qwidget.h:
        * ForwardingHeaders/qwmatrix.h:
        * khtml/config.h:
        * khtml/css/css_ruleimpl.h:
        * khtml/ecma/kjs_binding.h:
        * khtml/html/html_objectimpl.h:
        * khtml/rendering/RenderText.cpp:
        * khtml/rendering/bidi.cpp:
        * khtml/rendering/break_lines.cpp:
        (khtml::nextBreakablePosition):
        * khtml/rendering/font.h:
        (khtml::Font::width):
        * khtml/rendering/render_arena.cpp:
        * khtml/rendering/render_canvasimage.cpp:
        * khtml/rendering/render_canvasimage.h:
        * khtml/rendering/render_container.cpp:
        (RenderContainer::removeChildNode):
        (RenderContainer::appendChildNode):
        (RenderContainer::insertChildNode):
        * khtml/rendering/render_image.cpp:
        (RenderImage::paint):
        * khtml/rendering/render_object.cpp:
        (RenderObject::remove):
        * khtml/xml/dom_elementimpl.h:
        (DOM::ElementImpl::mouseEventHandler):
        * khtml/xml/dom_nodeimpl.cpp:
        (DOM::NodeImpl::dispatchEvent):
        * khtml/xml/dom_stringimpl.cpp:
        (DOM::DOMStringImpl::endsWith):
        * kwq/KWQAccObjectCache.h:
        * kwq/KWQArrayImpl.h:
        (KWQArrayImpl::size):
        * kwq/KWQCharsets.h:
        * kwq/KWQDateTime.h:
        (CFAbsoluteTimeGetCurrent):
        * kwq/KWQDef.h:
        * kwq/KWQFontFamily.h:
        * kwq/KWQKPartsPart.h:
        * kwq/KWQKURL.h:
        * kwq/KWQLogging.h:
        * kwq/KWQMapImpl.h:
        * kwq/KWQMemArray.h:
        (QMemArray::operator[]):
        * kwq/KWQPainter.h:
        * kwq/KWQPixmap.h:
        * kwq/KWQPixmap.mm:
        * kwq/KWQPtrDictImpl.h:
        * kwq/KWQRegExp.h:
        * kwq/KWQString.h:
        * kwq/KWQTextCodec.h:
        * kwq/KWQTimer.h:
        (QTimer::QTimer):
        (QTimer::isActive):
        * kwq/KWQValueListImpl.h:
        * kwq/KWQVariant.h:
        * kwq/KWQWMatrix.h:
        * kwq/MacFrame.h:

2006-01-10  Eric Seidel  <eseidel@apple.com>

        No review needed, build (linking deployment) fix only.

        * kwq/MacFrame.h: remove bogus KHTMLView *view() const delcaration

2006-01-10  Eric Seidel  <eseidel@apple.com>

        Roll out local changes committed by accident w/ Mitz's patch.

        * kwq/KWQAccObjectCache.h:
        * kwq/KWQAccObjectCache.mm:
        (KWQAccObjectCache::KWQAccObjectCache):
        (KWQAccObjectCache::~KWQAccObjectCache):
        (KWQAccObjectCache::accObject):
        (KWQAccObjectCache::setAccObject):
        (KWQAccObjectCache::removeAccObject):
        (KWQAccObjectCache::getAccObjectID):
        (KWQAccObjectCache::removeAccObjectID):
        (KWQAccObjectCache::textMarkerForVisiblePosition):
        (KWQAccObjectCache::visiblePositionForTextMarker):
        (KWQAccObjectCache::childrenChanged):
        * kwq/KWQObject.cpp:
        (QObject::restartTimer):
        (QObject::timerIntervals):
        (deleteTimer):
        (QObject::killTimer):
        (deleteOneTimer):
        (QObject::killTimers):
        (sendDeferredTimerEvent):

2006-01-10  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        No tests possible, no functionality changes.

        Reviewed by darin.  Committed by eseidel.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6410
          Performance regression in text relayout due to bad BidiContext
          equality testing

        * khtml/rendering/bidi.cpp:
        (khtml::operator==): Return true if BidiContexts match and both
        don't have a parent.

2006-01-10  Eric Seidel  <eseidel@apple.com>

        Removed broken links in project file, no review need.

        * WebCore.xcodeproj/project.pbxproj:

2006-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - move C++-only methods down from Frame to MacFrame

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/Frame.cpp:
        (Frame::init):
        (Frame::setSettings):
        (Frame::provisionalLoadStarted):
        (Frame::userGestureHint):
        (Frame::renderer):
        (Frame::selectionRect):
        (Frame::isFrameSet):
        (Frame::openURL):
        (Frame::didNotOpenURL):
        (Frame::selectionStart):
        (scanForForm):
        (Frame::currentForm):
        (Frame::setEncoding):
        (Frame::addData):
        (Frame::revealSelection):
        (Frame::scrollOverflow):
        (Frame::paint):
        (Frame::adjustPageHeight):
        (Frame::pauseTimeouts):
        (Frame::resumeTimeouts):
        (Frame::canCachePage):
        (Frame::saveWindowProperties):
        (Frame::saveLocationProperties):
        (Frame::restoreWindowProperties):
        (Frame::restoreLocationProperties):
        (Frame::saveInterpreterBuiltins):
        (Frame::restoreInterpreterBuiltins):
        (Frame::frameForWidget):
        (Frame::frameForNode):
        (Frame::nodeForWidget):
        (Frame::setDocumentFocus):
        (Frame::clearDocumentFocus):
        (Frame::mutableInstances):
        (Frame::updatePolicyBaseURL):
        (Frame::setPolicyBaseURL):
        (Frame::forceLayout):
        (Frame::forceLayoutWithPageWidthRange):
        (Frame::sendResizeEvent):
        (Frame::sendScrollEvent):
        (Frame::scrollbarsVisible):
        (Frame::addMetaData):
        (Frame::scrollToAnchor):
        (Frame::closeURL):
        (Frame::canMouseDownStartSelect):
        (Frame::khtmlMouseDoubleClickEvent):
        (Frame::passWidgetMouseDownEventToWidget):
        (Frame::clearTimers):
        (Frame::centerSelectionInVisibleArea):
        (Frame::styleForSelectionStart):
        (Frame::selectionStartOffset):
        (Frame::selectionEndOffset):
        (Frame::selectionEnd):
        (Frame::setMediaType):
        (Frame::setSelectionFromNone):
        (Frame::displaysWithFocusAttributes):
        (Frame::setWindowHasFocus):
        (Frame::backslashAsCurrencySymbol):
        (Frame::setName):
        (Frame::markedTextUsesUnderlines):
        (Frame::markedTextUnderlines):
        (Frame::prepareForUserAction):
        (Frame::isFrame):
        (Frame::mousePressNode):
        * khtml/Frame.h:
        (Frame::instances):
        (Frame::MarkedTextUnderline::MarkedTextUnderline):
        * kwq/MacFrame.cpp: Removed.
        * kwq/MacFrame.h:
        (MacFrame::markedTextRange):
        * kwq/MacFrame.mm: - humped a bunch of stuff down to Frame
        * kwq/WebCoreSettings.mm:
        (-[WebCoreSettings _updateAllViews]): use Mac calls
        * kwq/WebCoreTextRendererFactory.mm:
        (-[WebCoreTextRendererFactory clearCaches]): ditto

2006-01-10  Eric Seidel  <eseidel@apple.com>

        Rubber-stamped by mjs.

        Split html_formimpl.{cpp,h} into multiple files (one per class)
        http://bugs.webkit.org/show_bug.cgi?id=6461

        * WebCore.xcodeproj/project.pbxproj: added files
        * khtml/ecma/kjs_html.cpp: updated includes
        * khtml/html/FormDataList.h: Added.
        * khtml/html/FormDataList.cpp: Added.
        * khtml/html/HTMLButtonElementImpl.cpp: Added.
        * khtml/html/HTMLButtonElementImpl.h: Added.
        * khtml/html/HTMLFieldSetElementImpl.cpp: Added.
        * khtml/html/HTMLFieldSetElementImpl.h: Added.
        * khtml/html/HTMLFormElementImpl.cpp: Added.
        * khtml/html/HTMLFormElementImpl.h: Added.
        * khtml/html/HTMLGenericFormElementImpl.cpp: Added.
        * khtml/html/HTMLGenericFormElementImpl.h: Added.
        * khtml/html/HTMLInputElementImpl.cpp: Added.
        * khtml/html/HTMLInputElementImpl.h: Added.
        * khtml/html/HTMLIsIndexElementImpl.cpp: Added.
        * khtml/html/HTMLIsIndexElementImpl.h: Added.
        * khtml/html/HTMLKeygenElementImpl.cpp: Added.
        * khtml/html/HTMLKeygenElementImpl.h: Added.
        * khtml/html/HTMLLabelElementImpl.cpp: Added.
        * khtml/html/HTMLLabelElementImpl.h: Added.
        * khtml/html/HTMLLegendElementImpl.cpp: Added.
        * khtml/html/HTMLLegendElementImpl.h: Added.
        * khtml/html/HTMLOptGroupElementImpl.cpp: Added.
        * khtml/html/HTMLOptGroupElementImpl.h: Added.
        * khtml/html/HTMLOptionElementImpl.cpp: Added.
        * khtml/html/HTMLOptionElementImpl.h: Added.
        * khtml/html/HTMLOptionsCollectionImpl.h: Added.
        * khtml/html/HTMLSelectElementImpl.cpp: Added.
        * khtml/html/HTMLSelectElementImpl.h: Added.
        * khtml/html/HTMLTextAreaElementImpl.cpp: Added.
        * khtml/html/HTMLTextAreaElementImpl.h: Added.
        * khtml/html/html_documentimpl.cpp: updated includes
        * khtml/html/html_imageimpl.cpp: updated includes
        * khtml/html/html_miscimpl.cpp: updated includes
        * khtml/html/html_objectimpl.cpp: updated includes
        * khtml/html/htmlfactory.cpp: updated includes
        * khtml/html/htmlparser.cpp: updated includes
        * khtml/khtmlview.cpp: updated includes
        * khtml/rendering/render_block.cpp: updated includes
        * khtml/rendering/render_button.cpp: updated includes
        * khtml/rendering/render_canvasimage.cpp: updated includes
        * khtml/rendering/render_flow.cpp: updated includes
        * khtml/rendering/render_form.cpp: updated includes
        * khtml/rendering/render_form.h: updated includes
        * khtml/rendering/render_image.cpp: updated includes
        * khtml/rendering/render_line.cpp: updated includes
        * khtml/rendering/render_theme.cpp: updated includes
        * khtml/xml/dom_docimpl.cpp: updated includes
        * kwq/DOMHTML.mm: updated includes
        * kwq/KWQAccObject.mm: updated includes
        * kwq/MacFrame.mm: updated includes
        * kwq/WebCoreBridge.mm: updated includes

2006-01-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6446
          Allow surrogate pairs in numeric entities

        Test case: fast/parser/entity-surrogate-pairs.html

        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::parseEntity): Don't check if we got a surrogate.

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Further code removal (and build fix!)

        * khtml/Frame.cpp:
        (Frame::init):
        (Frame::~Frame):
        (Frame::restoreURL):
        (Frame::didOpenURL):
        (Frame::baseURL):
        (Frame::baseTarget):
        * khtml/Frame.h:
        (Frame::khtmlMouseDoubleClickEvent):
        (Frame::khtmlDrawContentsEvent):
        * kwq/KWQLoader.mm:
        (KWQServeRequest):
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot):
        (KWQSlot::call):

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove unused code from Frame.

        * khtml/Frame.cpp:
        (Frame::clear):
        (Frame::receivedFirstData):
        (Frame::checkCompleted):
        (Frame::completeURL):
        (Frame::khtmlMousePressEvent):
        (Frame::handleMouseMoveEventSelection):
        (Frame::khtmlMouseReleaseEvent):
        * khtml/Frame.h:
        * khtml/khtmlpart_p.h:
        * khtml/khtmlview.cpp:
        (KHTMLView::viewportWheelEvent):
        (KHTMLView::focusOutEvent):

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by hyatt.

        Remove khtml-specific forwarding headers.

        * ForwardingHeaders/css: Removed.
        * ForwardingHeaders/css/css_base.h: Removed.
        * ForwardingHeaders/css/css_computedstyle.h: Removed.
        * ForwardingHeaders/css/css_ruleimpl.h: Removed.
        * ForwardingHeaders/css/css_stylesheetimpl.h: Removed.
        * ForwardingHeaders/css/css_valueimpl.h: Removed.
        * ForwardingHeaders/css/csshelper.h: Removed.
        * ForwardingHeaders/css/cssparser.h: Removed.
        * ForwardingHeaders/css/cssproperties.h: Removed.
        * ForwardingHeaders/css/cssstyleselector.h: Removed.
        * ForwardingHeaders/css/cssvalues.h: Removed.
        * ForwardingHeaders/dom: Removed.
        * ForwardingHeaders/dom/css_rule.h: Removed.
        * ForwardingHeaders/dom/css_stylesheet.h: Removed.
        * ForwardingHeaders/dom/css_value.h: Removed.
        * ForwardingHeaders/dom/dom2_events.h: Removed.
        * ForwardingHeaders/dom/dom2_range.h: Removed.
        * ForwardingHeaders/dom/dom2_traversal.h: Removed.
        * ForwardingHeaders/dom/dom_exception.h: Removed.
        * ForwardingHeaders/dom/dom_node.h: Removed.
        * ForwardingHeaders/dom/dom_string.h: Removed.
        * ForwardingHeaders/ecma: Removed.
        * ForwardingHeaders/ecma/kjs_binding.h: Removed.
        * ForwardingHeaders/ecma/kjs_dom.h: Removed.
        * ForwardingHeaders/ecma/kjs_proxy.h: Removed.
        * ForwardingHeaders/editing: Removed.
        * ForwardingHeaders/editing/SelectionController.h: Removed.
        * ForwardingHeaders/editing/edit_actions.h: Removed.
        * ForwardingHeaders/editing/html_interchange.h: Removed.
        * ForwardingHeaders/editing/htmlediting.h: Removed.
        * ForwardingHeaders/editing/jsediting.h: Removed.
        * ForwardingHeaders/editing/markup.h: Removed.
        * ForwardingHeaders/editing/text_affinity.h: Removed.
        * ForwardingHeaders/editing/text_granularity.h: Removed.
        * ForwardingHeaders/editing/visible_position.h: Removed.
        * ForwardingHeaders/editing/visible_text.h: Removed.
        * ForwardingHeaders/editing/visible_units.h: Removed.
        * ForwardingHeaders/html: Removed.
        * ForwardingHeaders/html/html_baseimpl.h: Removed.
        * ForwardingHeaders/html/html_blockimpl.h: Removed.
        * ForwardingHeaders/html/html_canvasimpl.h: Removed.
        * ForwardingHeaders/html/html_documentimpl.h: Removed.
        * ForwardingHeaders/html/html_elementimpl.h: Removed.
        * ForwardingHeaders/html/html_formimpl.h: Removed.
        * ForwardingHeaders/html/html_headimpl.h: Removed.
        * ForwardingHeaders/html/html_imageimpl.h: Removed.
        * ForwardingHeaders/html/html_inlineimpl.h: Removed.
        * ForwardingHeaders/html/html_listimpl.h: Removed.
        * ForwardingHeaders/html/html_miscimpl.h: Removed.
        * ForwardingHeaders/html/html_objectimpl.h: Removed.
        * ForwardingHeaders/html/html_tableimpl.h: Removed.
        * ForwardingHeaders/html/htmlparser.h: Removed.
        * ForwardingHeaders/html/htmltokenizer.h: Removed.
        * ForwardingHeaders/misc: Removed.
        * ForwardingHeaders/misc/decoder.h: Removed.
        * ForwardingHeaders/misc/formdata.h: Removed.
        * ForwardingHeaders/misc/helper.h: Removed.
        * ForwardingHeaders/misc/khtmllayout.h: Removed.
        * ForwardingHeaders/misc/loader.h: Removed.
        * ForwardingHeaders/misc/loader_client.h: Removed.
        * ForwardingHeaders/misc/shared.h: Removed.
        * ForwardingHeaders/misc/stringit.h: Removed.
        * ForwardingHeaders/rendering: Removed.
        * ForwardingHeaders/rendering/font.h: Removed.
        * ForwardingHeaders/rendering/render_applet.h: Removed.
        * ForwardingHeaders/rendering/render_block.h: Removed.
        * ForwardingHeaders/rendering/render_box.h: Removed.
        * ForwardingHeaders/rendering/render_br.h: Removed.
        * ForwardingHeaders/rendering/render_canvas.h: Removed.
        * ForwardingHeaders/rendering/render_canvasimage.h: Removed.
        * ForwardingHeaders/rendering/render_flow.h: Removed.
        * ForwardingHeaders/rendering/render_form.h: Removed.
        * ForwardingHeaders/rendering/render_frames.h: Removed.
        * ForwardingHeaders/rendering/render_image.h: Removed.
        * ForwardingHeaders/rendering/render_layer.h: Removed.
        * ForwardingHeaders/rendering/render_line.h: Removed.
        * ForwardingHeaders/rendering/render_list.h: Removed.
        * ForwardingHeaders/rendering/render_object.h: Removed.
        * ForwardingHeaders/rendering/render_replaced.h: Removed.
        * ForwardingHeaders/rendering/render_style.h: Removed.
        * ForwardingHeaders/rendering/render_table.h: Removed.
        * ForwardingHeaders/rendering/table_layout.h: Removed.
        * ForwardingHeaders/xbl: Removed.
        * ForwardingHeaders/xbl/xbl_binding_manager.h: Removed.
        * ForwardingHeaders/xml: Removed.
        * ForwardingHeaders/xml/EventNames.h: Removed.
        * ForwardingHeaders/xml/dom2_eventsimpl.h: Removed.
        * ForwardingHeaders/xml/dom2_rangeimpl.h: Removed.
        * ForwardingHeaders/xml/dom2_traversalimpl.h: Removed.
        * ForwardingHeaders/xml/dom2_viewsimpl.h: Removed.
        * ForwardingHeaders/xml/dom_atomicstring.h: Removed.
        * ForwardingHeaders/xml/dom_docimpl.h: Removed.
        * ForwardingHeaders/xml/dom_elementimpl.h: Removed.
        * ForwardingHeaders/xml/dom_nodeimpl.h: Removed.
        * ForwardingHeaders/xml/dom_position.h: Removed.
        * ForwardingHeaders/xml/dom_stringimpl.h: Removed.
        * ForwardingHeaders/xml/dom_textimpl.h: Removed.
        * ForwardingHeaders/xml/dom_xmlimpl.h: Removed.
        * ForwardingHeaders/xml/xml_tokenizer.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/css/css_valueimpl.cpp:
        * khtml/css/cssstyleselector.cpp:
        * khtml/editing/apply_style_command.cpp:
        * khtml/editing/jsediting.cpp:
        * khtml/editing/replace_selection_command.cpp:
        * khtml/html/html_baseimpl.cpp:
        * khtml/html/html_blockimpl.cpp:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_elementimpl.cpp:
        * khtml/html/html_formimpl.cpp:
        * khtml/html/html_imageimpl.cpp:
        * khtml/html/html_inlineimpl.cpp:
        * khtml/html/html_listimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/html_tableimpl.cpp:
        * khtml/html/htmlparser.cpp:
        * khtml/khtml_part.cpp:
        * khtml/misc/decoder.cpp:
        * khtml/rendering/render_frames.cpp:
        * khtml/xml/dom_elementimpl.cpp:

2006-01-10  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - renamed ChildFrame::m_frame to m_renderer and
        ChildFrame::m_part to m_frame which makes more sense.
        
        This also fixes some bugs which were introduced in Maciej's
        previous commit.
        
        * khtml/Frame.cpp:
        (Frame::stopLoading):
        (Frame::clear):
        (Frame::stopAnimations):
        (Frame::checkEmitLoadEvent):
        (Frame::requestFrame):
        (Frame::requestObject):
        (Frame::processObjectRequest):
        (Frame::childFrame):
        (Frame::findFrame):
        (Frame::frameExists):
        (Frame::setZoomFactor):
        (Frame::frames):
        (Frame::childFrameNamed):
        (Frame::connectChild):
        (Frame::disconnectChild):
        (Frame::handleFallbackContent):
        * khtml/khtmlpart_p.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::ownerElement):
        * kwq/MacFrame.mm:
        (Frame::frameDetached):
        (MacFrame::createPart):
        (MacFrame::nextKeyViewInFrameHierarchy):
        (MacFrame::setPolicyBaseURL):

2006-01-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=6450
        - renamed KHTMLPart to Frame (and KWQKHTMLPart to MacFrame for now)

        * ForwardingHeaders/ksvg2/KSVGPart.h:
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/Frame.cpp: Added.
        (khtml::PartStyleSheetLoader::PartStyleSheetLoader):
        (khtml::PartStyleSheetLoader::setStyleSheet):
        (Frame::Frame):
        (Frame::init):
        (Frame::~Frame):
        (Frame::restoreURL):
        (Frame::didOpenURL):
        (Frame::didExplicitOpen):
        (Frame::stopLoading):
        (Frame::closeURL):
        (Frame::browserExtension):
        (Frame::view):
        (Frame::setJScriptEnabled):
        (Frame::jScriptEnabled):
        (Frame::setMetaRefreshEnabled):
        (Frame::metaRefreshEnabled):
        (Frame::jScript):
        (Frame::replaceContentsWithScriptResult):
        (Frame::executeScript):
        (Frame::scheduleScript):
        (Frame::executeScheduledScript):
        (Frame::setJavaEnabled):
        (Frame::javaEnabled):
        (Frame::setPluginsEnabled):
        (Frame::pluginsEnabled):
        (Frame::slotDebugDOMTree):
        (Frame::slotDebugRenderTree):
        (Frame::setAutoloadImages):
        (Frame::autoloadImages):
        (Frame::clear):
        (Frame::openFile):
        (Frame::xmlDocImpl):
        (Frame::replaceDocImpl):
        (Frame::receivedFirstData):
        (Frame::slotFinished):
        (Frame::childBegin):
        (Frame::begin):
        (Frame::write):
        (Frame::end):
        (Frame::endIfNotLoading):
        (Frame::stop):
        (Frame::stopAnimations):
        (Frame::gotoAnchor):
        (Frame::slotFinishedParsing):
        (Frame::slotLoaderRequestStarted):
        (Frame::slotLoaderRequestDone):
        (Frame::checkCompleted):
        (Frame::checkEmitLoadEvent):
        (Frame::settings):
        (Frame::baseURL):
        (Frame::baseTarget):
        (Frame::completeURL):
        (Frame::scheduleRedirection):
        (Frame::scheduleLocationChange):
        (Frame::isScheduledLocationChangePending):
        (Frame::scheduleHistoryNavigation):
        (Frame::cancelRedirection):
        (Frame::changeLocation):
        (Frame::slotRedirect):
        (Frame::slotRedirection):
        (Frame::encoding):
        (Frame::setUserStyleSheet):
        (Frame::setStandardFont):
        (Frame::setFixedFont):
        (Frame::urlCursor):
        (Frame::onlyLocalReferences):
        (Frame::setOnlyLocalReferences):
        (Frame::selectedText):
        (Frame::hasSelection):
        (Frame::selection):
        (Frame::selectionGranularity):
        (Frame::setSelectionGranularity):
        (Frame::dragCaret):
        (Frame::mark):
        (Frame::setMark):
        (Frame::setSelection):
        (Frame::setDragCaret):
        (Frame::clearSelection):
        (Frame::invalidateSelection):
        (Frame::setCaretVisible):
        (Frame::clearCaretRectIfNeeded):
        (isFrameElement):
        (Frame::setFocusNodeIfNeeded):
        (Frame::selectionLayoutChanged):
        (Frame::setXPosForVerticalArrowNavigation):
        (Frame::xPosForVerticalArrowNavigation):
        (Frame::timerEvent):
        (Frame::paintCaret):
        (Frame::paintDragCaret):
        (Frame::urlSelected):
        (Frame::requestFrame):
        (Frame::requestFrameName):
        (Frame::requestObject):
        (Frame::processObjectRequest):
        (Frame::submitFormAgain):
        (Frame::submitForm):
        (Frame::slotParentCompleted):
        (Frame::slotChildStarted):
        (Frame::slotChildCompleted):
        (Frame::childFrame):
        (Frame::findFrame):
        (Frame::frameExists):
        (Frame::parentFrame):
        (Frame::zoomFactor):
        (Frame::slotIncZoom):
        (Frame::slotDecZoom):
        (Frame::setZoomFactor):
        (Frame::setJSStatusBarText):
        (Frame::setJSDefaultStatusBarText):
        (Frame::jsStatusBarText):
        (Frame::jsDefaultStatusBarText):
        (Frame::referrer):
        (Frame::lastModified):
        (Frame::reparseConfiguration):
        (Frame::frameNames):
        (Frame::frames):
        (Frame::childFrameNamed):
        (Frame::setDNDEnabled):
        (Frame::dndEnabled):
        (Frame::shouldDragAutoNode):
        (Frame::customEvent):
        (Frame::isPointInsideSelection):
        (Frame::selectClosestWordFromMouseEvent):
        (Frame::handleMousePressEventDoubleClick):
        (Frame::handleMousePressEventTripleClick):
        (Frame::handleMousePressEventSingleClick):
        (Frame::khtmlMousePressEvent):
        (Frame::khtmlMouseDoubleClickEvent):
        (Frame::handleMouseMoveEventSelection):
        (Frame::khtmlMouseMoveEvent):
        (Frame::khtmlMouseReleaseEvent):
        (Frame::khtmlDrawContentsEvent):
        (Frame::startAutoScroll):
        (Frame::stopAutoScroll):
        (Frame::selectAll):
        (Frame::selectContentsOfNode):
        (Frame::shouldChangeSelection):
        (Frame::shouldBeginEditing):
        (Frame::shouldEndEditing):
        (Frame::isContentEditable):
        (Frame::lastEditCommand):
        (Frame::appliedEditing):
        (Frame::unappliedEditing):
        (Frame::reappliedEditing):
        (Frame::typingStyle):
        (Frame::setTypingStyle):
        (Frame::clearTypingStyle):
        (Frame::slotPartRemoved):
        (Frame::createHTMLEventListener):
        (Frame::opener):
        (Frame::setOpener):
        (Frame::openedByJS):
        (Frame::setOpenedByJS):
        (Frame::preloadStyleSheet):
        (Frame::preloadScript):
        (Frame::restored):
        (Frame::incrementFrameCount):
        (Frame::decrementFrameCount):
        (Frame::topLevelFrameCount):
        (Frame::tabsToLinks):
        (Frame::tabsToAllControls):
        (Frame::copyToPasteboard):
        (Frame::cutToPasteboard):
        (Frame::pasteFromPasteboard):
        (Frame::pasteAndMatchStyle):
        (Frame::transpose):
        (Frame::redo):
        (Frame::undo):
        (Frame::computeAndSetTypingStyle):
        (Frame::applyStyle):
        (Frame::applyParagraphStyle):
        (updateState):
        (Frame::selectionHasStyle):
        (Frame::selectionStartHasStyle):
        (Frame::selectionStartStylePropertyValue):
        (Frame::selectionComputedStyle):
        (Frame::applyEditingStyleToBodyElement):
        (Frame::removeEditingStyleFromBodyElement):
        (Frame::applyEditingStyleToElement):
        (Frame::removeEditingStyleFromElement):
        (Frame::isCharacterSmartReplaceExempt):
        (Frame::connectChild):
        (Frame::disconnectChild):
        (Frame::keepAlive):
        (Frame::slotEndLifeSupport):
        (Frame::selectFrameElementInParentIfFullySelected):
        (Frame::handleFallbackContent):
        * khtml/Frame.h: Added.
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::CSSStyleSelector):
        (khtml::CSSStyleSelector::initForStyleResolve):
        (khtml::CSSStyleSelector::checkOneSelector):
        (khtml::CSSStyleSelector::applyProperty):
        (khtml::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * khtml/css/cssstyleselector.h:
        * khtml/ecma/kjs_binding.cpp:
        (KJS::ScriptInterpreter::ScriptInterpreter):
        (KJS::ScriptInterpreter::~ScriptInterpreter):
        * khtml/ecma/kjs_binding.h:
        (KJS::ScriptInterpreter::frame):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDocument::getValueProperty):
        (KJS::getDOMDocumentNode):
        (KJS::checkNodeSecurity):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        (KJS::JSLazyEventListener::parseCode):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLDocFunction::callAsFunction):
        (KJS::HTMLDocument::namedItemGetter):
        (KJS::HTMLDocument::getValueProperty):
        (KJS::KJS::HTMLDocument::putValueProperty):
        (KJS::HTMLElement::framesetNameGetter):
        (KJS::HTMLElement::frameWindowPropertyGetter):
        (KJS::HTMLElement::getOwnPropertySlot):
        (KJS::KJS::HTMLElement::implementsCall):
        (KJS::Image::notifyFinished):
        * khtml/ecma/kjs_navigator.cpp:
        (KJS::Navigator::Navigator):
        (KJS::Navigator::getValueProperty):
        (KJS::NavigatorFunc::callAsFunction):
        * khtml/ecma/kjs_navigator.h:
        (KJS::Navigator::frame):
        * khtml/ecma/kjs_proxy.cpp:
        (KJSProxyImpl::KJSProxyImpl):
        (KJSProxyImpl::evaluate):
        (KJSProxyImpl::clear):
        (KJSProxyImpl::createHTMLEventHandler):
        (KJSProxyImpl::interpreter):
        (KJSProxyImpl::initScript):
        * khtml/ecma/kjs_proxy.h:
        * khtml/ecma/kjs_traversal.cpp:
        (KJS::JSNodeFilterCondition::acceptNode):
        * khtml/ecma/kjs_window.cpp:
        (KJS::History::History):
        (KJS::FrameArray::FrameArray):
        (KJS::Screen::getValueProperty):
        (KJS::Window::Window):
        (KJS::Window::interpreter):
        (KJS::Window::retrieveWindow):
        (KJS::Window::retrieve):
        (KJS::Window::location):
        (KJS::Window::selection):
        (KJS::Window::locationbar):
        (KJS::Window::menubar):
        (KJS::Window::personalbar):
        (KJS::Window::statusbar):
        (KJS::Window::toolbar):
        (KJS::Window::scrollbars):
        (KJS::allowPopUp):
        (KJS::createNewWindow):
        (KJS::canShowModalDialog):
        (KJS::canShowModalDialogNow):
        (KJS::showModalDialog):
        (KJS::Window::getValueProperty):
        (KJS::Window::childFrameGetter):
        (KJS::Window::namedFrameGetter):
        (KJS::Window::indexGetter):
        (KJS::Window::namedItemGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::Window::put):
        (KJS::Window::toBoolean):
        (KJS::Window::scheduleClose):
        (KJS::Window::isSafeScript):
        (KJS::Window::setListener):
        (KJS::Window::getListener):
        (KJS::Window::setCurrentEvent):
        (KJS::WindowFunc::callAsFunction):
        (KJS::Window::updateLayout):
        (KJS::ScheduledAction::execute):
        (KJS::WindowQObject::WindowQObject):
        (KJS::FrameArray::getValueProperty):
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        (KJS::FrameArray::getOwnPropertySlot):
        (KJS::Location::Location):
        (KJS::Location::getValueProperty):
        (KJS::Location::getOwnPropertySlot):
        (KJS::Location::put):
        (KJS::Location::toString):
        (KJS::LocationFunc::callAsFunction):
        (KJS::Selection::Selection):
        (KJS::Selection::getValueProperty):
        (KJS::Selection::getOwnPropertySlot):
        (KJS::Selection::toString):
        (KJS::SelectionFunc::callAsFunction):
        (KJS::BarInfo::BarInfo):
        (KJS::BarInfo::getValueProperty):
        (KJS::BarInfo::getOwnPropertySlot):
        (KJS::History::getValueProperty):
        (KJS::HistoryFunc::callAsFunction):
        * khtml/ecma/kjs_window.h:
        (KJS::Window::frame):
        (KJS::Location::frame):
        (KJS::Selection::frame):
        (KJS::BarInfo::frame):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::changeState):
        (KJS::XMLHttpRequestProtoFunc::callAsFunction):
        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::modify):
        (khtml::SelectionController::xPosForVerticalArrowNavigation):
        * khtml/editing/SelectionController.h:
        (khtml::SelectionController::frame):
        * khtml/editing/delete_selection_command.cpp:
        (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * khtml/editing/edit_command.cpp:
        (khtml::EditCommand::EditCommand):
        (khtml::EditCommand::apply):
        (khtml::EditCommand::unapply):
        (khtml::EditCommand::reapply):
        (khtml::EditCommand::styleAtPosition):
        * khtml/editing/htmlediting.cpp:
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/insert_text_command.cpp:
        (khtml::InsertTextCommand::input):
        * khtml/editing/jsediting.cpp:
        (DOM::JSEditor::execCommand):
        (DOM::JSEditor::queryCommandEnabled):
        (DOM::JSEditor::queryCommandIndeterm):
        (DOM::JSEditor::queryCommandState):
        (DOM::JSEditor::queryCommandValue):
        * khtml/editing/jsediting.h:
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplaceSelectionCommand::doApply):
        * khtml/editing/text_granularity.h:
        * khtml/editing/typing_command.cpp:
        (khtml::TypingCommand::deleteKeyPressed):
        (khtml::TypingCommand::forwardDeleteKeyPressed):
        (khtml::TypingCommand::insertText):
        (khtml::TypingCommand::insertLineBreak):
        (khtml::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (khtml::TypingCommand::insertParagraphSeparator):
        (khtml::TypingCommand::markMisspellingsAfterTyping):
        (khtml::TypingCommand::typingAddedToOpenCommand):
        (khtml::TypingCommand::insertTextRunWithoutNewlines):
        * khtml/html/html_baseimpl.cpp:
        (HTMLFrameElementImpl::isURLAllowed):
        (HTMLFrameElementImpl::openURL):
        (HTMLFrameElementImpl::attach):
        (HTMLFrameElementImpl::close):
        (HTMLFrameElementImpl::contentPart):
        (HTMLFrameElementImpl::contentDocument):
        (HTMLIFrameElementImpl::attach):
        * khtml/html/html_baseimpl.h:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_documentimpl.cpp:
        (DOM::HTMLDocumentImpl::lastModified):
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::isContentEditable):
        (HTMLElementImpl::setContentEditable):
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::formData):
        (DOM::HTMLFormElementImpl::prepareSubmit):
        (DOM::HTMLFormElementImpl::submit):
        (DOM::HTMLFormElementImpl::reset):
        (DOM::HTMLGenericFormElementImpl::isKeyboardFocusable):
        (DOM::HTMLKeygenElementImpl::appendFormData):
        * khtml/html/html_headimpl.cpp:
        (HTMLBaseElementImpl::process):
        (HTMLLinkElementImpl::process):
        (HTMLScriptElementImpl::parseMappedAttribute):
        (HTMLScriptElementImpl::insertedIntoDocument):
        (HTMLScriptElementImpl::evaluateScript):
        * khtml/html/html_imageimpl.cpp:
        * khtml/html/html_inlineimpl.cpp:
        (DOM::HTMLAnchorElementImpl::isKeyboardFocusable):
        (DOM::HTMLAnchorElementImpl::defaultEventHandler):
        * khtml/html/html_objectimpl.cpp:
        (DOM::HTMLAppletElementImpl::createRenderer):
        (DOM::HTMLAppletElementImpl::getAppletInstance):
        (DOM::HTMLEmbedElementImpl::getEmbedInstance):
        (DOM::HTMLEmbedElementImpl::rendererIsNeeded):
        (DOM::HTMLObjectElementImpl::getObjectInstance):
        (DOM::HTMLObjectElementImpl::rendererIsNeeded):
        * khtml/html/html_tableimpl.cpp:
        * khtml/html/htmlparser.cpp:
        (HTMLParser::noscriptCreateErrorCheck):
        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::scriptHandler):
        (khtml::HTMLTokenizer::scriptExecution):
        (khtml::HTMLTokenizer::parseTag):
        (khtml::HTMLTokenizer::write):
        (khtml::HTMLTokenizer::stopParsing):
        (khtml::HTMLTokenizer::timerEvent):
        (khtml::HTMLTokenizer::processToken):
        * khtml/khtml_part.cpp: Removed.
        * khtml/khtml_part.h: Removed.
        * khtml/khtmlpart_p.h:
        (KHTMLPartPrivate::KHTMLPartPrivate):
        * khtml/khtmlview.cpp:
        (KHTMLView::KHTMLView):
        (KHTMLView::~KHTMLView):
        (KHTMLView::clearPart):
        (KHTMLView::clear):
        (KHTMLView::resizeEvent):
        (KHTMLView::adjustViewSize):
        (KHTMLView::layout):
        (KHTMLView::updateDashboardRegions):
        (KHTMLView::viewportMousePressEvent):
        (KHTMLView::viewportMouseDoubleClickEvent):
        (selectCursor):
        (KHTMLView::viewportMouseMoveEvent):
        (KHTMLView::viewportMouseReleaseEvent):
        (KHTMLView::keyPressEvent):
        (KHTMLView::dispatchDragEvent):
        (KHTMLView::updateDragAndDrop):
        (KHTMLView::focusNextPrevNode):
        (KHTMLView::mediaType):
        (KHTMLView::dispatchMouseEvent):
        (KHTMLView::viewportWheelEvent):
        (KHTMLView::focusInEvent):
        (KHTMLView::focusOutEvent):
        (KHTMLView::timerEvent):
        (KHTMLView::scheduleRelayout):
        (KHTMLView::unscheduleRelayout):
        * khtml/khtmlview.h:
        (KHTMLView::frame):
        * khtml/misc/CachedImageCallback.cpp:
        (khtml::CachedImageCallback::notifyUpdate):
        (khtml::CachedImageCallback::notifyFinished):
        (khtml::CachedImageCallback::clear):
        * khtml/misc/CachedObject.h:
        * khtml/misc/DocLoader.cpp:
        (khtml::DocLoader::DocLoader):
        (khtml::DocLoader::requestImage):
        (khtml::DocLoader::requestStyleSheet):
        (khtml::DocLoader::requestScript):
        (khtml::DocLoader::requestXSLStyleSheet):
        (khtml::DocLoader::requestXBLDocument):
        * khtml/misc/DocLoader.h:
        (khtml::DocLoader::frame):
        * khtml/misc/loader.cpp:
        (khtml::Loader::slotReceivedResponse):
        * khtml/rendering/InlineTextBox.cpp:
        (khtml::InlineTextBox::paint):
        (khtml::InlineTextBox::paintMarkedTextUnderline):
        * khtml/rendering/InlineTextBox.h:
        * khtml/rendering/render_applet.cpp:
        (RenderApplet::createWidgetIfNecessary):
        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::paintCaret):
        * khtml/rendering/render_canvas.cpp:
        * khtml/rendering/render_form.cpp:
        (RenderFileButton::RenderFileButton):
        * khtml/rendering/render_frames.cpp:
        (isURLAllowed):
        (RenderPartObject::updateWidget):
        * khtml/rendering/render_layer.cpp:
        * khtml/rendering/render_object.cpp:
        (RenderObject::draggableNode):
        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::eventFilter):
        * khtml/xml/dom2_eventsimpl.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::updateTitle):
        (DocumentImpl::frame):
        (DocumentImpl::recalcStyle):
        (DocumentImpl::updateSelection):
        (DocumentImpl::open):
        (DocumentImpl::close):
        (DocumentImpl::implicitClose):
        (DocumentImpl::processHttpEquiv):
        (DocumentImpl::selectedStylesheetSet):
        (DocumentImpl::setSelectedStylesheetSet):
        (DocumentImpl::recalcStyleSelector):
        (DocumentImpl::relinquishesEditingFocus):
        (DocumentImpl::acceptsEditingFocus):
        (DocumentImpl::clearSelectionIfNeeded):
        (DocumentImpl::createHTMLEventListener):
        (DocumentImpl::ownerElement):
        (DocumentImpl::referrer):
        (DocumentImpl::parentDocument):
        * khtml/xml/dom_docimpl.h:
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::focus):
        * khtml/xml/dom_nodeimpl.cpp:
        (DOM::NodeImpl::dispatchEvent):
        * khtml/xml/dom_xmlimpl.cpp:
        (DOM::ProcessingInstructionImpl::checkStyleSheet):
        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::processingInstruction):
        (khtml::XMLTokenizer::executeScripts):
        (khtml::XMLTokenizer::notifyFinished):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::XSLTProcessorImpl::createDocumentFromSource):
        * ksvg2/svg/SVGAElementImpl.cpp:
        (SVGAElementImpl::defaultEventHandler):
        * ksvg2/svg/SVGImageElementImpl.cpp:
        (SVGImageElementImpl::notifyFinished):
        * kwq/DOM.mm:
        (-[DOMNode KJS::Bindings::]):
        * kwq/DOMHTML.mm:
        * kwq/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * kwq/KWQAccObject.mm:
        (-[KWQAccObject textUnderElement]):
        (-[KWQAccObject value]):
        (-[KWQAccObject accessibilityPerformAction:]):
        (-[KWQAccObject accessibilityAttributeValue:]):
        (-[KWQAccObject doAXTextMarkerForPosition:]):
        (-[KWQAccObject rendererForView:]):
        (-[KWQAccObject doSetAXSelectedTextMarkerRange:]):
        * kwq/KWQClipboard.h:
        * kwq/KWQClipboard.mm:
        (KWQClipboard::KWQClipboard):
        (KWQClipboard::dragNSImage):
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]):
        (-[KWQPopUpButton becomeFirstResponder]):
        (-[KWQPopUpButton resignFirstResponder]):
        (-[KWQPopUpButton nextKeyView]):
        (-[KWQPopUpButton previousKeyView]):
        * kwq/KWQFileButton.h:
        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton):
        (KWQFileButton::focusPolicy):
        (KWQFileButton::focusChanged):
        * kwq/KWQFrame.mm:
        (QFrame::setFrameStyle):
        * kwq/KWQKHTMLFactory.h:
        * kwq/KWQKHTMLPart.cpp: Removed.
        * kwq/KWQKHTMLPart.h: Removed.
        * kwq/KWQKHTMLPart.mm: Removed.
        * kwq/KWQKHTMLPartBrowserExtension.h:
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::KHTMLPartBrowserExtension):
        (KHTMLPartBrowserExtension::openURLRequest):
        (KHTMLPartBrowserExtension::createNewWindow):
        (KHTMLPartBrowserExtension::setIconURL):
        (KHTMLPartBrowserExtension::setTypedIconURL):
        (KHTMLPartBrowserExtension::canRunModal):
        (KHTMLPartBrowserExtension::canRunModalNow):
        (KHTMLPartBrowserExtension::runModal):
        * kwq/KWQKHTMLView.cpp:
        (KHTMLView::topLevelWidget):
        * kwq/KWQKJavaAppletWidget.h:
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget):
        * kwq/KWQKPartsBrowserInterface.h:
        (KParts::BrowserInterface::BrowserInterface):
        * kwq/KWQKPartsBrowserInterface.mm:
        (KParts::BrowserInterface::property):
        (KParts::BrowserInterface::callMethod):
        * kwq/KWQLineEdit.mm:
        * kwq/KWQListBox.mm:
        (-[KWQListBoxScrollView becomeFirstResponder]):
        (-[KWQTableView keyDown:]):
        (-[KWQTableView keyUp:]):
        (-[KWQTableView becomeFirstResponder]):
        (-[KWQTableView resignFirstResponder]):
        (-[KWQTableView nextKeyView]):
        (-[KWQTableView previousKeyView]):
        * kwq/KWQLoader.mm:
        (KWQServeRequest):
        (KWQServeSynchronousRequest):
        (KWQCheckIfReloading):
        (KWQCheckCacheObjectStatus):
        (KWQCacheObjectExpiresTime):
        * kwq/KWQObject.cpp:
        (QObject::inherits):
        (QObject::isFrame):
        * kwq/KWQObject.h:
        * kwq/KWQPageState.mm:
        (-[KWQPageState dealloc]):
        (-[KWQPageState finalize]):
        * kwq/KWQRegExp.cpp:
        (QRegExp::KWQRegExpPrivate::compile):
        * kwq/KWQRenderTreeDebug.cpp:
        (write):
        (writeSelection):
        * kwq/KWQSlider.mm:
        (-[KWQSlider becomeFirstResponder]):
        (-[KWQSlider resignFirstResponder]):
        (-[KWQSlider nextKeyView]):
        (-[KWQSlider previousKeyView]):
        (-[KWQSlider canBecomeKeyView]):
        (QSlider::focusPolicy):
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot):
        (KWQSlot::call):
        * kwq/KWQTextArea.mm:
        (-[KWQTextAreaTextView textDidChange:]):
        (-[KWQTextAreaTextView _isResizableByUser]):
        (-[KWQTextAreaTextView becomeFirstResponder]):
        (-[KWQTextAreaTextView nextKeyView]):
        (-[KWQTextAreaTextView previousKeyView]):
        (-[KWQTextAreaTextView _trackResizeFromMouseDown:]):
        (-[KWQTextAreaTextView drawRect:]):
        (-[KWQTextAreaTextView insertTab:]):
        (-[KWQTextAreaTextView insertBacktab:]):
        (-[KWQTextAreaTextView resignFirstResponder]):
        (-[KWQTextAreaTextView shouldDrawInsertionPoint]):
        (-[KWQTextAreaTextView selectedTextAttributes]):
        (-[KWQTextAreaTextView keyDown:]):
        (-[KWQTextAreaTextView keyUp:]):
        * kwq/KWQTextField.mm:
        (-[KWQTextFieldController controlTextDidBeginEditing:]):
        (-[KWQTextFieldController controlTextDidEndEditing:]):
        (-[KWQTextFieldController controlTextDidChange:]):
        (-[KWQTextFieldController control:textView:doCommandBySelector:]):
        (-[KWQTextFieldController textView:shouldHandleEvent:]):
        (-[KWQTextFieldController setHasFocus:]):
        (-[KWQTextField nextKeyView]):
        (-[KWQTextField previousKeyView]):
        (-[KWQSecureTextField nextKeyView]):
        (-[KWQSecureTextField previousKeyView]):
        (-[KWQSearchField nextKeyView]):
        (-[KWQSearchField previousKeyView]):
        * kwq/KWQTimer.h:
        * kwq/KWQWidget.mm:
        (QWidget::setActiveWindow):
        (QWidget::hasFocus):
        (QWidget::setFocus):
        (QWidget::clearFocus):
        (QWidget::isVisible):
        (QWidget::mapFromGlobal):
        (QWidget::setIsSelected):
        * kwq/MacFrame.cpp: Added.
        (MacFrame::isFrameSet):
        * kwq/MacFrame.h: Added.
        (MacFrame::instances):
        (Mac):
        * kwq/MacFrame.mm: Added.
        (Frame::completed):
        (Frame::openURL):
        (Frame::onURL):
        (Frame::setStatusBarText):
        (Frame::started):
        (redirectionTimerMonitor):
        (MacFrame::MacFrame):
        (MacFrame::~MacFrame):
        (MacFrame::freeClipboard):
        (MacFrame::setSettings):
        (MacFrame::generateFrameName):
        (MacFrame::provisionalLoadStarted):
        (MacFrame::userGestureHint):
        (MacFrame::openURL):
        (MacFrame::openURLRequest):
        (MacFrame::didNotOpenURL):
        (MacFrame::currentForm):
        (MacFrame::searchForLabelsAboveCell):
        (MacFrame::searchForLabelsBeforeElement):
        (MacFrame::matchLabelsAgainstElement):
        (MacFrame::findString):
        (MacFrame::clearRecordedFormValues):
        (MacFrame::recordFormValue):
        (MacFrame::submitForm):
        (MacFrame::setEncoding):
        (MacFrame::addData):
        (Frame::frameDetached):
        (MacFrame::urlSelected):
        (MacFrame::createPart):
        (MacFrame::setView):
        (MacFrame::view):
        (MacFrame::setTitle):
        (MacFrame::setStatusBarText):
        (MacFrame::scheduleClose):
        (MacFrame::unfocusWindow):
        (MacFrame::revealSelection):
        (MacFrame::advanceToNextMisspelling):
        (MacFrame::scrollOverflow):
        (MacFrame::wheelEvent):
        (MacFrame::redirectionTimerStartedOrStopped):
        (MacFrame::paint):
        (MacFrame::adjustPageHeight):
        (MacFrame::renderer):
        (MacFrame::userAgent):
        (MacFrame::mimeTypeForFileName):
        (MacFrame::nextKeyViewInFrame):
        (MacFrame::nextKeyViewInFrameHierarchy):
        (MacFrame::nextKeyView):
        (MacFrame::nextKeyViewForWidget):
        (MacFrame::currentEventIsMouseDownInWidget):
        (MacFrame::currentEventIsKeyboardOptionTab):
        (MacFrame::handleKeyboardOptionTabInView):
        (MacFrame::tabsToLinks):
        (MacFrame::tabsToAllControls):
        (MacFrame::executionContextForDOM):
        (MacFrame::bindingRootObject):
        (MacFrame::windowScriptObject):
        (MacFrame::windowScriptNPObject):
        (MacFrame::partClearedInBegin):
        (MacFrame::pauseTimeouts):
        (MacFrame::resumeTimeouts):
        (MacFrame::canCachePage):
        (MacFrame::saveWindowProperties):
        (MacFrame::saveLocationProperties):
        (MacFrame::restoreWindowProperties):
        (MacFrame::restoreLocationProperties):
        (MacFrame::saveInterpreterBuiltins):
        (MacFrame::restoreInterpreterBuiltins):
        (MacFrame::openURLFromPageCache):
        (MacFrame::frameForWidget):
        (MacFrame::bridgeForWidget):
        (MacFrame::frameForNode):
        (MacFrame::documentViewForNode):
        (MacFrame::nodeForWidget):
        (MacFrame::setDocumentFocus):
        (MacFrame::clearDocumentFocus):
        (MacFrame::saveDocumentState):
        (MacFrame::restoreDocumentState):
        (MacFrame::mutableInstances):
        (MacFrame::updatePolicyBaseURL):
        (MacFrame::setPolicyBaseURL):
        (MacFrame::requestedURLString):
        (MacFrame::incomingReferrer):
        (MacFrame::forceLayout):
        (MacFrame::forceLayoutWithPageWidthRange):
        (MacFrame::sendResizeEvent):
        (MacFrame::sendScrollEvent):
        (MacFrame::runJavaScriptAlert):
        (MacFrame::runJavaScriptConfirm):
        (MacFrame::runJavaScriptPrompt):
        (MacFrame::locationbarVisible):
        (MacFrame::menubarVisible):
        (MacFrame::personalbarVisible):
        (MacFrame::scrollbarsVisible):
        (MacFrame::statusbarVisible):
        (MacFrame::toolbarVisible):
        (MacFrame::addMessageToConsole):
        (MacFrame::createEmptyDocument):
        (MacFrame::addMetaData):
        (MacFrame::keyEvent):
        (MacFrame::scrollToAnchor):
        (MacFrame::closeURL):
        (MacFrame::canMouseDownStartSelect):
        (MacFrame::khtmlMousePressEvent):
        (MacFrame::khtmlMouseDoubleClickEvent):
        (MacFrame::passWidgetMouseDownEventToWidget):
        (MacFrame::lastEventIsMouseUp):
        (MacFrame::mouseDownViewIfStillGood):
        (MacFrame::dragHysteresisExceeded):
        (MacFrame::dispatchDragSrcEvent):
        (MacFrame::eventMayStartDrag):
        (MacFrame::khtmlMouseMoveEvent):
        (MacFrame::dragSourceMovedTo):
        (MacFrame::dragSourceEndedAt):
        (MacFrame::dispatchCPPEvent):
        (MacFrame::mayCut):
        (MacFrame::mayCopy):
        (MacFrame::mayPaste):
        (MacFrame::tryCut):
        (MacFrame::tryCopy):
        (MacFrame::tryPaste):
        (MacFrame::khtmlMouseReleaseEvent):
        (MacFrame::clearTimers):
        (MacFrame::passSubframeEventToSubframe):
        (MacFrame::passWheelEventToChildWidget):
        (MacFrame::mouseDown):
        (MacFrame::mouseDragged):
        (MacFrame::mouseUp):
        (MacFrame::sendFakeEventsAfterWidgetTracking):
        (MacFrame::mouseMoved):
        (MacFrame::shouldDragAutoNode):
        (MacFrame::sendContextMenuEvent):
        (MacFrame::fileWrapperForElement):
        (MacFrame::attributedString):
        (MacFrame::selectionRect):
        (MacFrame::visibleSelectionRect):
        (MacFrame::centerSelectionInVisibleArea):
        (MacFrame::imageFromRect):
        (MacFrame::selectionImage):
        (MacFrame::snapshotDragImage):
        (MacFrame::styleForSelectionStart):
        (MacFrame::fontForSelection):
        (MacFrame::fontAttributesForSelectionStart):
        (MacFrame::baseWritingDirectionForSelectionStart):
        (MacFrame::topLevelWidget):
        (MacFrame::tokenizerProcessedData):
        (MacFrame::selectionStartOffset):
        (MacFrame::selectionEndOffset):
        (MacFrame::selectionStart):
        (MacFrame::selectionEnd):
        (MacFrame::setBridge):
        (MacFrame::overrideMediaType):
        (MacFrame::setMediaType):
        (MacFrame::setSelectionFromNone):
        (MacFrame::setDisplaysWithFocusAttributes):
        (MacFrame::displaysWithFocusAttributes):
        (MacFrame::setWindowHasFocus):
        (MacFrame::backslashAsCurrencySymbol):
        (MacFrame::bodyBackgroundColor):
        (MacFrame::keyboardUIMode):
        (MacFrame::setName):
        (MacFrame::didTellBridgeAboutLoad):
        (MacFrame::haveToldBridgeAboutLoad):
        (MacFrame::clear):
        (Frame::print):
        (MacFrame::getAppletInstanceForWidget):
        (MacFrame::getEmbedInstanceForWidget):
        (MacFrame::getObjectInstanceForWidget):
        (MacFrame::addPluginRootObject):
        (MacFrame::cleanupPluginRootObjects):
        (MacFrame::registerCommandForUndoOrRedo):
        (MacFrame::registerCommandForUndo):
        (MacFrame::registerCommandForRedo):
        (MacFrame::clearUndoRedoOperations):
        (MacFrame::issueUndoCommand):
        (MacFrame::issueRedoCommand):
        (MacFrame::issueCutCommand):
        (MacFrame::issueCopyCommand):
        (MacFrame::issuePasteCommand):
        (MacFrame::issuePasteAndMatchStyleCommand):
        (MacFrame::issueTransposeCommand):
        (Frame::canUndo):
        (Frame::canRedo):
        (Frame::canPaste):
        (MacFrame::markMisspellingsInAdjacentWords):
        (MacFrame::markMisspellings):
        (MacFrame::respondToChangedSelection):
        (MacFrame::shouldChangeSelection):
        (MacFrame::respondToChangedContents):
        (MacFrame::isContentEditable):
        (MacFrame::shouldBeginEditing):
        (MacFrame::shouldEndEditing):
        (convertAttributesToUnderlines):
        (MacFrame::setMarkedTextRange):
        (MacFrame::markedTextUsesUnderlines):
        (MacFrame::markedTextUnderlines):
        (MacFrame::canGoBackOrForward):
        (MacFrame::prepareForUserAction):
        (MacFrame::didFirstLayout):
        (MacFrame::dashboardRegionsDictionary):
        (MacFrame::dashboardRegionsChanged):
        (MacFrame::isCharacterSmartReplaceExempt):
        (MacFrame::isFrame):
        (MacFrame::mousePressNode):
        (MacFrame::handledOnloadEvents):
        (MacFrame::shouldClose):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (updateRenderingForBindings):
        (frameHasSelection):
        (+[WebCoreBridge bridgeForDOMDocument:]):
        (-[WebCoreBridge init]):
        (-[WebCoreBridge initializeSettings:]):
        (-[WebCoreBridge dealloc]):
        (-[WebCoreBridge finalize]):
        (-[WebCoreBridge part]):
        (-[WebCoreBridge setParent:]):
        (-[WebCoreBridge parent]):
        (-[WebCoreBridge provisionalLoadStarted]):
        (-[WebCoreBridge openURL:reload:contentType:refresh:lastModified:pageCache:]):
        (-[WebCoreBridge setEncoding:userChosen:]):
        (-[WebCoreBridge addData:]):
        (-[WebCoreBridge closeURL]):
        (-[WebCoreBridge stopLoading]):
        (-[WebCoreBridge didNotOpenURL:pageCache:]):
        (-[WebCoreBridge saveDocumentState]):
        (-[WebCoreBridge restoreDocumentState]):
        (-[WebCoreBridge scrollToAnchorWithURL:]):
        (-[WebCoreBridge scrollOverflowInDirection:granularity:]):
        (-[WebCoreBridge sendScrollWheelEvent:]):
        (-[WebCoreBridge saveDocumentToPageCache]):
        (-[WebCoreBridge canCachePage]):
        (-[WebCoreBridge clear]):
        (-[WebCoreBridge end]):
        (-[WebCoreBridge stop]):
        (-[WebCoreBridge handleFallbackContent]):
        (-[WebCoreBridge createKHTMLViewWithNSView:marginWidth:marginHeight:]):
        (-[WebCoreBridge scrollToAnchor:]):
        (-[WebCoreBridge isSelectionEditable]):
        (-[WebCoreBridge selectionState]):
        (-[WebCoreBridge _documentTypeString]):
        (-[WebCoreBridge selectedString]):
        (-[WebCoreBridge stringForRange:]):
        (-[WebCoreBridge selectAll]):
        (-[WebCoreBridge deselectAll]):
        (-[WebCoreBridge deselectText]):
        (-[WebCoreBridge isFrameSet]):
        (-[WebCoreBridge reapplyStylesForDeviceType:]):
        (nowPrinting):
        (-[WebCoreBridge _setupRootForPrinting:]):
        (-[WebCoreBridge forceLayoutAdjustingViewSize:]):
        (-[WebCoreBridge forceLayoutWithMinimumPageWidth:maximumPageWidth:adjustingViewSize:]):
        (-[WebCoreBridge sendResizeEvent]):
        (-[WebCoreBridge sendScrollEvent]):
        (-[WebCoreBridge drawRect:withPainter:]):
        (-[WebCoreBridge drawRect:]):
        (-[WebCoreBridge computePageRectsWithPrintWidthScaleFactor:printHeight:]):
        (-[WebCoreBridge adjustPageHeightNew:top:bottom:limit:]):
        (-[WebCoreBridge copyDOMTree:]):
        (-[WebCoreBridge copyRenderTree:]):
        (-[WebCoreBridge removeFromFrame]):
        (-[WebCoreBridge installInFrame:]):
        (-[WebCoreBridge setActivationEventNumber:]):
        (-[WebCoreBridge mouseDown:]):
        (-[WebCoreBridge mouseDragged:]):
        (-[WebCoreBridge mouseUp:]):
        (-[WebCoreBridge mouseMoved:]):
        (-[WebCoreBridge sendContextMenuEvent:]):
        (-[WebCoreBridge currentForm]):
        (-[WebCoreBridge searchForLabels:beforeElement:]):
        (-[WebCoreBridge matchLabels:againstElement:]):
        (-[WebCoreBridge elementAtPoint:]):
        (-[WebCoreBridge URLWithAttributeString:]):
        (-[WebCoreBridge searchFor:direction:caseSensitive:wrap:]):
        (-[WebCoreBridge advanceToNextMisspelling]):
        (-[WebCoreBridge advanceToNextMisspellingStartingJustBeforeSelection]):
        (-[WebCoreBridge unmarkAllMisspellings]):
        (-[WebCoreBridge setTextSizeMultiplier:]):
        (-[WebCoreBridge textEncoding]):
        (-[WebCoreBridge nextKeyView]):
        (-[WebCoreBridge previousKeyView]):
        (-[WebCoreBridge nextKeyViewInsideWebFrameViews]):
        (-[WebCoreBridge previousKeyViewInsideWebFrameViews]):
        (-[WebCoreBridge stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebCoreBridge windowScriptObject]):
        (-[WebCoreBridge windowScriptNPObject]):
        (-[WebCoreBridge DOMDocument]):
        (-[WebCoreBridge selectedAttributedString]):
        (-[WebCoreBridge attributedStringFrom:startOffset:to:endOffset:]):
        (-[WebCoreBridge selectionRect]):
        (-[WebCoreBridge visibleSelectionRect]):
        (-[WebCoreBridge centerSelectionInVisibleArea]):
        (-[WebCoreBridge selectionImage]):
        (-[WebCoreBridge setName:]):
        (-[WebCoreBridge name]):
        (-[WebCoreBridge URL]):
        (-[WebCoreBridge baseURL]):
        (-[WebCoreBridge referrer]):
        (-[WebCoreBridge domain]):
        (-[WebCoreBridge opener]):
        (-[WebCoreBridge setOpener:]):
        (-[WebCoreBridge needsLayout]):
        (-[WebCoreBridge setNeedsLayout]):
        (-[WebCoreBridge interceptKeyEvent:toView:]):
        (-[WebCoreBridge renderTreeAsExternalRepresentation]):
        (-[WebCoreBridge setSelectionFromNone]):
        (-[WebCoreBridge setDisplaysWithFocusAttributes:]):
        (-[WebCoreBridge setWindowHasFocus:]):
        (-[WebCoreBridge numPendingOrLoadingRequests]):
        (-[WebCoreBridge doneProcessingData]):
        (-[WebCoreBridge shouldClose]):
        (-[WebCoreBridge bodyBackgroundColor]):
        (-[WebCoreBridge selectionColor]):
        (-[WebCoreBridge adjustViewSize]):
        (-[WebCoreBridge accessibilityTree]):
        (-[WebCoreBridge setDrawsBackground:]):
        (-[WebCoreBridge rangeByExpandingSelectionWithGranularity:]):
        (-[WebCoreBridge rangeByAlteringCurrentSelection:direction:granularity:]):
        (-[WebCoreBridge alterCurrentSelection:direction:granularity:]):
        (-[WebCoreBridge rangeByAlteringCurrentSelection:verticalDistance:]):
        (-[WebCoreBridge alterCurrentSelection:verticalDistance:]):
        (-[WebCoreBridge selectionGranularity]):
        (-[WebCoreBridge setSelectedDOMRange:affinity:closeTyping:]):
        (-[WebCoreBridge selectedDOMRange]):
        (-[WebCoreBridge convertToNSRange:DOM::]):
        (-[WebCoreBridge convertToDOMRange:]):
        (-[WebCoreBridge selectNSRange:]):
        (-[WebCoreBridge selectedNSRange]):
        (-[WebCoreBridge selectionAffinity]):
        (-[WebCoreBridge setMarkDOMRange:]):
        (-[WebCoreBridge markDOMRange]):
        (-[WebCoreBridge setMarkedTextDOMRange:customAttributes:ranges:]):
        (-[WebCoreBridge markedTextDOMRange]):
        (-[WebCoreBridge markedTextNSRange]):
        (-[WebCoreBridge replaceMarkedTextWithText:]):
        (-[WebCoreBridge smartDeleteRangeForProposedRange:]):
        (-[WebCoreBridge smartInsertForString:replacingRange:beforeString:afterString:]):
        (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]):
        (-[WebCoreBridge documentFragmentWithText:]):
        (-[WebCoreBridge documentFragmentWithNodesAsParagraphs:]):
        (-[WebCoreBridge replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebCoreBridge insertLineBreak]):
        (-[WebCoreBridge insertParagraphSeparator]):
        (-[WebCoreBridge insertParagraphSeparatorInQuotedContent]):
        (-[WebCoreBridge insertText:selectInsertedText:]):
        (-[WebCoreBridge setSelectionToDragCaret]):
        (-[WebCoreBridge moveSelectionToDragCaret:smartMove:]):
        (-[WebCoreBridge _visiblePositionForPoint:]):
        (-[WebCoreBridge moveDragCaretToPoint:]):
        (-[WebCoreBridge removeDragCaret]):
        (-[WebCoreBridge dragCaretDOMRange]):
        (-[WebCoreBridge deleteSelectionWithSmartDelete:]):
        (-[WebCoreBridge deleteKeyPressedWithSmartDelete:]):
        (-[WebCoreBridge forwardDeleteKeyPressedWithSmartDelete:]):
        (-[WebCoreBridge typingStyle]):
        (-[WebCoreBridge setTypingStyle:withUndoAction:]):
        (-[WebCoreBridge applyStyle:withUndoAction:]):
        (-[WebCoreBridge applyParagraphStyle:withUndoAction:]):
        (-[WebCoreBridge selectionStartHasStyle:]):
        (-[WebCoreBridge selectionHasStyle:]):
        (-[WebCoreBridge applyEditingStyleToBodyElement]):
        (-[WebCoreBridge removeEditingStyleFromBodyElement]):
        (-[WebCoreBridge applyEditingStyleToElement:]):
        (-[WebCoreBridge removeEditingStyleFromElement:]):
        (-[WebCoreBridge fontForSelection:]):
        (-[WebCoreBridge fontAttributesForSelectionStart]):
        (-[WebCoreBridge baseWritingDirectionForSelectionStart]):
        (-[WebCoreBridge ensureSelectionVisible]):
        (-[WebCoreBridge eventMayStartDrag:]):
        (-[WebCoreBridge dragOperationForDraggingInfo:]):
        (-[WebCoreBridge dragExitedWithDraggingInfo:]):
        (-[WebCoreBridge concludeDragForDraggingInfo:]):
        (-[WebCoreBridge dragSourceMovedTo:]):
        (-[WebCoreBridge dragSourceEndedAt:operation:]):
        (-[WebCoreBridge mayDHTMLCut]):
        (-[WebCoreBridge mayDHTMLCopy]):
        (-[WebCoreBridge mayDHTMLPaste]):
        (-[WebCoreBridge tryDHTMLCut]):
        (-[WebCoreBridge tryDHTMLCopy]):
        (-[WebCoreBridge tryDHTMLPaste]):
        (-[WebCoreBridge rangeOfCharactersAroundCaret]):
        (-[WebCoreBridge dashboardRegions]):
        (-[WebCoreBridge executionContextForView:]):
        * kwq/WebCoreSettings.mm:
        (-[WebCoreSettings _updateAllViews]):
        * kwq/WebCoreTextRendererFactory.mm:
        (-[WebCoreTextRendererFactory clearCaches]):

2006-01-09  Darin Adler  <darin@apple.com>

        * Makefile.am: Removed.

2006-01-09  John Sullivan  <sullivan@apple.com>

        * khtml/misc/decoder.cpp:
        removed #include of recently-removed kcharsets.h to fix build

2006-01-08  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Committed by eseidel.

        First set of refactors to fix
        http://bugs.webkit.org/show_bug.cgi?id=5748.

        Refactors to delay paintserver creation until usage and thereby
        simplify much code in the process. Causes several changes in rendertree 
        output all of which are improvements rather than regressions.

        * kcanvas/KCanvasItem.cpp: setupForDraw() logic moved to KCanvasItemQuartz
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasResources.cpp:
        (KCanvasResource::addClient): const-ify
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (writeStyle): minor refactor/inline - keeps most output the same after
        patch, some minor const'ifications
        * kcanvas/device/KRenderingFillPainter.cpp:
        setter
        (KRenderingFillPainter::Private::Private):
        * kcanvas/device/KRenderingFillPainter.h: refactor out paintserver and
        draw()
        * kcanvas/device/KRenderingStrokePainter.cpp: refactor out paintserver
        and draw()
        (KRenderingStrokePainter::Private::Private):
        * kcanvas/device/KRenderingStrokePainter.h:
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::paint):
        (KCanvasItemQuartz::hitsPath):
        * ksvg2/misc/KCanvasRenderingStyle.cpp:
        (KCanvasRenderingStyle::KCanvasRenderingStyle):
        (KCanvasRenderingStyle::~KCanvasRenderingStyle):
        (KCanvasRenderingStyle::overrideFillPaintServer):
        (KCanvasRenderingStyle::isFilled):
        (KCanvasRenderingStyle::fillPaintServer):
        (KCanvasRenderingStyle::overrideStrokePaintServer):
        (KCanvasRenderingStyle::isStroked):
        (KCanvasRenderingStyle::strokePaintServer):
        (KCanvasRenderingStyle::updateStyle): remove paintserver constructions
        from update notification and instead create on usage, removing
        disable.*Painter() methods
        * ksvg2/misc/KCanvasRenderingStyle.h:
        * ksvg2/svg/SVGImageElementImpl.cpp:
        (SVGImageElementImpl::notifyFinished): use paintserver override logic

2006-01-09  Alexey Proskuryakov  <ap@nypop.com>

        Fix broken build (CachedObject.cpp was still including kcharsets.h).
        Proposed and reviewed by Eric Seidel.

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove more unused code from kwq.

        * ForwardingHeaders/dcopclient.h: Removed.
        * ForwardingHeaders/kaction.h: Removed.
        * ForwardingHeaders/kcharsets.h: Removed.
        * ForwardingHeaders/kcombobox.h: Removed.
        * ForwardingHeaders/klineedit.h: Removed.
        * ForwardingHeaders/klistbox.h: Removed.
        * ForwardingHeaders/kwin.h: Removed.
        * ForwardingHeaders/qcombobox.h: Added.
        * ForwardingHeaders/qlineedit.h: Added.
        * WebCore.xcodeproj/project.pbxproj: remove files.
        * khtml/css/csshelper.cpp:
        * khtml/css/cssstyleselector.cpp:
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        * khtml/html/html_documentimpl.cpp:
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLOptionElementImpl::index):
        (DOM::HTMLOptionElementImpl::setIndex):
        * khtml/html/htmltokenizer.cpp:
        * khtml/html/htmltokenizer.h:
        * khtml/khtml_part.cpp:
        * khtml/khtmlpart_p.h:
        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::RenderLineEdit):
        (RenderLineEdit::setStyle):
        (RenderLineEdit::updateFromElement):
        (RenderLineEdit::selectionStart):
        (RenderLineEdit::selectionEnd):
        (RenderLineEdit::setSelectionStart):
        (RenderLineEdit::setSelectionEnd):
        (RenderLineEdit::select):
        (RenderLineEdit::setSelectionRange):
        (ComboBoxWidget::ComboBoxWidget):
        (ComboBoxWidget::event):
        (ComboBoxWidget::eventFilter):
        (RenderSelect::setWidgetWritingDirection):
        (RenderSelect::updateFromElement):
        (RenderSelect::layout):
        (RenderSelect::slotSelectionChanged):
        (RenderSelect::createListBox):
        (RenderSelect::updateSelection):
        (RenderTextArea::RenderTextArea):
        * khtml/rendering/render_form.h:
        (khtml::RenderLineEdit::widget):
        * kwq/KWQDCOPClient.h: Removed.
        * kwq/KWQKCharsets.cpp: Removed.
        * kwq/KWQKCharsets.h: Removed.
        * kwq/KWQKComboBox.h: Removed.
        * kwq/KWQKKAction.h: Removed.
        * kwq/KWQKLineEdit.h: Removed.
        * kwq/KWQKListBox.h: Removed.
        * kwq/KWQKWin.cpp: Removed.
        * kwq/KWQKWin.h: Removed.
        * kwq/KWQWidget.h:
        * kwq/KWQWidget.mm:

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Removing more unused parts of KWQ.

        * ForwardingHeaders/java/kjavaappletcontext.h: Removed.
        * ForwardingHeaders/khtml_find.h: Removed.
        * ForwardingHeaders/qimage.h: Removed.
        * ForwardingHeaders/rendering/break_lines.h: Removed.
        * ForwardingHeaders/rendering/render_text.h: Removed.
        * ForwardingHeaders/xbl/xbl_docimpl.h: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * khtml/html/html_canvasimpl.cpp:
        * khtml/html/html_imageimpl.cpp:
        * khtml/html/html_objectimpl.cpp:
        * khtml/html/html_objectimpl.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::init):
        (KHTMLPart::~KHTMLPart):
        (KHTMLPart::clear):
        * khtml/khtml_part.h:
        * khtml/khtmlpart_p.h:
        (KHTMLPartPrivate::KHTMLPartPrivate):
        (KHTMLPartPrivate::~KHTMLPartPrivate):
        * khtml/rendering/render_applet.cpp:
        (RenderApplet::RenderApplet):
        (RenderApplet::createWidgetIfNecessary):
        * khtml/rendering/render_applet.h:
        * ksvg2/svg/SVGFEImageElementImpl.cpp:
        * ksvg2/svg/SVGImageElementImpl.cpp:
        * kwq/DOMHTML.mm:
        * kwq/KWQDummyView.h: Removed.
        * kwq/KWQDummyView.m: Removed.
        * kwq/KWQImage.h: Removed.
        * kwq/KWQKHTMLFind.h: Removed.
        * kwq/KWQKHTMLPart.mm:
        * kwq/KWQKHTMLPartBrowserExtension.h:
        * kwq/KWQKJavaAppletContext.h: Removed.
        * kwq/KWQKJavaAppletWidget.h:
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget):
        * kwq/KWQKPartsBrowserExtension.h:
        * kwq/KWQObject.h:
        * kwq/KWQRegion.h:

2006-01-09  Eric Seidel  <eseidel@apple.com>

        Rubber stamped by mjs.

        Broke out loader.{h,cpp} into multiple files, one per class.
        This patch also updates all files which previously included
        loader.h to only include the necessary renamed headers.
        http://bugs.webkit.org/show_bug.cgi?id=6444

        * ForwardingHeaders/kdom/cache/KDOMCachedDocument.h: Removed.
        * ForwardingHeaders/kdom/cache/KDOMCachedImage.h: updated include
        * ForwardingHeaders/kdom/cache/KDOMCachedObject.h: updated include
        * ForwardingHeaders/kdom/cache/KDOMCachedScript.h: updated include
        * WebCore.xcodeproj/project.pbxproj: added files
        * khtml/css/css_computedstyle.cpp: updated includes
        * khtml/css/css_ruleimpl.cpp: updated includes
        * khtml/css/css_stylesheetimpl.h: updated includes
        * khtml/css/css_valueimpl.cpp: updated includes
        * khtml/css/cssstyleselector.cpp: updated includes
        * khtml/ecma/kjs_events.cpp: updated includes
        * khtml/ecma/kjs_html.cpp: updated includes
        * khtml/ecma/xmlhttprequest.cpp: updated includes
        * khtml/html/html_headimpl.cpp: updated includes
        * khtml/html/html_imageimpl.cpp: updated includes
        * khtml/html/html_imageimpl.h: updated includes
        * khtml/html/htmltokenizer.cpp: updated includes
        * khtml/khtml_part.cpp: updated includes
        * khtml/khtmlview.cpp: updated includes
        * khtml/misc/Cache.cpp: Added.
        * khtml/misc/Cache.h: Added.
        * khtml/misc/CachedCSSStyleSheet.cpp: Added.
        * khtml/misc/CachedCSSStyleSheet.h: Added.
        * khtml/misc/CachedImage.cpp: Added.
        * khtml/misc/CachedImage.h: Added.
        * khtml/misc/CachedImageCallback.cpp: Added.
        * khtml/misc/CachedImageCallback.h: Added.
        * khtml/misc/CachedObject.cpp: Added.
        * khtml/misc/CachedObject.h: Added, fixed tabs -> spaces.
        * khtml/misc/CachedObjectClientWalker.cpp: Added.
        * khtml/misc/CachedObjectClientWalker.h: Added.
        * khtml/misc/CachedScript.cpp: Added.
        * khtml/misc/CachedScript.h: Added.
        * khtml/misc/CachedXBLDocument.cpp: Added.
        * khtml/misc/CachedXBLDocument.h: Added.
        * khtml/misc/CachedXSLStyleSheet.cpp: Added.
        * khtml/misc/CachedXSLStyleSheet.h: Added.
        * khtml/misc/DocLoader.cpp: Added.
        * khtml/misc/DocLoader.h: Added.
        * khtml/misc/Request.cpp: Added.
        * khtml/misc/Request.h: Added.
        * khtml/misc/loader.cpp: updated includes
        * khtml/misc/loader.h: updated includes
        * khtml/misc/loader_client.h: updated includes
        * khtml/rendering/render_box.cpp: updated includes
        * khtml/rendering/render_line.cpp: updated includes
        * khtml/rendering/render_list.cpp: updated includes
        * khtml/rendering/render_object.cpp: updated includes
        * khtml/xml/dom_docimpl.cpp: updated includes
        * khtml/xml/dom_xmlimpl.cpp: updated includes
        * khtml/xml/xml_tokenizer.cpp: updated includes
        * khtml/xsl/xsl_stylesheetimpl.cpp: updated includes
        * khtml/xsl/xsl_stylesheetimpl.h: updated includes
        * khtml/xsl/xslt_processorimpl.cpp: updated includes
        * ksvg2/svg/SVGCursorElementImpl.cpp: updated includes
        * ksvg2/svg/SVGDocumentImpl.cpp: updated includes
        * ksvg2/svg/SVGFEImageElementImpl.cpp: updated includes
        * ksvg2/svg/SVGImageElementImpl.cpp: updated includes
        * ksvg2/svg/SVGImageElementImpl.h: updated includes
        * kwq/KWQKHTMLPart.mm: updated includes
        * kwq/KWQLoader.mm: updated includes
        * kwq/KWQPixmap.mm: updated includes
        * kwq/KWQTextArea.mm: updated includes
        * kwq/WebCoreBridge.mm: updated includes
        * kwq/WebCoreCache.mm: updated includes

2006-01-09  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6402
          Implement frameElement.width and frameElement.height

        Test case: fast/frames/frameElement-widthheight.html

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::frameGetter):
        * khtml/ecma/kjs_html.h:
        Add FrameWidth, FrameHeight

        * khtml/html/html_baseimpl.cpp:
        (HTMLFrameElementImpl::frameWidth):
        (HTMLFrameElementImpl::frameHeight):
        * khtml/html/html_baseimpl.h:
        Add frameWidth, frameHeight

2006-01-09  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej, landed by ap.
        
        Test: fast/replaced/inline-box-wrapper-handover.html
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6276
          Image thumbnails are misplaced on forum.2ostrov.ru
          
        * khtml/rendering/render_line.cpp:
        (khtml::InlineBox::deleteLine): Don't reset the inline box wrapper when
        deleting an extracted box.

2006-01-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by ggaren.

        Remove all mention of NSView from khtml.

        * khtml/html/html_objectimpl.cpp:
        (DOM::HTMLAppletElementImpl::getAppletInstance): call w/ widget
        (DOM::HTMLEmbedElementImpl::getEmbedInstance): call w/ widget
        (DOM::HTMLObjectElementImpl::getObjectInstance): call w/ widget
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::getAppletInstanceForWidget): renamed.
        (KWQKHTMLPart::getEmbedInstanceForWidget): renamed.
        (KWQKHTMLPart::getObjectInstanceForWidget): renamed.

2006-01-08  Eric Seidel  <eseidel@apple.com>

        Rubber stamped by ggaren.

        * ForwardingHeaders/qsortedlist.h: Added. (a khtml file was referencing KWQ directly.)
        * WebCore.xcodeproj/project.pbxproj: added new files.
        * khtml/editing/SelectionController.cpp: updated includes
        * khtml/editing/composite_edit_command.cpp: updated includes
        * khtml/editing/htmlediting.cpp: updated includes
        * khtml/editing/markup.cpp: updated includes
        * khtml/editing/visible_position.cpp: updated includes
        * khtml/editing/visible_text.cpp: updated includes
        * khtml/editing/visible_text.h: updated includes
        * khtml/editing/visible_units.cpp: updated includes
        * khtml/khtml_part.cpp: updated includes
        * khtml/khtmlview.cpp: updated includes
        * khtml/rendering/InlineTextBox.cpp: Split out from render_text
        * khtml/rendering/InlineTextBox.h: Split out from render_text
        * khtml/rendering/RenderText.cpp: Split out from render_text
        (khtml::RenderText::position): removed DEBUG_LAYOUT
        * khtml/rendering/RenderText.h: Split out from render_text
        * khtml/rendering/RenderTextFragment.cpp: Split out from render_text
        * khtml/rendering/RenderTextFragment.h: Split out from render_text
        * khtml/rendering/bidi.cpp: updated includes
        * khtml/rendering/render_block.cpp: updated includes
        * khtml/rendering/render_br.cpp: updated includes
        * khtml/rendering/render_br.h: updated includes
        * khtml/rendering/render_button.cpp: updated includes
        * khtml/rendering/render_container.cpp: updated includes
        * khtml/rendering/render_flow.cpp: updated includes
        * khtml/rendering/render_line.cpp: updated includes
        * khtml/rendering/render_object.cpp: updated includes
        * khtml/rendering/render_text.cpp: Removed.
        * khtml/rendering/render_text.h: Removed.
        * khtml/xml/dom_docimpl.cpp: updated includes
        * khtml/xml/dom_nodeimpl.cpp: updated includes
        * khtml/xml/dom_position.cpp: updated includes
        * khtml/xml/dom_textimpl.cpp: updated includes
        * kwq/KWQAccObject.mm: updated includes
        * kwq/KWQKHTMLPart.mm: updated includes
        * kwq/KWQRenderTreeDebug.cpp: updated includes

2006-01-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs & xenon.

        Renamed a few in kwq/ from .mm to .cpp

        * WebCore.xcodeproj/project.pbxproj: updated paths
        * kwq/KWQDictImpl.cpp: Added.
        * kwq/KWQDictImpl.mm: Removed.
        * kwq/KWQKPartsEvent.cpp: Added.
        * kwq/KWQKPartsEvent.mm: Removed.
        * kwq/KWQListImpl.cpp: Added.
        * kwq/KWQListImpl.mm: Removed.

2006-01-08  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Renamed several files in kwq/ from .mm to .cpp
        Removed a few pieces of unused KWQ code.

        * WebCore.xcodeproj/project.pbxproj:
        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::continueProcessing): removed KWQUIEventTime
        (khtml::HTMLTokenizer::write): removed KWQUIEventTime
        * khtml/html/htmltokenizer.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::slotFinished): removed KWQUIEventTime
        * khtml/misc/loader.cpp:
        (CachedObject::finish): removed KWQUIEventTime
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::processHttpEquiv): removed KWQUIEventTime
        * kwq/KWQArrayImpl.cpp: Added.
        * kwq/KWQArrayImpl.mm: Removed.
        * kwq/KWQBuffer.cpp: Added.
        * kwq/KWQBuffer.mm: Removed.
        * kwq/KWQCString.cpp: Added.
        * kwq/KWQCString.mm: Removed.
        * kwq/KWQCharsets.cpp: Added.
        * kwq/KWQCharsets.mm: Removed.
        * kwq/KWQCollection.h:
        (QPtrCollection::~QPtrCollection): made inline
        * kwq/KWQCollection.mm: Removed.
        * kwq/KWQDateTime.cpp: Added, removed KWQUIEventTime
        * kwq/KWQDateTime.h:
        * kwq/KWQDateTime.mm: Removed.
        * kwq/KWQGlobal.cpp: Added.
        * kwq/KWQGlobal.mm: Removed.
        * kwq/KWQGuardedPtr.cpp: Added.
        * kwq/KWQGuardedPtr.mm: Removed.
        * kwq/KWQKCharsets.cpp: Added.
        * kwq/KWQKCharsets.mm: Removed.
        * kwq/KWQKGlobalSettings.h:
        (KGlobalSettings::generalFont): made inline
        (KGlobalSettings::windowTitleFont): made inline
        (KGlobalSettings::menuFont): made inline
        (KGlobalSettings::contrast): made inline
        * kwq/KWQKGlobalSettings.mm: Removed.
        * kwq/KWQKHTMLFactory.cpp: Added.
        * kwq/KWQKHTMLFactory.mm: Removed.
        * kwq/KWQKHTMLView.cpp: Added.
        * kwq/KWQKHTMLView.mm: Removed.
        * kwq/KWQKJob.h:
        * kwq/KWQKJob.mm: Removed.
        * kwq/KWQKWin.cpp: Added.
        * kwq/KWQKWin.mm: Removed.
        * kwq/KWQMapImpl.cpp: Added.
        * kwq/KWQMapImpl.mm: Removed.
        * kwq/KWQObject.cpp: Added.
        * kwq/KWQObject.mm: Removed.
        * kwq/KWQPen.cpp: Added.
        * kwq/KWQPen.mm: Removed.
        * kwq/KWQPointArray.cpp: Added.
        * kwq/KWQPointArray.mm: Removed.
        * kwq/KWQPtrDictImpl.cpp: Added.
        * kwq/KWQPtrDictImpl.mm: Removed.
        * kwq/KWQRegExp.cpp: Added.
        * kwq/KWQRegExp.mm: Removed.
        * kwq/KWQRegion.cpp: Added.
        * kwq/KWQRegion.mm: Removed.
        * kwq/KWQStyle.cpp: Added.
        * kwq/KWQStyle.mm: Removed.
        * kwq/KWQTextCodec.cpp: Added.
        * kwq/KWQTextCodec.mm: Removed.
        * kwq/KWQTextStream.cpp: Added.
        * kwq/KWQTextStream.mm: Removed.
        * kwq/KWQTimer.cpp: Added.
        * kwq/KWQTimer.mm: Removed.
        * kwq/KWQValueListImpl.cpp: Added.
        * kwq/KWQValueListImpl.mm: Removed.
        * kwq/KWQVariant.cpp: Added.
        * kwq/KWQVariant.mm: Removed.
        * kwq/KWQVectorImpl.cpp: Added.
        * kwq/KWQVectorImpl.mm: Removed.
        * kwq/KWQWMatrix.cpp: Added.
        * kwq/KWQWMatrix.mm: Removed.

2006-01-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - added basic SVG text support using CSS-based rendering
        http://bugs.webkit.org/show_bug.cgi?id=4883
 
        Affects many test results in LayoutTests/svg.

        * kcanvas/RenderSVGText.cpp: Added. Simple subclass of RenderBlock for SVG text.
        (RenderSVGText::RenderSVGText): just call superclass constructor.
        (RenderSVGText::translateTopToBaseline): helper to account for the fact that
        y coordinates for <text> give the baseline position, but the render tree expects
        current y to be the top.
        (RenderSVGText::translateForAttributes): translate to account for x and y
        attributes.
        (RenderSVGText::paint): Apply appropriate CTM transform and then just let
        RenderBlock paint.
        * kcanvas/RenderSVGText.h: Added.
        (RenderSVGText::renderName):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceContextQuartz::nsGraphicsContext): We want the context flipped.
        * ksvg2/css/svg.css: Give <svg:text> display: block
        * ksvg2/svg/SVGTextElementImpl.cpp:
        (SVGTextElementImpl::createRenderer): Create a RenderSVGText renderer.
        (SVGTextElementImpl::childShouldCreateRenderer): Let child text nodes make
        renderers, but nothing else (for now).
        * ksvg2/svg/SVGTextElementImpl.h:
        (KSVG::SVGTextElementImpl::rendererIsNeeded): It sure is! :-)
        * WebCore.xcodeproj/project.pbxproj: Add new files.

2006-01-07  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs

        Removed old, unneeded code.

        * WebCore+SVG/DrawCanvasItem.h: Removed.
        * WebCore+SVG/DrawCanvasItem.mm: Removed.
        * WebCore+SVG/DrawCanvasItemPrivate.h: Removed.
        * WebCore+SVG/DrawDocument.h: Removed.
        * WebCore+SVG/DrawDocument.mm: Removed.
        * WebCore+SVG/DrawDocumentPrivate.h: Removed.
        * WebCore+SVG/DrawView.h: Removed.
        * WebCore+SVG/DrawView.mm: Removed.
        * WebCore+SVG/DrawViewPrivate.h: Removed.
        * WebCore+SVG/NSSVGImageRep.h: Removed.
        * WebCore+SVG/NSSVGImageRep.m: Removed.
        * WebCore.xcodeproj/project.pbxproj: remove files

2006-01-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - fixed WebCore build
        http://bugs.webkit.org/show_bug.cgi?id=6404

        * khtml/rendering/render_canvasimage.h: Remove unneeded extern declarations.

2006-01-07  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6373
        REGRESSION: JavaScript hang when comparing large array to null
        
        * khtml/ecma/kjs_html.cpp:
        Remove toPrimitive.
        
        * khtml/ecma/kjs_html.h:
        (KJS::HTMLAllCollection::isEqualToNull):
        Implement isEqualToNull and have it return true.

2006-01-06  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        <rdar://problem/4386652> Crash: SVG filter crash at w3schools.com

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEDiffuseLightingQuartz::getCIFilter): nil check
        (KCanvasFESpecularLightingQuartz::getCIFilter): nil check

2006-01-06  Geoffrey Garen  <ggaren@apple.com>

        Patch by Mitz, reviwed by Darin, layout tested and landed by me.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6382
        REGRESSION: Repro crash when clicking link with target="_blank"

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::setName):
        * manual-tests/empty-link-target.html: Added.

2006-01-06  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5291
          FORM multipart/form-data with GET method issue

        Test cases: 
        * fast/forms/form-get-multipart.html
        * fast/forms/form-get-multipart2.html
        * fast/forms/form-get-multipart3.html
        * fast/forms/form-post-urlencoded.html

        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::submit):
        Reset m_multipart to false if not posting.
        (DOM::HTMLFormElementImpl::parseEnctype):
        multipart/form-data doesn't imply POST method.

2006-01-06  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5792
          Crasher on rendering-shapes from SVG 1.0 testsuite

        Test case: fast/parser/entity-ignorable-whitespace.xhtml

        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::finish): install an ignorableWhitespace callback to
        work around a libxml2 bug
        (khtml::ignorableWhitespaceHandler): no-op

2006-01-06  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5142
        parseXMLDocumentFragment can't parse fragments correctly
        
        * khtml/xml/xml_tokenizer.cpp:
        (khtml::balancedStartElementNsHandler):
        (khtml::balancedEndElementNsHandler):
        (khtml::balancedCharactersHandler):
        (khtml::balancedProcessingInstructionHandler):
        (khtml::balancedCdataBlockHandler):
        (khtml::balancedCommentHandler):
        (khtml::balancedWarningHandler):
        Add handlers.
        
        (khtml::parseXMLDocumentFragment):
        Change back into using xmlParseBalancedChunkMemory. 

2006-01-06  Alexander Kellett  <lypanov@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Basic support for <mask> tag.
        http://bugs.webkit.org/show_bug.cgi?id=5969
        Still missing attribute support for: maskUnits, maskContentUnits.
        
        Mask pixel tests do not work in DumpRenderTree due to:
        http://bugs.webkit.org/show_bug.cgi?id=6327
        Added test cases anyway.

        This also tickles a (known) gradient update issue:
        http://bugs.webkit.org/show_bug.cgi?id=6052
        
        Test: svg/custom/grayscale-gradient-mask.svg

        * WebCore.xcodeproj/project.pbxproj: added Mask files
        * kcanvas/KCanvasResources.cpp:
        (KCanvasMasker::KCanvasMasker): added.
        (KCanvasMasker::~KCanvasMasker): added.
        (KCanvasMasker::setMask): added.
        (KCanvasMasker::externalRepresentation): added.
        (getMaskerById): added.
        * kcanvas/KCanvasResources.h:
        (KCanvasResource::isMasker): added.
        (KCanvasMasker::isMasker): added.
        (KCanvasMasker::mask): added.
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (KCanvasItemQuartz::paint): added mask support
        * kcanvas/device/quartz/KCanvasMaskerQuartz.h: Added.
        (KCanvasMaskerQuartz::KCanvasMaskerQuartz): added.
        * kcanvas/device/quartz/KCanvasMaskerQuartz.mm: Added.
        (applyLuminanceToAlphaFilter): added.
        (applyExpandAlphatoGrayscaleFilter): added.
        (transformImageIntoGrayscaleMask): added.
        (KCanvasMaskerQuartz::applyMask): added.
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasContainerQuartz::paint): added mask support.
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceQuartz::createResource): added mask support.
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (KRenderingPaintServerRadialGradientQuartz::draw):
        * kcanvas/device/quartz/QuartzSupport.h:
        * kcanvas/device/quartz/QuartzSupport.mm:
        (debugDumpCGImageToFile): added, debug only.
        (debugDumpCGLayerToFile): added, debug only.
        (debugDumpCIImageToFile): added, debug only.
        * ksvg2/css/SVGCSSStyleSelector.cpp:
        (KDOM::CSSStyleSelector::applySVGProperty): added mask support.
        * ksvg2/css/SVGRenderStyle.cpp:
        (SVGRenderStyle::SVGRenderStyle): added mask support.
        (SVGRenderStyle::operator==): added mask support.
        * ksvg2/css/SVGRenderStyle.h:
        * ksvg2/css/SVGRenderStyleDefs.cpp:
        (StyleMaskData::StyleMaskData): added mask support.
        (StyleMaskData::operator==): added mask support.
        * ksvg2/css/SVGRenderStyleDefs.h:
        (KSVG::StyleMaskData::operator!=): added mask support.
        * ksvg2/ecma/Ecma.cpp:
        (Ecma::inheritedGetDOMNode): added mask support.
        * ksvg2/svg/SVGMaskElementImpl.cpp: Added.
        (KSVG::SVGMaskElementImpl::SVGMaskElementImpl): added.
        (KSVG::SVGMaskElementImpl::~SVGMaskElementImpl): added.
        (KSVG::SVGMaskElementImpl::x): added.
        (KSVG::SVGMaskElementImpl::y): added.
        (KSVG::SVGMaskElementImpl::width): added.
        (KSVG::SVGMaskElementImpl::height): added.
        (KSVG::SVGMaskElementImpl::attributeChanged): added.
        (KSVG::SVGMaskElementImpl::childrenChanged): added.
        (KSVG::SVGMaskElementImpl::parseMappedAttribute): added.
        (KSVG::SVGMaskElementImpl::drawMaskerContent): added.
        (KSVG::SVGMaskElementImpl::createRenderer): added.
        (KSVG::SVGMaskElementImpl::canvasResource): added.
        * ksvg2/svg/SVGMaskElementImpl.h: Added.
        (KSVG::SVGMaskElementImpl::isValid): added.
        (KSVG::SVGMaskElementImpl::rendererIsNeeded): added.
        * ksvg2/svg/svgtags.in: added <mask> support.

2006-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - move frame management and finding code from WebKit to WebCore
        http://bugs.webkit.org/show_bug.cgi?id=6368

        * WebCore.exp: export WebCoreFrameNamespace
        * WebCore.xcodeproj/project.pbxproj: add new files
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::setName): Don't call to bridge any more, not needed
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (isCaseSensitiveEqual): helper function
        (-[WebCoreBridge appendChild:]): remove excess braces
        (-[WebCoreBridge childFrameNamed:]): moved here from WebFrame
        (-[WebCoreBridge _deepLastChildFrame]): ditto
        (-[WebCoreBridge nextFrameWithWrap:]): ditto
        (-[WebCoreBridge previousFrameWithWrap:]): ditto
        (-[WebCoreBridge setFrameNamespace:]): ditto
        (-[WebCoreBridge frameNamespace]): ditto
        (-[WebCoreBridge _shouldAllowAccessFrom:]): ditto
        (-[WebCoreBridge _descendantFrameNamed:sourceFrame:]): ditto
        (-[WebCoreBridge _frameInAnyWindowNamed:sourceFrame:]): ditto
        (-[WebCoreBridge findFrameNamed:]): ditto
        (-[WebCoreBridge setName:]): don't call KHTMLPart setName directly,
        the kwq version is fine
        (-[WebCoreBridge _addFramePathToString:]): moved from WebFrame
        (-[WebCoreBridge generateFrameName]): ditto

2006-01-04  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        Based on a patch by Eric.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6180
        "text" output in fragment produced by XSLTProccessor is wrong (has xhtml garbage)
        
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::xsltParamArrayFromParameterMap):
        (DOM::freeXsltParamArray):
        Use fastMalloc/fastFree.
        
        (DOM::createFragmentFromSource):
        If the output is "text", just create a text node and add
        it to the fragment.

2006-01-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by darin.

        - Fixed http://bugs.webkit.org/show_bug.cgi?id=6311
        document.plugins doesn't exist

        * khtml/ecma/kjs_html.cpp: Added 'plugins' as synonym for 'embeds'

2006-01-04  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by darin.
 
         - Fixed <rdar://problem/4214080> document.embeds: embeds[0].Play() 
         undefined at languageguide.org prevents audio playing on mouseover
 
         - Layout test: fast/dom/object-embed-plugin-scripting.html
 
         A common idiom the kids like to use these days for plugins is to nest 
         an <embed> inside an <object>, and assume that IE will honor the first,
         Mozilla the second. We happen to honor both, but the rules dictate that
         only the outer <object> gets a plugin/renderer. (A plugin is a 
        renderer.) This is a problem because sites ID us as Mozilla and 
        therefore attempt to script their plugins through the <embed>, which 
        has no plugin/renderer. The fix here is to have an <embed> return its 
        parent node's plugin/renderer when queried, if and only if it has no 
        renderer of its own and its parent node is an <object>. We may decide
        to restrict this further in the future.

        One happy consequence of this patch is that all the apple.com Quicktime
        websites we had previously broken with TOT are now fixed. 

        * khtml/html/html_objectimpl.cpp:
        (DOM::HTMLEmbedElementImpl::getEmbedInstance): The "if (!r)" clause 
        implements the logic I just described. The code below it I changed 
        just for style, to match the style in getObjectInstance().

        (DOM::HTMLEmbedElementImpl::rendererIsNeeded): Assert that an <object>
        parent has a renderer because we're going to use it later.

        (DOM::HTMLObjectElementImpl::rendererIsNeeded): Changed to match style 
        of HTMLEmbedElementImpl counterpart.

2006-01-04  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=6301
          REGRESSION: Border repaint glitch

        * khtml/rendering/render_object.cpp:
        (RenderObject::repaintAfterLayoutIfNeeded): Repaint parts of the
        border that moved.
        * manual-tests/border-repaint-glitch.html: Added.

2005-12-30  Kimmo Kinnunen  <kimmo.kinnunen@nokia.com>

        Reviewed by eseidel.  Landed by eseidel.

        Changed use of QRect to QRectF in the points where SVG can have
        fractional numbers
        http://bugs.webkit.org/show_bug.cgi?id=4462

        Added test cases:
        * svg/custom/fractional-rects.svg: copy of rounded-rects.svg with
        fractional coordinates.

        * WebCore.xcodeproj/project.pbxproj:
        * kwq/KWQWMatrix.h:
        * kwq/KWQWMatrix.mm:
        (QWMatrix::mapRect): mapRect for QRectF
        * kwq/KWQRectF.h:
        * kwq/KWQRectF.mm:  Added. QRectF impl
        * kwq/KWQSizeF.h:
        * kwq/KWQSizeF.mm:  Added.QSizeF impl
        * kwq/KWQPointF.h:
        * kwq/KWQPointF.mm: Added. QPointF impl
        * kcanvas/KCanvasContainer.cpp:
        (KCanvasContainer::fillContains):
        (KCanvasContainer::strokeContains):
        (KCanvasContainer::relativeBBox):
        (KCanvasContainer::getAspectRatio): QRect -> QRectF
        * kcanvas/KCanvasContainer.h:
        * kcanvas/KCanvasFilters.cpp:
        (KCanvasFilterEffect::subRegion):
        (KCanvasFilterEffect::setSubRegion): QRect -> QRectF
        * kcanvas/KCanvasFilters.h:
        (KCanvasFilter::filterRect):
        (KCanvasFilter::setFilterRect): QRect -> QRectF
        (KCanvasFEConvolveMatrix::kernelSize):
        (KCanvasFEConvolveMatrix::setKernelSize):
        (KCanvasFEConvolveMatrix::targetOffset):
        (KCanvasFEConvolveMatrix::setTargetOffset): QSize -> QSizeF
        * kcanvas/KCanvasItem.cpp:
        (RenderPath::fillContains):
        (RenderPath::strokeContains):
        (RenderPath::relativeBBox): QRect -> QRectF
        * kcanvas/KCanvasItem.h:
        * kcanvas/KCanvasResources.cpp:
        (KCanvasMarker::draw): QRect -> QRectF
        * kcanvas/KCanvasResources.h:
        * kcanvas/KCanvasTreeDebug.cpp:
        (hasFractions): helper function
        (operator<<): QSizeF operator, QRectF operator
        * kcanvas/KCanvasTreeDebug.h:
        * kcanvas/device/KRenderingPaintServerGradient.cpp:
        (KRenderingPaintServerLinearGradient::gradientStart):
        (KRenderingPaintServerLinearGradient::setGradientStart):
        (KRenderingPaintServerLinearGradient::gradientEnd):
        (KRenderingPaintServerLinearGradient::setGradientEnd):
        (KRenderingPaintServerRadialGradient::gradientCenter):
        (KRenderingPaintServerRadialGradient::setGradientCenter):
        (KRenderingPaintServerRadialGradient::gradientFocal):
        (KRenderingPaintServerRadialGradient::setGradientFocal): QPoint -> QPointF
        * kcanvas/device/KRenderingPaintServerGradient.h:
        * kcanvas/device/KRenderingPaintServerPattern.cpp:
        (KRenderingPaintServerPattern::Private::Private): x, y, width, height -> QRectF
        (KRenderingPaintServerPattern::setBbox): replaced get/set methods
        (KRenderingPaintServerPattern::bbox): replaced get/set methods
        (KRenderingPaintServerPattern::externalRepresentation):
        * kcanvas/device/KRenderingPaintServerPattern.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::prepareFilter):
        (KCanvasFilterQuartz::applyFilter): QRect -> QRectF
        * kcanvas/device/quartz/KCanvasItemQuartz.h:
        (KCanvasItemQuartz::getAbsoluteRepaintRect): QRect -> QRectF
        * kcanvas/device/quartz/KCanvasItemQuartz.mm:
        (drawMarkerWithData):
        (KCanvasItemQuartz::drawMarkersIfNeeded):
        (KCanvasItemQuartz::paint): QRect -> QRectF
        (KCanvasItemQuartz::nodeAtPoint): QPoint -> QPointF
        (KCanvasItemQuartz::bboxForPath) :QRect -> QRectF
        (KCanvasItemQuartz::hitsPath):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.h:
        (KCanvasContainerQuartz::getAbsoluteRepaintRect): QRect -> QRectF
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerPatternQuartz::draw): QRect -> QRectF
        * khtml/rendering/render_object.h:
        (khtml::RenderObject::relativeBBox):QRect -> QRectF
        * ksvg2/svg/SVGFilterElementImpl.cpp:
        (SVGFilterElementImpl::canvasResource): QRect -> QRectF
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributesImpl.cpp:
        (SVGFilterPrimitiveStandardAttributesImpl::setStandardAttributes):
        * ksvg2/svg/SVGLengthImpl.cpp:
        (SVGLengthImpl::value): QRect -> QRectF
        * ksvg2/svg/SVGLinearGradientElementImpl.cpp:
        (SVGLinearGradientElementImpl::buildGradient): QPoint -> QPointF, removed integer conversions
        * ksvg2/svg/SVGLocatableImpl.cpp:
        (SVGLocatableImpl::getBBox): Rect -> QRectF
        * ksvg2/svg/SVGPatternElementImpl.cpp:
        (SVGPatternElementImpl::drawPatternContentIntoTile): QRect -> QRectF
        * ksvg2/svg/SVGRadialGradientElementImpl.cpp:
        (SVGRadialGradientElementImpl::buildGradient): QPoint -> QPointF, removed integer conversions
        * ksvg2/svg/SVGSVGElementImpl.cpp:
        (SVGSVGElementImpl::checkIntersection): QRect -> QRectF, removed integer conversions
        (SVGSVGElementImpl::checkEnclosure): QRect -> QRectF, removed integer conversions

2006-01-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Vicki.

        - moved frame traversal code across from bridge, also dropped the children
        array

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge firstChild]): Moved from WebBridge. Use new _firstChild
        pointer.
        (-[WebCoreBridge lastChild]): Moved from WebBridge. Use new _lastChild pointer.
        (-[WebCoreBridge childCount]): Moved from WebBridge. Use _childCount variable.
        (-[WebCoreBridge previousSibling]): Moved from WebBridge.
        (-[WebCoreBridge nextSibling]): ditt
        (-[WebCoreBridge isDescendantOfFrame:]): ditto
        (-[WebCoreBridge traverseNextFrameStayWithin:]): ditto
        (-[WebCoreBridge appendChild:]): Moved from WebBridge, maintain count and first/last
        pointers.
        (-[WebCoreBridge removeChild:]): Moved from WebBridge, maintain count and first/last
        pointers.

2006-01-03  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by harrison

        <http://bugs.webkit.org/show_bug.cgi?id=4609>
        window.getSelection().toString() is undefined (range object 
        returned from window.getSelection() is useless)

        toString was defined as a method on the JS Selection object, 
        but it didn't return anything.

        Added layout test:
        * editing/selection/toString.html

        * khtml/ecma/kjs_window.cpp:
        (KJS::SelectionFunc::callAsFunction):

2006-01-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by timo.

        - Fixed: http://bugs.webkit.org/show_bug.cgi?id=6318
        REGRESSION: Repro crash in JS called from Flash on bdash.net.nz

        Since we clear all the plugin data structures in setView, we need to
        clear the windowScriptObject as well. I had already done this in my
        previous patch, but I didn't realize there are two windowScriptObjects 
        -- one for Netscape PlugIns, and one for WebKit PlugIns.

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::setView): Clear the Netscape PlugIn windowScriptObject
        as well.

2006-01-03  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6358
        JS objects missing "prototype" properties
        
        * khtml/ecma/XSLTProcessor.cpp:
        (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
        * khtml/ecma/XSLTProcessor.h:
        * khtml/ecma/domparser.cpp:
        (KJS::DOMParserConstructorImp::DOMParserConstructorImp):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequestConstructorImp::XMLHttpRequestConstructorImp):
        * khtml/ecma/xmlserializer.cpp:
        (KJS::XMLSerializerConstructorImp::XMLSerializerConstructorImp):
        Add "prototype" property in constructors.

2006-01-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        REGRESSION: repro crash w/ invalid charset attribute on <script>
        http://bugs.webkit.org/show_bug.cgi?id=6345
        I also made some small spacing cleanup here.
        I did *not* fix the usage in formData, as the move from KCharSet to
        QTextCodec actually fixed a bug whereby if the first listed charset
        in accept-charsets was invalid, we would assume latin1 instead of
        checking for the next valid one before assuming system encoding.

        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::formData): cleanup
        * khtml/misc/loader.cpp:
        (CachedCSSStyleSheet::CachedCSSStyleSheet): null check
        (CachedScript::CachedScript): cleanup
        (CachedXSLStyleSheet::CachedXSLStyleSheet): null check
        (CachedXBLDocument::CachedXBLDocument): cleanup

2006-01-03  Justin Garcia  <justin.garcia@apple.com>

        <http://bugs.webkit.org/show_bug.cgi?id=4904>
        Bug with baseOffset and extentOffset in selections (for writely.com)
        <rdar://problem/4259818>
        selection object incorrect after double-clicking a word
        
        Reviewed by harrison

        Changed the Selection object's anchor/focus properties to match 
        Mozilla's Selection object API, added getRangeAt and outlined the 
        rest of the API.
        Cleaned up the JS Selection object (to do less work in the DOM binding).
        Added an updateLayout call to VisiblePosition::init and removed some 
        updateLayout calls from other parts of the editing code.
        
        Added layout tests:
        * editing/selection/getRangeAt.html
        * editing/selection/anchor-focus1.html
        * editing/selection/anchor-focus2.html
        * editing/selection/anchor-focus3.html
        Updated expected results:
        * editing/selection/unrendered-001-expected.txt

        * khtml/ecma/kjs_window.cpp:
        (KJS::Selection::getValueProperty):
        (KJS::Selection::toString):
        (KJS::SelectionFunc::callAsFunction):
        * khtml/ecma/kjs_window.h:
        (KJS::Selection::):
        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::modify):
        (khtml::SelectionController::type):
        (khtml::SelectionController::toString):
        (khtml::SelectionController::getRangeAt):
        (khtml::SelectionController::setBaseAndExtent):
        (khtml::SelectionController::setPosition):
        (khtml::SelectionController::collapse):
        (khtml::SelectionController::collapseToEnd):
        (khtml::SelectionController::collapseToStart):
        (khtml::SelectionController::empty):
        (khtml::SelectionController::extend):
        (khtml::SelectionController::validate):
        * khtml/editing/SelectionController.h:
        (khtml::SelectionController::part):
        (khtml::SelectionController::baseNode):
        (khtml::SelectionController::extentNode):
        (khtml::SelectionController::baseOffset):
        (khtml::SelectionController::extentOffset):
        (khtml::SelectionController::anchorNode):
        (khtml::SelectionController::anchorOffset):
        (khtml::SelectionController::focusNode):
        (khtml::SelectionController::focusOffset):
        (khtml::SelectionController::isCollapsed):
        * khtml/editing/visible_position.cpp:
        (khtml::VisiblePosition::init):
        (khtml::VisiblePosition::isCandidate):
        * khtml/khtml_part.cpp:
        (KHTMLPart::handleMousePressEventSingleClick):

2006-01-03  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5378
        createDocument fails with DOM Exception 5 when passed empty qname
        
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMDOMImplementationProtoFunc::callAsFunction):
        When passing null to createDocument, pass a null DOMString, and not
        a DOMString containing the text "null".
        
        * khtml/xml/dom_docimpl.cpp:
        (DOMImplementationImpl::createDocument):
        Only validate the qualifiedName if it's not null or empty. Also, do not
        create the document element if the qualifiedName is null or empty.

2006-01-03  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        No functionality changes, no tests possible.

        khtml/editing should use RefPtr instead of manual ref/deref
        http://bugs.webkit.org/show_bug.cgi?id=6109

        Results in a slight performance gain < 1% on the PLT.

        * khtml/editing/SelectionController.cpp:
        (khtml::SelectionController::toRange):
        * khtml/editing/SelectionController.h:
        * khtml/editing/append_node_command.cpp:
        (khtml::AppendNodeCommand::AppendNodeCommand):
        (khtml::AppendNodeCommand::doApply):
        (khtml::AppendNodeCommand::doUnapply):
        * khtml/editing/append_node_command.h:
        (khtml::AppendNodeCommand::~AppendNodeCommand):
        (khtml::AppendNodeCommand::appendChild):
        (khtml::AppendNodeCommand::parentNode):
        * khtml/editing/apply_style_command.cpp:
        (khtml::StyleChange::init):
        (khtml::ApplyStyleCommand::removeInlineStyle):
        * khtml/editing/apply_style_command.h:
        * khtml/editing/composite_edit_command.cpp:
        (khtml::CompositeEditCommand::deleteInsignificantText):
        * khtml/editing/delete_from_text_node_command.cpp:
        (khtml::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand):
        * khtml/editing/delete_from_text_node_command.h:
        (khtml::DeleteFromTextNodeCommand::~DeleteFromTextNodeCommand):
        (khtml::DeleteFromTextNodeCommand::node):
        * khtml/editing/delete_selection_command.cpp:
        (khtml::DeleteSelectionCommand::initializePositionData):
        (khtml::DeleteSelectionCommand::saveTypingStyleState):
        (khtml::DeleteSelectionCommand::handleGeneralDelete):
        (khtml::DeleteSelectionCommand::calculateEndingPosition):
        (khtml::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        (khtml::DeleteSelectionCommand::clearTransientState):
        * khtml/editing/delete_selection_command.h:
        * khtml/editing/edit_command.cpp:
        (khtml::EditCommand::EditCommand):
        (khtml::EditCommand::~EditCommand):
        (khtml::EditCommand::setTypingStyle):
        (khtml::EditCommand::styleAtPosition):
        * khtml/editing/edit_command.h:
        (khtml::EditCommand::document):
        (khtml::EditCommand::typingStyle):
        * khtml/editing/insert_into_text_node_command.cpp:
        (khtml::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        * khtml/editing/insert_into_text_node_command.h:
        (khtml::InsertIntoTextNodeCommand::~InsertIntoTextNodeCommand):
        (khtml::InsertIntoTextNodeCommand::node):
        * khtml/editing/insert_node_before_command.cpp:
        (khtml::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (khtml::InsertNodeBeforeCommand::doApply):
        (khtml::InsertNodeBeforeCommand::doUnapply):
        * khtml/editing/insert_node_before_command.h:
        (khtml::InsertNodeBeforeCommand::~InsertNodeBeforeCommand):
        (khtml::InsertNodeBeforeCommand::insertChild):
        (khtml::InsertNodeBeforeCommand::refChild):
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand):
        (khtml::InsertParagraphSeparatorCommand::~InsertParagraphSeparatorCommand):
        (khtml::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion):
        (khtml::InsertParagraphSeparatorCommand::applyStyleAfterInsertion):
        * khtml/editing/insert_paragraph_separator_command.h:
        * khtml/editing/join_text_nodes_command.cpp:
        (khtml::JoinTextNodesCommand::JoinTextNodesCommand):
        (khtml::JoinTextNodesCommand::doApply):
        (khtml::JoinTextNodesCommand::doUnapply):
        * khtml/editing/join_text_nodes_command.h:
        (khtml::JoinTextNodesCommand::~JoinTextNodesCommand):
        (khtml::JoinTextNodesCommand::firstNode):
        (khtml::JoinTextNodesCommand::secondNode):
        * khtml/editing/jsediting.cpp:
        * khtml/editing/markup.cpp:
        (khtml::createMarkup):
        (khtml::createFragmentFromMarkup):
        (khtml::createFragmentFromText):
        (khtml::createFragmentFromNodeList):
        * khtml/editing/markup.h:
        * khtml/editing/merge_identical_elements_command.cpp:
        (khtml::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand):
        (khtml::MergeIdenticalElementsCommand::doApply):
        (khtml::MergeIdenticalElementsCommand::doUnapply):
        * khtml/editing/merge_identical_elements_command.h:
        (khtml::MergeIdenticalElementsCommand::~MergeIdenticalElementsCommand):
        * khtml/editing/move_selection_command.cpp:
        (khtml::MoveSelectionCommand::MoveSelectionCommand):
        (khtml::MoveSelectionCommand::~MoveSelectionCommand):
        (khtml::MoveSelectionCommand::doApply):
        * khtml/editing/move_selection_command.h:
        * khtml/editing/rebalance_whitespace_command.cpp:
        * khtml/editing/rebalance_whitespace_command.h:
        (khtml::RebalanceWhitespaceCommand::~RebalanceWhitespaceCommand):
        * khtml/editing/remove_css_property_command.cpp:
        (khtml::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand):
        * khtml/editing/remove_css_property_command.h:
        (khtml::RemoveCSSPropertyCommand::~RemoveCSSPropertyCommand):
        (khtml::RemoveCSSPropertyCommand::styleDeclaration):
        * khtml/editing/remove_node_attribute_command.cpp:
        (khtml::RemoveNodeAttributeCommand::RemoveNodeAttributeCommand):
        * khtml/editing/remove_node_attribute_command.h:
        (khtml::RemoveNodeAttributeCommand::~RemoveNodeAttributeCommand):
        (khtml::RemoveNodeAttributeCommand::element):
        * khtml/editing/remove_node_command.cpp:
        (khtml::RemoveNodeCommand::RemoveNodeCommand):
        (khtml::RemoveNodeCommand::doApply):
        (khtml::RemoveNodeCommand::doUnapply):
        * khtml/editing/remove_node_command.h:
        (khtml::RemoveNodeCommand::~RemoveNodeCommand):
        (khtml::RemoveNodeCommand::node):
        * khtml/editing/remove_node_preserving_children_command.cpp:
        (khtml::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        * khtml/editing/remove_node_preserving_children_command.h:
        (khtml::RemoveNodePreservingChildrenCommand::~RemoveNodePreservingChildrenCommand):
        (khtml::RemoveNodePreservingChildrenCommand::node):
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplacementFragment::ReplacementFragment):
        (khtml::ReplacementFragment::~ReplacementFragment):
        (khtml::ReplacementFragment::enclosingBlock):
        (khtml::ReplacementFragment::removeNodePreservingChildren):
        (khtml::ReplacementFragment::removeNode):
        (khtml::ReplacementFragment::insertFragmentForTestRendering):
        (khtml::ReplacementFragment::restoreTestRenderingNodesToFragment):
        (khtml::ReplaceSelectionCommand::fixupNodeStyles):
        (khtml::computeAndStoreNodeDesiredStyle):
        (khtml::NodeDesiredStyle::NodeDesiredStyle):
        (khtml::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (khtml::ReplaceSelectionCommand::~ReplaceSelectionCommand):
        (khtml::ReplaceSelectionCommand::doApply):
        (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
        (khtml::ReplaceSelectionCommand::updateNodesInserted):
        * khtml/editing/replace_selection_command.h:
        (khtml::NodeDesiredStyle::node):
        (khtml::NodeDesiredStyle::style):
        (khtml::ReplacementFragment::root):
        * khtml/editing/set_node_attribute_command.cpp:
        (khtml::SetNodeAttributeCommand::SetNodeAttributeCommand):
        * khtml/editing/set_node_attribute_command.h:
        (khtml::SetNodeAttributeCommand::~SetNodeAttributeCommand):
        (khtml::SetNodeAttributeCommand::element):
        * khtml/editing/split_element_command.cpp:
        (khtml::SplitElementCommand::SplitElementCommand):
        (khtml::SplitElementCommand::doApply):
        (khtml::SplitElementCommand::doUnapply):
        * khtml/editing/split_element_command.h:
        (khtml::SplitElementCommand::~SplitElementCommand):
        * khtml/editing/split_text_node_command.cpp:
        (khtml::SplitTextNodeCommand::SplitTextNodeCommand):
        (khtml::SplitTextNodeCommand::doApply):
        (khtml::SplitTextNodeCommand::doUnapply):
        * khtml/editing/split_text_node_command.h:
        (khtml::SplitTextNodeCommand::~SplitTextNodeCommand):
        (khtml::SplitTextNodeCommand::node):
        * khtml/editing/split_text_node_containing_element.cpp:
        (khtml::SplitTextNodeContainingElementCommand::SplitTextNodeContainingElementCommand):
        (khtml::SplitTextNodeContainingElementCommand::doApply):
        * khtml/editing/split_text_node_containing_element_command.h:
        (khtml::SplitTextNodeContainingElementCommand::~SplitTextNodeContainingElementCommand):
        * khtml/editing/visible_position.cpp:
        (khtml::makeRange):
        * khtml/editing/visible_position.h:
        * khtml/editing/visible_text.cpp:
        (khtml::TextIterator::range):
        (khtml::SimplifiedBackwardsTextIterator::range):
        (khtml::CharacterIterator::range):
        (khtml::findPlainText):
        * khtml/editing/visible_text.h:
        (khtml::WordAwareIterator::range):
        * khtml/editing/wrap_contents_in_dummy_span_command.cpp:
        (khtml::WrapContentsInDummySpanCommand::WrapContentsInDummySpanCommand):
        (khtml::WrapContentsInDummySpanCommand::doApply):
        (khtml::WrapContentsInDummySpanCommand::doUnapply):
        * khtml/editing/wrap_contents_in_dummy_span_command.h:
        (khtml::WrapContentsInDummySpanCommand::~WrapContentsInDummySpanCommand):
        * kwq/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]):
        (-[DOMHTMLDocument _createDocumentFragmentWithText:]):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge documentFragmentWithMarkupString:baseURLString:]):
        (-[WebCoreBridge documentFragmentWithText:]):
        (-[WebCoreBridge documentFragmentWithNodesAsParagraphs:]):

2006-01-03  Anders Carlsson  <andersca@mac.com>

        Reviewed by Darin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5177
        Javascript cloneNode(deep) does not clone form elements correctly

        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::cloneNode):
        Call copyNonAttributeProperties on the new node.
        
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLInputElementImpl::copyNonAttributeProperties):
        * khtml/html/html_formimpl.h:
        Copy m_value, m_checked and m_indeterminate here.
        
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::importNode):
        Call copyNonAttributeProperties on the new node.
        
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::cloneNode):
        Call copyNonAttributeProperties on the new node.
        
        * khtml/xml/dom_elementimpl.h:
        (DOM::ElementImpl::copyNonAttributeProperties):
        Add function declaration.

2006-01-02  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Eric.

        - remove the no longer used QIntDict

        * kwq/KWQIntDict.h: Removed.

2006-01-03  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5609
          XSLT document() doesn't handle relative paths

        Test case: fast/xsl/xslt-relative-path.xml

        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::docLoaderFunc): Renamed from stylesheetLoadFunc. Use base URL when constructing URLs.
        (DOM::XSLTProcessorImpl::transformToString):

2006-01-02  Vicki Murley  <vicki@apple.com>

        Reviewed by Maciej.
 
        - fix for <rdar://problem/4389622> *Pan EU2* iframe swallows events for overlapping elements (part 2)

        We originally added a call to passSubframeEventToSubframe here to fix the hand cursor updating problem
        reported in <rdar://problem/4316201> REGRESSION: cursor and text in status bar is not updated when 
        mousing over links in a frame (5509). However, when we return early after passSubframeEventToSubframe,
        we fail to fire onmouseout events.  Since the call to passSubframeEventToSubframe was originally added
        to fix the hand cursor updating problem, remove the early return and make cursor updating conditional
        on passSubframeEventToSubframe.

        * khtml/khtmlview.cpp:
        (KHTMLView::viewportMouseMoveEvent):

2005-12-30  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - http://bugs.webkit.org/show_bug.cgi?id=4557
          rename unusual strcmp and strcasecmp for DOMString family

        Added new functions named equal and equalIgnoringCase.

        * khtml/xml/dom_stringimpl.h: Changed the type of the length parameter to computeHash to unsigned
        to match the rest of the interface. Added equal and equalIgnoringCase functions. Added a
        version of the hash function that works on char* to CaseInsensitiveHash as preparation for an
        atomic string change.
        * khtml/xml/dom_stringimpl.cpp: Moved the QT_ALLOC_QCHAR_VEC and QT_DELETE_QCHAR_VEC macros
        here, and changed them into inline functions.
        (DOM::equal): Implemented.
        (DOM::equalIgnoringCase): Implemented.
        (DOM::DOMStringImpl::computeHash): Changed parameter type to unsigned to match other similar
        functions.

        * khtml/dom/dom_string.h: Removed unnecessary friend declarations. Changed operator
        overloads for == and != to call through inline to DOMStringImpl. Replaced strcasecmp
        with equalIgnoringCase, overloaded for one more combination of parameters. Removed strcmp.
        * khtml/dom/dom_string.cpp: Removed functions that are now implemented in DOMStringImpl*.

        * khtml/xml/dom_atomicstring.h: Removed a redundant const. Removed unnecessary
        friend declarations. Removed AtomicString::equal. Filled out a larger set of == and
        != operator implementations, mostly with inlines calling through to DOMStringImpl.
        Renamed equalsIgnoreCase to equalIgnoringCase and filled out a larger set as above.
        * khtml/xml/dom_atomicstring.cpp: Renamed AtomicString::equal to just ==.
        Removed some implementation of == and equalsIgnoreCase that are replaced by inlines.

        * khtml/html/html_listimpl.cpp:
        (DOM::HTMLOListElementImpl::parseMappedAttribute):
        (DOM::HTMLLIElementImpl::parseMappedAttribute):
        Use the "==" operator instead of strcmp.

        * khtml/css/cssstyleselector.cpp: (khtml::CSSStyleSelector::checkOneSelector):
        Use equalIgnoringCase instead of equalsIgnoreCase.

        * khtml/rendering/render_form.cpp:
        (RenderSlider::updateFromElement): Fixed bug where a temporary DOMString was put into
        a const DOMString&. Changed some DOMString to AtomicString as appropriate, and also
        used equalIgnoringCase instead of strcasecmp.
        (RenderSlider::slotSliderValueChanged): More of the same.

        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::processHttpEquiv): Replaced use of strcasecmp
        with equalIgnoringCase. Added parentheses to fix incorrect operator precedence in one case
        (&& binds tighter than ||) which fixes a crash when using a http-equiv pragma when there
        is no part (not sure how to reproduce that).

        * khtml/khtml_part.cpp:
        (updateState):
        (KHTMLPart::selectionStartHasStyle):
        * khtml/ecma/kjs_html.cpp: (KJS::KJS::HTMLDocument::putValueProperty):
        * khtml/editing/apply_style_command.cpp:
        (khtml::StyleChange::checkForLegacyHTMLStyleChange):
        (khtml::StyleChange::currentlyHasStyle):
        (khtml::hasTextDecorationProperty):
        (khtml::ApplyStyleCommand::extractTextDecorationStyle):
        (khtml::ApplyStyleCommand::extractAndNegateTextDecorationStyle):
        * khtml/html/html_baseimpl.cpp:
        (HTMLBodyElementImpl::parseMappedAttribute):
        (HTMLFrameElementImpl::parseMappedAttribute):
        * khtml/html/html_blockimpl.cpp:
        (HTMLDivElementImpl::parseMappedAttribute):
        (HTMLHRElementImpl::parseMappedAttribute):
        (HTMLParagraphElementImpl::parseMappedAttribute):
        (HTMLMarqueeElementImpl::parseMappedAttribute):
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::parseMappedAttribute):
        (HTMLElementImpl::addHTMLAlignment):
        (HTMLElementImpl::setContentEditable):
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::parseMappedAttribute):
        (DOM::HTMLButtonElementImpl::parseMappedAttribute):
        (DOM::HTMLInputElementImpl::setInputType):
        (DOM::HTMLInputElementImpl::parseMappedAttribute):
        (DOM::HTMLKeygenElementImpl::appendFormData):
        (DOM::HTMLTextAreaElementImpl::parseMappedAttribute):
        * khtml/html/html_imageimpl.cpp: (DOM::HTMLAreaElementImpl::parseMappedAttribute):
        * khtml/html/html_inlineimpl.cpp: (DOM::HTMLBRElementImpl::parseMappedAttribute):
        * khtml/html/html_tableimpl.cpp: (DOM::HTMLTablePartElementImpl::parseMappedAttribute):
        * khtml/html/htmlparser.cpp: (HTMLParser::handleError):
        Use equalIgnoringCase instead of strcasecmp.

2005-12-30  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.
        
        Test: fast/text/justified-text-rect.html
        
        - WebCore part of fix for
          http://bugs.webkit.org/show_bug.cgi?id=5461
          Text width measured incorrectly when text-align: justify

        * khtml/rendering/font.h:
        * khtml/rendering/font.cpp:
        (khtml::Font::selectionRectForText): Added.
        * khtml/rendering/render_text.cpp:
        (kthml::InlineTextBox::selectionRect): Use selectionRectForText. This
        works for justified text as well, and avoids intermediate rounding which
        resulted in selection rects narrower than AppKit's.
        (khtml::InlineTextBox::positionForOffset): Use selectionRectForText,
        which works for justified text as well.
        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::selectionRectForText): Added.
        * kwq/WebCoreTextRenderer.h:

2005-12-30  Alexey Proskuryakov  <ap@nypop.com>

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6289
        REGRESSION: firstCharacterForRange(0, 0) returns a 0x0 rect

        * khtml/editing/visible_text.cpp:
        (khtml::TextIterator::rangeFromLocationAndLength):
        Only special-case (0, 0) ranges for empty documents.

2005-12-30  Geoffrey Garen  <ggaren@apple.com>

        Added test case for <rdar://problem/4268278> Submitting a form in onUnload event
        handler causes crash in -[WebDataSource(WebPrivate) _commitIfReady:]

        * manual-tests/onunload-form-submit-crash.html: Added.

2005-12-30  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6297
        XMLSerializer should use createMarkup.

        * khtml/ecma/xmlserializer.cpp:
        (KJS::XMLSerializerProtoFunc::callAsFunction):
        Use createMarkup instead of NodeImpl::toString.

        * khtml/editing/markup.cpp:
        (khtml::startMarkup):
        escape attribute values and ignore document fragment nodes.

2005-12-30  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        No functional changes, thus no layout test.

        Just removes debug NSLog() calls from ksvg2/kcanvas.
        http://bugs.webkit.org/show_bug.cgi?id=6299

        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFilterQuartz::prepareFilter):
        (KCanvasFilterQuartz::applyFilter):
        (KCanvasFilterQuartz::getCIFilterStack):
        (KCanvasFilterQuartz::imageForName):
        (KCanvasFEBlendQuartz::getCIFilter):
        (KCanvasFEColorMatrixQuartz::getCIFilter):
        (KCanvasFEGaussianBlurQuartz::getCIFilter):
        * kcanvas/device/quartz/KCanvasResourcesQuartz.mm:
        (KCanvasClipperQuartz::applyClip):
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceContextQuartz::mapFromVisual):
        (KRenderingDeviceContextQuartz::mapToVisual):
        (KRenderingDeviceQuartz::createResource):
        (KRenderingDeviceQuartz::createFilterEffect):
        * kcanvas/device/quartz/KRenderingPaintServerGradientQuartz.mm:
        (drawShadingWithStyle):
        (KRenderingPaintServerGradientQuartz::updateQuartzGradientCache):
        * kcanvas/device/quartz/KRenderingPaintServerQuartz.mm:
        (KRenderingPaintServerPatternQuartz::draw):
        * ksvg2/svg/svgpathparser.cpp:
        (SVGPathParser::parseSVG):

2005-12-29  Graham Dennis  <Graham.Dennis@gmail.com>

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3579
          In-place style-switching is leaving junk behind, messing up styles

        * khtml/rendering/render_block.h: (khtml::RenderBlock::initMaxMarginValues):
        Set all margin values in all cases.

2005-12-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        XML documents with "html" in dtd name use XHTML entities when they shouldn't
        http://bugs.webkit.org/show_bug.cgi?id=6290

        * khtml/xml/xml_tokenizer.cpp:
        (khtml::externalSubsetHandler): check for exact xhtml types

2005-12-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Close leak in CollectionInfo due to HashMap migration
        http://bugs.webkit.org/show_bug.cgi?id=6295

        * khtml/html/html_miscimpl.cpp:
        (DOM::HTMLCollectionImpl::CollectionInfo::~CollectionInfo):
        * khtml/html/html_miscimpl.h:

2005-12-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - finished frame traversal cleanup
        http://bugs.webkit.org/show_bug.cgi?id=6293
        
        * kwq/WebCoreBridge.h: Removed childFrames method from WebCoreBridge protocol
        since it is not actually used.

2005-12-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Leaks in XSLTProcessorImpl due to early exit in failure case
        http://bugs.webkit.org/show_bug.cgi?id=6101

        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::xmlDocPtrFromNode): add "shouldDelete" argument
        (DOM::XSLTProcessorImpl::transformToString): delete new'd xmlDoc

2005-12-29  Eric Seidel  <eseidel@apple.com>

        File accidentally omitted from previous commit.

        Remove QDict from khtml/html
        http://bugs.webkit.org/show_bug.cgi?id=6230

        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLCollection::getNamedItems):

2005-12-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove QDict from khtml/html
        http://bugs.webkit.org/show_bug.cgi?id=6230
        Uses HashMap instead.

        * khtml/html/html_miscimpl.cpp:
        (DOM::HTMLCollectionImpl::CollectionInfo::CollectionInfo):
        (DOM::HTMLCollectionImpl::CollectionInfo::reset):
        (DOM::HTMLCollectionImpl::namedItem):
        (DOM::HTMLCollectionImpl::updateNameCache):
        (DOM::HTMLCollectionImpl::namedItems):
        (DOM::HTMLCollectionImpl::nextNamedItem):
        (DOM::HTMLFormCollectionImpl::nextNamedItemInternal):
        (DOM::HTMLFormCollectionImpl::updateNameCache):
        * khtml/html/html_miscimpl.h:

2005-12-29  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        DOMString/DOMStringImpl/AtomicString need enhancements before replacing QString
        http://bugs.webkit.org/show_bug.cgi?id=6228
        Added find(), contains(), startsWith() and endsWith() to DOMString
        Uses the above functions throughout the code.
        Small performance boost.

        * khtml/css/css_base.cpp:
        (CSSSelector::print):
        * khtml/css/css_ruleimpl.cpp:
        (DOM::CSSImportRuleImpl::init):
        * khtml/css/css_valueimpl.cpp:
        (DOM::CSSStyleDeclarationImpl::setProperty):
        * khtml/css/cssparser.cpp:
        (CSSParser::parseValue):
        (CSSParser::parseDeclaration):
        (CSSParser::parseContent):
        * khtml/css/cssstyleselector.cpp:
        (khtml::CSSStyleSelector::CSSStyleSelector):
        (khtml::CSSStyleSelector::setEncodedURL):
        (khtml::parseUASheet):
        (khtml::cleanpath):
        (khtml::CSSStyleSelector::checkSelector):
        (khtml::CSSStyleSelector::checkOneSelector):
        (khtml::CSSRuleSet::addRulesFromSheet):
        (khtml::CSSStyleSelector::applyProperty):
        * khtml/dom/dom_string.cpp:
        * khtml/dom/dom_string.h:
        (DOM::DOMString::contains):
        (DOM::DOMString::find):
        (DOM::DOMString::startsWith):
        (DOM::DOMString::endsWith):
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::parseEnctype):
        * khtml/khtml_part.cpp:
        (KHTMLPart::requestFrame):
        (KHTMLPart::submitForm):
        * khtml/misc/decoder.cpp:
        (Decoder::decode):
        * khtml/xml/dom_atomicstring.h:
        (DOM::AtomicString::length):
        (DOM::AtomicString::operator []):
        (DOM::AtomicString::contains):
        (DOM::AtomicString::find):
        (DOM::AtomicString::startsWith):
        (DOM::AtomicString::endsWith):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::processHttpEquiv):
        * khtml/xml/dom_stringimpl.cpp:
        (DOM::equal):
        (DOM::equalCaseInsensitive):
        (DOM::DOMStringImpl::find):
        (DOM::DOMStringImpl::endsWith):
        * khtml/xml/dom_stringimpl.h:
        (DOM::DOMStringImpl::startsWith):

2005-12-29  Rob Buis  <rwlbuis@xs4all.nl>

        Reviewed by eseidel.  Landed by eseidel.

        WebCore+SVG has some problems with rounded rectangles
        http://bugs.webkit.org/show_bug.cgi?id=6157
        
        Test: svg/custom/rounded-rects.svg

        * ksvg2/svg/SVGRectElementImpl.cpp:
        (SVGRectElementImpl::toPathData): fixed round rect calculations

2005-12-29  Mark Rowe  <opendarwin.org@bdash.net.nz>

        Reviewed by eseidel, ggaren, darin.
        
        - http://bugs.webkit.org/show_bug.cgi?id=4301
        Support HTML entities on pages parsed as XHTML

        Added layout tests:
        * fast/parser/entities-in-xhtml.xhtml

        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::setIsXHTMLDocument): Track whether the XML document is XHTML.
        (khtml::XMLTokenizer::isXHTMLDocument): Ditto.
        (khtml::externalSubsetHandler): Ditto.
        (khtml::XMLTokenizer::finish): Ditto.
        (khtml::getXHTMLEntity): Look up the HTML entity.
        (khtml::getEntityHandler): Look up the HTML entity if this is an XHTML document.
        * khtml/html/kentities.h: Added.
        * khtml/html/kentities.gperf: changed entity to Entity

2005-12-29  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by darin

        - WebCore part of fix for
          http://bugs.webkit.org/show_bug.cgi?id=3922
          Variable word/letter spacing and full justification not supported for
          ATSUI-rendered text

        * khtml/rendering/font.h:
        (khtml::Font::checkSelectionPoint): Make sure the complete run, used for
        counting spaces and determining padding per space does not go beyond the
        text box.

2005-12-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by mjs.

        - Fixed <rdar://problem/4325722> crash in KJS::Bindings::dispatchJNICall
        due to liveconnect call from Java after Java PlugInView has been 
        deallocated @ www.binarybet.com
        AKA
        http://bugs.webkit.org/show_bug.cgi?id=5518

        We had code that checked for whether a call came from a live PlugIn,
        but the live PlugIn dictionary would only get cleared when the 
        KWQKHTMLPart was destroyed. Since a single part can service multiple
        loads, the dictionary needs to clear after each one.

        No layout test because this bug is difficult to reproduce.

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::~KWQKHTMLPart):
        (1) Unrelated cleanup: Removed manual clearing of form values,
        replaced with call to clearRecordedFormValues().
        (2) Replaced PlugIn dictionary cleanup code and view deref call
        with call to setView(0), since much of this code was duplicated in
        setView, and the stuff that wasn't duplicated needed to be.

        (KWQKHTMLPart::setView):
        (1) Removed some unnecessary braces.
        (2) Added PlugIn dictionary cleanup code.
        (3) New behavior: clear _bindingRoot and _windowScriptObject after
        each view change. This is needed because after a call to
        clenaupPluginRootObjects(), both objects have stale references.
        (4) Changed a NULL to a 0.

        (KWQKHTMLPart::cleanupPluginRootObjects): Removed extra space.

2005-12-28  Anders Carlsson  <andersca@mac.com>

        Reviewed by Maciej.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=6268
        Add undetectable document.all
        
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::getValueProperty):
        If "all" has been set to a new value, return the new value.
        
        (KJS::KJS::HTMLDocument::putValueProperty):
        Allow "all" to be set to a new value.
        
        (KJS::HTMLAllCollection::toPrimitive):
        Return jsNull() if the preferred type is NullType.
        
        (KJS::getAllHTMLCollection):
        * khtml/ecma/kjs_html.h:
        (KJS::HTMLAllCollection::HTMLAllCollection):
        Add HTMLAllCollection, a subclass of HTMLCollection which should
        be undetectable.
        
        (KJS::HTMLAllCollection::toBoolean):
        Return false.

2005-12-28  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Eric, landed by ap.
        
        Test: fast/block/basic/text-indent-rtl.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=6214
          text-indent in RTL block does the opposite

        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::rightRelOffset): Subtract the indent instead of adding it.

2005-12-28  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Darin, landed by ap.

        Test: fast/dom/HTMLScriptElement/script-load-events.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=5812
          Generate load events for <script> elements

        * khtml/html/html_headimpl.cpp:
        (HTMLScriptElementImpl::parseMappedAttribute): Parse the onload and onerror attributes.
        (HTMLScriptElementImpl::closeRenderer): Call base class's implementation.
        (HTMLScriptElementImpl::notifyFinished): Dispatch load and error events.
        * khtml/html/htmlparser.h:
        * khtml/html/htmlparser.cpp:
        (HTMLParser::parseToken): Return the node that was inserted.
        * khtml/html/htmltokenizer.h: Added scriptNode, a RefPtr to the node corresponding
        to the current load request.
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::scriptHandler): Reset scriptNode if a load request was not made.
        (HTMLTokenizer::parseTag): Set scriptNode to the node created from the script tag.
        (HTMLTokenizer::processToken): Return the node that was inserted.
        (HTMLTokenizer::notifyFinished): Reset scriptNode and dispatch load and error events.
        * khtml/misc/loader.h:
        (CachedScript::errorOccurred): Added.
        * khtml/misc/loader.cpp:
        (CachedScript::CachedScript):
        (CachedScript::error):

2005-12-28  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6246
          TextIterator::rangeFromLocationAndLength() returns nil range for an 
          empty document

        Test: editing/input/range-for-empty-document.html

        * khtml/editing/visible_text.cpp:
        (khtml::TextIterator::rangeFromLocationAndLength):
        Handle the case of an empty document and (0, 0) requested range.

2005-12-28  Anders Carlsson  <andersca@mac.com>

        Reviewed and landed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6269
        ToT memory corruption
        
        * khtml/rendering/render_text.cpp:
        (khtml::RenderText::setText):
        Remove deref().
        
2005-12-27  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Hyatt, landed by Darin.
        
        - fix http://bugs.webkit.org/show_bug.cgi?id=5699
          REGRESSION: incomplete repaint

        * khtml/rendering/render_object.cpp:
        (RenderObject::repaintAfterLayoutIfNeeded): Return false if only the
        size changed and not everything was repainted.
        * manual-tests/bugzilla-5699.html: Added.

2005-12-27  Sam Weinig  <sam.weinig@gmail.com>

        Reviewed by Maciej, landed by Darin.

        - fixed <http://bugs.webkit.org/show_bug.cgi?id=4101>
        CSS Fibonacci spiral using 4 images doesn't render correctly

        Added layout tests:
        * fast/replaced/absolute-image-sizing.html

        * khtml/rendering/render_box.cpp:
        (RenderBox::calcAbsoluteHorizontalValues): Use calcReplacedWidth() instead of intrinsicWidth()
        for replaced elements.
        (RenderBox::calcAbsoluteVerticalValues): Same thing for height.

2005-12-27  Darin Adler  <darin@apple.com>

        Reviewed by Geoff and Eric.

        - http://bugs.webkit.org/show_bug.cgi?id=6198
          use RefPtr a few places in RenderText and related classes

        * khtml/html/htmltokenizer.h: Use RefPtr for some data members in Token.
        Also removed use of bitfields in Token, since there's no need to optimize storage here.
        * khtml/html/htmlparser.cpp:
        (HTMLParser::parseToken): Update for use of RefPtr in Token.
        (HTMLParser::textCreateErrorCheck): Ditto.
        (HTMLParser::commentCreateErrorCheck): Ditto.
        (HTMLParser::handleIsindex): Ditto.
        * khtml/html/htmltokenizer.cpp:
        (khtml::Token::addAttribute): Ditto.
        (khtml::HTMLTokenizer::processToken): Ditto.

        * khtml/rendering/render_text.h: Reduce the number of includes, change
        SOFT_HYPHEN from a macro into a constant. Change originalString function
        to return a PassRefPtr instead of a RefPtr. Make str and m_generatedContentStr
        member be a RefPtr.
        * khtml/rendering/render_text.cpp:
        (khtml::RenderText::previousOffset): Update for use of RefPtr for str.
        (khtml::RenderText::nextOffset): Ditto.
        (khtml::RenderText::RenderText): Ditto.
        (khtml::RenderText::originalString): Change to return PassRefPtr, even though
        it's not necessary at this level (since it's a virtual function).
        (khtml::RenderText::posOfChar): Update for use of RefPtr for str.
        (khtml::RenderText::setText): Ditto.
        (khtml::RenderTextFragment::RenderTextFragment): Ditto.
        (khtml::RenderTextFragment::originalString): Change to return PassRefPtr.

        * khtml/html/html_inlineimpl.cpp: Re-sorted list of includes, added newly-needed ones.
        * kwq/KWQRenderTreeDebug.cpp: Added new include needed since QPtrVector is no longer
        included by render_text.h.

2005-12-27  Darin Adler  <darin@apple.com>

        Fix suggested by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6240
          REGRESSION: scrollbars in overflows don't work

        * khtml/xml/dom2_eventsimpl.cpp: (DOM::MouseRelatedEventImpl::computePositions):
        Remove the code to compute pageX/Y from clientX/Y, because clientX/Y are not passed
        in correctly (in fact, what's passed in is pageX/Y)! I accidentally included part
        of my fix for clientX/Y in the original patch.

2005-12-27  Maks Orlovich <maksim@kde.org>

        Reviewed and landed by Maciej.

        - fixed 4405: <button> not listed in form collections.
        http://bugs.webkit.org/show_bug.cgi?id=4405

        Test: fast/forms/button-in-forms-collection.html

        * khtml/html/html_formimpl.h:
        (DOM::HTMLButtonElementImpl::isEnumeratable): override to return true

2005-12-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - Remove WebFrame's parent frame pointer, instead rely on WebCore's parent concept
        http://bugs.webkit.org/show_bug.cgi?id=6241

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge parent]): New method, relies on the KHTMLPart's
        parent pointer.

2005-12-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by eseidel.
        
        Test: fast/forms/domstring-replace-crash.html

        - fix http://bugs.webkit.org/show_bug.cgi?id=6236
          REGRESSION: Crash in DOMString::replace() in ToT (12/24/05)

        * khtml/dom/dom_string.h:
        (DOMString::replace): Added check for null m_impl.

2005-12-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - replaced QPtrDict for Accessors structs with HashMap (also renamed some
        stray getSetInfo methods)
        http://bugs.webkit.org/show_bug.cgi?id=6223

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::accessors):
        (KJS::HTMLElement::getValueProperty):
        (KJS::HTMLElement::putValueProperty):
        * khtml/ecma/kjs_html.h:

2005-12-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by eric.

        http://bugs.webkit.org/show_bug.cgi?id=6231

        - Fixed assertion failure in QString::mid caused by my last checkin. 
        parseWindowFeatures() sometimes called QString::mid() with a start 
        index past the end of the string but a length of 0. There were two 
        problems there. (1) parseWindowFeatures() shouldn't have gotten past 
        the end of the string. (2) QString had range truncating code that was 
        borked. So I fixed both.

        * khtml/ecma/kjs_window.cpp:
        (KJS::parseWindowFeatures): One of the "past the end" tests was > 
        instead of >=.
        * kwq/KWQString.mm:
        (QString::mid): Truncate length *before* deciding whether to return 
        early. Also, compare start and data._length before computing 
        data._length - start, because the error case we're trying to catch 
        will almost certainly cause unsigned overflow.
        * manual-tests/window-open-features-parsing.html: Added trailing ',' 
        to uber-test to catch this failure, too.

2005-12-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6221
          REGRESSION: Password field is blank error for secure websites using
          password field (ToT, 12/24/05)

        * khtml/kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Changed the parameter type of slotTextChanged to const DOMString &
        * khtml/rendering/render_form.h:
        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::RenderLineEdit): ditto.
        (RenderLineEdit::slotTextChanged): ditto.
        (RenderFileButton::RenderFileButton): ditto.
        (RenderFileButton::slotTextChanged): ditto.

2005-12-22  Geoffrey Garen  <ggaren@apple.com>
    
        Reviewed by vicki (yay!), eric.

        - Fixed: <rdar://problem/4377597> parsing of window.open features strings needs to be more forgiving

        Manual test case: WebCore/manual-tests/window-open-features-parsing.html
        Also fixed: WebCore/manual-tests/window-open-features.html, which had an incorrect URL in it.

        This patch is long. Luckily, it's also complicated.

        The main thing I've done is to change our parsing of the window.open 'features' argument to match Win IE.
        This is important because we now implement the correct defaults for window.open, and resizing and
        scrolling are turned off by default. So, if we parse the 'features' string incorrectly, we'll end
        up with an annoying, incorrectly sized window that can't resize or scroll.

        To honor a long-standing request by Eric, I factored out the parsing into two new functions:
        parseWindowFeatures and constrainToScreen. I also added support for "innerWidth" and "innerHeight,"
        since they're just synonyms for "width" and "height."

        * khtml/ecma/kjs_window.cpp: removed "emit" statements, since emit is #defined as ""
        (KJS::parseDialogFeatures): renamed from parseFeatures, since we now have a 'parseWindowFeatures'.
        (KJS::showModalDialog): ditto on parseFeatures. Also added some missing initializations for WindowArgs data members.
        (KJS::parseWindowFeatures): new function, all new functionality.
        (KJS::constrainToScreen): new function, no new functionality -- just cut and pasted code that used to run as
        part of our parsing routine.
        (KJS::WindowFunc::callAsFunction):
        (1) Factored out previous parsing code.
        (2) Factored 17 lines of custom popup-blocking code into 3 lines that use pre-existing 'allowPopUp' function.
            Gratuitous, but it cried out to me.
        (3) Changed URL parsing to substitute "" for undefined *and* null values (we already did this for undefined),
            to avoid trying to navigate to 'http://null'.
        (4) Factore a multiline if () { if () {}} into an if ( && )
        (4) Removed the main body of code from a giant 'else' block by inserting early returns for the exceptional cases.
            This caused some things to show up in the diff even though they're just whitespace changes.
            I didn't actually change any code past the line "if (!str.isEmpty() && activePart)"
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Added code to set toolbars to visible if toolBarVisible is true *or*
        locationBarVisible is true. The parser used to do this for us, but it's really the browser that's responsible for
        saying that the toolbar and the locationbar are the same thing. Hopefully, we can add a setLocationBarVisible delegate
        in the future so that other webkit clients can make their own UI decisions.
        * kwq/KWQKPartsBrowserExtension.h: Added locationBarVisible data member to WindowArgs structure and renamed
        toolBarsVisible to toolBarVisible (see above). Removed initialization code from WindowArgs structure because
        this file is for platform-specific code, and what defaults to use for window arguments is purely engine stuff.

2005-12-23  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Remove many use of .qstring()
        Convert several instances of QStrings to DOMStrings
        Add DOMString::replace(QChar, QChar)
        Remove (unused) KWQLabel, KWQKGlobal
        Slight performance improvement.
        Also fixed ChangeLog line endings from previous commit.
        http://bugs.webkit.org/show_bug.cgi?id=6138

        No tests needed, no functionality changes.

        * ChangeLog: Fixed line endings
        * ForwardingHeaders/kglobal.h: Removed.
        * ForwardingHeaders/qlabel.h: Removed.
        * WebCore.xcodeproj/project.pbxproj: removed KWQLabel
        * khtml/css/css_base.cpp:
        (CSSSelector::selectorText):
        * khtml/css/css_stylesheetimpl.cpp:
        (MediaListImpl::setMediaText):
        * khtml/css/cssstyleselector.cpp:
        (khtml::checkPseudoState):
        * khtml/dom/dom_string.h:
        (DOM::DOMString::replace):
        * khtml/ecma/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put):
        * khtml/ecma/kjs_dom.cpp:
        (KJS::DOMNode::put):
        (KJS::DOMAttr::put):
        (KJS::DOMDocument::put):
        * khtml/ecma/kjs_events.cpp:
        (KJS::JSAbstractEventListener::handleEvent):
        * khtml/ecma/kjs_html.cpp:
        (KJS::KJS::HTMLDocument::put):
        (KJS::KJS::HTMLElementFunction::callAsFunction):
        (KJS::KJS::HTMLElement::put):
        (KJS::KJS::Context2DFunction::callAsFunction):
        (KJS::Context2D::putValueProperty):
        * khtml/ecma/kjs_proxy.cpp:
        (KJSProxyImpl::evaluate):
        * khtml/ecma/kjs_window.cpp:
        (KJS::Window::isSafeScript):
        (KJS::WindowFunc::callAsFunction):
        (KJS::ScheduledAction::execute):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::send):
        (KJS::XMLHttpRequestProtoFunc::callAsFunction):
        * khtml/ecma/xmlhttprequest.h:
        * khtml/editing/jsediting.cpp:
        (DOM::JSEditor::queryCommandSupported):
        * khtml/editing/markup.cpp:
        (khtml::stringValueForRange):
        (khtml::startMarkup):
        * khtml/html/html_baseimpl.cpp:
        (HTMLBodyElementImpl::parseMappedAttribute):
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::addHTMLAlignment):
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::formData):
        (DOM::HTMLInputElementImpl::appendFormData):
        (DOM::HTMLTextAreaElementImpl::updateValue):
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::parseMappedAttribute):
        * khtml/html/html_imageimpl.cpp:
        (DOM::HTMLImageElementImpl::parseMappedAttribute):
        * khtml/html/html_objectimpl.cpp:
        (DOM::HTMLObjectElementImpl::parseMappedAttribute):
        (DOM::HTMLParamElementImpl::isURLAttribute):
        * khtml/html/html_objectimpl.h:
        * khtml/html/html_tableimpl.cpp:
        (DOM::HTMLTableElementImpl::addChild):
        (DOM::HTMLTableElementImpl::parseMappedAttribute):
        (DOM::HTMLTablePartElementImpl::parseMappedAttribute):
        (DOM::HTMLTableSectionElementImpl::addChild):
        (DOM::HTMLTableRowElementImpl::addChild):
        * khtml/html/htmltokenizer.cpp:
        (khtml::HTMLTokenizer::parseTag):
        * khtml/khtml_part.cpp:
        (KHTMLPart::executeScript):
        (KHTMLPart::checkEmitLoadEvent):
        * khtml/misc/loader.cpp:
        (CachedObject::finish):
        (CachedCSSStyleSheet::checkNotify):
        (CachedXSLStyleSheet::checkNotify):
        (CachedXBLDocument::checkNotify):
        (DocLoader::requestImage):
        (DocLoader::requestStyleSheet):
        (DocLoader::requestScript):
        (Loader::servePendingRequests):
        (Loader::cancelRequests):
        * khtml/rendering/render_applet.cpp:
        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::updateFirstLetter):
        * khtml/rendering/render_box.cpp:
        (RenderBox::~RenderBox):
        * khtml/rendering/render_form.cpp:
        (RenderFormElement::slotTextChanged):
        (RenderLineEdit::updateFromElement):
        (RenderTextArea::updateFromElement):
        (RenderTextArea::text):
        * khtml/rendering/render_form.h:
        * khtml/rendering/render_frames.cpp:
        (RenderPartObject::updateWidget):
        * khtml/rendering/render_line.cpp:
        (khtml::EllipsisBox::paint):
        * khtml/rendering/render_list.cpp:
        (RenderListItem::paint):
        (RenderListMarker::paint):
        * khtml/rendering/render_text.cpp:
        (khtml::RenderText::RenderText):
        (khtml::RenderText::position):
        * khtml/xml/dom_docimpl.cpp:
        (DOMImplementationImpl::hasFeature):
        (DocumentImpl::getElementByAccessKey):
        (DocumentImpl::recalcStyleSelector):
        (DocumentImpl::defaultEventHandler):
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::recalcStyle):
        * khtml/xml/dom_nodeimpl.cpp:
        (DOM::NodeImpl::dump):
        (DOM::appendAttributeDesc):
        (DOM::NodeImpl::showNode):
        * khtml/xml/dom_stringimpl.cpp:
        (DOM::DOMStringImpl::lower):
        * khtml/xml/xml_tokenizer.cpp:
        (khtml::XMLTokenizer::executeScripts):
        * khtml/xsl/xsl_stylesheetimpl.cpp:
        (DOM::XSLStyleSheetImpl::loadChildSheets):
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::documentViewForNode):
        (KWQKHTMLPart::runJavaScriptAlert):
        (KWQKHTMLPart::runJavaScriptConfirm):
        (KWQKHTMLPart::runJavaScriptPrompt):
        (KWQKHTMLPart::addMessageToConsole):
        (KWQKHTMLPart::passWheelEventToChildWidget):
        (KWQKHTMLPart::shouldDragAutoNode):
        (KWQKHTMLPart::snapshotDragImage):
        (convertAttributesToUnderlines):
        (KWQKHTMLPart::setMarkedTextRange):
        (KWQKHTMLPart::mousePressNode):
        * kwq/KWQKGlobal.h: Removed.
        * kwq/KWQKGlobal.mm: Removed.
        * kwq/KWQLabel.h: Removed.
        * kwq/KWQLabel.mm: Removed.
        * kwq/KWQLineEdit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::setText):
        (QLineEdit::text):
        (QLineEdit::setAutoSaveName):
        (QLineEdit::setPlaceholderString):
        * kwq/KWQPainter.mm:
        (QPainter::compositeOperatorFromString):
        * kwq/KWQSignal.h:
        * kwq/KWQSignal.mm:
        (KWQSignal::call):
        * kwq/KWQSlot.h:
        * kwq/KWQSlot.mm:
        (KWQSlot::call):
        * kwq/KWQString.h:
        * kwq/KWQString.mm:
        * kwq/KWQTextEdit.h:
        * kwq/KWQTextEdit.mm:
        (QTextEdit::setText):
        (QTextEdit::text):
        (QTextEdit::textWithHardLineBreaks):
        * ksvg2/scripts/cssmakeprops: removed kglobal.h
        * ksvg2/scripts/cssmakevalues: removed kglobal.h

2005-12-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5924
          Zero-length responses to XMLHTTPRequest mishandled

        * khtml/ecma/xmlhttprequest.cpp (KJS::XMLHttpRequest::slotFinished):
          Make sure to fetch response headers and set the state to Loaded, if
          this hasn't been done already.

2005-12-23  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=3565
          Posting data via XML HTTP Request doesnt work

        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::send): Set application/xml as a default Content-Type;
          use a proper codec for request body if a charset is specified.
        (KJS::XMLHttpRequest::getRequestHeader): Use getSpecificHeader.
        (KJS::XMLHttpRequest::getResponseHeader): Ditto.
        (KJS::XMLHttpRequest::getSpecificHeader): Factored out code from getResponseHeader.
        (KJS::XMLHttpRequestProtoFunc::callAsFunction): Removed a FIXME (this is done in send() now).
        * khtml/ecma/xmlhttprequest.h:

2005-12-22  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin Adler.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6118
        Investigate not using the frameset charset as a default for frames

        * khtml/khtml_part.cpp (KHTMLPart::write):
        Do not use the parent frame encoding as a default for sub-frames (revert
        rdar://3100151). 

2005-12-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Eric.

        - made RefPtr<DOMStringImpl> usable as a hashtable key/value
        - changed XSLTProcessorImpl to make use of this instead of a QDict.
        - partially fixed broken param handling for xslt

        See LayoutTests for updated test case.

        * khtml/xml/dom_stringimpl.cpp:
        * khtml/xml/dom_stringimpl.h:
        (KXMLCore::): Set things up so you can use RefPtr<DOMStringImpl> as
        a hashtable key (should already be usable as a value).
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::xsltParamArrayFromParameterMap): Updated to use a HashMap of RefPtrs instead
        of QDict. Also, fixed bugs that would have kept this from ever working at all.
        (DOM::XSLTProcessorImpl::transformToString): ditto
        (DOM::XSLTProcessorImpl::setParameter): ditto
        (DOM::XSLTProcessorImpl::getParameter): ditto
        (DOM::XSLTProcessorImpl::removeParameter): ditto
        * khtml/xsl/xslt_processorimpl.h:

2005-12-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - update for new HashTranslator stuff

        * khtml/xml/dom_atomicstring.cpp:
        (DOM::CStringTranslator::hash):
        (DOM::CStringTranslator::equal):
        (DOM::CStringTranslator::translate):
        (DOM::AtomicString::equal):
        (DOM::AtomicString::add):
        (DOM::QCharBufferTranslator::hash):
        (DOM::QCharBufferTranslator::equal):
        (DOM::QCharBufferTranslator::translate):
        * khtml/xml/dom_qname.cpp:
        (DOM::QNameComponentsTranslator::hash):
        (DOM::QNameComponentsTranslator::equal):
        (DOM::QNameComponentsTranslator::translate):
        (DOM::QualifiedName::QualifiedName):

2005-12-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Cleaned up a previous checkin by defining global const defaultForm.

        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::radioButtonChecked):
        (DocumentImpl::checkedRadioButtonForGroup):
        (DocumentImpl::removeRadioButtonGroup):

2005-12-22  Adele Peterson  <adele@apple.com>

        Reviewed by Tim Hatcher.

        Fixed <rdar://problem/4387433> Seed: Radio buttons behave incorrectly in Gmail settings

        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::registerFormElement): update radio button hash map when moving form elements around.
        (DOM::HTMLGenericFormElementImpl::insertedIntoTree): ditto.
        * khtml/html/html_formimpl.h:
        (DOM::HTMLGenericFormElementImpl::isRadioButton): Added.
        (DOM::HTMLInputElementImpl::isRadioButton): Added.
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::radioButtonChecked): 
        Added comment explaining that we use 1 for the default form.  We can't use a null pointer as a key for the hash map.
        (DocumentImpl::checkedRadioButtonForGroup): Added conversion of null form pointer to 1.
        (DocumentImpl::removeRadioButtonGroup): ditto.

2005-12-22  Anders Carlsson  <andersca@mac.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6196
        Would like to be able to define prototypes in headers

        * khtml/ecma/XSLTProcessor.cpp:
        * khtml/ecma/domparser.cpp:
        * khtml/ecma/kjs_css.cpp:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_range.cpp:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/ecma/kjs_views.cpp:
        * khtml/ecma/xmlhttprequest.cpp:
        * khtml/ecma/xmlserializer.cpp:
        Update for changes to JSC.

2005-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6198
          use RefPtr a few places in RenderText and related classes

        * khtml/html/htmlparser.cpp:
        (HTMLParser::parseToken): Use get since text pointer is RefPtr now.
        (HTMLParser::textCreateErrorCheck): Ditto.
        (HTMLParser::commentCreateErrorCheck): Ditto.
        (HTMLParser::handleIsindex): Get rid of explicit deref, no longer needed.

        * khtml/html/htmltokenizer.h: Make attrs and text fields of Token use
        RefPtr. Also stop using bit fields for the flags in Token -- there's no
        evidence this makes things faster.
        * khtml/html/htmltokenizer.cpp:
        (khtml::Token::addAttribute): Get rid of explicit ref, no longer needed.
        (khtml::HTMLTokenizer::processToken): Ditto.

        * khtml/rendering/render_block.cpp: (khtml::RenderBlock::updateFirstLetter):
        Use a PassRefPtr.

        * khtml/rendering/render_text.cpp:
        (khtml::RenderText::previousOffset): Use get since str pointer is RefPtr now.
        (khtml::RenderText::nextOffset): Ditto.
        (khtml::RenderText::RenderText): Get rid of explicit ref, no longer needed.
        Change to use initializer syntax instead of assignment.
        (khtml::RenderText::setStyle): Use PassRefPtr.
        (khtml::RenderText::originalString): Ditto.
        (khtml::RenderText::setText): Get rid of explicit ref, no longer needed.
        (khtml::RenderTextFragment::RenderTextFragment): Get rid of explicit ref,
        no longer needed.
        (khtml::RenderTextFragment::originalString): Use PassRefPtr.

        * khtml/rendering/render_text.h: Change SOFT_HYPEN to be a constant rather than
        a preprocessor macro. Used PassRefPtr in a couple places. Made RenderText's str
        and RenderTextFragment's m_generatedContentStr be RefPtr.

        * khtml/html/html_inlineimpl.cpp: Add a newly-needed include, sort them.
        * kwq/KWQRenderTreeDebug.cpp: Add a newly-needed include.

2005-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6193
          remove some unused KWQ code

        * kcanvas/KCanvasCreator.cpp: (KCanvasCreator::self): Don't use static deleter for
        two reasons: (1) We don't want any globals with constructors in any of our frameworks
        because they slow down framework load time. (2) There's no need to destroy this object at
        process termination time -- it's extra work with no benefit. Because of both these
        reasons, our KStaticDeleter implementation was basically a no-op.
        * ksvg2/svg/SVGDOMImplementationImpl.cpp: (SVGDOMImplementationImpl::self): Ditto.
        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::setDocumentChanged): Ditto.

        * khtml/html/html_canvasimpl.cpp: Removed include of kstringhandler.h.
        * khtml/html/html_imageimpl.cpp: Ditto.

        * khtml/khtmlpart_p.h: Removed something that was in an "APPLE_CANGES" ifdef.

        * ForwardingHeaders/kstaticdeleter.h: Removed.
        * ForwardingHeaders/kstringhandler.h: Removed.
        * kwq/KWQKStaticDeleter.h: Removed.
        * kwq/KWQKStringHandler.h: Removed.
        * kwq/KWQKStringHandler.mm: Removed.

        * WebCore.xcodeproj/project.pbxproj: Removed files.

2005-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6192
          add support for non-standard &nsup; entity (implemented in other browsers)

        * khtml/html/kentities.gperf: Add "nsup" to table.
        * khtml/html/htmltokenizer.cpp: Removed old workaround for inlining issue that no
        longer seems to be necessary; also touches the file which is important because
        Xcode doesn't seem to understand the dependency on kentities.gperf and the need
        to recompile.

2005-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Eric.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6167
          RenderStyle default constructor should initialize its members for speed

        * khtml/rendering/DataRef.h: (khtml::DataRef::operator=): Eliminate an extra
        branch by doing ref before deref instead of == check.

        * khtml/rendering/render_style.cpp:
        (khtml::initDefaultStyle): Added. Function to initialize the default style
        for use in constructor.
        (khtml::RenderStyle::RenderStyle): Changed constructor to initalize all the
        members with constructor syntax instead of using assignment on all of them.
        * khtml/rendering/render_style.h: Removed static data member _default --
        it's now a file scope global instead.

2005-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Justin.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6142
          intermittent failures in some paste tests

        * khtml/editing/apply_style_command.cpp:
        (khtml::ApplyStyleCommand::applyBlockStyle): Call new updateLayout member function.
        (khtml::ApplyStyleCommand::applyInlineStyle): Ditto.
        (khtml::ApplyStyleCommand::pushDownTextDecorationStyleAtBoundaries): Ditto.
        * khtml/editing/composite_edit_command.cpp:
        (khtml::CompositeEditCommand::addBlockPlaceholderIfNeeded): Ditto.
        (khtml::CompositeEditCommand::findBlockPlaceholder): Ditto.
        (khtml::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): Ditto.
        * khtml/editing/delete_selection_command.cpp:
        (khtml::DeleteSelectionCommand::fixupWhitespace): Ditto.
        (khtml::DeleteSelectionCommand::moveNodesAfterNode): Ditto.
        * khtml/editing/edit_command.cpp:
        (khtml::EditCommand::apply): Ditto.
        (khtml::EditCommand::unapply): Ditto.
        (khtml::EditCommand::reapply): Ditto.
        (khtml::EditCommand::updateLayout): Added. Calls updateLayoutIgnorePendingStylesheets
        on the document.
        * khtml/editing/edit_command.h: Added updateLayout member function.
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply): Call new updateLayout member function.
        * khtml/editing/insert_paragraph_separator_command.cpp:
        (khtml::InsertParagraphSeparatorCommand::doApply): Ditto.
        * khtml/editing/jsediting.cpp:
        (DOM::JSEditor::execCommand): Call updateLayoutIgnorePendingStylesheets instead of updateLayout.
        (DOM::JSEditor::queryCommandEnabled): Ditto.
        (DOM::JSEditor::queryCommandIndeterm): Ditto.
        (DOM::JSEditor::queryCommandState): Ditto.
        (DOM::JSEditor::queryCommandValue): Ditto.
        * khtml/editing/markup.cpp: (khtml::createMarkup): Ditto.
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplacementFragment::insertFragmentForTestRendering): Ditto.
        (khtml::ReplaceSelectionCommand::fixupNodeStyles): Call new updateLayout member function.
        (khtml::ReplacementFragment::computeStylesUsingTestRendering): Call
        updateLayoutIgnorePendingStylesheets instead of updateLayout.
        (khtml::ReplaceSelectionCommand::doApply): Call new updateLayout member function.
        (khtml::ReplaceSelectionCommand::removeLinePlaceholderIfNeeded): Ditto.
        (khtml::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
        * khtml/editing/visible_units.cpp:
        (khtml::previousLinePosition): Call updateLayoutIgnorePendingStylesheets instead of updateLayout.
        (khtml::nextLinePosition): Ditto.
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::innerText): Ditto.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setSelectedDOMRange:affinity:closeTyping:]): Ditto.
        (-[WebCoreBridge smartDeleteRangeForProposedRange:]): Ditto.

2005-12-21  Darin Adler  <darin@apple.com>

        Reviewed by Geoff.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6177
          move event code from JavaScript binding into DOM implementation

        * khtml/ecma/kjs_events.cpp:
        (KJS::DOMMouseEvent::getValueProperty): Change everything to just call through instead of doing
        the work here.
        (KJS::DOMWheelEvent::getValueProperty): Ditto.

        * khtml/xml/dom2_eventsimpl.h:
        (DOM::MouseRelatedEventImpl::offsetX):
        (DOM::MouseRelatedEventImpl::offsetY):
        * khtml/xml/dom2_eventsimpl.cpp:
        (DOM::MouseRelatedEventImpl::MouseRelatedEventImpl): Initialize new m_pageX, m_pageY, m_layerX,
        m_layerY, m_offsetX, and m_offsetY.
        (DOM::MouseRelatedEventImpl::computePositions): Renamed from computeLayerPos since it handles
        page position andoffset position too now.
        (DOM::MouseRelatedEventImpl::pageX): Added. Not in header since it's virtual.
        (DOM::MouseRelatedEventImpl::pageY): Ditto.
        (DOM::MouseRelatedEventImpl::x): Added, with FIXME since it should change eventually.
        (DOM::MouseRelatedEventImpl::y): Ditto.
        (DOM::MouseEventImpl::initMouseEvent): Call computePositions instead of computeLayerPos.
        (DOM::MouseEventImpl::toElement): Added.
        (DOM::MouseEventImpl::fromElement): Added.

2005-12-21  Timothy Hatcher  <timothy@apple.com>

        * WebCore.xcodeproj/project.pbxproj:
          Set tab width to 8, indent width to 4 and uses tabs to false per file.

2005-12-21  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Omernick and Darin Adler.
        
        - fixed HiDPI problem with forms auto-fill menu width

        No test cases added; this code is used for "chrome" only.

        * kwq/DOMHTML.mm:
        (-[DOMHTMLInputElement _rectOnScreen]):
        convert entire rect to window coordinates, not just origin

2005-12-21  David Harrison  <harrison@apple.com>

        Reviewed by Justin.

        <rdar://problem/4039777> Pasting particular snippet of HTML containing list items and a link creates too many list items
        - Fixed paste crash by making calling RenderBox::deleteLineBoxWrapper() from RenderObject::remove(),
        so that the connection is broken before the InlineBox's parent gets deleted.
        - Fixed overzealous style changes when setting the style on a specific range of elements.  These specific
        ranges are derived programmatically, e.g. as a part of pasting, so they must be respected exactly rather
        than modified by converting the endpoints to VisiblePositions.
        
        Test cases coming soon.

        * khtml/editing/apply_style_command.cpp:
        (khtml::ApplyStyleCommand::ApplyStyleCommand):
        (khtml::ApplyStyleCommand::updateStartEnd):
        (khtml::ApplyStyleCommand::startPosition):
        (khtml::ApplyStyleCommand::endPosition):
        (khtml::ApplyStyleCommand::applyBlockStyle):
        (khtml::ApplyStyleCommand::applyRelativeFontStyleChange):
        (khtml::ApplyStyleCommand::applyInlineStyle):
        (khtml::ApplyStyleCommand::removeInlineStyle):
        (khtml::ApplyStyleCommand::splitTextAtStartIfNeeded):
        (khtml::ApplyStyleCommand::splitTextAtEndIfNeeded):
        (khtml::ApplyStyleCommand::splitTextElementAtStartIfNeeded):
        (khtml::ApplyStyleCommand::splitTextElementAtEndIfNeeded):
        (khtml::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (khtml::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (khtml::ApplyStyleCommand::joinChildTextNodes):
        * khtml/editing/apply_style_command.h:
        * khtml/editing/composite_edit_command.cpp:
        (khtml::CompositeEditCommand::applyStyle):
        * khtml/editing/composite_edit_command.h:
        * khtml/editing/insert_line_break_command.cpp:
        (khtml::InsertLineBreakCommand::doApply):
        * khtml/editing/replace_selection_command.cpp:
        (khtml::ReplaceSelectionCommand::fixupNodeStyles):
        (khtml::ReplaceSelectionCommand::completeHTMLReplacement):
        * khtml/rendering/render_box.cpp:
        (RenderBox::destroy):
        (RenderBox::deleteLineBoxWrapper):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_list.cpp:
        (RenderListMarker::~RenderListMarker):
        (RenderListMarker::setStyle):
        * khtml/rendering/render_object.cpp:
        (RenderObject::remove):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::destroy):

2005-12-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fixed http://bugs.webkit.org/show_bug.cgi?id=5911
        REGRESSION: Page scroll position jumps when clicking on word in editable div

        I moved the scrolling code out of setFocusNode, and consolidated some of the focus code to scroll when necessary.

        * khtml/html/html_formimpl.cpp: Removed HTMLButtonElementImpl::blur, HTMLButtonElementImpl::focus, HTMLInputElementImpl::blur, HTMLInputElementImpl::focus.  
        New code in ElementImpl::focus will now handle these cases.  This allows tabbing through the elements to go through the same code path as calling focus() on an element.  
        Before, focus() would scroll to reveal for any form elements that had a RenderWidget, but wouldn't scroll for anchor elements, or any of the new form elements.  
        Now the behavior will be more consistent.
        (DOM::HTMLLabelElementImpl::focus): calls ElementImpl::focus.
        (DOM::HTMLLegendElementImpl::focus): ditto.
        * khtml/html/html_formimpl.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::selectAll): calls new function selectContentsOfNode
        (KHTMLPart::selectContentsOfNode): factored out code to selectAll for a particular node- which is useful for contenteditable elements.
        * khtml/khtml_part.h: added selectContentsOfNode
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::setFocusNode): removed scrolling code.
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::focus): Calls updateLayout in case focus() is called before there's a renderer.
        Makes a selection for editable elements (right now we select all, but this will change).
        Doesn't scroll if the renderer is a RenderWidget, since that is handled when the view becomes first responder.  This will go away when we convert the rest of our form elements.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::revealSelection): Made this more like centerSelectionInVisibleArea  where we get the right rectangle if the selection is a caret.
        (KWQKHTMLPart::nextKeyViewInFrame): call ElementImpl::focus() for the node.  This will set the selection too, which used to be done here.

2005-12-20  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by justin
        
        <http://bugs.webkit.org/show_bug.cgi?id=4682>
        -[WebHTMLView firstRectForCharacterRange:] is using _selectedRange instead of the given range if no marked text

        Added layout tests:
        * editing/input/firstrectforcharacterrange-styled
        * editing/input/firstrectforcharacterrange-plain

        * khtml/editing/visible_text.cpp:
        (khtml::TextIterator::rangeFromLocationAndLength): 
        Return null if the range isn't found, instead of a startless/endless 
        range.  Set the end if the requested location+length is out of bounds.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge convertToDOMRange:]): Handle larged unsigned values 
        before calling rangeWithLocationAndLength, which expects signed ints.

2005-12-20  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        Fix for <rdar://problem/4387630> REGRESSION: <select> element's onClick event doesn't fire @ bugweb.apple.com

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::passSubframeEventToSubframe): only pass mouse down for khtmlviews.

2005-12-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by eric, thatcher
        
        <rdar://problem/4172984> KWQExceptions needs to use @try/@catch instead of relying on NSException.h internals
        
        Needed to undef try/catch because of 4333439.  Moved the 
        declarations of variables that are returned from within a @try 
        block outside the @try block (because of "might be clobbered by 
        a longjmp or vfork" warnings).  Moved some return statements
        inside the @try block to fix volatilization errors with gcc4.

        * WebCore.xcodeproj/project.pbxproj:
        * WebCorePrefix.h:
        * kcanvas/device/quartz/KCanvasFilterQuartz.mm:
        (KCanvasFEBlendQuartz::getCIFilter):
        (KCanvasFEColorMatrixQuartz::getCIFilter):
        (KCanvasFECompositeQuartz::getCIFilter):
        (getPointLightVectors):
        (getLightVectors):
        (getNormalMap):
        (KCanvasFEDiffuseLightingQuartz::getCIFilter):
        (KCanvasFEFloodQuartz::getCIFilter):
        (KCanvasFEImageQuartz::getCIFilter):
        (KCanvasFEMergeQuartz::getCIFilter):
        (KCanvasFESpecularLightingQuartz::getCIFilter):
        * kwq/KWQExceptions.h:
        * kwq/KWQExceptions.mm:
        (KWQReportBlockedException):
        * kwq/KWQFileButton.mm:
        (KWQFileButton::sizeForCharacterWidth):
        (KWQFileButton::frameGeometry):
        * kwq/KWQKCursor.mm:
        (+[NSCursor _WebCore_cursorWithName:hotSpot:_WebCore_cursorWithName:hotSpot:]):
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::createPart):
        (KWQKHTMLPart::nextKeyView):
        (KWQKHTMLPart::runJavaScriptPrompt):
        (KWQKHTMLPart::keyEvent):
        (KWQKHTMLPart::sendContextMenuEvent):
        (KWQKHTMLPart::fileWrapperForElement):
        (KWQKHTMLPart::attributedString):
        (KWQKHTMLPart::imageFromRect):
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth):
        * kwq/KWQListBox.mm:
        (QListBox::sizeForNumberOfLines):
        * kwq/KWQLoader.mm:
        (KWQCheckCacheObjectStatus):
        * kwq/KWQWidget.mm:
        (QWidget::frameGeometry):
        (QWidget::mapFromGlobal):

2005-12-20  David Harrison  <harrison@apple.com>

        <rdar://problem/4294417> Cannot un-italicize some text after triple clicking it

        Reviewed by Justin.

        * khtml/editing/apply_style_command.cpp:
        (khtml::ApplyStyleCommand::addInlineStyleIfNeeded):
        Removed check for tab span because ApplyStyleCommand::removeCSSStyle() already makes the same check.

2005-12-20  Justin Garcia  <justin.garcia@apple.com>

        <rdar://problem/4387270> editing/deleting/delete-3800834-fix failing
        <http://bugs.webkit.org/show_bug.cgi?id=6160> REGRESSION: Crash when running editing/deleting/delete-3800834-fix.html
        <http://bugs.webkit.org/show_bug.cgi?id=6161> REGRESSION: crash when pressing tab in editable WebHTMLView

        Reviewed by darin
    
        Some callers call setAttribute on a floating element.  So, using 
        a RefPtr for the element inside addAttribute can destroy
        it.

        * khtml/xml/dom_elementimpl.cpp:
        (NamedAttrMapImpl::addAttribute):

2005-12-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - fixed leak in createAttributeMap
        http://bugs.webkit.org/show_bug.cgi?id=6162

        * khtml/xml/dom_elementimpl.cpp:
        (StyledElementImpl::createAttributeMap): the new attribute map
        is going in a RefPtr, don't also ref it manually.

2005-12-20  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin.

        - change an assignment to a contructor declaration to build with PassRefPtr
        leak fix changes

        * ksvg2/svg/SVGTransformableImpl.cpp:
        (SVGTransformableImpl::parseTransformAttribute):

2005-12-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by John.

        Fixed <rdar://problem/4310363> JavaScript window.open: Height is 1 
        pixel short, and related bugs.

        There were a few bugs here.
        (1) Our code took size arguments and applied them to the window's
            content rect. That's incorrect. The Rhino book says the arguments 
            should apply to the WebView. Other things that occupy the content 
            rect include the tab bar, the status bar, and the 1 pixel border 
            between brushed metal and document. All of these used to impinge 
            on the web page's display area.

            The fix is to calculate sizing based on the WebView instead of
            the content rect. This means that the webViewContentRect and 
            setContentRect delegate methods are obsolete and no longer called
            by any of our code. (setContentRect was never called in the 
            first place.)

        (2) None of our sizing accounted for scaled resolutions.

            The fix is to ask the WebView to scale all coordintes for us.

        (3) Our code assumed that all window accoutrements were on by default.
            Safari works that way, but other WebKit clients might not.

            The fix is always to explicitly set an on/off state.
        
        (a) To facilitate scaling, I added a new bridge method, webView, to 
        access the webView.

        (b) For internal consistency, I changed ___Bars to ___bars in bridge 
        methods, and ___bars to ___Bars in WinArgs data members. (Interestingly,
        the different classes in our code are evenly divided on which format to 
        use.)
        
        Added manual test:
        * manual-tests/window-open-features.html: Added.
        * manual-tests/resources/200x200.png: Added.
        * manual-tests/resources/popup200x200.html: Added.

        * khtml/ecma/kjs_window.cpp:
        (KJS::showModalDialog): see (b)
        (KJS::WindowFunc::callAsFunction): see (b)
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::statusbarVisible): see (b)
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow):
        At the top of this method, I just did some formatting cleanup and
        moved the 'referrer' variable closer to where it's used.
        The changes in the middle of the method are (3), the bottom, (2).
        * kwq/KWQKPartsBrowserExtension.h:
        (KParts::WindowArgs::WindowArgs): see (b)
        * kwq/WebCoreBridge.h: see (a)

2005-12-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by mjs.

        Leaks when running SVG tests
        http://bugs.webkit.org/show_bug.cgi?id=6156
        No additional tests necessary, leaks already caught by other tests.

        * kcanvas/KCanvasFilters.cpp:
        (KCanvasFEDiffuseLighting::setLightSource): takes ownership
        (KCanvasFESpecularLighting::setLightSource): takes ownership
        * kcanvas/KCanvasFilters.h:
        (KCanvasFEDiffuseLighting::KCanvasFEDiffuseLighting): added
        (KCanvasFEDiffuseLighting::~KCanvasFEDiffuseLighting): added
        (KCanvasFEDiffuseLighting::lightSource): fixed spacing
        (KCanvasFESpecularLighting::KCanvasFESpecularLighting): added
        (KCanvasFESpecularLighting::~KCanvasFESpecularLighting): added
        (KCanvasFESpecularLighting::lightSource): fixed spacing
        * kcanvas/device/quartz/KRenderingDeviceQuartz.mm:
        (KRenderingDeviceQuartz::stringForPath): added missing CFRelease

2005-12-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Remove additional bit-rotted DEBUG* ifdefs from WebCore.
        This removes PARSER_DEBUG, FORMS_DEBUG and CSS_STYLESHEET_DEBUG.
        http://bugs.webkit.org/show_bug.cgi?id=5931
        No tests possible, only removing dead code.

        * khtml/css/css_stylesheetimpl.cpp:
        (CSSStyleSheetImpl::parseString):
        (CSSStyleSheetImpl::isLoading):
        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::formData):
        (DOM::HTMLFormElementImpl::submit):
        (DOM::HTMLFormElementImpl::reset):
        (DOM::HTMLGenericFormElementImpl::getForm):
        * khtml/html/htmlparser.cpp:
        (HTMLParser::processCloseTag):
        (HTMLParser::createHead):

2005-12-20  Eric Seidel  <eseidel@apple.com>

        Reviewed by darin.

        Move Decoder onto Shared<T> and clients onto RefPtr.
        http://bugs.webkit.org/show_bug.cgi?id=6107
        No test cases possible, no functional changes.

        * khtml/ecma/XSLTProcessor.cpp:
        (KJS::XSLTProcessorProtoFunc::callAsFunction):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::XMLHttpRequest):
        (KJS::XMLHttpRequest::~XMLHttpRequest):
        (KJS::XMLHttpRequest::changeState):
        (KJS::XMLHttpRequest::abort):
        (KJS::XMLHttpRequest::slotFinished):
        (KJS::XMLHttpRequest::slotData):
        * khtml/ecma/xmlhttprequest.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::clear):
        (KHTMLPart::begin):
        (KHTMLPart::write):
        * khtml/khtmlpart_p.h:
        (KHTMLPartPrivate::KHTMLPartPrivate):
        * khtml/misc/decoder.cpp:
        (Decoder::Decoder):
        (Decoder::~Decoder):
        * khtml/misc/decoder.h:
        * khtml/misc/loader.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::~DocumentImpl):
        (DocumentImpl::prepareMouseEvent):
        (DocumentImpl::setDecoder):
        * khtml/xml/dom_docimpl.h:
        (DOM::DocumentImpl::decoder):
        * khtml/xsl/xslt_processorimpl.cpp:
        (DOM::XSLTProcessorImpl::createDocumentFromSource):

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Maciej.

        - fix http://bugs.webkit.org/show_bug.cgi?id=6143
          DOM::ElementImpl should use a RefPtr for the attribute map

        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::ElementImpl): Remove code to initialize the pointer; not needed since
        RefPtr gets initialized to 0.
        (ElementImpl::~ElementImpl): Remove code to deref the pointer; RefPtr handles that.
        (ElementImpl::attributes): Add get() call to get raw pointer.
        (ElementImpl::setAttributeMap): Remove code to deref the old map and set the new map.
        But added code to clear the element pointer from the old map (missing in the old
        version). Also added a FIXME.
        (ElementImpl::createAttributeMap): Remove ref(); RefPtr handles that.
        (NamedAttrMapImpl::addAttribute): Use a RefPtr to guarantee the element does not go
        away in the middle of dispatching DOM events.
        (StyledElementImpl::attributeChanged): Clean up code by using the inline function
        mappedAttributes() instead of doing type casts.
        (StyledElementImpl::parseMappedAttribute): Ditto.
        (StyledElementImpl::getClassList): Ditto.

        * khtml/xml/dom_elementimpl.h: Make ElementImpl::namedAttrMap be a RefPtr instead
        of raw pointer. Added an overload of StyledElementImpl::mappedAttributes for both
        const and non-const.

        * khtml/xml/dom_nodeimpl.cpp: (DOM::NodeImpl::addChild): Use a RefPtr to ref/deref
        the child so that it doesn't leak.

        * khtml/html/htmlparser.h: Changed isindex to use a RefPtr.
        * khtml/html/htmlparser.cpp:
        (HTMLParser::~HTMLParser): Removed now-unneeded ref.
        (HTMLParser::isindexCreateErrorCheck): Remove now-unneeded deref/ref.
        (HTMLParser::handleIsindex): Put isindex element into a RefPtr. This prevents a
        crash that was otherwise happening during layout tests (caused indirectly by
        the changes above).
        (HTMLParser::startBody): Added call to get().

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen and Eric Seidel.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4923
          stop using <ostream> in WebCore, eliminating the <cmath> troubles it causes

        * ForwardingHeaders/kxmlcore/AlwaysInline.h: Added.
        * WebCorePrefix.h: Removed the use of <ostream>.

        * kwq/KWQDef.h: Removed now-unused Q_INT64, Q_INT16, Q_UINT16, qRound, and _KWQ_IOSTREAM_.

        * kwq/KWQKHTMLPart.h: Removed some unneeded headers and added forward-declarations of classes
        instead. Corrected some incorrect member function declarations.
        * kwq/KWQKHTMLPart.mm: Added a now-needed header.

        * khtml/ecma/kjs_window.cpp: Removed the <cmath> workaround.
        * khtml/rendering/bidi.cpp: Added include of AlwaysInline.h and removed a
        lot of unnecessary includes.
        * khtml/rendering/render_canvasimage.cpp: Removed the <cmath> workaround.
        * khtml/rendering/render_image.cpp: Removed the <cmath> workaround.
        * khtml/rendering/render_text.cpp: Added include of AlwaysInline.h and removed a
        lot of unnecessary includes.

        * ksvg2/css/SVGCSSStyleSelector.cpp: (KDOM::CSSStyleSelector::applySVGProperty):
        * ksvg2/svg/SVGAnimateColorElementImpl.cpp: (SVGAnimateColorElementImpl::calculateColor):
        * ksvg2/svg/SVGAnimateTransformElementImpl.cpp: (SVGAnimateTransformElementImpl::handleTimerEvent):
        * ksvg2/svg/SVGAnimationElementImpl.cpp: (SVGAnimationElementImpl::closeRenderer):
        * ksvg2/svg/SVGLinearGradientElementImpl.cpp: (SVGLinearGradientElementImpl::buildGradient):
        * ksvg2/svg/SVGPatternElementImpl.cpp: (SVGPatternElementImpl::notifyAttributeChange):
        * ksvg2/svg/SVGRadialGradientElementImpl.cpp: (SVGRadialGradientElementImpl::buildGradient):
        Replaced use of qRound with use of lroundf or lround as appropriate.

        * kwq/KWQCString.h:
        * kwq/KWQCString.mm:
        * kwq/KWQDateTime.h:
        * kwq/KWQDateTime.mm:
        * kwq/KWQMap.h:
        * kwq/KWQMemArray.h:
        * kwq/KWQPoint.mm:
        * kwq/KWQPointArray.h:
        * kwq/KWQPtrList.h:
        * kwq/KWQPtrStack.h:
        * kwq/KWQPtrVector.h:
        * kwq/KWQRect.h:
        * kwq/KWQRect.mm:
        * kwq/KWQSize.h:
        * kwq/KWQSize.mm:
        * kwq/KWQValueList.h:
        Removed _KWQ_IOSTREAM_ code that was used at one time for unit tests, but is now unneeded,
        and requires <ostream>.

2005-12-19  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen and John Sullivan.

        - fix http://bugs.webkit.org/show_bug.cgi?id=4312
          XMLHttpRequest headers that have two CRLF sequences lead to Obj-C exception

        I found this by code inspection after examining a security report about
        vulnerabilities in other browsers' XMLHttpRequest implementations.

        * kwq/KWQLoader.mm:
        (+[NSDictionary _webcore_dictionaryWithHeaderString:_webcore_dictionaryWithHeaderString:]):
        Check length of string before calling characterAtIndex:0 since it will fail for an empty string.

2005-12-19  Mitz Pettel  <opendarwin.org@mitzpettel.com>

        Reviewed by Beth

        - fix http://bugs.webkit.org/show_bug.cgi?id=6149
          REGRESSION (WebCore-417.5): horizontal scrollbar in overflow with top
          border doesn't receive mouse events

        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::isPointInScrollbar):
        Removed borderTop() from horizontal scrollbar rect computation.
        * manual-tests/scrollbar-hittest2.html: Added.

2005-12-19  Alexey Proskuryakov  <ap@nypop.com>

        Reviewed by Darin, committed by Adele.

        - fix http://bugs.webkit.org/show_bug.cgi?id=5744
          XMLHttpRequest does not apply page encoding after assigning via innerHtml

        * khtml/ecma/xmlhttprequest.cpp:
        (getMIMEType): A helper function to get MIME type from a Content-Type string.
        (getCharset): A helper function to get charset from a Content-Type string.
        (KJS::XMLHttpRequest::getValueProperty): Factored out responseIsXML().
        (KJS::XMLHttpRequest::getResponseHeader): Return QString instead of JSValue
          (to get rid of unnecessary JSLocks).
        (KJS::XMLHttpRequest::responseIsXML): A new method that analyses Content-Type.
        (KJS::XMLHttpRequest::slotData): Use a correct charset for responses, see bug for details.
        (KJS::XMLHttpRequestProtoFunc::callAsFunction): Update for getResponseHeader() changes
        * khtml/ecma/xmlhttprequest.h:

== Rolled over to ChangeLog-2005-12-19 ==
