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
        
        https://bugs.webkit.org/show_bug.cgi?id=7150
        <rdar://4433765> 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 ==
