2002-12-03  David Hyatt  <hyatt@apple.com>

	Fix for 3078227, hanging in table code.  Make sure <form>s
	don't get wrapped in anonymous rows and cells.
	
        Reviewed by: rjw

        * khtml/rendering/render_table.cpp:
        (RenderTable::addChild):
        (RenderTableSection::addChild):
        (RenderTableRow::addChild):

2002-12-03  David Hyatt  <hyatt@apple.com>

	Backing out a file that I did not intend to check in.

        * khtml/misc/loader.cpp:

2002-12-03  Richard Williamson   <rjw@apple.com>

        D'oh.  Fixed last minute change that broke the build.
        
        * kwq/KWQFont.mm:
        (QFont::getNSFont):

2002-12-03  David Hyatt  <hyatt@apple.com>

	Remove the moveWidgetsAside function.  This fixes all the
	form controls on livepage.apple.com that were getting hosed
	by the scrolling marquee.
	
        Reviewed by: darin

        * khtml/html/html_tableimpl.cpp:
        (HTMLTableRowElementImpl::addChild):
        * khtml/misc/loader.cpp:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::layout):
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::KWQKHTMLPart):
        (KWQKHTMLPart::paint):

2002-12-03  Richard Williamson   <rjw@apple.com>

        Fixed 3019986.  Use an array of font families instead of a single
        font family to support CSS family lists.
        r=hyatt
                
        * kwq/KWQFont.h:
        * kwq/KWQFont.mm:
        (QFont::getNSFont):
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::floatCharacterWidths):
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        (QPainter::drawUnderlineForText):
        * kwq/WebCoreTextRenderer.h:
        * kwq/WebCoreTextRendererFactory.h:
        * kwq/WebCoreTextRendererFactory.m:
        (-[WebCoreTextRendererFactory rendererWithFamilies:traits:size:]):
        (-[WebCoreTextRendererFactory fontWithFamilies:traits:size:]):

2002-12-03  David Hyatt  <hyatt@apple.com>

	Fix for 3112599, aol.com shopping page doesn't work.  Apply
	the same form demotion trick to <tr> that I did already for
	<tbody> and <table>.

	r=gramps
	
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableRowElementImpl::addChild):
        * khtml/html/html_tableimpl.h:

2002-12-03  David Hyatt  <hyatt@apple.com>

	Fix link feedback regression on aintitcool.com.  Observe
	the wacky feedback we give now (yes, it matches MacIE and
	Gecko).  Gotta love this malformed page.

	<a><h4>...</h4></a>

	r=mjs
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::nodeAtPoint):

2002-12-03  David Hyatt  <hyatt@apple.com>

	Eliminate the KONQBLOCK hack.  Fixes ipodhacks.com (a mislayout
	caused by malformed html... <table><br>...)

	r=mjs
	
        * khtml/css/html4.css:
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::isInline):
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::reset):
        (KHTMLParser::insertNode):
        * khtml/html/htmlparser.h:
        * khtml/misc/htmltags.c:
        (hash_tag):
        (findTag):
        * khtml/misc/htmltags.h:
        * khtml/misc/htmltags.in:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-12-02  David Hyatt  <hyatt@apple.com>

	Fix for 3032557, wsj.com DHTML elements in the wrong position.
	This patch adds support for img.x and img.y (a Mozilla extension
	from NS4 days), which is used by the site to position the menus.

	r=kocienda on the patch.
	
        * khtml/dom/html_image.cpp:
        (HTMLImageElement::x):
        (HTMLImageElement::y):
        * khtml/dom/html_image.h:
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::getValueProperty):
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_html.lut.h:

2002-12-02  David Hyatt  <hyatt@apple.com>

	Undo my changes to margin collapsing for blocks inside inlines.
	Although they may be correct in a strict mode, they don't
	work with the real-world Web.  For now, I'm just backing out
	the code.  The CSS WG hasn't decided how this should work yet
	anyway, so I'll just let the quirk behavior be our behavior
	in both modes.

	This fixes aintitcool.com.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-12-01  David Hyatt  <hyatt@apple.com>

	Convert the WebCore cache from LRU to size-adjusted and
	popularity-aware LRU (LRU-SP).  With the improved cache,
	the size restriction on images can be relaxed back to 40K
	(from 16K) while retaining the same score on cvs-base.
	This should result in better real-world performance.
	
        * khtml/misc/loader.cpp:
        (CachedObject::ref):
        (CachedObject::setSize):
        (m_tail):
        (LRUList::~LRUList):
        (Cache::flush):
        (FastLog2):
        (Cache::getLRUListFor):
        (Cache::removeFromLRUList):
        (Cache::insertInLRUList):
        (Cache::adjustSize):
        * khtml/misc/loader.h:

2002-11-29  Don Melton  <gramps@apple.com>

        * khtml/css/html4.css:

        Finally tweak headline font sizes and margins to match Gecko and CSS
        standard:
            - increase H1 font-size from 1.7em to 2em
            - increase H2 font-size from 1.4em to 1.5em
            - make H2 top and bottom margin match (bottom was strangely .87em)
            - increase H4 margin from 1.0em to 1.33em

2002-11-27  David Hyatt  <hyatt@apple.com>

	Fix DHTML on phoenix.com.  Add support for window.addEventListener
	and window.removeEventListener.
	
        * khtml/ecma/kjs_window.cpp:
        (Window::get):
        (WindowFunc::tryCall):
        * khtml/ecma/kjs_window.h:
        * khtml/ecma/kjs_window.lut.h:

2002-11-27  Maciej Stachowiak  <mjs@apple.com>

	- avoid doing any work when setting the document's link colors if
	there is no change. This avoids superfluous style updates and
	results in a 20% improvment on the JavaScript iBench.
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::putValue):

2002-11-27  David Hyatt  <hyatt@apple.com>

	Fix <br clear=""> and <br clear> to just behave like <br>
	rather than <br clear="all">.  Matches behavior in other
	browsers.
	
        * khtml/html/html_inlineimpl.cpp:
        (HTMLBRElementImpl::parseAttribute):

2002-11-27  David Hyatt  <hyatt@apple.com>

        Numerous overflow: hidden improvements to fix espn.com.

	First stop absolute positioned overflow hidden elements
	from growing to accommodate their overflow.  (Actually
	absolute positioned elements should never grow to do this,
	but fixing it for non-overflow hidden elements is hard,
	so later.)

	Second fix the render layer code to not allow background/borders
	of the object with overflow: hidden from being clipped.  This
	involves an extra paint step where the object paints its
	background and borders prior to establishing the clip rect
	for the children.  (This will also be necessary for overflow:auto
	and overflow:scroll).
	
        * ChangeLog:
        * khtml/rendering/render_box.cpp:
        (RenderBox::getClipRect):
        (RenderBox::calcAbsoluteVertical):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paint):
        * khtml/rendering/render_object.h:

2002-11-27  David Hyatt  <hyatt@apple.com>

        * khtml/rendering/render_box.cpp:
        (RenderBox::getClipRect):
        (RenderBox::calcAbsoluteVertical):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paint):

2002-11-27  David Hyatt  <hyatt@apple.com>

	Fix for 3105502.  drop-downs wrapping to next line.
	
        * khtml/css/html4.css:

2002-11-26  David Hyatt  <hyatt@apple.com>

	Smarter block inside inline handling.  Eliminate whitespace
	that is in between blocks inside inilnes.
	
        * khtml/xml/dom_textimpl.cpp:
        (TextImpl::attach):

2002-11-26  David Hyatt  <hyatt@apple.com>

	Don't let blocks inside inlines collapse with their surroundings
	ever.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-11-26  David Hyatt  <hyatt@apple.com>

	Fix a collapsing margin regression on aintitcool caused by
	my support of blocks inside inlines.  A block could be wrapped
	by an inline, e.g., <font><p>foo</p></font>, and in this case,
	you do not apply the collapsing margin quirk.  The margin stays.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-11-26  David Hyatt  <hyatt@apple.com>

	Fix the font family stuff to be refcounted, so copying
	fonts stays cheap.  Re-enabling it.

	Patch the render_arena code with some debugging info
	to help detect when memory gets trashed.

	Fix the background painting code to deal with negative
	x and y bakcground positions.  Fixes the brain on
	brainjar.com.
	
        * khtml/css/cssstyleselector.cpp:
        * khtml/rendering/render_arena.cpp:
        (RenderArena::free):
        * khtml/rendering/render_box.cpp:
        (RenderBox::paintBackground):
        * kwq/KWQFont.h:
        * kwq/KWQFont.mm:
        (QFontFamily::QFontFamily):
        (QFontFamily::operator=):

=== Alexander-34 ===

2002-11-26  David Hyatt  <hyatt@apple.com>

	Backing out support for multiple font families for now.
	The support is still there in QFont.  I've just stopped
	the style selector from walking the entire value list (it
	will only put the first family into the font).

	The original change  caused a 5% perf regression.  
	I'm going to see what kinds of tricks I can pull to get 
	some of this back before re-enabling the feature.
	
        * khtml/css/cssstyleselector.cpp:

2002-11-26  David Hyatt  <hyatt@apple.com>

	Fix render object removal to remerge adjacent anonymous inline boxes
	when an intervening block box gets removed.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::removeChild):
        * khtml/rendering/render_flow.h:

2002-11-25  Richard Williamson   <rjw@apple.com>

        Cleanup up leaking objects in page cache.
        
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::openURLFromPageCache):
        * kwq/WebCoreBridge.mm:
        (-[KWQPageState initWithDocument:DOM::URL:windowProperties:KJS::locationProperties:KJS::]):
        (-[KWQPageState dealloc]):

2002-11-25  Richard Williamson   <rjw@apple.com>

        Added check for non-nil doc.
        
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::setView):

2002-11-25  David Hyatt  <hyatt@apple.com>

	Fix for the DHTML on hrweb.  With these changes it works
	except for some odd vertical spacing issues.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::addChildToFlow):
        (RenderFlow::makeChildrenNonInline):

2002-11-25  Richard Williamson   <rjw@apple.com>

        Tweaked some debugging info.
        
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::~DocumentImpl):
        (DocumentImpl::detach):

2002-11-25  Chris Blumenberg  <cblu@apple.com>

	Use ^= to refer to OBJECTs with TYPEs that start with "image/". This is better than hard-coding image mime types.

        * khtml/css/html4.css:

2002-11-25  Chris Blumenberg  <cblu@apple.com>

	Fixed: 2987001 - spurious mime-type errors from <object> images

	KHTML didn't seem to have any clean support for OBJECT tags that are images. Added support for that.

        * khtml/css/html4.css: OBJECTs that are images should be rendered inline
        * khtml/html/html_objectimpl.cpp:
        (HTMLObjectElementImpl::attach): if the type is an image, create a render image
        * khtml/rendering/render_image.cpp:
        (RenderImage::updateFromElement): if the element is an object, use DATA for the URL
        * kwq/KWQDOMNode.cpp:
        (isImage): if it is an OBJECT element, check the type
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]): if the element is an object, use DATA for the URL

2002-11-25  David Hyatt  <hyatt@apple.com>

	Fix this even further.  JUst drop support for arbitrary
	property lookup by name on the document.  Mac IE and
	Gecko only do this for img and form, and this makes things
	a lot faster.
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::hasProperty):
        (KJS::HTMLDocument::tryGet):

2002-11-25  David Hyatt  <hyatt@apple.com>

	Rewrite the img/form document property lookup strategy.  This
	should be faster and actually work (gasp!).  Fixes the dhtml
	on hrweb to at least show up.
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::tryGet):
        * khtml/html/html_miscimpl.cpp:
        (HTMLCollectionImpl::nextItem):

2002-11-25  David Hyatt  <hyatt@apple.com>

	Add support to QFont for multiple families.  NOw all that's left
	is getting the multiple families out of the font and down into
	WebKit.
	
        * khtml/css/cssstyleselector.cpp:
        * khtml/rendering/font.cpp:
        (Font::update):
        * khtml/rendering/font.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::recalcStyle):
        * kwq/KWQFont.h:
        * kwq/KWQFont.mm:
        (QFontFamily::QFontFamily):
        (QFontFamily::operator=):
        (QFontFamily::family):
        (QFontFamily::setFamily):
        (QFontFamily::operator==):
        (QFont::QFont):
        (QFont::family):
        (QFont::setFamily):
        (QFont::getNSFontWithFamily):

2002-11-25  Richard Williamson   <rjw@apple.com>

        Changes for back/forward.  Currently disabled.

        * ForwardingHeaders/kjs/property_map.h: Added.
        * khtml/ecma/kjs_window.cpp:
        (Window::hasTimeouts):
        (WindowQObject::hasTimeouts):
        * khtml/ecma/kjs_window.h:
        * khtml/khtmlpart_p.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::detach):
        (DocumentImpl::inPageCache):
        (DocumentImpl::setInPageCache):
        * khtml/xml/dom_docimpl.h:
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::setView):
        (KWQKHTMLPart::userAgent):
        (KWQKHTMLPart::nextKeyViewForWidget):
        (KWQKHTMLPart::canCachePage):
        (KWQKHTMLPart::saveWindowProperties):
        (KWQKHTMLPart::saveLocationProperties):
        (KWQKHTMLPart::restoreWindowProperties):
        (KWQKHTMLPart::restoreLocationProperties):
        (KWQKHTMLPart::openURLFromPageCache):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge openURL:reload:headers:lastModified:pageCache:]):
        (-[WebCoreBridge saveDocumentToPageCache]):
        (-[WebCoreBridge canCachePage]):
        (attributedString):
        (-[KWQPageState initWithDocument:DOM::URL:windowProperties:KJS::locationProperties:KJS::]):
        (-[KWQPageState dealloc]):
        (-[KWQPageState DOM::]):
        (-[KWQPageState URL]):
        (-[KWQPageState KJS::]):

2002-11-25  David Hyatt  <hyatt@apple.com>

	Fix for 3025963.  Ensure that KJS looks for the form on the
	element itself when pushing it onto the scope chain, since
	the <form> may not be an ancestor of the element.
	
        * khtml/ecma/kjs_html.cpp:
        (getForm):
        (KJS::HTMLElement::pushEventHandlerScope):
        * khtml/html/html_elementimpl.h:

2002-11-25  David Hyatt  <hyatt@apple.com>

	Fix for 3020493, another fun little margin collapsing quirk
	that I missed. (<td><div><p>).  The <div> has to pick up the quirk
	from the <p> so that the margins of the <p> still get collapsed
	away.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-11-25  David Hyatt  <hyatt@apple.com>

	Don't add in the halfleading for align=texttop. That's incorrect.
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::getVerticalPosition):

2002-11-24  Maciej Stachowiak  <mjs@apple.com>

	Fixed support for onLoad handlers on images - this is in
	APPLE_CHANGES because khtml used a different mechanism. Also
	implemented onError on images. As a result:

	- fixed 3084916 - blank page at aol
	- fixed 3093162 - golfswitch doesn't work
	
        * khtml/html/html_imageimpl.cpp:
        (HTMLImageElementImpl::parseAttribute): Remove "implement this"
	comment from onError attribute.
        * khtml/misc/loader.h:
        * khtml/misc/loader.cpp:
        (CachedImage::CachedImage): Initialize m_loading to true.
	(CachedImage::ref): Send notifyFinished to the new client if the
	image is not loading.
        (CachedImage::data): If at eof, set m_loading to false and notify.
        (CachedImage::error): Set m_loading to false and notify.
	(CachedImage::checkNotify): New method to notify all clients of
	changes.
        * khtml/rendering/render_image.cpp:
        (RenderImage::notifyFinished): Deliver the appropriate choice of
	LOAD_EVENT or ERROR_EVENT.

2002-11-24  David Hyatt  <hyatt@apple.com>

	This landing adds support for blocks inside inlines.  It
	gets rid of the old broken way KHTML used to handle this
	and implements a brand new mechanism.

	With this change, I have decreased the tag priority of <font>
	and <a> to match other inlines (<i>, <span>, etc.), and I
	now allow all the inlines to contain blocks for relaxed parsing.

	Now if you open an <i> or a <b> and just leave it open across
	blocks, this will work.

	I also fixed a bad DHTML bug caused by the WebCoreBridge 
	forceLayout method.  The basic pattern is that someone does
	a tiny repaint of just a sliver of the window, then someone
	schedules a layout (which means they want a full repaint), but
	then drawRect comes along and calls forceLayout which unschedules
	the layout, thus preventing the full repaint from occurring.

	Any basic DHTML that used append/remove child was broken because
	of this pattern.  For now I have just removed the unscheduleLayout
	call at the end of forceLayout.
	
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::popInlineBlocks):
        * khtml/rendering/render_container.cpp:
        (RenderContainer::removeChild):
        (RenderContainer::removeLeftoverAnonymousBoxes):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::setStyle):
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::continuationBefore):
        (cloneInline):
        (RenderFlow::splitInlines):
        (RenderFlow::splitFlow):
        (RenderFlow::addChildWithContinuation):
        (RenderFlow::addChild):
        (RenderFlow::addChildToFlow):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::mouseInside):
        * khtml/rendering/render_object.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::forceLayout):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge copyRenderNode:copier:]):

2002-11-24  Chris Blumenberg  <cblu@apple.com>

	Added element keys for the image ALT and link TITLE attributes. This will eventually be used to fix other bugs. Also made WebKit and WebCore use the same element keys to simplify the conversion of the element dictionary.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]):

2002-11-24  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Touch for ScopeChain change.

2002-11-24  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3067939 - no support for window.document.lastModified
	
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge openURL:reload:headers:lastModified:]): Set
	"modified" metadata based on passed in last mdified date.

2002-11-24  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3081946 - bookmarklet reports the wrong "windowfull" size

	This isn't really beta 1 material but the fix was so tirivial I
	couldn't resist.
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::tryGet): Use contentWidth and contentHeight
	for document.width and document.height instead of visibleWidth for
	both.

2002-11-22  Darin Adler  <darin@apple.com>

        * khtml/ecma/kjs_window.cpp: Remove _COLLECTOR hack.

        * kwq/WebCoreJavaScript.h:
        * kwq/WebCoreJavaScript.mm:
        (+[WebCoreJavaScript rootObjectClasses]):
	Update for name change -- root object classes, not all live object classes.

        * force-js-clean-timestamp: Make sure we don't have more build problems.

2002-11-22  David Hyatt  <hyatt@apple.com>

	Fix for 3107658, text doubling problem caused by layers being
	constructed for <td>s.  Just disallow positioning of <td>.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::setStyle):

2002-11-22  David Hyatt  <hyatt@apple.com>

	Oops. I meant to do that for <input type=button> and not
	<button>.  Just do it for <select>s for now.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::calcReplacedWidth):

2002-11-22  David Hyatt  <hyatt@apple.com>

	Make <select>s and <button>s ignore a CSS-specified width if that
	width is smaller than their intrinsic width.

	Fixes the <select> at the top of livepage.apple.com.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::calcReplacedWidth):

2002-11-22  Darin Adler  <darin@apple.com>

	- started checking in all our generated source files for the benefit of B&I

        * .cvsignore:
        * WebCore-combined.exp: Added.
        * khtml/css/.cvsignore:
        * khtml/css/cssproperties.c: Added.
        * khtml/css/cssproperties.h: Added.
        * khtml/css/cssvalues.c: Added.
        * khtml/css/cssvalues.h: Added.
        * khtml/ecma/.cvsignore:
        * khtml/ecma/kjs_css.lut.h: Added.
        * khtml/ecma/kjs_dom.lut.h: Added.
        * khtml/ecma/kjs_events.lut.h: Added.
        * khtml/ecma/kjs_html.lut.h: Added.
        * khtml/ecma/kjs_navigator.lut.h: Added.
        * khtml/ecma/kjs_range.lut.h: Added.
        * khtml/ecma/kjs_traversal.lut.h: Added.
        * khtml/ecma/kjs_views.lut.h: Added.
        * khtml/ecma/kjs_window.lut.h: Added.
        * khtml/html/.cvsignore:
        * khtml/html/kentities.c: Added.
        * khtml/misc/.cvsignore:
        * khtml/misc/htmlattrs.c: Added.
        * khtml/misc/htmlattrs.h: Added.
        * khtml/misc/htmltags.c: Added.
        * khtml/misc/htmltags.h: Added.
        * kwq/.cvsignore:
        * kwq/KWQCharsetData.c: Added.

2002-11-22  David Hyatt  <hyatt@apple.com>

	Fix for the table/form regressions.  Also landing beginnings
	of the block/inline work.
	
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableSectionElementImpl::addChild):
        * khtml/html/html_tableimpl.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::RenderFlow):
        * khtml/rendering/render_flow.h:

2002-11-22  Darin Adler  <darin@apple.com>

        * khtml/ecma/kjs_dom.cpp: (DOMNode::pushEventHandlerScope): Change to push handlers
	on an existing scope chain rather than returning one. Name change too.
        * khtml/ecma/kjs_dom.h: More of the same.
        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::pushEventHandlerScope): And here.
        * khtml/ecma/kjs_html.h: And here.

        * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): Use the pushEventHandlerScope
	function, and also don't worry about optimizing the "no change" case, because that already
	works pretty efficiently.

2002-11-22  David Hyatt  <hyatt@apple.com>

	Fix for the weather.com, slate and espn malformations that
	could occur.  Also reverting an earlier change for handling
	font tags like other inlines.  Both FONT and A need to be
	given special treatment until I can implement a strategy that
	will allow them to be handled just like the other inlines.
	
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::isInline):
        * khtml/html/html_elementimpl.h:
        * khtml/xml/dom_nodeimpl.h:

2002-11-21  Darin Adler  <darin@apple.com>

        * khtml/ecma/kjs_dom.cpp: (DOMNode::eventHandlerScope): List -> ScopeChain.
        * khtml/ecma/kjs_dom.h: List -> ScopeChain.
        * khtml/ecma/kjs_events.cpp: (JSEventListener::handleEvent): List -> ScopeChain.
        * khtml/ecma/kjs_html.cpp: (KJS::HTMLElement::eventHandlerScope): List -> ScopeChain.
        * khtml/ecma/kjs_html.h: List -> ScopeChain.

        * force-js-clean-timestamp: Not sure this is required, but better safe than sorry.

2002-11-21  Maciej Stachowiak  <mjs@apple.com>

        * force-js-clean-timestamp: Touch so other people's builds work.

2002-11-21  David Hyatt  <hyatt@apple.com>

	Nested <a>s are never allowed.  Make sure to always pop the
	<a> blocks.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::getElement):

2002-11-21  David Hyatt  <hyatt@apple.com>

	Stop table cells from repainting the whole table when they
	get a repaint.  Gives another big boost to link rollover
	performance when links' containing blocks are table cells.
	
        * khtml/rendering/render_table.cpp:
        (RenderTableCell::repaint):

2002-11-21  David Hyatt  <hyatt@apple.com>

	Fix <font> so that behaves just like <i>, <b>, etc. Stop
	the (incorrect) allowance of blocks inside <font> tags.
	This fixes the mispositioning on avoyagetoarcturus.blogspot.com
	and fixes the vertical gaps on www.ve3d.com.
	
        * khtml/html/dtd.cpp:
        (DOM::checkChild):

2002-11-21  Maciej Stachowiak  <mjs@apple.com>

        * Makefile.am: Pass symroots for this tree to pbxbuild.

2002-11-21  David Hyatt  <hyatt@apple.com>

	Fixed for tables.  Make the percentage height calculation
	more robust.  Also add a hack for replaced elements to
	subtract out their margins when computing percentage widths.
	This keeps them from spilling out of table cells.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::calcReplacedWidth):
        (RenderBox::calcReplacedHeight):
        * khtml/rendering/render_table.cpp:
        (RenderTable::layoutRows):
        * khtml/xml/dom_nodeimpl.h:

=== Alexander-33 ===

2002-11-21  Richard Williamson   <rjw@apple.com>

        Fixed from SK's copy/paste whitespace issue.
        This fixes 3076236 and a regression due to additional whitespace
        in the DOM.
        
        * kwq/WebCoreBridge.mm:
        (attributedString):

2002-11-21  David Hyatt  <hyatt@apple.com>

	Fix mac.com regression (and weather.com regression).
	
        * khtml/rendering/bidi.cpp:
        (RenderFlow::findNextLineBreak):

2002-11-21  Richard Williamson   <rjw@apple.com>

        Fixed performance regression!  Argh.
        
        * khtml/rendering/font.cpp:
        (Font::width):

2002-11-21  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Trigger a rebuild because of the
	size change in ValueImp.

2002-11-21  Darin Adler  <darin@apple.com>

	- fixed 3107286 -- REGRESSION: unrepro assertion failure in KWQKHTMLPart.mm keyEvent

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::keyEvent):
	Handle case of nil document as well as case of nil focus node.

        * kwq/WebCoreBridge.mm: Tweak whitespace.

2002-11-20  Darin Adler  <darin@apple.com>

	- fixed 3107383 -- clicking link on cnet.com leads to assertion failure

	When we removed a frame, we were leaving behind an empty WebView. Yuck.

        * kwq/KWQScrollView.mm:
        (QScrollView::addChild): Use the new getOuterView.
        (QScrollView::removeChild): Ditto. This was the bug fix.
        * kwq/KWQWidget.h: Add getOuterView.
        * kwq/KWQWidget.mm:
        (QWidget::frameGeometry): Use the new getOuterView.
        (QWidget::setFrameGeometry): Ditto.
        (QWidget::getOuterView): Added. Does the WebCoreFrameView magic to find
	the WebView instead of the WebHTMLView. Yuck.
        (QWidget::paint): Use the new getOuterView.

2002-11-20  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Again.

2002-11-20  David Hyatt  <hyatt@apple.com>

	Fix the mac.com line-breaking bug.  This was not a regression
	but was present in Konq.
	
        * khtml/rendering/bidi.cpp:
        (RenderFlow::findNextLineBreak):

2002-11-20  Maciej Stachowiak  <mjs@apple.com>

        * force-js-clean-timestamp: Work around PB lameness yet again.

2002-11-19  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Make other people's builds work.

2002-11-19  David Hyatt  <hyatt@apple.com>

	I screwed up the line breaking for inline replaced elements.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::calcInlineMinMaxWidth):

2002-11-19  Darin Adler  <darin@apple.com>

	- another atomic identifier scrub pass; make the conversion to Identifier explicit

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLCollection::tryCall): Add explicit Identifier() conversion.
        (KJS::HTMLCollectionProtoFunc::tryCall): Ditto.
        * khtml/ecma/kjs_window.cpp: (WindowFunc::tryCall): And again.

2002-11-19  David Hyatt  <hyatt@apple.com>

	Fix for 3049663.  Table cells don't grow to accommodate block
	overflow.
	
        * khtml/rendering/bidi.cpp:
        (RenderFlow::layoutInlineChildren):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::RenderFlow):
        (RenderFlow::layout):
        (RenderFlow::layoutBlockChildren):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.h:

2002-11-19  Darin Adler  <darin@apple.com>

	- next step towards atomic identifiers; Identifier is no longer derived from UString

        * khtml/ecma/kjs_binding.cpp:
        (Identifier::string): Added.
        (Identifier::qstring): Added.

        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_css.cpp:
        (jsNameToProp):
        (DOMCSSStyleDeclaration::tryPut):
        (DOMStyleSheet::tryPut):
        (DOMStyleSheetList::tryGet):
        (DOMMediaList::tryGet):
        (DOMCSSRuleList::tryGet):
        (DOMCSSValueList::tryGet):
        * khtml/ecma/kjs_dom.cpp:
        (DOMNodeList::hasProperty):
        (DOMNodeList::tryGet):
        (DOMNodeListFunc::DOMNodeListFunc):
        (DOMElement::tryGet):
        (DOMNamedNodeMap::hasProperty):
        (DOMNamedNodeMap::tryGet):
        (DOMNamedNodesCollection::tryGet):
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::tryGet):
        (HTMLElementFunction::HTMLElementFunction):
        (KJS::HTMLElement::putValue):
        (KJS::HTMLCollection::hasProperty):
        (KJS::HTMLCollection::tryGet):
        (KJS::HTMLSelectCollection::tryPut):
        (OptionConstructorImp::OptionConstructorImp):
        * khtml/ecma/kjs_navigator.cpp:
        (Plugins::get):
        (MimeTypes::get):
        (Plugin::get):
        * khtml/ecma/kjs_window.cpp:
        (WindowFunc::tryCall):
        (FrameArray::get):
	Use lengthPropertyName instead of "length" for better speed.

2002-11-19  David Hyatt  <hyatt@apple.com>

	Fix backgrounds not painting in deployment builds.
        * khtml/rendering/render_box.cpp:
        (RenderBox::paintBackground):

2002-11-19  Darin Adler  <darin@apple.com>

	- a first step towards atomic identifiers in JavaScript

	Most places that work with identifiers now use Identifier
	instead of UString.

        * khtml/ecma/kjs_binding.cpp:
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_css.cpp:
        * khtml/ecma/kjs_css.h:
        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_events.cpp:
        * khtml/ecma/kjs_events.h:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_html.h:
        * khtml/ecma/kjs_navigator.cpp:
        * khtml/ecma/kjs_navigator.h:
        * khtml/ecma/kjs_range.cpp:
        * khtml/ecma/kjs_range.h:
        * khtml/ecma/kjs_traversal.cpp:
        * khtml/ecma/kjs_traversal.h:
        * khtml/ecma/kjs_views.cpp:
        * khtml/ecma/kjs_views.h:
        * khtml/ecma/kjs_window.cpp:
        * khtml/ecma/kjs_window.h:

2002-11-18  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Another Object change.

2002-11-18  David Hyatt  <hyatt@apple.com>

	Implement phased painting to correct the paint order of blocks,
	floats, and inlines.
	
        * khtml/rendering/render_body.cpp:
        (RenderBody::paintBoxDecorations):
        * khtml/rendering/render_body.h:
        * khtml/rendering/render_box.cpp:
        (RenderBox::paint):
        (RenderBox::paintBoxDecorations):
        (RenderBox::paintBackground):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_br.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::paint):
        (RenderFlow::paintObject):
        (RenderFlow::paintFloats):
        (RenderFlow::addChild):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_html.cpp:
        (RenderHtml::setStyle):
        (RenderHtml::paint):
        (RenderHtml::paintBoxDecorations):
        * khtml/rendering/render_html.h:
        * khtml/rendering/render_image.cpp:
        (RenderImage::setStyle):
        (RenderImage::paintObject):
        * khtml/rendering/render_image.h:
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paint):
        (RenderLayer::nodeAtPoint):
        * khtml/rendering/render_list.cpp:
        (RenderListItem::paint):
        (RenderListItem::paintObject):
        (RenderListMarker::paint):
        (RenderListMarker::paintObject):
        * khtml/rendering/render_list.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::RenderObject):
        (RenderObject::paintBorder):
        (RenderObject::paintOutline):
        (RenderObject::paint):
        (RenderObject::dump):
        (RenderObject::setStyle):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::paint):
        (RenderWidget::setStyle):
        (RenderWidget::paintObject):
        * khtml/rendering/render_replaced.h:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::paint):
        (RenderRoot::paintObject):
        * khtml/rendering/render_root.h:
        * khtml/rendering/render_table.cpp:
        (RenderTable::paint):
        (RenderTableCell::RenderTableCell):
        (RenderTableCell::setStyle):
        (RenderTableCell::paint):
        (RenderTableCell::paintBoxDecorations):
        * khtml/rendering/render_table.h:
        * khtml/rendering/render_text.cpp:
        (TextSlave::paintSelection):
        (TextSlave::paintDecoration):
        (TextSlave::paintBoxDecorations):
        (RenderText::paintObject):
        (RenderText::paint):
        (RenderText::paintTextOutline):
        * khtml/rendering/render_text.h:

2002-11-18  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: I changed the size of ObjectImp.

2002-11-18  David Hyatt  <hyatt@apple.com>

	Fix crazyapplerumors.com.  I had the logic backwards. CSS
	padding beats cellpadding.
	
        * khtml/rendering/render_table.cpp:
        (RenderTableCell::paddingTop):
        (RenderTableCell::paddingBottom):
        (RenderTableCell::paddingLeft):
        (RenderTableCell::paddingRight):

2002-11-18  David Hyatt  <hyatt@apple.com>

	Fix crash on espn.com.
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::setLayouted):

2002-11-18  David Hyatt  <hyatt@apple.com>

	Fix my <konqblock> regression on ign.com.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):

2002-11-18  Maciej Stachowiak  <mjs@apple.com>

        * force-js-clean-timestamp: Rebuild for JSC changes.

2002-11-18  Darin Adler  <darin@apple.com>

        * force-js-clean-timestamp: Touch files to make the build work.

2002-11-18  Richard Williamson   <rjw@apple.com>

        Fixed 3103004.  REGRESSION: word-spacing/letter-spacing applied when they shouldn't be
        This was actually NOT a regression.  khtml wasn't recognizing the 'normal' value for the
        word and letter spacing properties.  So it incorrectly substituted a -1 spacing.

        * khtml/css/cssstyleselector.cpp:

2002-11-18  David Hyatt  <hyatt@apple.com>

	Fix render_body's repaint method.
	
        * khtml/rendering/render_body.cpp:
        (RenderBody::repaint):
        * khtml/rendering/render_body.h:

2002-11-18  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3103711 - Alexander does not complete JavaScript iBench
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::putValue): Resolve URL for location property
	relative to the base URL of the frame where the JavaScript is
	executing, not the target frame.

2002-11-18  David Hyatt  <hyatt@apple.com>

	Yay! Found the main cause of :hover feedback being so
	slow on links.  The diff function for styles was
	considering a color change as a containing block layout
	instead of just a repaint.  With this fix, we will no
	longer lay out when you hover over a link whose color
	is different (remember that laying out causes the whole
	page to repaint).

	There's still some work to do to optimize this further,
	since we do repaint the containing block still, but this
	should be good enough for beta.
	
        * khtml/rendering/render_style.cpp:
        (RenderStyle::diff):

2002-11-17  David Hyatt  <hyatt@apple.com>

	Don't use the immediate painting code for now.  Revert
	to non-immediate code.  Using the non-immediate path I
	have managed to fix all the regressions except for 
	mrskin losing updates in its marquee (this works only with
	immediate painting) and the general scrollbar regression 
	(which I just don't understand).
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::close):
        * khtml/rendering/render_object.cpp:
        (RenderObject::setLayouted):
        * khtml/rendering/render_root.cpp:
        (RenderRoot::repaintRectangle):
        (RenderRoot::repaint):

2002-11-17  David Hyatt  <hyatt@apple.com>

	More refinements to immediate painting code.  Still doesn't
	fix the scrollbar problem though. :(
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::close):
        * khtml/khtmlview.cpp:
        (KHTMLView::init):
        (KHTMLView::timerEvent):

2002-11-17  David Hyatt  <hyatt@apple.com>

	Make immediate repainting of the root element more robust.
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::close):
        * khtml/khtmlview.cpp:
        (KHTMLView::unscheduleRepaint):
        * khtml/khtmlview.h:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::repaint):

2002-11-17  Darin Adler  <darin@apple.com>

	- moved all NSURL and CFURL use out of WebCore

        * kwq/KWQKURL.h: Remove getNSURL() and getNSURLFromString().
        * kwq/KWQKURL.mm: Ditto.

        * kwq/KWQKCookieJar.mm:
        (KWQKCookieJar::cookie): Pass an NSString instead of an NSURL.
        (KWQKCookieJar::setCookie): Ditto.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::openURL): Ditto.
        (KWQKHTMLPart::openURLRequest): Ditto.
        (KWQKHTMLPart::submitForm): Ditto.
        (KWQKHTMLPart::urlSelected): Ditto.
        (KWQKHTMLPart::createPart): Ditto.
        (KWQKHTMLPart::redirectionTimerStartedOrStopped): Ditto.
        (KWQKHTMLPart::userAgent): Ditto.
        (KWQKHTMLPart::requestedURLString): Receive an NSString instead of an NSURL.
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Pass an NSString instead of an NSURL.
        (KHTMLPartBrowserExtension::setIconURL): Ditto.
        (KHTMLPartBrowserExtension::setTypedIconURL): Ditto.
        * kwq/KWQKJavaAppletWidget.h: Remove use of NSURL, just use QString instead.
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget): No need to set the QString to nil.
        (KJavaAppletWidget::~KJavaAppletWidget): No need to release the QString.
        (KJavaAppletWidget::showApplet): Pass an NSString instead of an NSURL.
        * kwq/KWQLoader.mm:
        (KWQServeRequest): Pass an NSString instead of an NSURL.
        (KWQCheckCacheObjectStatus): Ditto.
        * kwq/WebCoreBridge.h: Change all methods to use NSString instead of NSURL.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge openURL:reload:headers:]): Receive an NSString instead of an NSURL.
        (-[WebCoreBridge completeURLForDOMString:]): Return an NSString instead of an NSURL.
        (-[WebCoreBridge elementAtPoint:]): WebCoreElementLinkURL and WebCoreElementImageURL
	are now strings.
        (-[WebCoreBridge URL]): Return an NSString instead of an NSURL.
        * kwq/WebCoreCookieAdapter.h: Change all methods to use NSString instead of NSURL.
        * kwq/WebCoreCookieAdapter.m:
        (-[WebCoreCookieAdapter cookiesForURL:]): Ditto.
        (-[WebCoreCookieAdapter setCookies:forURL:policyBaseURL:]): Ditto.

        * khtml/rendering/render_applet.cpp: (RenderApplet::processArguments):
	Tweaked this file a tiny bit, mainly because header dependencies weren't working
	and we need this file to be recompiled due to inline function changes.

2002-11-17  David Hyatt  <hyatt@apple.com>

	Add support for specifying whether repaint should be immediate or
	not.  Default to async for now to maintain current behavior.

	For clipped object repainting (e.g., livepage.apple.com and mrskin)
	switch to immediate repainting, since this makes the marquees
	faster, stops dropping updates, and keeps the hover effects and
	painting on the rest of the page fast (since the marquee rect doesn't
	get unioned with links or images that you roll over).
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::repaint):
        (RenderBox::repaintRectangle):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_html.cpp:
        (RenderHtml::repaint):
        * khtml/rendering/render_html.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::setLayouted):
        (RenderObject::repaintRectangle):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::repaintRectangle):
        (RenderRoot::repaint):
        * khtml/rendering/render_root.h:
        * khtml/rendering/render_table.cpp:
        (RenderTableRow::repaint):
        (RenderTableCell::repaintRectangle):
        (RenderTableCell::repaint):
        * khtml/rendering/render_table.h:
        * khtml/rendering/render_text.cpp:
        (RenderText::repaint):
        * khtml/rendering/render_text.h:

2002-11-17  Maciej Stachowiak  <mjs@apple.com>

	- fixed 2949193 - implement onKeyDown, onKeyPress, and onKeyUp event handlers
	
        * khtml/html/html_formimpl.cpp:
        (HTMLGenericFormElementImpl::defaultEventHandler):
        * kwq/KWQEvent.h:
        * kwq/KWQEvent.mm:
        (QKeyEvent::QKeyEvent): Implemented.
        (QKeyEvent::key): Likewise.
        (QKeyEvent::state): Likewise.
        (QKeyEvent::accept): Likewise.
        (QKeyEvent::ignore): Likewise.
        (QKeyEvent::isAutoRepeat): Likewise.
        (QKeyEvent::text): Likewise.
        (QKeyEvent::ascii): Likewise.
        (QKeyEvent::count): Likewise.
        (QKeyEvent::isAccepted): Likewise.
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::keyEvent): Translate the event to a QEvent and send
	it through the DOM event mechanism.
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge interceptKeyEvent:toView:]): Pass event to the
	KWQ part.
	* kwq/WebCoreBridgePrivate.h: Added.
        * WebCore.pbproj/project.pbxproj: Added new file.

2002-11-17  David Hyatt  <hyatt@apple.com>

	Don't discard linefeeds after elements with no close tag
	(e.g., <img> or <input>).
	
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::parseTag):

2002-11-17  David Hyatt  <hyatt@apple.com>

	Fix for slashdot table mispositioning in the upper right.
	Now that we fixed <td> to set to -konq-center when align="center"
	is specified, the style rules are no longer necessary in
	html4.css (and are in fact harmful).
	
        * khtml/css/html4.css:

2002-11-17  David Hyatt  <hyatt@apple.com>

	Fix for 3038168.  Duh.  Remember to be case-insensitive when
	checking the type of the <style> attribute.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLStyleElementImpl::parseAttribute):

2002-11-17  David Hyatt  <hyatt@apple.com>

	This is a fix for bug 3058470.  The bug was that replaced elements
	were computing their min and max widths wrong.  Specifically they
	were not adding in borders and padding!  This means that any image
	with a border around it would potentially break to another line
	too early.

	Once I fixed this for replaced elements I then went in and
	fixed form controls.  I added two APPLE_CHANGES features for
	our form controls.  First I overrode the border/padding functions
	to always return 0 for all form controls, since no Aqua control
	honors border/padding (nor should it).  This fixes the menulist
	at the top of wired.com.

	Second I made sure that certain controls will ignore CSS-specified
	heights and always use their intrinsic heights.  These include
	<select size=1> (combobox), single line text fields, and buttons.
	I allow listboxes and textareas to honor height.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::contentWidth):
        (RenderBox::contentHeight):
        (RenderBox::calcWidth):
        (RenderBox::calcHeight):
        * khtml/rendering/render_form.h:
        * khtml/rendering/render_image.h:
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::calcMinMaxWidth):

2002-11-16  David Hyatt  <hyatt@apple.com>

	Fix for 3078240, <pre> should not establish its own text-align,
	but should instead inherit from its parent.
	
        * khtml/css/html4.css:

2002-11-16  David Hyatt  <hyatt@apple.com>

	Rewrite the calculation of min and max width for <pre>s.  This
	is the second stage of the whitespace rewrite (third stage
	will be to stop morphing newlines).

	This should fix a bunch of bugs, e.g., especially if you ever
	did the following: 
	<td><pre><span>foo</span>
	   more text after the newline</pre></td>

	The new code now properly handles building up the correct min/max
	width for the <pre>.

	If anyone recalls seeing any bugs like this, let me know and
	I can close them.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::calcInlineMinMaxWidth):
        * khtml/rendering/render_text.cpp:
        (RenderText::trimmedMinMaxWidth):
        (RenderText::calcMinMaxWidth):

2002-11-16  David Hyatt  <hyatt@apple.com>

	Fix more edge cases with whitespace handling that caused some
	lines to be too long (and unselectable).
	
        * khtml/rendering/bidi.cpp:
        (appendRunsForObject):

2002-11-16  David Hyatt  <hyatt@apple.com>

	Make <caption> error-handling more robust.

	Specifically, handle <tr> and <td> misplaced inside
	<caption>s and still make them be part of the table.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):

2002-11-16  David Hyatt  <hyatt@apple.com>

	Implement the collapsing top margin quirk for <body> (the same
	quirk used for table cells) and make sure it works even when the
	<body> has margins of its own.

	Fixes www.eflightpacks.com (the top frame was shoved down because
	the <p> margin didn't collapse away).
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-11-16  David Hyatt  <hyatt@apple.com>

	Sigh. Amazingly enough, all other browsers seem to treat
	stray </p>s as <p></p> (Mac IE treats it as <br>, but
	I'm going with the WinIE/Gecko behavior of <p></p>).

	This fixes bug 3063699.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::processCloseTag):
        (KHTMLParser::popBlock):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix for livepage.apple.com slowness.  Ensure that 
	clipped regions only paint their own rectangles
	when they or any children inside of them need to
	be reflowed.

	This fix is intended as an interim band-aid for a much
	larger problem (that all of layout doesn't just auto-invalidate
	the regions it needs to, and that DHTML doesn't have
	specialized behavior to avoid async repainting or even
	relayout when only a repaint is required).
	
        * khtml/khtmlview.cpp:
        (KHTMLView::timerEvent):
        * khtml/rendering/render_container.cpp:
        (RenderContainer::removeChildNode):
        (RenderContainer::appendChildNode):
        (RenderContainer::insertChildNode):
        (RenderContainer::layout):
        * khtml/rendering/render_object.cpp:
        (RenderObject::setLayouted):
        (RenderObject::scheduleRelayout):
        * khtml/rendering/render_root.cpp:
        (RenderRoot::repaintRectangle):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix the problem where the last lines of paragrpahs were getting
	justified incorrectly.
	
        * khtml/rendering/bidi.cpp:
        (RenderFlow::findNextLineBreak):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix bustage with <nobr> tags.  Inline nowrap elements were
	breaking on images when they shouldn't have.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::calcInlineMinMaxWidth):

2002-11-15  Ken Kocienda  <kocienda@apple.com>

	Fix for this bug:

	Radar 3102708 (REGRESSION: assertion failure backing up to page)

	KWQCheckCacheObjectStatus did not create an NSURL in a way that 
	dealt with the fact that we handle non-NSURL-compliant URL strings.
	I have fixed it so it does, and in the process, factored out
	the code to do it into a new KURL static function (KURL::getNSURLFromString).

        * kwq/KWQKURL.h:
        * kwq/KWQKURL.mm:
        (KURL::getNSURL): Now calls through to KURL::getNSURLFromString
        (KURL::encode_string)
        (KURL::getNSURLFromString): New function to handle NSURL creation
        * kwq/KWQLoader.mm:
        (KWQCheckCacheObjectStatus)

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix asserts in tables.
	
        * khtml/rendering/render_table.cpp:
        (RenderTableRow::layout):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix for whitespace regressions that caused text overlapping
	and text spilling.
	
        * khtml/rendering/bidi.cpp:
        (appendRunsForObject):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix newlines getting stripped out of textareas by not making
	rendertext objects for children of textareas.
	
        * khtml/rendering/render_form.h:
        * khtml/rendering/render_object.h:
        * khtml/xml/dom_textimpl.cpp:
        (TextImpl::attach):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Make <form> inside <table> stay inside the <table> but demote
	itself to a leaf.  Then the children of the <form> are treated
	as though they occurred underneath the <table> itself.  Everything
	KHTML does with this is completely wrong but this band-aid should
	hopefully suffice until 1.0.

	Also allowing <input type="hidden"> to be constructed and attached
	under <table>s.  Since they have no render objects this is safe.
	Again, total hack, since CSS2 anonymous table construction should be
	implemented and that would have fixed all this.

	This collection of hacks makes travelocity render correctly on the
	PLT.
	
        * khtml/css/html4.css:
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableElementImpl::addChild):
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::parseToken):
        (KHTMLParser::insertNode):

2002-11-15  David Hyatt  <hyatt@apple.com>

	Fix Hixie's blog.  Background images can be transparent, so
	if the root's color isn't valid always do a fixup even if you
	have a valid background image.
	
        * khtml/rendering/render_html.cpp:
        (RenderHtml::printBoxDecorations):

2002-11-15  Darin Adler  <darin@apple.com>

        * kwq/KWQWindowWidget.mm: (KWQWindowWidget::setFrameGeometry):
	Oops. Make that display:YES.

2002-11-15  Darin Adler  <darin@apple.com>

	- fixed 3090219 -- Window jumps up and down when loading nikon page

        * kwq/KWQWindowWidget.mm: (KWQWindowWidget::setFrameGeometry):
	Don't pass display:NO when resizing the window.

2002-11-15  Ken Kocienda  <kocienda@apple.com>

	Remove characters RFC 2396 describes as "unwise" from the
	BadChar character class. This causes them to remain unescaped
	in KURL objects. As a result, some extra escaping needed to 
	be added into the getNSURL() function to enable NSURL 
	objects to be created using a KURL.

	This enables me to fix this bug:
	Radar 3050437 (Clicking link leads to page with garbled content)

	Note, however, that my fix for 3050437 relies on this bug remaining unfixed:

	Radar 3102332 (Square bracket characters "sneak through" CFURL illegal character checks)

        * kwq/KWQKURL.mm:
        (KURL::getNSURL)

2002-11-15  Darin Adler  <darin@apple.com>

	- fixed 3027460 -- text areas don't have focus rectangles
	- fixed 2937204 -- text areas have solid black borders

        * kwq/KWQSignal.mm: (KWQSignal::disconnect):
	Add a special case so we don't hear about finishedParsing all the time.

        * kwq/KWQTextArea.mm:
        (-[KWQTextArea initWithFrame:]): Use a bezel border, not a line border.
        (-[KWQTextArea getCursorPositionAsIndex:inParagraph:]): Fix bug where it would
	return a bogus value for an empty text area.
        (-[KWQTextArea setCursorPositionToIndex:inParagraph:]): Use setSelectedRange:
	ratherr than setMarkedText:selectedRange:.
        (-[KWQTextArea drawRect:]): Draw a focus ring if our text view is first responder.
        (-[KWQTextArea _KWQ_setKeyboardFocusRingNeedsDisplay]): Added.
        (-[KWQTextAreaTextView becomeFirstResponder]): Call _KWQ_setKeyboardFocusRingNeedsDisplay.
        (-[KWQTextAreaTextView resignFirstResponder]): Call _KWQ_setKeyboardFocusRingNeedsDisplay.
        (-[NSView _KWQ_setKeyboardFocusRingNeedsDisplay]): Calls the same thing on parent.

        * WebCore.pbproj/project.pbxproj: PB is a cruel master.

2002-11-15  Maciej Stachowiak  <mjs@apple.com>

        * khtml/html/html_formimpl.cpp:
        (HTMLInputElementImpl::attach): Removed a stray printf.

2002-11-14  Darin Adler  <darin@apple.com>

	- fixed most of the problems with OPTGROUP

        * khtml/html/htmlparser.cpp: (KHTMLParser::insertNode):
	Make OPTGROUPs pop out of other unclosed OPTGROUPs, not just out of options.

        * kwq/KWQListBox.h: Add private member function.
        * kwq/KWQListBox.mm:
        (QListBox::insertItem): Use shared insertItem function.
        (QListBox::insertGroupLabel): Create an attributed string for the group label,
	with bold font.
        (-[KWQListBoxTableViewDelegate tableView:shouldSelectRow:]): Return YES only
	for the plain strings, that way you can't select the group labels.

        * WebCore.pbproj/project.pbxproj: Let PB do its thing.

2002-11-14  David Hyatt  <hyatt@apple.com>

	Fix spinner.com mislayout on the PLT.  Make sure 
	<input type=image> honors the width attribute and
	make sure that its render object calls updateFromElement.
	
        * khtml/html/html_formimpl.cpp:
        (HTMLInputElementImpl::parseAttribute):
        (HTMLInputElementImpl::attach):

2002-11-14  David Hyatt  <hyatt@apple.com>

	Move text measurement and layout beyond onload.  This
	shoudl speed up i-bench substantially and morrison's
	PLT test slightly.

	Also allow <table>s as children of <p> and <h1>-<h6>.
	This fixes floats on slashdot.org (the left side) and
	the floating tables in articles on wired.com.
	
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::HTMLDocumentImpl):
        (HTMLDocumentImpl::close):
        * khtml/html/html_documentimpl.h:
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):

2002-11-14  Richard Williamson  <rjw@apple.com>

        Fixed 3099505.  With the recent white space changes, multiple slaves may
        be created for contiguous text on the same line.  The fix changes the
        iteration order of over the slave array.  Now, when searching for the end
        point of a line we'll always find the last slave on a line first.
        
        * khtml/khtml_part.cpp:
        (lastSlaveAt):

2002-11-14  Darin Adler  <darin@apple.com>

	- fixed 3095854 -- small select boxes get no scrollbar

        * kwq/KWQListBox.mm: (QListBox::sizeForNumberOfLines):
	Always use a minimum of 4 lines.

=== Alexander-32 ===

2002-11-14  Darin Adler  <darin@apple.com>

	- fixed 3099240 -- REGRESSION: repro assert d->m_doc->parsing

	Don't force all redirects to be reloads, because the ones from JavaScript must
	not be. Maybe a better solution post-Alex-32 will be to pass a flag that distinguishes
	redirects from other location changes.

        * khtml/khtml_part.cpp: (KHTMLPart::slotRedirect): Don't ignore the anchor when
	comparing URLs to see if they should be a reload. We'll still do a reload if the URLs
	are actually equal, but if they differ in anchor we will just go to the anchor.
	This is the bug fix.

        * kwq/WebCoreBridge.h: Add reload parameter.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge openURL:reload:headers:]): Stuff the reload
	parameter into the URLArgs.

2002-11-14  Darin Adler  <darin@apple.com>

	- fixed 3100235 -- nil-deference in khtml::RenderTable at money.cnn.com

        * kwq/WebCoreBridge.h: Add needsLayout.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge needsLayout]): Return true if the render
	tree root says "layouted" is false. It would be more elegant to use more of this
	WebCore layout logic and have less of our own on the WebKit side.

        * WebCore.pbproj/project.pbxproj: Oh, that Project Builder.

2002-11-13  Darin Adler  <darin@apple.com>

	- fixed 3100895 -- REGRESSION: Crash (was assertion) on http://www.w3.org/Style/CSS/

        * khtml/rendering/render_text.h: Add an optional arena parameter to deleteSlaves.
        * khtml/rendering/render_text.cpp:
        (RenderText::detach): Pass the render arena in to deleteSlaves.
        (RenderText::deleteSlaves): Use the passed-in arena.

2002-11-13  Darin Adler  <darin@apple.com>

	- fixed another crash on http://www.w3.org/Style/CSS/, but still not done

        * khtml/rendering/render_box.cpp: (RenderBox::setStyle): Call renderArena()
	from RenderObject rather than going at the document directly. Safer because
	it works even when we don't have a node yet.
        * khtml/rendering/render_flow.cpp: (RenderFlow::addChild): Ditto.
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paint): Ditto.
        (RenderLayer::nodeAtPoint): Ditto.
        (RenderLayer::constructZTree): Ditto.
        * khtml/rendering/render_list.cpp:
        (RenderListItem::setStyle): Ditto.
        * khtml/rendering/render_text.cpp:
        (RenderText::deleteSlaves): Ditto.
        (RenderText::position): Ditto. This is the one that actually crashed.

        * khtml/misc/makeattrs: Fixed handling of failure case.
        * khtml/misc/maketags: Ditto.

        * WebCore.pbproj/project.pbxproj: Project Builder wanted to touch this.

2002-11-13  Darin Adler  <darin@apple.com>

	- fixed 3100895 -- REGRESSION: Assertion on http://www.w3.org/Style/CSS/

	A few arena-related fixes.

        * khtml/rendering/bidi.h: Don't define the operator new without the arena parameter.
	That way, we get a link failure if we use it by accident, rather than an assert at runtime.
	It would be even better to get a compile-time error, but I don't know how to make that happen.
        * khtml/rendering/render_layer.h: Ditto.
        * khtml/rendering/render_object.h: Ditto.
        * khtml/rendering/render_text.h: Ditto.

        * khtml/rendering/render_container.cpp:
        (RenderContainer::addChild): Create the RenderTable with the appropriate arena.
        (RenderContainer::insertPseudoChild): Create the RenderFlow objects with the appropriate arena.

        * khtml/rendering/render_text.cpp: (RenderText::deleteSlaves): Don't try to get the arena
	when there are no slaves. This can happen after the element is nil, and in that case we will
	do a nil-dereference.

2002-11-13  Darin Adler  <darin@apple.com>

        * kwq/KWQLineEdit.mm: (QLineEdit::sizeForCharacterWidth):
	Use the "0" instead of the "x" as the canonical character for width.
	This is slightly wider and is better for credit card numbers, for example.

        * WebCore.pbproj/project.pbxproj: Tweak.

2002-11-13  Darin Adler  <darin@apple.com>

	- fixed 3083982 -- Logging into AOL gives null view

	Turns out AOL was using a refresh header, which we were not supporting.

        * khtml/khtml_part.h: Declare receivedFirstData, a private member function.
        * khtml/khtml_part.cpp:
        (KHTMLPart::receivedFirstData): Separate out the part of slotData we
	want to share, which really seems kinda separate anyway.
        (KHTMLPart::slotData): More of the same.

        * kwq/KWQKHTMLPart.h: Declare addMetaData.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::slotData): Call receivedFirstData instead of doing the same
	thing ourselves.
        (KWQKHTMLPart::addMetaData): Added. Puts metadata into the job.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Fix bug where this was calling
	openURL: but meant to call loadURL:.

        * kwq/WebCoreBridge.h: Add headers to openURL method. Remove setContentType.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge openURL:withHeaders:]): Handle Content-Type and Refresh.
	This method is big enough that I should probably move the guts to KWQKHTMLPart.

	- other things

        * kwq/KWQListImpl.mm: (KWQListImpl::~KWQListImpl): I overlooked something
	while doing my "bug fix" in here a while back. Change an assignment statement
	to an assert.

2002-11-13  David Hyatt  <hyatt@apple.com>

	Fix for floats. Force relayout if collapsing margins
	have to adjust the position of an object.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-11-13  David Hyatt  <hyatt@apple.com>

	Rewrite cellpadding to not use the style system at all and
	to make table cells just get the padding from the table
	itself (overriding style).
	
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableElementImpl::HTMLTableElementImpl):
        (HTMLTableElementImpl::attach):
        (HTMLTableElementImpl::parseAttribute):
        (HTMLTableCellElementImpl::init):
        * khtml/html/html_tableimpl.h:
        * khtml/rendering/bidi.cpp:
        (RenderFlow::layoutInlineChildren):
        * khtml/rendering/render_box.cpp:
        (RenderBox::contentWidth):
        (RenderBox::contentHeight):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::leftOffset):
        (RenderFlow::rightOffset):
        (RenderFlow::calcMinMaxWidth):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_table.cpp:
        (RenderTable::RenderTable):
        (RenderTableCell::paddingTop):
        (RenderTableCell::paddingBottom):
        (RenderTableCell::paddingLeft):
        (RenderTableCell::paddingRight):
        * khtml/rendering/render_table.h:

2002-11-13  Ken Kocienda  <kocienda@apple.com>

	Bump WebCore cache to 4 MB (was 1 MB).

        * khtml/misc/loader.cpp

2002-11-13  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3050447 - Policy handlers have no way of telling client
	that the proposed navigation is a form post
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::submitForm): Call kwq->submitForm
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::openURL): Adjusted for bridge API change.
        (KWQKHTMLPart::openURLRequest): Removed POST handling.
	(KWQKHTMLPart::submitForm): Added this back, because we need to
	know what URL navigations are caused by form submission, even if
	they are not POSTs.
        (KWQKHTMLPart::urlSelected): Adjusted for bridge API change.
        * kwq/WebCoreBridge.h: Add triggeringEvent: parameter to postURL:
	and isFormSubmission: parameter to loadURL:.

2002-11-12  David Hyatt  <hyatt@apple.com>

	Fix for 3032869, the background image for the body was being
	propagated up to the root properly but was not being tiled over
	the whole canvas.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::printBackground):
        * khtml/rendering/render_html.cpp:
        (RenderHtml::printBoxDecorations):

2002-11-12  David Hyatt  <hyatt@apple.com>

	Fix the top of moveabletype.org.  The maxwidth/minwidth
	calculation for blocks with inline content did not properly
	deal with margins and padding on inline elements like <a>.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::calcInlineMinMaxWidth):

2002-11-12  David Hyatt  <hyatt@apple.com>

	Fix for 2953367, padding is incorrectly inherited into table cells
	and also incorrectly overrides cellpadding on the table itself.
	Fixes dailyf1.com.
	
        * khtml/css/html4.css:
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableElementImpl::parseAttribute):
        (HTMLTableCellElementImpl::init):
        * khtml/html/html_tableimpl.h:

2002-11-12  David Hyatt  <hyatt@apple.com>

	For now make text/xml files use HTML parsing/documents.
	This avoids the infinite loop we get into when loading
	text/xml.  If/when we finally support XML, we can undo
	this change.
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::begin):

2002-11-12  David Hyatt  <hyatt@apple.com>

	Fix for 3086321, stylesheets not loading if titles are
	specified.  Note that 4 of the pages on the PLT were
	affected by this, so I fully expect a slight performance
	degradation (the boost from the regression was artificial).
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::recalcStyleSelector):

2002-11-12  Richard Williamson  <rjw@apple.com>

        Oops, removed debugging.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):

2002-11-12  Richard Williamson  <rjw@apple.com>

        Implemented letter-spacing and word-spacing CSS properties.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):
        (Font::floatWidth):
        (Font::floatCharacterWidths):
        * kwq/KWQFontMetrics.h:
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::floatCharacterWidths):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        * kwq/WebCoreTextRenderer.h:

2002-11-12  David Hyatt  <hyatt@apple.com>

	Revert floats so that they don't use layers any more.
	Floats have to be able to paint in between the background
	and foreground of inlines, so they can't have layers.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::printObject):
        (RenderFlow::paintFloats):
        (RenderFlow::addOverHangingFloats):
        (RenderFlow::nodeAtPoint):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        * khtml/rendering/render_list.cpp:
        (RenderListItem::printObject):

2002-11-12  Darin Adler  <darin@apple.com>

        * kwq/KWQCursor.mm: (QCursor::QCursor): Use nil instead of [NSCursor arrowCursor].
	This will probably fix the performance regression.

2002-11-12  Darin Adler  <darin@apple.com>

	- fixed 3080250 -- Hands-free crash at wired.com in
	KHTMLPart::slotChildStarted

        * kwq/KWQListImpl.mm:
        (KWQListImpl::~KWQListImpl): Set the node of each iterator to NULL too,
	not just the list. This is the bug fix for the bug above.
        (KWQListIteratorImpl::toFirst): Check for list of NULL.
        (KWQListIteratorImpl::toLast): ditto.

        * kwq/KWQSlot.mm: Tweaks.

2002-11-12  David Hyatt  <hyatt@apple.com>

	This patch lands a rewrite of whitespace-handling in the
	layout engine and adds support for the CSS2 white-space
	property.  

	It also includes a rewrite of inlines' min/max width 
	calculations (for both flow inlines and raw text).

	A problem with <form> margins has been fixed (this is a
	regression I caused with my collapsing margin checkin).

        * WebCore.pbproj/project.pbxproj:
        * khtml/css/html4.css:
        * khtml/html/dtd.cpp:
        (DOM::checkChild):
        * khtml/html/html_baseimpl.cpp:
        (HTMLBodyElementImpl::attach):
        (HTMLFrameElementImpl::attach):
        (HTMLFrameSetElementImpl::attach):
        (HTMLHtmlElementImpl::attach):
        (HTMLIFrameElementImpl::attach):
        * khtml/html/html_formimpl.cpp:
        (HTMLFormElementImpl::HTMLFormElementImpl):
        (HTMLInputElementImpl::attach):
        (HTMLSelectElementImpl::attach):
        (HTMLTextAreaElementImpl::attach):
        * khtml/html/html_formimpl.h:
        * khtml/html/html_imageimpl.cpp:
        (HTMLImageElementImpl::attach):
        * khtml/html/html_inlineimpl.cpp:
        (HTMLBRElementImpl::attach):
        * khtml/html/html_objectimpl.cpp:
        (HTMLAppletElementImpl::attach):
        (HTMLEmbedElementImpl::attach):
        (HTMLObjectElementImpl::attach):
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::reset):
        (KHTMLParser::parseToken):
        (KHTMLParser::insertNode):
        (KHTMLParser::popBlock):
        (KHTMLParser::popOneBlock):
        * khtml/html/htmlparser.h:
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::addPending):
        (HTMLTokenizer::write):
        * khtml/misc/arena.cpp: Added.
        (CeilingLog2):
        (InitArenaPool):
        (ArenaAllocate):
        (ArenaGrow):
        (FreeArenaList):
        (ArenaRelease):
        (FreeArenaPool):
        (FinishArenaPool):
        (ArenaFinish):
        * khtml/misc/arena.h: Added.
        * khtml/rendering/bidi.cpp:
        (BidiIterator::detach):
        (throw):
        (BidiIterator::operator delete):
        (appendRunsForObject):
        (appendRun):
        (RenderFlow::bidiReorderLine):
        (deleteMidpoints):
        (RenderFlow::layoutInlineChildren):
        (RenderFlow::findNextLineBreak):
        * khtml/rendering/bidi.h:
        * khtml/rendering/render_arena.cpp: Added.
        (RenderArena::RenderArena):
        (RenderArena::~RenderArena):
        (RenderArena::allocate):
        (RenderArena::free):
        * khtml/rendering/render_arena.h: Added.
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        (RenderBox::~RenderBox):
        (RenderBox::detach):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_br.cpp:
        (RenderBR::RenderBR):
        * khtml/rendering/render_container.cpp:
        (RenderContainer::~RenderContainer):
        (RenderContainer::detach):
        * khtml/rendering/render_container.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::setStyle):
        (RenderFlow::layout):
        (RenderFlow::calcInlineMinMaxWidth):
        (RenderFlow::calcBlockMinMaxWidth):
        (RenderFlow::calcMinMaxWidth):
        (RenderFlow::addChild):
        (RenderFlow::makeChildrenNonInline):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_html.cpp:
        (RenderHtml::RenderHtml):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::~RenderLayer):
        (throw):
        (RenderLayer::operator delete):
        (RenderLayer::detach):
        (RenderLayer::paint):
        (RenderLayer::nodeAtPoint):
        (RenderLayer::constructZTree):
        (RenderLayer::RenderLayerElement::operator delete):
        (RenderLayer::RenderLayerElement::detach):
        (RenderLayer::RenderZTreeNode::operator delete):
        (RenderLayer::RenderZTreeNode::detach):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_list.cpp:
        (RenderListItem::setStyle):
        * khtml/rendering/render_object.cpp:
        (throw):
        (RenderObject::operator delete):
        (RenderObject::createObject):
        (RenderObject::renderArena):
        (RenderObject::detach):
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::detach):
        * khtml/rendering/render_replaced.h:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::RenderRoot):
        * khtml/rendering/render_table.cpp:
        (RenderTable::addChild):
        (RenderTable::calcWidth):
        (RenderTable::setCellWidths):
        (RenderTableSection::addChild):
        (RenderTableRow::addChild):
        * khtml/rendering/render_text.cpp:
        (TextSlave::detach):
        (throw):
        (TextSlave::operator delete):
        (TextSlaveArray::TextSlaveArray):
        (RenderText::RenderText):
        (RenderText::~RenderText):
        (RenderText::detach):
        (RenderText::deleteSlaves):
        (RenderText::trimmedMinMaxWidth):
        (RenderText::calcMinMaxWidth):
        (RenderText::position):
        * khtml/rendering/render_text.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::~DocumentImpl):
        (DocumentImpl::attach):
        (DocumentImpl::detach):
        * khtml/xml/dom_docimpl.h:
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::detach):
        (NodeImpl::isReadOnly):
        (NodeImpl::previousRenderer):
        * khtml/xml/dom_nodeimpl.h:
        * khtml/xml/dom_stringimpl.cpp:
        * khtml/xml/dom_stringimpl.h:
        * khtml/xml/dom_textimpl.cpp:
        (CharacterDataImpl::containsOnlyWhitespace):
        (TextImpl::attach):
        * khtml/xml/dom_textimpl.h:

2002-11-12  Darin Adler  <darin@apple.com>

	- fixed 3094819 -- Crash in -[KWQObjectTimerTarget timerFired]

        * kwq/KWQObject.mm: (QObject::~QObject): Call the _destroyed signal.
        (QObject::killTimers): Simplify the code a bit using makeObjectsPerformSelector:.

2002-11-12  Darin Adler  <darin@apple.com>

	- fixed 3079499 -- blank page at http://www.sonyericsson.com/T68i/

        * khtml/misc/loader.cpp:
        (CachedCSSStyleSheet::checkNotify): Copy the clients list before iterating
	over it, since clients can move around in the list or be removed.
        (CachedScript::checkNotify): Ditto.
        (CachedImage::do_notify): Ditto.
        (CachedImage::movieStatus): Ditto.

	- fixed double calls to openURL I noticed

        * khtml/khtml_part.cpp: (KHTMLPart::processObjectRequest):
	Don't call openURL here at all. That happens indirectly as a result
	of the load we kick off.

        * kwq/KWQKHTMLPart.mm: Tweaks.

2002-11-12  Darin Adler  <darin@apple.com>

	- fixed 3083043 -- Alex doesn't decode % sequences in javascript: URLs

	Some places here did KURL::decode_string, but others didn't.

        * khtml/khtml_part.cpp:
        (KHTMLPart::slotShowDocument): Added call to KURL::decode_string.
        (KHTMLPart::overURL): Ditto.
        (KHTMLPart::urlSelected): Ditto.
        (KHTMLPart::requestFrame): Ditto.
        (KHTMLPart::slotChildURLRequest): Ditto.

2002-11-11  Darin Adler  <darin@apple.com>

        * kwq/KWQWidget.mm: (QWidget::setCursor): Remove printf I left
	in by accident.

2002-11-11  Darin Adler  <darin@apple.com>

	- tighten up cursor handling a bit more

        * kwq/KWQWidget.mm:
        (QWidget::setCursor): Use setDocumentCursor: instead of our own protocol.
        (QWidget::cursor): Use documentCursor instead of storing our own cursor.

        * kwq/WebCoreFrameView.h: Remove setCursor: method.

2002-11-11  Darin Adler  <darin@apple.com>

	- fixed 3084704 -- crash in HTMLTokenizer on page with JavaScript
	HTMLDocument::Close inside a <script>

	I think it's going to work this time. The key was to hook up the
	KHTML submitFormAgain machinery.

        * khtml/khtml_part.cpp: (KHTMLPart::submitForm): Take out the APPLE_CHANGES
	ifdef that was disabling the submitFormAgain logic.
        * kwq/KWQKHTMLPart.h: Remove submitForm(), because openURLRequest() handles it fine.
        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::openURLRequest): Move the logic for handling
	POST here from submitForm() and remove submitForm().

        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Add support for the submitFormAgain slot.
        (KWQSlot::call): Ditto.

2002-11-11  Darin Adler  <darin@apple.com>

	- fixed 3092421 -- javascript: URL that opens window crashes Alex if typed into empty window

        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::KWQKHTMLPart): Set _ownsView to false.
        (KWQKHTMLPart::~KWQKHTMLPart): Delete the view if we own it. Also release
	_currentEvent to fix a leak.
        (KWQKHTMLPart::setView): Delete the old view if we own it. Also, set the
	_ownsView flag.
        (KWQKHTMLPart::createDummyDocument): Create a dummy view too.

        * kwq/KWQDummyView.h: Added.
        * kwq/KWQDummyView.m: Added.
        * WebCore.pbproj/project.pbxproj: Added KWQDummyView.

        * kwq/WebCoreBridge.h: Remove bridgeOwnsKHTMLView and currentEvent.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge createKHTMLViewWithNSView:marginWidth:marginHeight:]):
	Pass true to setView instead of setting bridgeOwnsKHTMLView.
        (-[WebCoreBridge removeFromFrame]): Just call setView on the part. It
	knows how to handle ownership now.
        (-[WebCoreBridge installInFrame:]): Call setOwnsView instead of setting
	bridgeOwnsKHTMLView.

2002-11-11  Trey Matteson  <trey@apple.com>

        * khtml/khtml_part.cpp:
        (KHTMLPart::requestFrameName):  Call through bridge to get generated frame name.
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::generateFrameName):  New call that just forwards through the bridge.
        * kwq/WebCoreBridge.h:

2002-11-11  Darin Adler  <darin@apple.com>

	- fixed 3097253 -- text tagged <small> inside <h1> is too small

        * khtml/css/html4.css: Change BIG to use "font-size: larger" rather
	than "font-size: large" and SMALL to use "font-size: smaller" rather
	than "font-size: small".

2002-11-11  Darin Adler  <darin@apple.com>

        * kwq/WebCoreBridge.h: Remove unused modifierTrackingEnabled method.

2002-11-08  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3096451 - REGRESSION: clicking on link to open window only
	works when pop-up suppression is off
	
        * khtml/ecma/kjs_binding.cpp:
        (ScriptInterpreter::ScriptInterpreter): Initialize m_timerCallback
	to false.

b2002-11-08  Darin Adler  <darin@apple.com>

        * kwq/KWQComboBox.mm: Bump fudge factor up one pixel. You could see
	it was wrong with strings like "0".

2002-11-08  Darin Adler  <darin@apple.com>

	- fixed 3090452 -- REGRESSION: orbitz Box extends way over margins

        * kwq/KWQComboBox.h: Added _width and _widthGood.
        * kwq/KWQComboBox.mm:
        (QComboBox::QComboBox): Set _widthGood to false.
        (QComboBox::insertItem): Set _widthGood to false.
        (QComboBox::sizeHint): Compute the width by measuring the text ourselves.
	Turns out the cell isn't helpful for that.
        (QComboBox::clear): Set _widthGood to false.

2002-11-08  Richard Williamson   <rjw@apple.com>

        Cleanup of fix to 3083281.  Never call stopAnimating from
        QPixmap's destructor.  With the fix it wouldn't have been
        called anyway.
        
        * kwq/KWQPixmap.mm:
        (QPixmap::~QPixmap):

2002-11-08  Darin Adler  <darin@apple.com>

        * kwq/WebCoreBridge.mm: (attributedString): Remove some dead code.

2002-11-07  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::slotData):
	Add an assert in the hopes of catching bug 3084704 a little earlier.

2002-11-07  Richard Williamson  <rjw@apple.com>

        Don't stop animating unless we're the last referee. (3083281)
        
        * kwq/KWQPixmap.mm:
        (QPixmap::~QPixmap):

=== Alexander-31 ===

2002-11-06  Richard Williamson  <rjw@apple.com>

        Use our notion of unicode whitespace from lookup tables
        and isspace for latin1.  This is more correct than CF.
        Fixed issues Dave ran into with whitespace calculations.
        
        * kwq/KWQChar.mm:
        (QChar::isSpace):

2002-11-05  Darin Adler  <darin@apple.com>

	- fixed 3092722 -- assertion failed

        * kwq/KWQResourceLoader.mm: (-[KWQResourceLoader reportError]):
	Removed the assertion. It wasn't needed.

2002-11-05  Darin Adler  <darin@apple.com>

	- re-fixed 3070484 -- icon rollovers are very slow on Mac OS X website

	Had to roll back some of the files I changed yesterday. I had missed the
	one line of useful code among much stuff we don't need.

        * khtml/khtml_part.cpp:
        (KHTMLPart::init):
        (KHTMLPart::~KHTMLPart):
        (KHTMLPart::slotLoaderRequestStarted):
        (KHTMLPart::slotLoaderRequestDone):
        * kwq/KWQSignal.h:
        * kwq/KWQSignal.mm:
        (KWQSignal::call):
        * kwq/KWQSignalStubs.mm:
        (Loader::requestDone):
        (Loader::requestFailed):
        (Loader::requestStarted):
        * kwq/KWQSlot.h:
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot):
        (KWQSlot::call):
	Just roll back all the changes from my 3091714 check-in below, except
	for the bug fix itself in loader.cpp and KWQResourceLoader.mm.

2002-11-05  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3027404 - pop-up ads not always suppressed
	
        * khtml/ecma/kjs_binding.cpp:
        (ScriptInterpreter::isWindowOpenAllowed): Don't allow opening if
	we are in a timer callback - for reasons unexplained this will
	always show up as an inline script.
        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_window.cpp:
        (ScheduledAction::execute): Note that we're in a timer callback.

2002-11-04  Richard Williamson  <rjw@apple.com>

        Changes to support cursive letter forms.
        
        * kwq/KWQChar.mm:
        * kwq/WebCoreUnicode.h:

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

	- fixed 3091714 -- reproducible assert cachedObject->response
	in KWQCheckCacheObjectStatus

        * khtml/misc/loader.cpp: (Loader::slotFinished):
	For APPLE_CHANGES, don't finish the load if it's an error.

        * kwq/KWQResourceLoader.mm:
        (-[KWQResourceLoader finishJobAndHandle]): Shared code for the
	three following methods.
        (-[KWQResourceLoader cancel]): Use setError(1) again instead of
	just keeping the load around forever.
        (-[KWQResourceLoader reportError]): Ditto.
        (-[KWQResourceLoader finish]): Use finishJobAndHandle to share
	code with the two above.

        * khtml/khtml_part.cpp:
        (KHTMLPart::init): Put the slotLoaderRequestStarted and
	slotLoaderRequestDone connect lines inside ifdefs.
        (KHTMLPart::~KHTMLPart): Same for disconnect.

        * kwq/KWQSignal.h: Remove code for the DocLoader signals.
        * kwq/KWQSignal.mm: (KWQSignal::call): Ditto.
        * kwq/KWQSignalStubs.mm:
        (Loader::requestDone): Ditto.
        (Loader::requestFailed): Ditto.
        (Loader::requestStarted): Ditto.
        * kwq/KWQSlot.h: Ditto.
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Ditto.
        (KWQSlot::call): Ditto.

2002-11-04  Maciej Stachowiak  <mjs@apple.com>

	Changes to send NSEvents all the way through WebCore and then pass
	them back out to WebKit, so that click policy can have a
	WebResourceRequest added.
	
        * kwq/KWQKHTMLPart.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::KWQKHTMLPart):
        (KWQKHTMLPart::openURL):
        (KWQKHTMLPart::openURLRequest):
        (KWQKHTMLPart::urlSelected):
        (KWQKHTMLPart::submitForm):
        (KWQKHTMLPart::createDummyDocument):
        (KWQKHTMLPart::setCurrentEvent):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):

2002-11-03  Darin Adler  <darin@apple.com>

	- fixed 3091300 -- "prelighting" on local page is still slow, despite recent bug fix

	Turns out all updating would be slow if any resources on the page failed to load.

        * kwq/WebCoreResourceLoader.h: Add reportError, distinct from
	cancel and finish.
        * kwq/KWQResourceLoader.mm: (-[KWQResourceLoader reportError]):
	Set the error boolean on the job and then call through to [finish].

2002-11-03  Darin Adler  <darin@apple.com>

	- fixed 3091275 -- can't type into Answer field in RealOne Player order form

        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::updateFromElement): Treat 0 as max (1024) as other browsers do.
        (RenderFileButton::updateFromElement): Ditto, although this is in !APPLE_CHANGES code
	that we don't use in WebCore.

2002-11-01  Darin Adler  <darin@apple.com>

	- applied the same "subclass responsibility" pattern here as in
	some of the other WebCore classes

        * kwq/WebCoreImageRendererFactory.h: Move the subclass responsibility into a protocol.
        * kwq/WebCoreImageRendererFactory.m: Remove now-unneeded stubs.

2002-11-01  Richard Williamson   <rjw@apple.com>

        Removed old implementation.
        
        * kwq/KWQChar.mm:
        (QChar::direction):
        
        Renamed JoiningCenter -> JoiningCausing.
        
        * kwq/WebCoreUnicode.h:

2002-11-01  Darin Adler  <darin@apple.com>

	- fixed 3062598 -- meta refresh of 0.1s fails

	KHTML was using an integer for the delay.

        * khtml/khtml_part.h: Make scheduleRedirection take a double.
        * khtml/khtmlpart_p.h: Make m_delayRedirect be a double.
        * khtml/khtml_part.cpp:
        (KHTMLPart::slotData): Use a double when parsing meta refresh.
        (KHTMLPart::checkCompleted): Cast to int when passing to timer start.
        (KHTMLPart::scheduleRedirection): Cast to int when passing to timer
	start; also check for absurd values and do nothing.
        (KHTMLPart::slotParentCompleted): Cast to int when passing to timer start.

        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::processHttpEquiv):
	Use a double when parsing meta refresh.

        * kwq/KWQKDebug.h: Add overloads for unsigned int and double to keep us
	compiling now that we use a double in one place.

2002-11-01  Darin Adler  <darin@apple.com>

	- fixed 3090249 -- random crash on page load
	- fixed 3090286 -- assert _job in KWQResourceLoader cancel

        * kwq/KWQResourceLoader.mm: (-[KWQResourceLoader cancel]):
	This function needs to handle the case where the load is already cancelled.
	I think this also caused Avie's crash.

2002-10-31  Darin Adler  <darin@apple.com>

	- fixed huge leak when doing page load test

        * khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_binding.cpp: Remove ScriptInterpreter::mark().
	We don't want to mark the elements of m_domObjects, because we don't want
	to keep them around the entire lifetime of the interpreter. This is fine
	because we already have forgetDOMObject(), which takes care of when they
	are deallocated.

        * khtml/ecma/kjs_dom.cpp:
        * khtml/ecma/kjs_dom.h:
        * khtml/ecma/kjs_html.cpp:
        * khtml/ecma/kjs_html.h:
	Changed lots of parameters to pass by const reference for a bit of a code
	size and performance gain.

2002-10-31  Richard Williamson  <rjw@apple.com>

        Turned on use of lookup tables.
        
        * kwq/KWQChar.mm:
        (QChar::direction):
        (QChar::mirrored):
        (QChar::mirroredChar):

2002-10-31  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3075803 - yahoo customize layout - delete, ordering of items doesn't work
	
        * khtml/html/html_formimpl.h:
        * khtml/html/html_formimpl.cpp:
        (HTMLSelectElementImpl::recalcStyle): New method to insure the
	select element updates if the contents of the option subelements
	are changed.

=== Alexander-30 ===

2002-10-30  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3049853 - Javascript: setInterval incorrectly acts as single shot
	
        * kwq/KWQObject.mm:
        (QObject::startTimer): Set a recurring timer instead of
	single-shot, to match QObject semantics.

2002-10-30  Richard Williamson  <rjw@apple.com>

        More work on bidi and contextual forms.
        Table lookup code is up in WebKit. Function
        pointers are used to isolate WebCore from private
        implementation in WebKit.  Needs to be fast, so
        the usual ObjC abstraction won't work.
        
        * WebCore.exp:
        * WebCore.pbproj/project.pbxproj:
        * kwq/KWQChar.mm:
        (QChar::direction):
        * kwq/KWQString.h:
        * kwq/WebCoreUnicode.cpp: Added.
        * kwq/WebCoreUnicode.h: Added.

2002-10-30  Darin Adler  <darin@apple.com>

	- fixed crash when you open an empty window and just hit tab, tab, tab

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::nextKeyViewInFrame): Check for nil.

2002-10-30  Darin Adler  <darin@apple.com>

	- fixed 3083982 -- Logging into AOL gives null view, crash

	I fixed the crash part. Not the "gives null view" part.
	The key was to disentangle the references and lifetimes of the transfer job class,
	and the resource loader object that KWQ uses to connect it with WebKit.

        * kwq/KWQKJobClasses.h: Change the job to keep a loader reference, not a
	handle reference. The job needs to inform the loader when it's being deallocated.
        * kwq/KWQKJobClasses.mm: Use jobWillBeDeallocated instead of cancel when the
	job is deallocated.

        * kwq/KWQLoader.mm: (KWQServeRequest): Use KWQResourceLoader, now with a home in
	a separate file.

        * kwq/KWQResourceLoader.h: Added.
        * kwq/KWQResourceLoader.mm: Added.
        * WebCore.pbproj/project.pbxproj: Added KWQResourceLoader files.

2002-10-30  Darin Adler  <darin@apple.com>

	- fixed 3086564 -- REGRESSION: meta-refresh to the same page doesn't refresh

	The key is to get args.reload passed through to the bridge.

        * kwq/WebCoreBridge.h: Add reload parameter to loadURL:.

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPart::openURL): Pass NO for reload.
        (KWQKHTMLPart::openURLRequest): Pass args.reload for reload.
        (KWQKHTMLPart::urlSelected): Pass args.reload for reload.
        (KWQKHTMLPart::submitForm): Pass args.reload for reload.
        
	- fixed a memory problem with the use of NSBrowser in KWQListBox
        - fixed 2863040 -- multiple default items in select list not selected

	Switched to use NSTableView instead of NSBrowser. This should also create
	a measurable speedup due to other changes to this class.

        * kwq/KWQListBox.h: Remove firstItem(), the insertItem() that takes a QListBoxItem
	parameter, and deleteItems(). Add _items, _width, and _widthGood. Removed _head.
	Removed the QListBoxItem and QListBoxText classes.
        * kwq/KWQListBox.mm:
        (QListBox::QListBox): Create a KWQListBoxScrollView and put an NSTableView
	inside it. Also create an NSMutableArray to hold the items.
        (QListBox::~QListBox): Disconnect the table view from the delegate before
	releasing it. Also release the items array.
        (QListBox::count): Return the array count.
        (QListBox::clear): Do a reloadData here instead of loadColumnZero.
        (QListBox::setSelectionMode): Update for table view.
        (QListBox::insertItem): Update for table view.
        (QListBox::insertGroupLabel): Just calls insertItem for now.
        (QListBox::endBatchInsert): Update for table view.
        (QListBox::setSelected): Update for table view, including support for multiple
	selection.
        (QListBox::isSelected): Update for table view.
        (QListBox::sizeForNumberOfLines): Use the table view cell for width, and
	cache it so we don't have to measure all the strings over and over again.
        (-[KWQListBoxScrollView setFrameSize:]): Resize the table view column whenever
	the entire scroll view is resized.
        (-[KWQListBoxTableViewDelegate initWithListBox:]): Store box pointer and
        pointer to items array.
        (-[KWQListBoxTableViewDelegate numberOfRowsInTableView:]): Return count.
        (-[KWQListBoxTableViewDelegate tableView:objectValueForTableColumn:row:]):
	Get the data from the items array.
        (-[KWQListBoxTableViewDelegate tableViewSelectionDidChange:]): Call both the
	selection-changed signal and the clicked signal.

        * khtml/rendering/render_form.cpp: (RenderSelect::updateFromElement):
	Get rid of the one place here that gets at a list box item by calling a KWQ
	function insertGroupLabel instead of making a QListBoxText. Also call
        beginBatchInsert() before clear() for a slight additional speed boost.

	- fixed 3067572 -- javascript: URLs typed into page address field or
	bookmarks don't work in empty window

	We needed a document for DOM, so we make a dummy one. This works for an empty
	window, and also for a window with non-HTML content.

        * kwq/KWQKHTMLPart.h: Added createDummyDocument().
        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::createDummyDocument): Create an empty
	DOM document if there isn't one already.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge stringByEvaluatingJavaScriptFromString:]): Call the new
	createDummyDocument() instead of checking and doing nothing if there is no
	document present when this is called.

	- other stuff

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge DOMDocument]): Removed a stray printf.

        * kwq/KWQTextArea.mm: Tweaked code a little.

2002-10-28  Darin Adler  <darin@apple.com>

        * khtml/khtml_part.cpp: (KHTMLPart::checkCompleted):
	Update so it handles nil for the view.

2002-10-28  Darin Adler  <darin@apple.com>

	- fixed 3070484 -- icon rollovers are very slow on Mac OS X website

	The problem was simply that the part didn't know it was complete.
	To let it know, I hooked up some loader signals, and now it works.

        * khtml/khtml_part.cpp:
        (KHTMLPart::init): Create the KWQKHTMLPart a little earlier so we have
	a chance to initialize the cache before it's used.
        (KHTMLPart::slotLoaderRequestStarted): Take this out of ifdefs.
        (KHTMLPart::slotLoaderRequestDone): Ditto.

        * khtml/misc/loader.h: Add a KWQLoader pointer to the loader.
        * khtml/misc/loader.cpp:
        (Loader::Loader): Create a KWQLoader;
        (Loader::~Loader): Destroy the KWQLoader.
        (Loader::load): Take out ifdefs around code that emits requestStarted.

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::KWQKHTMLPart): Call Cache::init().

        * kwq/KWQLoader.h: Add a class KWQLoader, with three signals in it.
        * kwq/KWQLoader.mm: (KWQLoader::KWQLoader): Initialize the three signals.

        * kwq/KWQSignalStubs.mm:
        (Loader::requestDone): Emit the signal using KWQLoader.
        (Loader::requestFailed): Ditto.
        (Loader::requestStarted): Ditto.

        * kwq/KWQSlot.h: Add an overload for slots with loader and cached object
	parameters so we can handle the new slots.
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Added slotLoaderRequestDone and slotLoaderRequestStarted.
        (KWQSlot::call): Added the new overload to handle those two signals.

        * kwq/KWQSignal.h: Add an overload for signals with loader and cached object
	parameters so we can handle the new signals.
        * kwq/KWQSignal.mm: (KWQSignal::call): Ditto.

        * kwq/KWQObject.mm: (QObject::connect): Remove the special casing that
	prevents complaints about slotLoaderRequestDone and slotLoaderRequestStarted,
	since we support those now.

2002-10-28  Darin Adler  <darin@apple.com>

	- fixed storage leak of items in QListBox

        * kwq/KWQListBox.h: Added private deleteItems method.
        * kwq/KWQListBox.mm:
        (QListBox::~QListBox): Call deleteItems().
        (QListBox::deleteItems): Move the code to delete all the items
	here from clear(), since clear() is not called on destruction.
        (QListBox::clear): Call deleteItems().

2002-10-28  Chris Blumenberg  <cblu@apple.com>

	Lowercase the text encoding name.

        * kwq/KWQCharsets.mm:
        (KWQCFStringEncodingFromIANACharsetName):

2002-10-28  Richard Williamson   <rjw@apple.com>
    
        Fixed 3086188 - REGRESSION: Justified text is broken
        
        Bogus special case for DirW(hite)S(pace).  This
        should be correctly detected by CF, but is not.
        Revert to explicit checking for ' ' character.  This'll
        work most of the time.  All the more reason to do
        our own unicode attribute database.
        
        * kwq/KWQChar.mm:
        (QChar::direction):

2002-10-28  Chris Blumenberg  <cblu@apple.com>

	Fixed: 3056726 - View Source window always displays the source in current system encoding
	Fixed: 3019352 - Text encoding is not handled when viewing plain text

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (+[WebCoreBridge stringWithData:textEncoding:]): added, creates a string with data using the WebCore's decoding logic.
        (+[WebCoreBridge stringWithData:textEncodingName:]): added, calls stringWithData:textEncoding: after getting the encoding for a text encoding name

2002-10-28  Don Melton  <gramps@apple.com>

        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::write):

	Backed our Dave's whitespace hack because it was adding newlines, i.e.
	vertical margins, to web pages all over.

2002-10-28  Darin Adler  <darin@apple.com>

	- fixed 3015800 -- bad URL error - unescaped # in URL

	Actually this has to be fixed both here and in NSURLExtras.

        * kwq/KWQKURL.mm: Set the "BadChar" flag for "#" so we escape any
	"#" characters we see after the first one.

2002-10-27  Darin Adler  <darin@apple.com>

	- fixed 3058845 -- <input type=file> uses hard-coded width of 200
	pixels for filename

        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::calcMinMaxWidth): Use a default of 20 "x-widths" wide, to
	match Mozilla, rather than the 17 that is in KHTML by default.
        (RenderFileButton::calcMinMaxWidth): Pass in a character width here, using
	the same 20-character rule as above.
        * kwq/KWQFileButton.h: Replace sizeHint() with sizeForCharacterWidth(int).
        * kwq/KWQFileButton.mm:
        (KWQFileButton::sizeForCharacterWidth): Pass character count to the WebCoreFileButton.
        (KWQFileButton::baselinePosition): Fix baseline computation. It was computing some huge
	negative number before and was obviously broken.
        * kwq/KWQLineEdit.mm: (QLineEdit::sizeForCharacterWidth): Add an assertion.
        * kwq/WebCoreViewFactory.h: Replace bestVisualFrameSize with
	bestVisualFrameSizeForCharacterCount:.

2002-10-27  Don Melton  <gramps@apple.com>

        * khtml/ecma/kjs_navigator.cpp:
        (Navigator::getValueProperty):

	Tweaked AppName, Product, and Vendor logic.

2002-10-27  Darin Adler  <darin@apple.com>

        * kwq/KWQLoader.mm: (KWQServeRequest): Add a missing "delete job" for one
	particular failure case.

2002-10-26  Darin Adler  <darin@apple.com>

	- fixed a bug in the WebCore cache that caused it to not cache very much after
        a while, and also caused a crash I saw twice on my machine

	Adjust total size of items in the LRU list, when the size of one of the
	items that's in the list is changed.

        * khtml/misc/loader.h: Added a size parameter (default 0) to the CachedObject
	constructor. Added a protected CachedObject::setSize() and made m_size private.
	Added Cache::adjustSize() and Cache::checkLRUAndUncacheableListIntegrity().
        * khtml/misc/loader.cpp:
        (CachedObject::setSize): Added. This is now the only legal way to change
	the size of a cached object, and it calls Cache::adjustSize.
        (CachedCSSStyleSheet::CachedCSSStyleSheet): Pass the length into the base
	class's constructor instead of setting m_size.
        (CachedCSSStyleSheet::data): Call setSize() instead of setting m_size.
	Also get the size back with size() rather than m_size.
        (CachedScript::CachedScript): Pass the length into the base class's
	constructor instead of setting m_size.
        (CachedScript::data): Call setSize() instead of setting m_size. Also get
	the size back with size() rather than m_size.
        (CachedImage::CachedImage): Don't set m_size to 0, since the base class's
	constructor does that already.
        (CachedImage::clear): Use setSize() to set the size to 0 instead of setting
	m_size directly.
        (CachedImage::data): Use setSize() instead of setting m_size directly.
        (Cache::checkLRUAndUncacheableListIntegrity): Useful debugging function.
	Left in but ifdef'd out.
        (Cache::adjustSize): Added. Changes the "total LRU list size" by the
	passed-in delta, but only if the passed-in object is in the LRU list.

        * kwq/KWQLineEdit.mm:
        * kwq/KWQTextField.h:
        * kwq/KWQTextField.mm:
	Renamed the Objective C class KWQNSTextField to KWQTextField.

2002-10-26  Darin Adler  <darin@apple.com>

	- removed forwarding headers that are not actually needed

        * ForwardingHeaders/kcmdlineargs.h: Removed.
        * ForwardingHeaders/kinstance.h: Removed.
        * ForwardingHeaders/kio/kprinter.h: Removed.
        * ForwardingHeaders/kio/ktrader.h: Removed.
        * ForwardingHeaders/kio/scheduler.h: Removed.
        * ForwardingHeaders/kparts/factory.h: Removed.
        * ForwardingHeaders/kparts/historyprovider.h: Removed.
        * ForwardingHeaders/kstddirs.h: Removed.
        * ForwardingHeaders/qarray.h: Removed.
        * ForwardingHeaders/qbrush.h: Removed.
        * ForwardingHeaders/qbutton.h: Removed.
        * ForwardingHeaders/qcollection.h: Removed.
        * ForwardingHeaders/qcombobox.h: Removed.
        * ForwardingHeaders/qframe.h: Removed.
        * ForwardingHeaders/qglobal.h: Removed.
        * ForwardingHeaders/qiodevice.h: Removed.
        * ForwardingHeaders/qlineedit.h: Removed.
        * ForwardingHeaders/qnamespace.h: Removed.
        * ForwardingHeaders/qpen.h: Removed.
        * ForwardingHeaders/qprinter.h: Removed.
        * ForwardingHeaders/qsize.h: Removed.
        * ForwardingHeaders/qstack.h: Removed.

2002-10-26  Darin Adler  <darin@apple.com>

	- fixed a couple of files accidentally checked in with KWQQ names

        * ForwardingHeaders/qasyncio.h: Change names.
        * ForwardingHeaders/qstylesheet.h: Ditto.
        * WebCore.pbproj/project.pbxproj: Ditto.
        * kwq/KWQMovie.h: Ditto.

2002-10-26  Darin Adler  <darin@apple.com>

	- changed to use #if APPLE_CHANGES and #if !APPLE_CHANGES consistently

	We no longer do #ifdef APPLE_CHANGES or #ifndef APPLE_CHANGES.

        * lots of files

2002-10-26  Darin Adler  <darin@apple.com>

        - changed naming scheme in KWQ for files like qstring.h

        Now use names like KWQString.h and a forwarding header called qstring.h.
        
        * tons of files

2002-10-26  Darin Adler  <darin@apple.com>

	- fixed 3068404 -- eliminate all user-visible messages from WebCore

        * khtml/ecma/kjs_window.cpp: (WindowFunc::tryCall): Use runJavaScriptPrompt
	function instead of the more generic QInputDialog.

        * khtml/html/html_formimpl.cpp: (HTMLInputElementImpl::altText): Get
	submit alt text for input element from the view factory, rather than using
	i18n, since we don't support that.
        * khtml/html/htmlparser.cpp: (KHTMLParser::handleIsindex): Ditto, for the
	intro that says "This is a searchable index".
        * khtml/rendering/render_form.cpp:
        (RenderSubmitButton::defaultLabel): Ditto, for "Submit".
        (RenderResetButton::defaultLabel): Ditto, for "Reset".
        (RenderFileButton::slotClicked): Ifdef'd out this unused code that had i18n text in it.

        * khtml/xml/xml_tokenizer.cpp:
        (XMLHandler::errorString): Put in an ifdef and a FIXME to avoid i18n.
        (XMLHandler::fatalError): Ditto.
        (XMLTokenizer::finish): Ditto.

        * khtml/misc/decoder.cpp: (Decoder::decode): Ifdef'd the check for the first
	language being "ja", since that's not how we're going to trigger Japanese
	auto-detect.

        * khtml/rendering/render_applet.cpp: (RenderEmptyApplet::RenderEmptyApplet):
	Turned off the code that does the empty applet label. I don't think it worked,
	and it used i18n. We'll have to tackle this eventually.

        * kwq/KWQKHTMLPartImpl.h: Added runJavaScriptPrompt.
        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::runJavaScriptPrompt): Moved the code
	here that used to be in KWQInputDialog.

        * kwq/kdecore/klocale.h: Remove i18n() and KLocale::languageList(), added the functions
	that are listed below.
        * kwq/KWQKLocale.mm:
        (inputElementAltText): Added specific function for getting one of the very few
	translated strings that we need in WebCore.
        (resetButtonDefaultLabel): Ditto.
        (searchableIndexIntroduction): Ditto.
        (submitButtonDefaultLabel): Ditto.
        (KLocale::language): Use the view factory to ask for the language code, since there's no
	public API to get it that WebCore can use.

        * kwq/WebCoreViewFactory.h: Add new API for above.

        * ForwardingHeaders/qinputdialog.h: Added empty file.

        * kwq/qt/qinputdialog.h: Removed.
        * kwq/KWQInputDialog.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Removed QInputDialog files.

2002-10-25  Darin Adler  <darin@apple.com>

	Remove some user-visible strings. We can't have any strings that need
	localization in WebCore, given our translation strategy.

        * khtml/html/html_formimpl.cpp: (HTMLInputElementImpl::encoding):
	Put APPLE_CHANGES around some i18n dialog code.
        * khtml/khtml_part.cpp: (KHTMLPart::submitForm): Ditto.
        * khtml/rendering/render_frames.cpp:
        (RenderPartObject::slotPartLoadingErrorNotify): Ditto.
        * khtml/ecma/kjs_window.cpp:
        (Window::get): Ditto.
        (Window::scheduleClose): Ditto.
        (WindowFunc::tryCall): Put APPLE_CHANGES in to use JavaScript-specific methods
        in the part of calling the generic ones from KMessageBox.

        * ForwardingHeaders/kmessagebox.h: Added (empty file).

        * kwq/KWQKHTMLPartImpl.h: Added new runJavaScript functions.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::runJavaScriptAlert): Added.
        (KWQKHTMLPartImpl::runJavaScriptConfirm): Added.

        * kwq/WebCoreViewFactory.h: Added runJavaScriptAlertPanelWithMessage and
	runJavaScriptConfirmPanelWithMessage.

        * kwq/kdeui/kmessagebox.h: Removed.
        * kwq/KWQKMessageBox.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Removed the KMessageBox files.

2002-10-25  Richard Williamson   <rjw@apple.com>

        Removed debug logging.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):

2002-10-25  Richard Williamson   <rjw@apple.com>

        Implemented support for bidi text layout.  WebCore
        temporarily depends on SPI to get unicode character
        attribute from CF.  This will change shortly.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):
        * kwq/KWQChar.mm:
        (QChar::direction):
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        * kwq/WebCoreTextRenderer.h:
        * kwq/qt/qpainter.h:

2002-10-25  Chris Blumenberg  <cblu@apple.com>

	Cleaned up the frame searching shenanigans. Things are much cleaner and clearer now.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): call findFrameNamed
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::bridgeForFrameName): call findOrCreateFramedNamed
        * kwq/WebCoreBridge.h:

2002-10-25  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3065638 - "undefined" output to screen on empty document.write()
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocFunction::tryCall): Don;t assume there is at least
	one argument.

2002-10-25  Maciej Stachowiak  <mjs@apple.com>

	- fixed 3048031 - innerHTML is incorrectly null
	
        * kwq/KWQString.mm:
        (QString::isNull): Check for NULL by comparing to
	shared_null_handle instead of checking for 0 length, so
	garden-variety empty strings don't show as NULL.
        (QString::QString): Make sure that string created with a NULL char
	* uses the shared null handle, so it's properly NULL.

2002-10-24  Richard Williamson   <rjw@apple.com>

        Updated to reflect new calling parameter semantic of floatCharacterWidths(),
        which now returns the entire array of widths up the last character requested.
        
        * khtml/rendering/render_text.cpp:
        (TextSlave::checkSelectionPoint):

2002-10-24  David Hyatt  <hyatt@apple.com>

	<pre>, <xmp> and <plaintext> should all have a top margin of 1em.
	Fixes a bunch of sites that use <pre>.
	
        * khtml/css/html4.css:

2002-10-24  Chris Blumenberg  <cblu@apple.com>

	Removed didAddSubview calls because that can easily be done in WebKit. Duh!

        * khtml/rendering/render_frames.cpp:
        (RenderPart::setWidget):
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::showApplet):
        * kwq/WebCoreBridge.h:

2002-10-24  Darin Adler  <darin@apple.com>

	A step in the direction of making KWQ headers much nicer.
	Move all empty headers out of kwq, and into ForwardingHeaders.

        * ForwardingHeaders/kcmdlineargs.h: Added.
        * ForwardingHeaders/kdatastream.h: Added.
        * ForwardingHeaders/khtml_iface.h: Added.
        * ForwardingHeaders/khtml_printsettings.h: Added.
        * ForwardingHeaders/khtml_run.h: Added.
        * ForwardingHeaders/kio/kprinter.h: Added.
        * ForwardingHeaders/kio/kprotocolmanager.h:
        * ForwardingHeaders/kio/ktrader.h: Added.
        * ForwardingHeaders/kio/scheduler.h: Added.
        * ForwardingHeaders/kmultipledrag.h: Added.
        * ForwardingHeaders/kprinter.h: Added.
        * ForwardingHeaders/kprotocolmanager.h: Added.
        * ForwardingHeaders/ksslcertchain.h: Added.
        * ForwardingHeaders/ksslinfodlg.h: Added.
        * ForwardingHeaders/kstdaction.h: Added.
        * ForwardingHeaders/ktempfile.h: Added.
        * ForwardingHeaders/ktrader.h: Added.
        * ForwardingHeaders/kurldrag.h: Added.
        * ForwardingHeaders/kxmlguifactory.h: Added.
        * ForwardingHeaders/qasyncimageio.h: Added.
        * ForwardingHeaders/qbitmap.h: Added.
        * ForwardingHeaders/qclipboard.h: Added.
        * ForwardingHeaders/qfontdatabase.h: Added.
        * ForwardingHeaders/qglobal.h: Added.
        * ForwardingHeaders/qhbox.h: Added.
        * ForwardingHeaders/qintcache.h: Added.
        * ForwardingHeaders/qintdict.h: Added.
        * ForwardingHeaders/qmetaobject.h: Added.
        * ForwardingHeaders/qobjectlist.h: Added.
        * ForwardingHeaders/scheduler.h: Added.

        * kwq/dcop/kdatastream.h: Removed.
        * kwq/kdecore/kcmdlineargs.h: Removed.
        * kwq/kdecore/kmultipledrag.h: Removed.
        * kwq/kdecore/ktempfile.h: Removed.
        * kwq/kdecore/kurldrag.h: Removed.
        * kwq/kdeui/kstdaction.h: Removed.
        * kwq/kdeui/kxmlguifactory.h: Removed.
        * kwq/khtml/khtml_iface.h: Removed.
        * kwq/khtml/khtml_printsettings.h: Removed.
        * kwq/khtml/khtml_run.h: Removed.
        * kwq/kio/kprinter.h: Removed.
        * kwq/kio/kprotocolmanager.h: Removed.
        * kwq/kio/kssl/ksslcertchain.h: Removed.
        * kwq/kio/kssl/ksslinfodlg.h: Removed.
        * kwq/kio/ktrader.h: Removed.
        * kwq/kio/scheduler.h: Removed.
        * kwq/qt/qasyncimageio.h: Removed.
        * kwq/qt/qbitmap.h: Removed.
        * kwq/qt/qclipboard.h: Removed.
        * kwq/qt/qfontdatabase.h: Removed.
        * kwq/qt/qglobal.h: Removed.
        * kwq/qt/qhbox.h: Removed.
        * kwq/qt/qintcache.h: Removed.
        * kwq/qt/qintdict.h: Removed.
        * kwq/qt/qmetaobject.h: Removed.
        * kwq/qt/qobjectlist.h: Removed.

        * WebCore.pbproj/project.pbxproj: Removed all the above headers from
	the project.

2002-10-24  Darin Adler  <darin@apple.com>

        * ForwardingHeaders/private/qucomextra_p.h: Emptied this out.
        * kwq/qt/private/qucomextra_p.h: Removed.

2002-10-24  David Hyatt  <hyatt@apple.com>

	Make sure that KHTML's initial layout happens after KHTML
	fires the onload.  This means that in the case where we
	beat the timer, we will now fire the onload before both
	the initial layout and the initial paint.
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::close):

=== Alexander-29 ===

2002-10-24  Chris Blumenberg  <cblu@apple.com>

	Use "MIMEType" instead of "serviceType".

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::createPart):
        * kwq/WebCoreBridge.h:

2002-10-24  Darin Adler  <darin@apple.com>

        * kwq/KWQKLocale.mm: (i18n): Make it obvious when non-localized
	strings from WebCore show up in the UI, but putting the string
	"not localized: " in front.

        * kwq/KWQKMessageBox.mm:
        (KMessageBox::error): Fix use of NSRunAlertPanel so that we won't
	accidentally try to interpret % sequences in the messages we are displaying.
        (KMessageBox::warningYesNo): Ditto.
        (KMessageBox::questionYesNo): Ditto.
        (KMessageBox::sorry): Ditto.
        (KMessageBox::information): Ditto.

2002-10-23  Chris Blumenberg  <cblu@apple.com>

	WebKit now gets called when render_frame subviews are added.

        * khtml/rendering/render_frames.cpp:
        (RenderPart::setWidget): call didAddWidget on the part
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::didAddWidget): added, calls didAddSubview on the bridge

2002-10-23  Chris Blumenberg  <cblu@apple.com>

	Change for plug-in package API changes.

        * kwq/KWQKConfigBase.mm:
        (KConfig::readEntry):
        * kwq/WebCoreBridge.h: added didAddSubview, called when a render_frame's view is added as a subview of the main view.
        * kwq/WebCoreViewFactory.h: added didAddSubview

2002-10-23  Darin Adler  <darin@apple.com>

	- finished up the job of moving the file button to WebKit

	I did this mainly for localization reasons.

        * kwq/KWQFileButton.h: Remove filename(), add filenameChanged(),
	make KWQFileButton be a QWidget subclass, not a QPushButton one.
	Remove clicked() and paint() virtual functions, _filename, _icon,
	and _label data members.
        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton): Just make a WebCoreFileButton.
        (KWQFileButton::~KWQFileButton): Less to do here now.
        (KWQFileButton::setFilename): Call the button to do the work.
        (KWQFileButton::sizeHint): Ditto.
        (KWQFileButton::frameGeometry): Ditto.
        (KWQFileButton::setFrameGeometry): Ditto.
        (KWQFileButton::baselinePosition): Ditto.
        (KWQFileButton::filenameChanged): Added. Sends message.
        (-[KWQFileButtonAdapter initWithKWQFileButton:]): Observe the "filename
	changed notification".
        (-[KWQFileButtonAdapter dealloc]): Stop observing.
        (-[KWQFileButtonAdapter filenameChanged:]): Send a signal when the notification
	comes in, so KHTML finds out.

        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Remove handling for RenderFileButton slotReturnPressed.
        (KWQSlot::call): Ditto.

        * kwq/WebCoreViewFactory.h: Remove bestSize. Add setVisualFrame, visualFrame, and
	bestVisualFrameSize.

        * kwq/KWQInputDialog.mm: Tweaked includes. Long-term we want to use "", not <>.
        * kwq/KWQKConfigBase.mm: Ditto.
        * kwq/KWQKHTMLPartImpl.mm: Ditto.

2002-10-23  Chris Blumenberg  <cblu@apple.com>

	Call the arguments for plug-ins "attributes" everywhere.

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::createPart):
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::showApplet):
        * kwq/WebCoreBridge.h:

2002-10-23  Chris Blumenberg  <cblu@apple.com>

	For the new plug-in API, we need to pass a WebPluginContainer to the plug-in view upon creation. The is owned by the WebFrame. To make this all work, I had to move the WebCore plug-in and java view constructors to WebBridge from WebViewFactory since WebBridge has the frame. 

        * khtml/khtml_part.cpp:
        (KHTMLPart::createJavaContext): New APPLE_CHANGES around the java context constructor so we pass the part.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::createPart): call the bridge to create the view
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget): save the context
        (KJavaAppletWidget::showApplet): call the bridge to create the view
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreViewFactory.h:
        * kwq/khtml/java/kjavaappletcontext.h: made constructor take the part
        * kwq/khtml/java/kjavaappletwidget.h: ivar for the context

2002-10-23  Darin Adler  <darin@apple.com>

	- fixed 3080478 -- reproducible incomplete load on apple.com

        * kwq/KWQLoaderImpl.mm:
        (-[WebCoreResourceLoader receivedResponse:]): Add an assert.
        (-[WebCoreResourceLoader cancel]): Don't finish here, just disconnect the handle
	from the job, and disconnect the job from the WebCoreResourceLoader, and let the
	KHTML code finish the cleanup later. This is the bug fix.
        (KWQCheckCacheObjectStatus): Add an assertion.

        * kwq/KWQKjobclasses.mm:
	(TransferJob::~TransferJob): Don't call kill(); do the work here instead.
	(TransferJob::kill): Self-destruct. Need this to avoid a storage leak.

        * khtml/misc/loader.cpp:
        (CachedObject::~CachedObject): Put some Apple-specific code inside APPLE_CHANGES.
        (CachedObject::setResponse): Streamlined this function.
        (Loader::receivedResponse): Added assertions.

        * kwq/qt/qxml.h: Add more stubs.
        * kwq/KWQxml.mm: Ditto.

        * kwq/WebCoreViewFactory.h: Add [WebCoreViewFactory fileButton], the
	WebCoreFileButton protocol, and WebCoreFileButtonFilenameChanged.
        * kwq/WebCoreViewFactory.m: Add WebCoreFileButtonFilenameChanged.
        * WebCore.exp: Export _WebCoreFileButtonFilenameChanged.

2002-10-22  Maciej Stachowiak  <mjs@apple.com>

	Forgot to check this in earlier:

	- fixed 3077084 - debugging output when suppressing or allowing
	pop-ups
	
        * khtml/ecma/kjs_window.cpp:
        (WindowFunc::tryCall):
        * kwq/KWQLogging.h:
        * kwq/KWQLogging.m:

2002-10-22  David Hyatt  <hyatt@apple.com>

	Get XML files closer.  An XML doc is at least made.  No
	parsing works yet though.
	
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::setPolicyBaseURL):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setContentType:]):

2002-10-22  Chris Blumenberg  <cblu@apple.com>

	Fixed: 3023814 - contexual menus and dragging doesn't work for some images

	Added a innerNonSharedNode to NodeInfo that points to the node which is not shared by another node. In this case, the innerNonSharedNode is the image node not the area node.

        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::nodeAtPoint): call setInnerNonSharedNode
        * khtml/rendering/render_image.cpp:
        (RenderImage::nodeAtPoint): call setInnerNonSharedNode
        * khtml/rendering/render_object.cpp:
        (RenderObject::nodeAtPoint): call setInnerNonSharedNode
        * khtml/rendering/render_object.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]): use the innerNonSharedNode

2002-10-22  David Hyatt  <hyatt@apple.com>

	Fix slashdot.  Make sure the KONQBLOCK hack just throws away
	margins at the tops and bottoms of kids.
	
        * khtml/css/html4.css:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-10-22  David Hyatt  <hyatt@apple.com>

	Fix for left-hand-side of wired.com.  A disturbingly basic
	bug.  I was applying a parent's margins to its children
	when collapsing, even if the parent had a border/padding set
	that should have separated it from its kids.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-10-22  David Hyatt  <hyatt@apple.com>

	Optimize my inline margin discarding to be smart about the
	case when the inline has a block and its beginning or
	end.  Fixes aintitcool.com.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-10-22  David Hyatt  <hyatt@apple.com>

	Removing konq's flow-around-floats hack for <blockquote> and
	<dl>.  These objects are allowed to flow under floats.  Fixes
	www.webreference.com's front page.

	Also fixing a bug in my <td> margin collapsing quirk that
	prevented lists (ol,ul,dl,menu,dir) from collapsing their
	top margins into the td.
	
        * khtml/css/html4.css:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::addChild):

2002-10-22  David Hyatt  <hyatt@apple.com>

	Fix a typo in my change to the h1 rule.
	
        * khtml/css/html4.css:

2002-10-22  David Hyatt  <hyatt@apple.com>

	Ok, this patch does a lot of stuff.  It contains a complete
	rewrite of the WinIE quirk for handling collapsing margins
	at the tops and bottoms of table cells.  We match WinIE's
	behavior for all HTML4 block-level elements.

	This patch also applies a bottom margin to <form> elements,
	which is what was causing the missing space on livepage.apple.com
	underneath the textfield on the right.  WinIE and Gecko both
	put a bottom margin on all forms.

	This patch also updates the collapsing margin code to detect
	inlines that have been morphed into blocks by KHTML (this is 
	so wrong, don't even get me started, you can't treat an inline
	as a block, this code is lame, etc. etc.) and to properly ignore
	their margins completely.  Fixing the code to not morph inlines
	is another architectural problem that will have to be dealt
	with (sigh).
	
        * khtml/css/css_valueimpl.h:
        * khtml/css/cssparser.cpp:
        (StyleBaseImpl::parseValue):
        (StyleBaseImpl::parseUnit):
        * khtml/css/cssparser.h:
        * khtml/css/cssstyleselector.cpp:
        * khtml/css/html4.css:
        * khtml/misc/khtmllayout.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::RenderFlow):
        (RenderFlow::layout):
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::addChild):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.h:

2002-10-21  Darin Adler  <darin@apple.com>

        * kwq/KWQInputDialog.mm: (QInputDialog::getText): Call the view factory to do the
	heavy lifting.

        * kwq/WebCoreViewFactory.h: Add runJavaScriptTextInputPanelWithPrompt:defaultText:returningText:.
	Use a protocol for the subclass responsibility.
        * kwq/WebCoreViewFactory.m: Remove stub methods not needed because of the subclass responsibility
	technique we are using.

        * kwq/qt/qstylesheet.h: Made this inline, since it does nothing.
        * kwq/KWQStyleSheet.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Removed KWQStyleSheet.mm.

2002-10-21  David Hyatt  <hyatt@apple.com>

	Implement support for a new @-rule called @konq-quirks.  This
	will allow us to put style rules into html4.css that only
	apply for pages in quirks mode.
	
        * khtml/css/css_ruleimpl.cpp:
        (CSSQuirksRuleImpl::CSSQuirksRuleImpl):
        (CSSQuirksRuleImpl::~CSSQuirksRuleImpl):
        (CSSQuirksRuleImpl::cssRules):
        (CSSQuirksRuleImpl::appendRule):
        (CSSQuirksRuleImpl::insertRule):
        (CSSQuirksRuleImpl::deleteRule):
        * khtml/css/css_ruleimpl.h:
        * khtml/css/cssparser.cpp:
        (StyleBaseImpl::parseAtRule):
        * khtml/css/cssparser.h:
        * khtml/css/cssstyleselector.cpp:
        * khtml/css/cssstyleselector.h:
        * khtml/dom/css_rule.h:

2002-10-21  Darin Adler  <darin@apple.com>

	Remove closeEntireTree now that deferred close takes care of that case.

        * khtml/html/htmlparser.cpp: (KHTMLParser::startBody):
        * khtml/rendering/render_object.h:

2002-10-21  Darin Adler  <darin@apple.com>

	- fixed 3075041 -- text larger/smaller increment too large when font-size specified as %

        * khtml/css/cssstyleselector.cpp: Don't apply the zoom factor to a font size that
	already has the zoom factor applied.

2002-10-21  Darin Adler  <darin@apple.com>

        * khtml/khtmlview.cpp: (KHTMLView::clear): Default to fast scrolling.
	I'm pretty sure this was just backwards here.

2002-10-21  David Hyatt  <hyatt@apple.com>

	DLs are supposed to have margins.
	
        * khtml/css/html4.css:

2002-10-21  David Hyatt  <hyatt@apple.com>

	Fix for margin problems on aintitcool.com.  There was a subtlety
	to WinIE's quirk.  For <h1>-<h6> only, they don't collapse the
	bottom margin for table cells (they still collapse the top
	margin).  I just love emulating the odd behavior of WinIE.
	Wheee.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-10-20  Darin Adler  <darin@apple.com>

	Redid my fix. It was just an ordering thing. The image had to already be
	installed as the current image before calling ref(), because in the cached
	case, you get the loading complete callback right then.

        * khtml/rendering/render_image.cpp: (RenderImage::updateFromElement):
	Call deref on the old image later. Basically, instead of moving the ref
	of the new image up, I moved the deref of the old image down.

2002-10-20  Darin Adler  <darin@apple.com>

	Roll out my render_image.cpp change. It was causing a big problem
	getting images from the cache. I need to study further to figure out why.

        * khtml/rendering/render_image.cpp: (RenderImage::updateFromElement):
	Roll back the change.

2002-10-20  David Hyatt  <hyatt@apple.com>

	Rewrite the clearing code for floats.  Rewrote the
	collapsing margin code to really work with floating and
	clearing.  This fixes the right hand side of wired.com.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::checkClear):
        (RenderFlow::addChild):

2002-10-20  Darin Adler  <darin@apple.com>

	- fixed 3007961 -- Crash in DOM::HTMLImageElementImpl::parseAttribute

        * khtml/rendering/render_image.cpp: (RenderImage::updateFromElement):
	Be sure to call ref on the new image before calling deref on the old
	image. That's because deref on the old image causes a cache flush,
	which might cause the image to go away in certain cases.

2002-10-20  Chris Blumenberg  <cblu@apple.com>

	Fixed possible build failure.

        * kwq/KWQDOMNode.cpp:
        (isImage): remove unused variable.

2002-10-20  Chris Blumenberg  <cblu@apple.com>

	Partial fix for:
	3023814 - contexual menus and dragging doesn't work for some images

	The image map case is still broken because I need to find a way to get the RenderImage for an AREA node. Anyone know how?

        * kwq/KWQDOMNode.cpp:
        (isImage): Also return true if the node is an INPUT tag with TYPE set to "image"

2002-10-20  Darin Adler  <darin@apple.com>

	- fixed 3076390 -- crash in DOM::DocumentImpl::setParsing loading thread detail page
	at groups.apple.com

        * khtml/khtml_part.cpp: (KHTMLPart::openURL): Don't do any redirect special case
	if the document is nil. Just do a normal load in that case.

2002-10-20  Darin Adler  <darin@apple.com>

	- fixed 3079864 -- REGRESSION: assertion failure on any page with a form element

        * khtml/html/html_formimpl.cpp: (HTMLGenericFormElementImpl::attach):
	Roll back the parent call to use NodeBaseImpl::attach. Not sure why I changed that
	at the last minute before my last checkin, but it was *bad*.

	- fixed a crash I observed when clicking on an about:blank page

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge elementAtPoint:]): Check for nil renderer.

2002-10-19  Darin Adler  <darin@apple.com>

	- fixed 3075032 -- textarea contents sometimes aren't shown

	The root of the problem is that we weren't delivering close calls to
	the render objects in the case where we created them late due to our FOUC
	fix. I taught the DOM implementation to remember that a close call is
	due, and deliver it when the render object is created. We can probably
	replace the closeEntireTree hack with this too. I'll talk to Dave about
	that on Monday.

        * khtml/xml/dom_nodeimpl.h: Add m_rendererNeedsClose and closeRenderer.
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::NodeImpl): Initialize m_rendererNeedsClose to false.
        (NodeImpl::closeRenderer): Call close on the renderer if it's created, otherwise
	set m_rendererNeedsClose.
        (NodeImpl::attach): If the renderer is created and m_rendererNeedsClose is true
	call close on the renderer and set it to false.

        * khtml/html/html_formimpl.cpp: (HTMLGenericFormElementImpl::attach):
	Rearrange this so that the base class attach is called before updateFromElement
	is called. This allows the base attach to do a close for us before we update.

        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode): Call closeRenderer on the DOM node rather than
	calling close on the render node.
        (KHTMLParser::popOneBlock): Ditto.
        * khtml/xml/xml_tokenizer.cpp:
        (XMLHandler::endElement): Ditto.
        (XMLTokenizer::finish): Ditto.

2002-10-19  David Hyatt  <hyatt@apple.com>

	A couple of whitespace fixes.  What's really odd about these
	fixes is that they *work* but only if you load the page by
	hitting "Back".  I suspect that I've now fixed the bugs on
	KHTML's end, and we have some sort of whitepsace dropping
	problem on our end.

        * khtml/html/htmlparser.cpp:
        (KHTMLParser::insertNode):
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::write):

2002-10-18  Richard Williamson   <rjw@apple.com>

        Fixed khtml to ignore <title> tags after the first tag.
        
        Fixed setting document.title from JavaScript.
        
        * khtml/dom/html_document.cpp:
        (HTMLDocument::setTitle):
        * khtml/html/html_headimpl.cpp:
        (HTMLTitleElementImpl::insertedIntoDocument):
        (HTMLTitleElementImpl::childrenChanged):

2002-10-18  Darin Adler  <darin@apple.com>

	- fixed 3078293 -- Implement evaluateJavaScript on WebController

        * kwq/KWQVariant.mm: (QVariant::asString): Made this return reasonable
	values for types other than string. Still may be loose ends left, but
	this takes care of most of it.

2002-10-18  Darin Adler  <darin@apple.com>

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge stringByEvaluatingJavaScriptFromString:]):
	Changed to return a string and changed name.

2002-10-18  David Hyatt  <hyatt@apple.com>

	The collapsing margin rewrite. Also fixes a bug where
	we stay in quirks mode for strict HTML4 dtds when we
	shouldn't.
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::determineParseMode):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layout):
        (RenderFlow::layoutBlockChildren):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.h:

2002-10-18  Darin Adler  <darin@apple.com>

        * Makefile.am: Move dependency so clean happens before build.

2002-10-17  Richard Williamson  <rjw@apple.com>

        Support for drawing frame borders and frame resizing. (fixes 2982466).

        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::userResize):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge frameBorderStyle]):
        * kwq/qt/qframe.h:

2002-10-17  Darin Adler  <darin@apple.com>

	- fixed 2807340 -- Alex is case sensitive for anchors, but
	should not be in quirks mode (other browsers aren't)

        * khtml/dom/html_misc.cpp: Touched this file to prevent us from requiring a
	full build. Damned header dependencies still don't work right.

        * khtml/html/html_miscimpl.h: Add caseSensitive parameters.
        * khtml/html/html_miscimpl.cpp:
        (HTMLCollectionImpl::getNamedItem): Add caseSensitive parameter, and compare
	by converting both to lower case if it's false and pass it on when recursing.
        (HTMLCollectionImpl::namedItem): Pass along a caseSensitive parameter.
        (HTMLFormCollectionImpl::getNamedItem): Pass along a caseSensitive parameter.
        (HTMLFormCollectionImpl::getNamedFormItem): Pass along, and handle, it.
        (HTMLFormCollectionImpl::getNamedImgItem): Ditto.
        (HTMLFormCollectionImpl::nextNamedItemInternal): Pass true for caseSensitive.

        * khtml/khtml_part.cpp: (KHTMLPart::gotoAnchor):
	Pass false for the new caseSensitive parameter to namedItem when the document
	mode is not strict.

        * kwq/KWQListBox.mm: (QListBox::sizeForNumberOfLines): Removed a stray NSLog
	that I left in by accident.

2002-10-17  Darin Adler  <darin@apple.com>

	- fixed 3052547 -- <select> doesn't size properly (size > 1)

        * khtml/rendering/render_form.cpp:
        (RenderLineEdit::slotReturnPressed): #if !APPLE_CHANGES around some unused
	code in here.
        (RenderSelect::updateFromElement): Fix bug where it was using Multi here, but
	Extended elsewhere for the selection mode.
        (RenderSelect::layout): Change code so that QListBox handles the sizing.

        * kwq/KWQListBox.h: Removed a lot of unused stuff, made other things use inlines.
        * kwq/KWQListBox.mm: Rewrote most of the file contents. Made a new
	QListBox::sizeForNumberOfLines method. We will have to port this to NSTableView
	rather than NSBrowser.

2002-10-17  Darin Adler  <darin@apple.com>

	- fixed 3078245 -- REGRESSION: lightgrey displays as black, used
	to display as white, should display light gray

        * kwq/KWQColor.mm: (getNamedColors): For every color with the name
	"gray" in it, also include the version spelled "grey" as other
	browsers seem to.

2002-10-17  David Hyatt  <hyatt@apple.com>

	Make navigator.product dynamic based off user agent (i.e.,
	make it participate in spoofing too).
	
        * khtml/ecma/kjs_navigator.cpp:
        (Navigator::getValueProperty):

=== Alexander-28 ===

2002-10-17  Darin Adler  <darin@apple.com>

	- fixed 3077856 -- REGRESSION: scroll to fragment doesn't work
	(except when Alex started from command line)

        * kwq/kparts/browserextension.h: Initialize reload to false. It was
	uninitialized, and when true was preventing anchor navigation from working.

2002-10-17  Darin Adler  <darin@apple.com>

	- fixed 3075992 -- Hang in khtml::RenderFlow::lowestPosition() trying to
	render http://avoyagetoarcturus.blogspot.com/

        * khtml/rendering/render_flow.cpp:
        (RenderFlow::lowestPosition): Don't recurse on the same child twice.
        (RenderFlow::rightmostPosition): Ditto.

2002-10-17  David Hyatt  <hyatt@apple.com>

	Fix bayarea.com.  My implementation of offsetParent was
	flawed.  And to think I was blaming Gecko... ;)
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::offsetParent):

2002-10-16  Darin Adler  <darin@apple.com>

	- fixed 3061103 -- Line-breaks lost when submitting after pasting text from
	MSIE into Alexander textarea

        * kwq/KWQLineEdit.mm: (QLineEdit::text):
        * kwq/KWQTextEdit.mm: (QTextEdit::text):
	Turn \r\n sequences and standalone \r characters into \n characters on the way
	out of AppKit land and into KHTML land. I didn't try to make this efficient
	for the common case because these are not time-critical functions.

2002-10-16  Richard Williamson  <rjw@apple.com>

        Fixed a few regressions in drawing of frame resize handle
        in preparation for drawing frame borders and completing
        2982466.
        
        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::userResize):
        * kwq/KWQPainter.mm:
        (QPainter::drawRect):
        * kwq/qt/qscrollview.h:
        * kwq/KWQScrollView.mm:
        (QScrollView::updateContents):
        * kwq/KWQWidget.mm:
        (QWidget::enableFlushDrawing):
        
        Use static_cast everywhere DOM::NodeImpl is cast to
        subclass.
        
        * kwq/WebCoreDOMNode.mm:
        (-[WebCoreDOMNode DOM::]):
        (-[WebCoreDOMNodeList DOM::]):
        (-[WebCoreDOMNamedNodeMap DOM::]):
        (-[WebCoreDOMAttr DOM::]):

2002-10-16  David Hyatt  <hyatt@apple.com>

	Fix crash on pages with bulleted lists.  Making sure the list
	item marker doesn't get a layer (which means it has to be
	painted by hand now by the list item object).
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        * khtml/rendering/render_list.cpp:
        (RenderListItem::printObject):
        * khtml/rendering/render_list.h:
        * khtml/rendering/render_object.h:

2002-10-16  Darin Adler  <darin@apple.com>

	- fixed 3072542 -- double "&" in submit button

        * khtml/rendering/render_form.cpp: (RenderSubmitButton::rawText):
	Don't double the "&" character, not needed for KWQ.

2002-10-16  David Hyatt  <hyatt@apple.com>

	When render objects were being dynamically wrapped in anonymous
	blocks, the layer parenting connection was being broken without
	being reconnected when the wrapping finished.  This patch
	shifts the layer connection into the functions that are also
	called in the dynamic case.

	With this fix, all objects on mrskin finally show up.  Yeehah.
	brainjar.com's brain is back too.

	This patch also stops treating images as inline if they are
	using abs/fixed positioning, since according to the CSS spec,
	abs/fixed positioned elements should be treated as block-level
	content.
	
        * khtml/rendering/render_container.cpp:
        (RenderContainer::addChild):
        (RenderContainer::appendChildNode):
        (RenderContainer::insertChildNode):
        * khtml/rendering/render_image.cpp:
        (RenderImage::setStyle):

2002-10-16  Darin Adler  <darin@apple.com>

	- fixed 3045570 -- can't select a printer at inkfinder.com

        * khtml/khtml_part.cpp: (KHTMLPart::processObjectRequest):
	Call the new openURL for the case where we are reusing a part.
	We do this backwards from how KHTML does, so it's twisted.

        * kwq/KWQKHTMLPartImpl.h: Add openURL.
        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::openURL):
	Tell the bridge to load the URL.

        * kwq/mac-encodings.txt: Tweak Korean encoding names.

2002-10-16  David Hyatt  <hyatt@apple.com>

	A very substantial change.  Absolute/fixed positioned elements that
	are NOT renderflows were not getting layers constructed for them.
	They do now.

	Also, floats now have layers constructed for them.  This allows
	printSpecialObjects to be completely eliminated, enables smarter
	damge rect intersection testing for faster painting, and fixes
	regressions on sites like www.demian5.com.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::printObject):
        (RenderFlow::addOverHangingFloats):
        (RenderFlow::printTree):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        * khtml/rendering/render_root.cpp:
        (RenderRoot::printObject):
        * khtml/rendering/render_table.cpp:
        (RenderTable::print):

2002-10-16  Richard Williamson  <rjw@apple.com>

        Removed bogus code.
        
        * kwq/KWQKHistoryProvider.mm:

2002-10-15  Richard Williamson  <rjw@apple.com>

        * kwq/WebCoreBridge.mm:
        (attributedString):
        Don't convert element unless it has a renderer.

        * kwq/WebCoreDOMNode.mm:
        (-[WebCoreDOMAttr DOM::]):
        (-[WebCoreDOMAttr name]):
        (-[WebCoreDOMAttr specified]):
        (-[WebCoreDOMAttr value]):
        (-[WebCoreDOMAttr ownerElement]):
        (-[WebCoreDOMElement tagName]):
        (-[WebCoreDOMElement setAttribute::]):
        (-[WebCoreDOMElement removeAttribute:]):
        (-[WebCoreDOMElement getAttributeNode:]):
        (-[WebCoreDOMElement removeAttributeNode:]):
        (-[WebCoreDOMElement getElementsByTagName:]):
        (-[WebCoreDOMElement getAttributeNS::]):
        (-[WebCoreDOMElement setAttributeNS:::]):
        (-[WebCoreDOMCharacterData data]):
        (-[WebCoreDOMCharacterData setData:]):
        (-[WebCoreDOMCharacterData length]):
        (-[WebCoreDOMCharacterData substringData::]):
        (-[WebCoreDOMCharacterData appendData:]):
        (-[WebCoreDOMCharacterData insertData::]):
        (-[WebCoreDOMCharacterData deleteData::]):
        (-[WebCoreDOMText splitText:]):
        (-[WebCoreDOMProcessingInstruction data]):
        (-[WebCoreDOMProcessingInstruction setData:]):
        * kwq/WebCoreDOMPrivate.h:
        API cleanup.

2002-10-15  David Hyatt  <hyatt@apple.com>

	More work on making blocks correctly compute their maximal
	positive and negative margins.  Adding code to ensure
	that floats and absolute/fixed positioned elements know
	not to collapse with children or with themselves.  Also adding
	code to teach empty blocks that they can collapse their own
	margins together.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layout):
        (RenderFlow::layoutBlockChildren):

2002-10-15  Darin Adler  <darin@apple.com>

	WebCore support for using referrer even in loads that are not initiated
	by WebCore itself.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Don't pass a referrer.
	We get the referrer from the part.

        * kwq/KWQKHTMLPartImpl.h: Add a new referrer method that works on the
	part, and remove the old one that got it from the URL arguments.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::bridgeForFrameName): Don't pass a referrer when
	creating a new window.
        (KWQKHTMLPartImpl::openURLRequest): Don't pass a referrer when doing a load.
        (KWQKHTMLPartImpl::urlSelected): Don't pass a referrer when doing a load.
        (KWQKHTMLPartImpl::createPart): Don't pass a referrer when creating a child
	frame for this window.
        (KWQKHTMLPartImpl::submitForm): Don't pass a referrer when doing a load.
        (KWQKHTMLPartImpl::referrer): Added.

        * kwq/KWQLoaderImpl.mm: (KWQServeRequest): Don't pass a referrer when starting
	a load.
        * kwq/WebCoreBridge.h: Add referrer method. Remove referrer parameter from
	many other methods.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge referrer]): Added.

2002-10-15  Darin Adler  <darin@apple.com>

	- fixed 3021713 -- text selection background obliterates descenders
	(in www.theregister.co.uk articles)
	- fixed 3038207 -- Selected link text doesn't draw its link underline

        * khtml/rendering/render_text.cpp:
        (TextSlave::printSelection): Don't draw text at all, just draw a selection background.
        (RenderText::printObject): Draw in two passes. Draw the selection background in the
	first pass, and the text in the second pass. That way pieces of the background won't
	cover any other text or adornments, like underlines.

2002-10-15  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::urlSelected):
	Move the special case of a different anchor within the same
	page into WebKit from here.

        * kwq/kdecore/kurl.h: Mark urlcmp as a friend.
        * kwq/KWQKURL.mm: (urlcmp): Implement the ignoreRef feature, which
	is needed to make the KHTMLPart::openURL function work right.

        * kwq/WebCoreBridge.h: Removed addBackForwardItemWithURL:anchor:
	and added URL method.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge URL]): Added.

2002-10-15  Darin Adler  <darin@apple.com>

	- fixed 3074558 -- frames multiply at: http://www.iarsn.com/

	The key was to make the name attribute work properly.

        * khtml/ecma/kjs_window.cpp:
        (Window::get): Enable the "name" attribute.
        (Window::put): Enable the "name" attribute, but don't do the
	conversion to an 8-bit string -- leave it as a QString.
        * kwq/WebCoreBridge.h: Add setName/name methods.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setName:]): Added. Calls part->setName().
        (-[WebCoreBridge name]): Added. Calls part->name().
        * kwq/kparts/part.h: Added setName/name to ReadOnlyPart.

        * kwq/KWQKHTMLPartImpl.mm: Remove old bogusish comment.

2002-10-15  Richard Williamson  <rjw@apple.com>

        Added text color to attributed string conversion.
        
        * kwq/WebCoreBridge.mm:
        (attributedString):

2002-10-15  Richard Williamson  <rjw@apple.com>

        Added API to get attributed string from bridge.
        Added API to get selection in terms of the DOM API
        from the bridge.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (attributedString):
        (-[WebCoreBridge selectionStart]):
        (-[WebCoreBridge selectionStartOffset]):
        (-[WebCoreBridge selectionEnd]):
        (-[WebCoreBridge selectionEndOffset]):

2002-10-15  Darin Adler  <darin@apple.com>

	- fixed 3054791 -- crash in WebCoreSettings _updateAllViews changing font

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::~KWQKHTMLPartImpl):
	Pass in the "this" pointer so that the right instance is removed from the
	instances list. Before, we would always remove the first instance from the
	list, leaving the list broken.

2002-10-15  Ken Kocienda  <kocienda@apple.com>

	Fixed an "unused variable" build breaker. Note that I just 
	commented out the code and put a FIXME, as I know this is code
	that David has been banging on a lot. This should be either
	used for real or removed eventually, but I'll leave that for 
	Hyatt.

        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-10-14  David Hyatt  <hyatt@apple.com>

	More collapsing margin surgery.  Working on setting up blocks 
	to properly compute their collapsed margins (without actually changing
	the obsolete collapsing behavior yet).
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::RenderFlow):
        (RenderFlow::layout):
        (RenderFlow::layoutBlockChildren):
        * khtml/rendering/render_flow.h:

2002-10-14  David Hyatt  <hyatt@apple.com>

	Adding helper functions for handling of collapsing margins.
	Not used yet.
	
        * khtml/rendering/render_object.h:

2002-10-14  Darin Adler  <darin@apple.com>

	Fixed problems with named colors.

        * kwq/KWQColor.mm: (QColor::setNamedColor): Check named colors before
	hex codes for colors because our hex code parsing is now lenient enough
	that many names qualify.

2002-10-14  David Hyatt  <hyatt@apple.com>

	Really fixing zeldman.com this time.  This disabling stuff
	is complicated! :)
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::parseAttribute):
        (HTMLLinkElementImpl::setStyleSheet):
        (HTMLLinkElementImpl::sheetLoaded):

2002-10-14  David Hyatt  <hyatt@apple.com>

	Stop the insanity.  Make sure that a sheet that is disabled
	while it is still loading is removed from the doc's list
	of pending sheets (for FOUC checks).

	Fixes zeldman.com.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::parseAttribute):

2002-10-14  David Hyatt  <hyatt@apple.com>

	Implementing the ability to individually enable/disable
	both preferred and alternate stylesheets.  Enabling/disabling
	sheets via the disabled property of the <link> element overrides
	whether or not a sheet happens to be alternate or preferred.

	This new implementation of sheet disabling/enabling was a missing
	piece of our HTML4 compliance, and was used by the Wired 
	site to implement its text sizing mechanism.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::HTMLLinkElementImpl):
        (HTMLLinkElementImpl::parseAttribute):
        (HTMLLinkElementImpl::process):
        * khtml/html/html_headimpl.h:
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::recalcStyleSelector):

2002-10-11  Richard Williamson   <rjw@apple.com>

        Remove debugging.
        
        * kwq/WebCoreDOMDocument.mm:
        (+[WebCoreDOMDocument documentWithImpl:DOM::]):
        * kwq/WebCoreDOMNode.mm:
        (-[WebCoreDOMNode lastChild]):

2002-10-11  Richard Williamson   <rjw@apple.com>

        More DOM/attributed string work.  Still need to fix more
        inappropriate casting problems.
        
        * khtml/dom/dom_node.cpp:
        (Node::lastChild):
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::lastChild):
        (NodeBaseImpl::lastChild):
        * khtml/xml/dom_nodeimpl.h:
        * kwq/KWQKHTMLPartImpl.cpp:
        (KWQKHTMLPartImpl::selectionStartOffset):
        (KWQKHTMLPartImpl::selectionEndOffset):
        (KWQKHTMLPartImpl::selectionStart):
        (KWQKHTMLPartImpl::selectionEnd):
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge DOMDocument]):
        (-[WebCoreBridge setSelectionFrom:startOffset:to:endOffset:]):
        (attributedString):
        (-[WebCoreBridge selectedAttributedString]):
        (-[WebCoreBridge attributedStringFrom:startOffset:to:endOffset:]):
        * kwq/WebCoreDOMDocument.mm:
        (-[WebCoreDOMDocumentType DOM::]):
        (-[WebCoreDOMDocumentType name]):
        (-[WebCoreDOMDocumentType entities]):
        (-[WebCoreDOMDocumentType notations]):
        (-[WebCoreDOMDocumentType publicId]):
        (-[WebCoreDOMDocumentType systemId]):
        (-[WebCoreDOMDocumentType internalSubset]):
        (-[WebCoreDOMImplementation DOM::]):
        (-[WebCoreDOMImplementation hasFeature::]):
        (-[WebCoreDOMImplementation createDocument:::]):
        (+[WebCoreDOMDocument documentWithImpl:DOM::]):
        (-[WebCoreDOMDocument DOM::]):
        (-[WebCoreDOMDocument doctype]):
        (-[WebCoreDOMDocument implementation]):
        (-[WebCoreDOMDocument documentElement]):
        (-[WebCoreDOMDocument createElement:]):
        (-[WebCoreDOMDocument createElementNS::]):
        (-[WebCoreDOMDocument createDocumentFragment]):
        (-[WebCoreDOMDocument createTextNode:]):
        (-[WebCoreDOMDocument createComment:]):
        (-[WebCoreDOMDocument createCDATASection:]):
        (-[WebCoreDOMDocument createProcessingInstruction::]):
        (-[WebCoreDOMDocument createAttribute:]):
        (-[WebCoreDOMDocument createAttributeNS::]):
        (-[WebCoreDOMDocument createEntityReference:]):
        (-[WebCoreDOMDocument getElementById:]):
        (-[WebCoreDOMDocument getElementsByTagName:]):
        (-[WebCoreDOMDocument getElementsByTagNameNS::]):
        (-[WebCoreDOMDocument importNode::]):
        * kwq/WebCoreDOMNode.mm:
        (-[WebCoreDOMNode initWithImpl:DOM::]):
        (-[WebCoreDOMNode firstChild]):
        (-[WebCoreDOMNode lastChild]):
        * kwq/WebCoreDOMPrivate.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setSelectionFrom:startOffset:to:endOffset:]):
        (recursive_toHTML):
        (attributedString):

2002-10-11  David Hyatt  <hyatt@apple.com>

	Fix for 3058829, assertion caused by table cell with
	incorrect display type.  Implemented a quirk that forces
	<td>s of display: block to construct table cells as
	rendering objects. 
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::createObject):

=== Alexander-27 ===

2002-10-10  Darin Adler  <darin@apple.com>

	- fixed 3047782 -- Alexander rejects some color strings that other browsers accept

        * khtml/misc/helper.cpp: (khtml::setNamedColor): Put some of the code from this
	level that tries to accomodate bad colors in #if !APPLE_CHANGES, since we do most
	of the smarts in KWQ.

        * kwq/KWQColor.mm:
        (hex2int): Tolerate non-hex digits, treating them as 0.
        (decodeColorFromHexColorString): Trim any number of leading # characters, and trailing
	" and ' characters. Handle strings of 4, 5, 7, 8, 10, and 11 hex digits, along with
	the existing 3, 6, 9, and 12.

2002-10-10  David Hyatt  <hyatt@apple.com>

	Fix a subtle bug with layers.  When a parent is sorted with its
	children the parent's zindex must be treated as 0, so that
	negative children draw behind the layer's content and positive
	children (or auto children) draw in front of the layer's content.

	This fix makes chrysler.com work again (and doubtless many other
	messed up DHTML sites).
	
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        (RenderLayer::RenderZTreeNode::constructLayerList):

2002-10-09  Richard Williamson  <rjw@apple.com>

        Implemented string conversion functions.
        
        * kwq/WebCoreDOMDocument.mm:
        (domStringToNSString):
        (NSStringToDOMString):

2002-10-09  Darin Adler  <darin@apple.com>

	- fixed 3069264 -- REGRESSION: windows created for links with
	target=blank start out hidden (window menu only)

        * kwq/WebCoreBridge.h: Removed openNewWindowWithURL:referrer:frameName: and
	added createWindowWithURL:referrer:frameName: and showWindow.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Call createWindowWithURL,
	and then showWindow after the window is set up. Also change the code that
	flips coordinates to always use the height of the first screen instead of
	using the height of the screen the window is on, which sounds right, but
	is wrong.

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::bridgeForFrameName): Call createWindowWithURL and then
	showWindow in the case where we create a window.
        (KWQKHTMLPartImpl::urlSelected): Remove unused command-click code. The real
	command-click code is in the browser now.

2002-10-09  Darin Adler  <darin@apple.com>

	- fixed 3069749 -- crash in QString during third run of cvs-base

        * kwq/KWQString.mm:
        (checkNodeAllocationPages): Added function to use for debugging.
        (_allocateNode): Clear the next pointer after removing a page from the free
	node list so that the free node list doesn't point at part of the used node list.
        (freeHandle): Change the code around so that the code to add the node to the
	free list works even in the case where this was the top from the used list.
	The old code would half-remove the node from the used list and not add it to
	the free list at all.

2002-10-09  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Project Builder wanted to set encodings
	for new files. Maybe Richard is not using the new Project Builder on all
	his machines?

        * kwq/KWQString.mm: (_allocateNode): Fix typo in comment.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::bridgeForFrameName): Tweak.

2002-10-09  David Hyatt  <hyatt@apple.com>

	This was an unintentional checkin. backing out.
	
        * khtml/xml/dom_elementimpl.cpp:
        (NamedAttrMapImpl::removeNamedItem):

2002-10-08  Richard Williamson   <rjw@apple.com>

        Added bridge method set the selection.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setSelectionFrom:startOffset:to:endOffset:]):

2002-10-08  Richard Williamson   <rjw@apple.com>

        Added bridge method to get the DOM document.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge DOMDocument]):
        * kwq/WebCoreDOM.h:

2002-10-08  Richard Williamson   <rjw@apple.com>

        More DOM implementation.
        
        * khtml/dom/dom_text.h:
        * khtml/dom/dom_xml.h:
        * khtml/xml/dom_textimpl.h:
        * khtml/xml/dom_xmlimpl.h:
        * kwq/WebCoreDOM.h:
        * kwq/WebCoreDOMNode.mm:
        (DOM::CharacterDataImpl::createInstance):
        (DOM::TextImpl::createInstance):
        (DOM::ProcessingInstructionImpl::createInstance):
        (-[WebCoreDOMCharacterData data]):
        (-[WebCoreDOMCharacterData setData:]):
        (-[WebCoreDOMCharacterData length]):
        (-[WebCoreDOMCharacterData substringData::]):
        (-[WebCoreDOMCharacterData appendData:]):
        (-[WebCoreDOMCharacterData insertData::]):
        (-[WebCoreDOMCharacterData deleteData::]):
        (-[WebCoreDOMText splitText:]):
        (+[WebCoreDOMCDATASection CDATASectionWithImpl:DOM::]):
        (-[WebCoreDOMProcessingInstruction data]):
        (-[WebCoreDOMProcessingInstruction setData:]):
        * kwq/WebCoreDOMPrivate.h:
        * kwq/WebDOMElement.h:

2002-10-08  Richard Williamson   <rjw@apple.com>

        Implemented WebCoreDOMElement.
        Fixed extra deref of impl in subclasses
        of WebCoreDOMNode.
        
        * khtml/dom/dom_element.h:
        * khtml/dom/dom_node.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_nodeimpl.h:
        * kwq/WebCoreDOMDocument.mm:
        (-[WebCoreDOMDocument initWithImpl:DOM::]):
        * kwq/WebCoreDOMNode.mm:
        (DOM::NodeListImpl::createInstance):
        (DOM::NamedNodeMapImpl::createInstance):
        (DOM::AttrImpl::createInstance):
        (DOM::ElementImpl::createInstance):
        (-[WebCoreDOMNodeList length]):
        (-[WebCoreDOMNodeList item:]):
        (-[WebCoreDOMAttr initWithImpl:DOM::]):
        (+[WebCoreDOMDocumentFragment documentFragmentWithImpl:DOM::]):
        (-[WebCoreDOMElement tagName]):
        (-[WebCoreDOMElement setAttribute::]):
        (-[WebCoreDOMElement removeAttribute:]):
        (-[WebCoreDOMElement getAttributeNode:]):
        (-[WebCoreDOMElement removeAttributeNode:]):
        (-[WebCoreDOMElement getElementsByTagName:]):
        (-[WebCoreDOMElement getAttributeNS::]):
        (-[WebCoreDOMElement setAttributeNS:::]):
        * kwq/WebDOMDocument.h:
        * kwq/WebDOMElement.h:

2002-10-08  Richard Williamson   <rjw@apple.com>

        First cut at ObjC stubs for DOM API.  Finished the
        main classes.  Need to finish
        WebDOMElement, WebDOMElement, WebDOMElement, 
        WebDOMCDATASection, WebDOMText, WebDOMComment,
        WebDOMCharacterData and 
        
        * WebCore.pbproj/project.pbxproj:
        * khtml/dom/dom_doc.h:
        * khtml/dom/dom_element.h:
        * khtml/dom/dom_node.h:
        * khtml/xml/dom_docimpl.h:
        * khtml/xml/dom_elementimpl.h:
        * khtml/xml/dom_nodeimpl.h:
        * kwq/WebCoreDOM.h: Added.
        * kwq/WebCoreDOMDocument.mm: Added.
        (DOM::DOMImplementationImpl::createInstance):
        (DOM::DocumentTypeImpl::createInstance):
        (DOM::DocumentImpl::createInstance):
        (domStringToNSString):
        (NSStringToDOMString):
        (+[WebCoreDOMDocumentType documentTypeWithImpl:DOM::]):
        (-[WebCoreDOMDocumentType initWithImpl:DOM::]):
        (-[WebCoreDOMDocumentType dealloc]):
        (-[WebCoreDOMDocumentType DOM::]):
        (-[WebCoreDOMDocumentType name]):
        (-[WebCoreDOMDocumentType entities]):
        (-[WebCoreDOMDocumentType notations]):
        (-[WebCoreDOMDocumentType publicId]):
        (-[WebCoreDOMDocumentType systemId]):
        (-[WebCoreDOMDocumentType internalSubset]):
        (+[WebCoreDOMImplementation implementionatWithImpl:DOM::]):
        (-[WebCoreDOMImplementation initWithImpl:DOM::]):
        (-[WebCoreDOMImplementation dealloc]):
        (-[WebCoreDOMImplementation DOM::]):
        (-[WebCoreDOMImplementation hasFeature::]):
        (-[WebCoreDOMImplementation createDocument:::]):
        (+[WebCoreDOMDocument documentWithImpl:DOM::]):
        (-[WebCoreDOMDocument initWithImpl:DOM::]):
        (-[WebCoreDOMDocument dealloc]):
        (-[WebCoreDOMDocument DOM::]):
        (-[WebCoreDOMDocument doctype]):
        (-[WebCoreDOMDocument implementation]):
        (-[WebCoreDOMDocument documentElement]):
        (-[WebCoreDOMDocument createElement:]):
        (-[WebCoreDOMDocument createElementNS::]):
        (-[WebCoreDOMDocument createDocumentFragment]):
        (-[WebCoreDOMDocument createTextNode:]):
        (-[WebCoreDOMDocument createComment:]):
        (-[WebCoreDOMDocument createCDATASection:]):
        (-[WebCoreDOMDocument createProcessingInstruction::]):
        (-[WebCoreDOMDocument createAttribute:]):
        (-[WebCoreDOMDocument createAttributeNS::]):
        (-[WebCoreDOMDocument createEntityReference:]):
        (-[WebCoreDOMDocument getElementById:]):
        (-[WebCoreDOMDocument getElementsByTagName:]):
        (-[WebCoreDOMDocument getElementsByTagNameNS::]):
        (-[WebCoreDOMDocument importNode::]):
        * kwq/WebCoreDOMNode.mm: Added.
        (DOM::NamedNodeMapImpl::createInstance):
        (DOM::AttrImpl::createInstance):
        (+[WebCoreDOMNode nodeWithImpl:DOM::]):
        (-[WebCoreDOMNode initWithImpl:DOM::]):
        (-[WebCoreDOMNode DOM::]):
        (-[WebCoreDOMNode dealloc]):
        (-[WebCoreDOMNode nodeName]):
        (-[WebCoreDOMNode nodeValue]):
        (-[WebCoreDOMNode setNodeValue:]):
        (-[WebCoreDOMNode nodeType]):
        (-[WebCoreDOMNode parentNode]):
        (-[WebCoreDOMNode firstChild]):
        (-[WebCoreDOMNode lastChild]):
        (-[WebCoreDOMNode previousSibling]):
        (-[WebCoreDOMNode nextSibling]):
        (-[WebCoreDOMNode ownerDocument]):
        (-[WebCoreDOMNode insert:before:]):
        (-[WebCoreDOMNode replace:child:]):
        (-[WebCoreDOMNode removeChild:]):
        (-[WebCoreDOMNode hasChildNodes]):
        (-[WebCoreDOMNode cloneNode:]):
        (-[WebCoreDOMNode normalize]):
        (-[WebCoreDOMNode isSupported::]):
        (-[WebCoreDOMNode namespaceURI]):
        (-[WebCoreDOMNode prefix]):
        (-[WebCoreDOMNode setPrefix:]):
        (-[WebCoreDOMNode localName]):
        (+[WebCoreDOMNodeList nodeListWithImpl:DOM::]):
        (-[WebCoreDOMNodeList initWithImpl:DOM::]):
        (-[WebCoreDOMNodeList DOM::]):
        (-[WebCoreDOMNodeList dealloc]):
        (+[WebCoreDOMNamedNodeMap namedNodeMapWithImpl:DOM::]):
        (-[WebCoreDOMNamedNodeMap initWithImpl:DOM::]):
        (-[WebCoreDOMNamedNodeMap DOM::]):
        (-[WebCoreDOMNamedNodeMap dealloc]):
        (-[WebCoreDOMNamedNodeMap length]):
        (-[WebCoreDOMNamedNodeMap getNamedItem:]):
        (-[WebCoreDOMNamedNodeMap setNamedItem:]):
        (+[WebCoreDOMAttr attrWithImpl:DOM::]):
        (-[WebCoreDOMAttr initWithImpl:DOM::]):
        (-[WebCoreDOMAttr DOM::]):
        (-[WebCoreDOMAttr dealloc]):
        (-[WebCoreDOMAttr name]):
        (-[WebCoreDOMAttr specified]):
        (-[WebCoreDOMAttr value]):
        (-[WebCoreDOMAttr ownerElement]):
        (+[WebCoreDOMCDATASection CDATASectionWithImpl:DOM::]):
        (-[WebCoreDOMCDATASection initWithImpl:DOM::]):
        (-[WebCoreDOMCDATASection DOM::]):
        (-[WebCoreDOMCDATASection dealloc]):
        * kwq/WebCoreDOMPrivate.h: Added.
        * kwq/WebDOMDocument.h: Added.
        * kwq/WebDOMElement.h: Added.
        * kwq/WebDOMNode.h: Added.

2002-10-09  David Hyatt  <hyatt@apple.com>

	Fix a bug in my event handling code for layers.   This makes
	the links on ESPN.com work again (bug 3051636).  Yay!
	
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        * khtml/xml/dom_elementimpl.cpp:
        (NamedAttrMapImpl::removeNamedItem):
        * kwq/qt/qrect.h:

2002-10-07  Darin Adler  <darin@apple.com>

	- fixed 3037353 -- align="middle" elements not horizontally centered

        * khtml/html/html_blockimpl.cpp: (HTMLDivElementImpl::parseAttribute):
        * khtml/html/html_tableimpl.cpp: (HTMLTablePartElementImpl::parseAttribute):
	Handle "middle" same as center in these two places.

2002-10-07  Darin Adler  <darin@apple.com>

	WebCore part of implementation of multipart forms posting.

        * kwq/WebCoreBridge.h: Add a contentType parameter to the bridge's
	[postWithURL:referrer:data:] method.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::submitForm):
	Extract the content type from the args, and pass it along to the bridge.

2002-10-07  Darin Adler  <darin@apple.com>

	- fixed 3011025 -- Page up/down is not working when text area has focus

        * kwq/KWQTextArea.mm:
        (-[KWQTextArea needsPanelToBecomeKey]): Return YES so we are considered a
	valid key view even when in normal tabbing mode. This fixes a problem with
	tabbing backwards into a text area.
        (-[KWQTextAreaTextView scrollPageUp:]): Added. Passes a scrollPageUp:
	selector along the responder chain if we are already scrolled to the top.
        (-[KWQTextAreaTextView scrollPageDown:]): Ditto.

        * kwq/KWQNSTextField.mm: Remove unnecessary overrides of textDidEndEditing.
	Turns out the real fix was to override display to do nothing as a workaround
	for bug 2753974.

2002-10-07  Richard Williamson   <rjw@apple.com>

        Added response to WebCore's CachedObject.  This allows us to correctly
        emulate the WebResourceLoadDelegate API when 're'loading an item
        from the WebCore cache.  
        
        * khtml/misc/loader.cpp:
        (CachedObject::~CachedObject):
        (CachedObject::setResponse):
        (Loader::receivedResponse):
        * khtml/misc/loader.h:
        * kwq/KWQLoaderImpl.h:
        * kwq/KWQLoaderImpl.mm:
        (-[WebCoreResourceLoader receivedResponse:]):
        (KWQCheckCacheObjectStatus):
        (KWQRetainResponse):
        (KWQReleaseResponse):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreResourceLoader.h:

2002-10-06  Darin Adler  <darin@apple.com>

	- fixed 3046737 -- infinite loop in font name matching code on some pages

        * kwq/KWQString.mm: (QString::replace): Removed the incorrect early exit if
	the passed in string was the empty string.

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

        * kwq/KWQKURL.mm: (KURL::parse): Fix code that adds "//" to file URLs.
	The code was including the extra slashes as part of the path, which they are not.
	Verified with the tests in the Tests directory.

2002-10-03  Darin Adler  <darin@apple.com>

	- fixed 3065730 -- Crash loading "My T-Mobile" page (in khtml::Decoder::decode)

        * khtml/misc/decoder.cpp: (Decoder::decode): Fixed a mistake that would cause
	the loop to run off the end of the buffer, introduced back on 2002-08-30.

2002-10-03  Darin Adler  <darin@apple.com>

	Add API to execute JavaScript.

        * kwq/WebCoreBridge.h: Add method.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge executeJavaScriptFromString:]): Call through to
	KHTML. But only if the document is not nil. We need to figure out
	what to do in the case where the document is nil.

=== Alexander-26 ===

2002-10-02  Darin Adler  <darin@apple.com>

	Moved "overURL" handling out of WebCore into WebKit and Alex.
	Also separated the two levels of the "element dictionary" so they
	don't rely on having the same keys.

        * khtml/khtml_part.h: Revert the APPLE_CHANGES to overURL.
        * khtml/khtml_part.cpp:
        (KHTMLPart::overURL): Removed the APPLE_CHANGES and just ifdef'd out
	the whole thing for our version.
        (KHTMLPart::khtmlMouseMoveEvent): Get rid of the APPLE_CHANGES and
	don't do any of the status bar setup.

        * kwq/KWQKHTMLPartImpl.h: Remove overURL.
        * kwq/KWQKHTMLPartImpl.mm: Ditto.

        * kwq/WebCoreBridge.h: Change keys so they don't match the WebKit ones so
	we don't accidentally rely on that. Add WebCoreElementLinkTarget.

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge elementAtPoint:]): Add code to
	set up WebCoreElementLinkTarget.

2002-10-01  Darin Adler  <darin@apple.com>

	- fixed 3055076 -- window.scroll does a window.scrollby, not a window.scrollto

        * khtml/ecma/kjs_window.cpp: (WindowFunc::tryCall): Moved a case so that the
	scroll code would scroll to, not by.

2002-10-01  David Hyatt  <hyatt@apple.com>

	Fix the case sensitivity problem with attribute names 
	in HTML.  They are now lower-cased when being queried
	from the DOM. Bug 3058145.
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::attrName):

2002-10-01  David Hyatt  <hyatt@apple.com>

	Make sure to keep the fix checked in for 1.18.  That fix is
	good.
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::addColInfo):

2002-10-01  David Hyatt  <hyatt@apple.com>

	Backing out change to render_table.cpp.  The original logic
	(in version 1.16) is correct.
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::addColInfo):

2002-09-30  Darin Adler  <darin@apple.com>

        * kwq/qt/qobject.h: Add the destroyed signal.
        * kwq/KWQObject.mm:
        (QObject::connect): Remove names of parentDestroyed and slotWidgetDestructed
	from the list of "slots OK to fail to connect without complaining".
        (QObject::QObject): Initialize the destroyed signal.

        * kwq/qt/qguardedptr.h:
        * kwq/KWQGuardedPtr.mm:
        * kwq/KWQSignal.h:
        * kwq/KWQSlot.h:
	Rearrange includes so qobject.h can include KWQSignal.h.

        * kwq/KWQSignal.mm: Tweak.

        * kwq/KWQSlot.mm: Added support for the parentDestroyed slot in KJS::WindowQObject
	and the slotWidgetDestructed slot in khtml::RenderWidget.

2002-09-28  Darin Adler  <darin@apple.com>

	Turn -Werror back on. There must have been some miscommunication
	about the fat build; this was supposed to have been on.

        * WebCore.pbproj/project.pbxproj: Add -Werror back.

        * kwq/WebCoreHistory.h: Add missing method to fix warning.
        * kwq/KWQKHistoryProvider.mm: Tweak.

2002-09-28  Darin Adler  <darin@apple.com>

	Give the next fat build a better chance of working with the
	new gcc without turning -Werror off.

        * khtml/css/cssparser.cpp: Use a macro to disable inlining.
        * khtml/html/htmltokenizer.cpp: Ditto.
        * khtml/misc/htmlhashes.cpp: Ditto.

2002-09-28  Darin Adler  <darin@apple.com>

	- fixed 3022441 -- scroll bar is missing in window created with window.open

        * khtml/ecma/kjs_window.cpp: (WindowFunc::tryCall): The checks for extra
	parameters to window.open were using isNull, which checks for a null ValueImp
	pointer, not an "Undefined".

2002-09-28  Darin Adler  <darin@apple.com>

	- fixed 2886111 -- changing font or size preference causes open
	windows to redraw incorrectly

        * khtml/rendering/render_table.cpp: (RenderTable::addColInfo):
	Fix logic about when a recalc of the minWidth and maxWidth is needed.

	Fixed bug where changing the text size multiplier would cause the
	window to redraw twice -- once with the text size changed, and then
	later with the layout changed.

        * khtml/khtmlview.h: Added unscheduleRelayout.
        * khtml/khtmlview.cpp: (KHTMLView::unscheduleRelayout): Added.

        * kwq/KWQKHTMLPartImpl.h: Added forceLayout.
        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::forceLayout): Call
	both layout and unscheduleRelayout.

        * kwq/WebCoreBridge.h: Add setNeedsLayout.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge forceLayout]): Call KWQKHTMLPartImpl::forceLayout.
        (-[WebCoreBridge setTextSizeMultiplier:]): Call forceLayout.

2002-09-27  Darin Adler  <darin@apple.com>

        * khtml/rendering/render_table.cpp: (RenderTable::addColInfo):
	Fixed a > that should have been a < that prevented tables from
	changing sizes when table minimum widths changed.

2002-09-27  Darin Adler  <darin@apple.com>

	- fixed 2937198 -- Checkboxes and radiobuttons don't align with title control in forms

        * kwq/qt/qcheckbox.h: Add baselinePosition override.
        * kwq/KWQCheckBox.mm: Tweak the size constants.
        (QCheckBox::baselinePosition): Implement this. Line up baseline two pixels
	above the bottom, not at the bottom.

        * kwq/qt/qradiobutton.h: Add baselinePosition override.
        * kwq/KWQRadioButton.mm: Tweak the size constants.
        (QRadioButton::baselinePosition): Implement this. Line up baseline two pixels
	above the bottom, not at the bottom.

2002-09-27  Chris Blumenberg  <cblu@apple.com>

	WebPlugin clean up.

        * kwq/KWQKConfigBase.mm:
        (KConfig::readEntry):
        * kwq/WebCoreViewFactory.h:

2002-09-27  Richard Williamson   <rjw@apple.com>

        Fixed 3059237:  Visited links do not appear in a different color on yahoo.com
        Fixed 3051288:  visited links are not colored in local files
        Fixed 3060158:  REGRESSION: iframes added to session history
        Always use the canonical originally requested URL as the URL entered in history.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::begin):
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::requestedURLString):
        * kwq/KWQKHistoryProvider.mm:
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreHistory.h:

2002-09-28  David Hyatt  <hyatt@apple.com>

	Fix for 3058119, doctype of HTML docs should be null.
	
        * khtml/dom/dom_doc.cpp:

2002-09-28  David Hyatt  <hyatt@apple.com>

	DOM compliance. Fix for 3058100, hasFeature of HTML returns
	false. Oops.
	
        * khtml/xml/dom_docimpl.cpp:
        (DOMImplementationImpl::hasFeature):

2002-09-27  Darin Adler  <darin@apple.com>

	- fixed 3060487 -- error connecting member slot to signal (KWQObject)

        * kwq/KWQObject.mm: (QObject::connect): Add slotShowDocument to the list of slots that
	we don't care about hooking up.

2002-09-26  Darin Adler  <darin@apple.com>

	- fixed 2953256 -- JavaScript window.moveTo() and window.moveBy() methods do not work

        * kwq/KWQWindowWidget.mm: (KWQWindowWidget::frameGeometry): Fix calculation.
	It was returning the bottom left coordinate instead of the top left.

2002-09-26  Darin Adler  <darin@apple.com>

	- fixed 3060459 -- REGRESSION: crash leaving page that sets cookie in JavaScript
	unload handler

        * khtml/khtml_part.cpp: (KHTMLPart::begin): Call updatePolicyBaseURL to set
	the "policy base URL" on the documents so the cookie can be based on the URL
	of the main document.

        * khtml/dom/html_document.h: Add setPolicyBaseURL.
        * khtml/dom/html_document.cpp: (HTMLDocument::setPolicyBaseURL): Call the impl.

        * khtml/html/html_documentimpl.h: Add policyBaseURL, setPolicyBaseURL.
        * khtml/html/html_documentimpl.cpp: (HTMLDocumentImpl::setCookie): Pass the
	base URL that's stored here instead of getting at the part through the view,
	since the view will be 0 during the unload event.

        * kwq/KWQKHTMLPartImpl.h: Add updatePolicyBaseURL and setPolicyBaseURL.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::updatePolicyBaseURL): Set the base URL based on the URL
	if this is the topmost part, based on the parent's policy base URL if this
	is not the topmost part.
        (KWQKHTMLPartImpl::setPolicyBaseURL): Change the policy base URL for this
	part and all the subparts.

2002-09-26  Darin Adler  <darin@apple.com>

        * kwq/WebCoreBridge.h: Use NSString for encoding name, not CFStringEncoding.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge addData:withOverrideEncoding:]): Ditto.

2002-09-26  Chris Blumenberg  <cblu@apple.com>

	Added WebCoreElementImageLocationKey to the element dictionary.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]):

=== Alexander-25 ===

2002-09-25  David Hyatt  <hyatt@apple.com>

	Implement scrollX and scrollY on the window object.  This
	gets brainjar closer to reality. :)
	
        * khtml/ecma/kjs_window.cpp:
        (Window::get):
        * khtml/ecma/kjs_window.h:

2002-09-25  Darin Adler  <darin@apple.com>

	Fix error with the color "indigo".

        * kwq/KWQColor.mm: (getNamedColors): There were some spaces in our
	color table so we wouldn't handle indianred or indigo.

2002-09-25  Maciej Stachowiak  <mjs@apple.com>

	- fixed 2854536 - New cookie policy: "accept cookies only from the
	same domain as the main page"
	
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::setCookie):
        * kwq/KWQKCookieJar.h:
        * kwq/KWQKCookieJar.mm:
        (KWQKCookieJar::setCookie):
        * kwq/WebCoreCookieAdapter.h:
        * kwq/WebCoreCookieAdapter.m:
        (-[WebCoreCookieAdapter setCookies:forURL:policyBaseURL:]):

2002-09-24  Darin Adler  <darin@apple.com>

	- fixed 3057928 -- lstat private/etc/localtime repeatedly reported
	by fs_usage when mouse is moved

        * WebCore-tests.exp: Remove now-unneeded external entry points
	for QTime, QDate, QDateTime.

        * kwq/qt/qdatetime.h:
        * kwq/KWQDateTime.mm:
	Redid QDateTime using CoreFoundation instead of time/localtime.
	This avoids constantly hitting the disk when getting the current
	time to stuff into an event.

2002-09-24  David Hyatt  <hyatt@apple.com>

	Make sure we dispatch both a capturing and a bubbling event
	to target nodes. DOM lvl 2 event compliance.
	
        * ChangeLog:
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeImpl::dispatchGenericEvent):

2002-09-24  Richard Williamson   <rjw@apple.com>

        Fixed 3055078.  Ensure file: URLs have // before path.
        
        * kwq/KWQKURL.mm:
        (KURL::parse):

2002-09-24  David Hyatt  <hyatt@apple.com>

	Better fix.  Clears the boolean when CLASS has no value.
	This will keep the style system from thinking you have
	a class when you don't.
	
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::parseAttribute):

2002-09-24  David Hyatt  <hyatt@apple.com>

	Fix updating of the document's notion of the focused node
	to happen on mouse down rather than click.  This matches
	the behavior of all other browsers (IE, Gecko, etc.).

	This fixes the drawing of the outline on the brainjar.com
	DHTML menus.
	
        * khtml/khtmlview.cpp:
        (KHTMLView::dispatchMouseEvent):

2002-09-24  David Hyatt  <hyatt@apple.com>

	Make sure that changes to the CLASS attribute mark the
	element as changed (as if a CSS property were added or
	removed).

	This makes the brainjar.com rollovers work much better.
	
        * khtml/html/html_elementimpl.cpp:
        (HTMLElementImpl::parseAttribute):

2002-09-24  Chris Blumenberg  <cblu@apple.com>

	Renamed element info keys to WebElement* instead of WebContextMenuElement*

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]):

2002-09-24  Darin Adler  <darin@apple.com>

	- fixed 3056579 -- various crashes at http://www.auspost.com.au/

	Apparently the strings at this site were just the right length to expose a bug
	in our QString implementation, one that I probably introduced when fixing 3032072.
	One nice thing about this is that getting this correct could also result in a
	little bit of a speedup, as the internal buffer is used more.

        * kwq/KWQString.mm:
        (QStringData::makeAscii): Set _maxAscii to QS_INTERNAL_BUFFER_CHARS when using
	the internal buffer instead of leaving it uninitialized.
        (QStringData::makeUnicode): Same for _maxUnicode.

2002-09-24  Darin Adler  <darin@apple.com>

	Remove the focus border hack, which was no longer doing us any good.

        * kwq/KWQNSTextField.h: Don't define FOCUS_BORDER_SIZE.
        * kwq/KWQNSTextField.mm: Remove KWQTextFieldCell.
        (-[KWQNSTextField updateSecureFieldFrame]): Don't inset by FOCUS_BORDER_SIZE.
        * kwq/qt/qlineedit.h: Don't override frameGeometry and setFrameGeometry any more.
        * kwq/KWQLineEdit.mm: (QLineEdit::sizeForCharacterWidth): Don't subtract
	the focus border size.

2002-09-24  Darin Adler  <darin@apple.com>

        * kwq/mac-encodings.txt: Remove constant for Japanese auto-detect.

2002-09-24  Darin Adler  <darin@apple.com>

        * kwq/KWQFileButton.mm: (KWQFileButton::paint): Fix typo.

2002-09-24  Darin Adler  <darin@apple.com>

	Some improvements to the file button, including displaying the file without the
	extension if it's set that way by the user, and using the system font rather
	than hard-coding "Lucida Grande".

        * kwq/KWQFileButton.h: Add _label field.
        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton): Set up label.
        (KWQFileButton::~KWQFileButton): Release label.
        (KWQFileButton::setFilename): Use NSFileManager componentsToDisplayForPath to
	figure out the appropriate label.
        (KWQFileButton::paint): Clip to passed-in rect, get font using systemFontOfSize,
	and use NSString drawing rather than our own.

2002-09-23  David Hyatt  <hyatt@apple.com>

	Found the problem with the CSS W3C page.
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::recalcStyleSelector):

2002-09-23  Darin Adler  <darin@apple.com>

	WebCore part of fixes for proper layering when drawing subframes.

        * kwq/KWQWidget.mm: (QWidget::paint): Use the parent view in the "WebCoreFrameView"
	case so we update the scroll view too, not just the HTML part. Also use the passed in
	rectangle instead of always using the view bounds.

        * kwq/KWQScrollView.mm: (QScrollView::updateContents): Call setNeedsDisplayInRect
	instead of displayRect.

        * kwq/KWQPainter.mm:
        (QPainter::drawRect): Use NSRectFill and NSFrameRect instead of NSBezierPath.
        (QPainter::fillRect): Ditto.

2002-09-23  David Hyatt  <hyatt@apple.com>

	Don't let alternate stylesheets delay render tree construction.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::HTMLLinkElementImpl):
        (HTMLLinkElementImpl::process):
        (HTMLLinkElementImpl::setStyleSheet):
        (HTMLLinkElementImpl::sheetLoaded):
        * khtml/html/html_headimpl.h:

\2002-09-23  David Hyatt  <hyatt@apple.com>

	Make overflow:auto and scroll map to hidden until we figure
	out something better.
	
        * khtml/css/cssstyleselector.cpp:
 
2002-09-23  Darin Adler  <darin@apple.com>

	More refinement of the AppKit hackery.

        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::printObject): Pass in the painter and rect.

        * kwq/qt/qwidget.h: Take a painter and rect parameter.
        * kwq/KWQWidget.mm: (QWidget::paint): Use painter; not working yet to use rect.

        * kwq/KWQFileButton.h: Change paint to take painter and rect.
        * kwq/KWQFileButton.mm: (KWQFileButton::paint): Use painter.

        * kwq/qt/qpainter.h: Added paintingDisabled() function.
        * kwq/KWQPainter.mm: (QPainter::paintingDisabled): Added.

2002-09-22  Darin Adler  <darin@apple.com>

	Change code that moves NSViews out of the way to run inside drawRect
	after a layout change rather than running at layout time. This makes
	sure that views are in the right place when propagating dirty rects.

        * kwq/KWQKHTMLPartImpl.h: Add paint method and _needsToSetWidgetsAside flag.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::KWQKHTMLPartImpl): Set _needsToSetWidgetsAside to false.
        (KWQKHTMLPartImpl::layout): Set _needsToSetWidgetsAside to true. Don't call
	moveWidgetsAside any more.
        (KWQKHTMLPartImpl::paint): Moved the code here from the bridge, but also call
	moveWidgetsAside if _needsToSetWidgetsAside flag is set.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]): Call KWQKHTMLPartImpl::paint, which
	is where I moved this code.

2002-09-21  Darin Adler  <darin@apple.com>

	- fixed 3057265 -- REGRESSION: Crash loading http://www.undetectables.co.uk/

        * khtml/khtml_part.cpp: (KHTMLPart::processObjectRequest):
	Remove special case for javascript and about:blank that was leading to a crash.

2002-09-21  Darin Adler  <darin@apple.com>

	WebCore part of the new approach to AppKit drawing control.
	Works better than the previous try. Once we fix anomalies with focus rectangles
	and a minor problems with subframes this should work perfectly.

        * kwq/qt/qwidget.h: The paint() method isn't virtual any more. Also remove flushDrawing().
        * kwq/KWQWidget.mm: (QWidget::enableFlushDrawing): Do a flushWindowIfNeeded instead
	of requiring a separate flushDrawing() call to do a flushWindow.
        (QWidget::paint): Added. Calls displayRectIgnoringOpacity.

        * kwq/qt/qbutton.h: Remove paint() override.
        * kwq/KWQButton.mm: (QButton::QButton): No need for a subclass any more, so
	drop KWQNSButton. Also remove paint().

        * kwq/qt/qcombobox.h: Remove paint() override.
        * kwq/KWQComboBox.mm: (QComboBox::QComboBox): No need for a subclass any more, so
	drop KWQNSPopUpButton. Also remove paint() method.

        * kwq/qt/qlineedit.h: Remove paint() override.
        * kwq/KWQLineEdit.mm: Remove paint().

        * kwq/KWQFileButton.mm: (KWQFileButton::clicked): Fix typo. Was calling paint
	instead of clicked on the base class.

        * kwq/KWQNSTextField.h: Remove paint method.
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField display]): Add a display method that does nothing to work around
	bug 2753974.
        (-[KWQSecureTextField display]): Ditto.

	* khtml/rendering/render_frames.cpp: (RenderFrameSet::userResize): Remove call to flushDrawing.

2002-09-20  Richard Williamson   <rjw@apple.com>

        Don't modify selection if no appropriate DOM::Node under
        mouse.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::khtmlMouseMoveEvent):

2002-09-20  Richard Williamson   <rjw@apple.com>

        Assume triple click for selection if click count >= 3,
        not == 3, as in OS X.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::khtmlMousePressEvent):

2002-09-20  Richard Williamson   <rjw@apple.com>

        Fixed crasher in findTextSlave.
        * khtml/rendering/render_text.cpp:
        (RenderText::findTextSlave):

        Added error checks.
        * khtml/khtml_part.cpp:
        (startAndEndLineNodesIncludingNode):

2002-09-20  Richard Williamson   <rjw@apple.com>

        Made double and triple click selection behave like
        like other selection in OS X.  That is, selection happens
        on mouse down, not mouse up, and can be extended by
        further dragging.  Triple click followed by dragging extends
        the selection a line at a time.
        
        * khtml/khtml_events.cpp:
        * khtml/khtml_events.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::customEvent):
        (firstSlaveAt):
        (lastSlaveAt):
        (startAndEndLineNodesIncludingNode):
        (KHTMLPart::khtmlMousePressEvent):
        (KHTMLPart::khtmlMouseDoubleClickEvent):
        (KHTMLPart::khtmlMouseMoveEvent):
        * khtml/khtml_part.h:
        * khtml/khtmlpart_p.h:
        * khtml/khtmlview.cpp:
        * khtml/khtmlview.h:
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::setAttribute):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):

2002-09-20  Darin Adler  <darin@apple.com>

        * kwq/KWQFileButton.h: Add an icon.
        * kwq/KWQFileButton.mm:
        (KWQFileButton::KWQFileButton): Nil out icon.
        (KWQFileButton::~KWQFileButton): Release icon.
        (KWQFileButton::setFilename): Get icon with [NSWorkspace iconForFile:].
        (KWQFileButton::clicked): Set prompt string to "Choose", and start directory to "~".
        (KWQFileButton::sizeHint): Pad more for icon width.
        (KWQFileButton::frameGeometry): Ditto.
        (KWQFileButton::setFrameGeometry): Ditto.
        (KWQFileButton::paint): Draw icon. Draw "no file selected" if no filename.

        * kwq/KWQKFileItem.mm: Our "nonimplementation" is good enough. Stop complaining.
        * kwq/KWQKnetaccess.mm: Ditto. Also just extract path when asked to download.

2002-09-20  Darin Adler  <darin@apple.com>

	Some first steps toward implementing input=file.

        * khtml/rendering/render_form.cpp:
        (RenderFileButton::RenderFileButton): Create a KWQFileButton as the widget.
        (RenderFileButton::calcMinMaxWidth): Use sizeHint().
        (RenderFileButton::updateFromElement): Call setFilename().
        (RenderFileButton::select): Don't try to selectAll() on m_edit.

        * kwq/KWQFileButton.h: Added.
        * kwq/KWQFileButton.mm: Added.
        * kwq/qt/qhbox.h: Emptied.
        * kwq/KWQHBox.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Removed KWQHBox.mm. Added KWQFileButton.

2002-09-20  Darin Adler  <darin@apple.com>

	- fixed 3056605 -- REGRESSION: blank page at http://www.2ch.net/2ch.html

        * kwq/mac-encodings.txt: When people say ShiftJIS, they really mean
	DOSJapanese. So do what they mean, not what they say.

2002-09-20  Darin Adler  <darin@apple.com>

	- fixed 3055339 -- repro crash in RenderPartObject::updateWidget()

        * khtml/khtml_part.cpp: (KHTMLPart::processObjectRequest):
	Only create a new part if we have no old part.

        * kwq/KWQtextstream.mm: Remove some of the "not implemented" logging.
	Once we have logged that the stream is not created correctly, there's no need
	to continue logging each time something is written out to the non-stream.

2002-09-19  Richard Williamson   <rjw@apple.com>

        Implemented double and triple click selection.
        
        * khtml/khtml_events.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::customEvent):
        (KHTMLPart::khtmlMouseDoubleClickEvent):
        (firstSlaveAt):
        (lastSlaveAt):
        (KHTMLPart::khtmlMouseTripleClickEvent):
        * khtml/khtml_part.h:
        * khtml/rendering/render_text.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):

2002-09-19  Darin Adler  <darin@apple.com>

	- fixed 3045651 -- null-dereference in DOM::CharacterDataImpl constructor
	setting up text area element

        * khtml/xml/dom_textimpl.cpp: (CharacterDataImpl::CharacterDataImpl):
	Set str to an empty DOMStringImpl instead of to 0. This was easier than
	going around finding all the places that don't like a str of 0.

        * WebCore.pbproj/project.pbxproj: Let PB sort things as it likes.

=== Alexander-24 ===

2002-09-18  Darin Adler  <darin@apple.com>

	- fixed 3037974 -- successful Find does not deselect text field

        * khtml/khtml_part.cpp: (KHTMLPart::checkCompleted):
	Turn off the code that restores the cursor position because we don't
	use the KHTML saveState/restoreState. But we should.

        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::setSelection): Call setFocusNode(0), because on the
	Macintosh, selection and focus are mutually exclusive.
        (DocumentImpl::close): Remove no-longer-needed APPLE_CHANGES.
        (DocumentImpl::setFocusNode): Set focus to the KHTMLView when focus
	is being removed from a particular node. Clear the selection when
	focus is set on a particular node because on the Macintosh, selection
	and focus are mutually exclusive.

        * kwq/KWQKHTMLPartImpl.h: Add set/clearDocumentFocus functions that we can use
	to keep document's idea of focused node in sync. with AppKit's.
        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::setDocumentFocus): Added.
	(KWQKHTMLPartImpl::clearDocumentFocus): Added.

        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField becomeFirstResponder]): Call setDocumentFocus.
        (-[KWQSecureTextField becomeFirstResponder]): Call setDocumentFocus.

        * kwq/qt/qwidget.h: Removed endEditing().
        * kwq/KWQWidget.mm: (QWidget::clearFocus): Call clearDocumentFocus.
	(QWidget::endEditing): Removed.

        * khtml/rendering/render_form.h:
        * khtml/rendering/render_form.cpp:
        (RenderImageButton::RenderImageButton): Remove the KWQInvisibleButton
	hack, which is no longer needed.
        * kwq/KWQInvisibleButton.h: Removed.
        * kwq/KWQInvisibleButton.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Removed KWQInvisibleButton.

2002-09-18  Darin Adler  <darin@apple.com>

	- fixed 3027470 -- hitting tab when the google.com text field is selected
	(all bars hidden) makes border flash

        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField textDidEndEditing:]): Added. Don't call super when the next
	valid key view is nil.
        (-[KWQSecureTextField textDidEndEditing:]): Ditto. Too bad we can't share code
	here. Maybe I'll figure out a way later.

2002-09-17  Darin Adler  <darin@apple.com>

	- fixed 3025022 -- Crash in KWQKHTMLPartImpl::redirectionTimerStartedOrStopped()

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge dealloc]): Set the bridge on the part to
	nil just in case someone else is holding a reference, so we won't try to dispatch
	methods to an already-deallocated bridge.

	- fixed 3028476 -- illegal instruction crash in KWQTimerCallback timerFired

        * khtml/ecma/kjs_window.cpp: (WindowQObject::parentDestroyed):
	Remove APPLE_CHANGES to avoid calling killTimers(); we can call it
	now that we have a working implementation.
        * khtml/khtmlview.cpp:
        (KHTMLView::~KHTMLView): Remove APPLE_CHANGES that kills timers.
	All timers are killed by ~QObject now, just as in Qt.
        (KHTMLView::clear): Remove APPLE_CHANGES to avoid calling killTimers();
	we can call it now that we have a working implementation.

        * kwq/KWQObject.mm:
        (QObject::~QObject): Call killTimers().
        (QObject::startTimer): Keep a dictionary keyed by QObject, with a dictionary
	of timers for each, rather than one global dictionary. This makes it efficient
	to kill all the timers for an object.
        (QObject::killTimer): Update for new level of dictionary.
        (QObject::killTimers): Kill all the timers in this object's timer dictionary
	rather than all timers in the world.
        (QObject::inherits): Add an ERROR for the case where the class name is unknown.

2002-09-17  Darin Adler  <darin@apple.com>

	- fixed 3050818 -- Crash in relative-KURL constructor at site with _ in host name

        * kwq/KWQKURL.mm: Change _ so that it's allowed in host names.
        (KURL::KURL): If base URL is invalid, make result invalid too.

2002-09-17  Richard Williamson   <rjw@apple.com>

        * khtml/khtmlview.cpp:
        (KHTMLView::viewportMouseTripleClickEvent):
        Added implementation.  Same as viewportMouseReleaseEvent
        except dispatches additional MouseTripleClickEvent event.
        
        (KHTMLView::viewportMouseDoubleClickEvent):
        Send extra release event.  This emulates Qt
        behavior.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):
        Don't send extra release event here, instead send
        it in viewportMouseDoubleClickEvent and also in
        viewportMouseTripleClickEvent so DOM doesn't get
        confused.
        
        * kwq/KWQColor.mm:
        (QColor::hsv):
        Fixed divide by 0 problem.
        
2002-09-17  Darin Adler  <darin@apple.com>

	- fixed 2936933 -- Pages that claim to be UTF-8 but contain invalid
	sequences do not render at all

	Misc. speed improvements. Total 2.6% speedup for cvs-base.

	Improvements for signals.

        * kwq/KWQChar.mm:
        (QChar::isSpace): Add fast case for ASCII.
        (QChar::lower): Add fast case for ASCII.
        (QChar::upper): Add fast case for ASCII.

        * kwq/qt/qcolor.h: Just store RGB values, not NSColor objects.
        * kwq/KWQColor.mm:
        (QColor::QColor): No need to set color to nil.
        (QColor::name): Use QString::sprintf instead of NSString.
        (QColor::setNamedColor): Use KWQInvalidColor instead of nil.
        (QColor::getNSColor): Make an autoreleased NSColor.

        * kwq/KWQKHTMLPartImpl.mm:
        (moveWidgetsAside): Use isWidget() instead of dynamic_cast.

        * kwq/KWQSignal.h: use a QValueList instead of a fixed-size array.
        * kwq/KWQSignal.mm:
        (KWQSignal::connect): Append to list.
        (KWQSignal::disconnect): Remove from list.
        (KWQSignal::call): Use the QValueList.

        * kwq/KWQSlot.mm:
        (KWQSlot::call): Use static_cast instead of dynamic_cast where possible.

        * kwq/qt/qstring.h: Add return value to forceUnicode.
        * kwq/KWQString.mm:
        (QString::fromStringWithEncoding): Implemented using the Text Encoding
	Converter instead of CFString.
        (compareIgnoringCaseForASCIIOnly): New function. Faster find.
        (QString::find): Separate case-sensitive from case-insensitive and speed
	up both of them.
        (QString::stripWhiteSpace): Use the new forceUnicode for simplicity.
        (QString::simplifyWhiteSpace): Ditto.
        (QString::insert): Ditto.
        (QString::remove): Ditto.
        (QString::forceUnicode): Return the unicode pointer.
        (QString::fill): Use the new forceUnicode for simplicity.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]): Fix two bugs. First, don't treat a slow
	click as a double click. Second, deliver a mouse release event even for
	a double click, as Qt does.

2002-09-17  Richard Williamson   <rjw@apple.com>

        * khtml/css/cssstyleselector.cpp:
        Fixed bug in KHTML that incorrectly modified '//' in fragment part of URL.
        
        * kwq/KWQKHistoryProvider.mm:
        Use string based API to add entry.  May eventually remove NSURL from
        history entirely.
        
        * kwq/KWQKURL.mm:
        (KURL::canonicalURL):
        Simply return the urlString.

        (KURL::parse):
        Added "/" to http and https empty path URLs.
        
        * kwq/KWQString.mm:
        (QString::mid):
        Optimize ascii case.
        
        * kwq/WebCoreHistory.h:
        * kwq/WebCoreHistory.m:
        (-[WebCoreHistory addEntryForURLString:]):
        Use string based API to add entry.
        
        * kwq/kdecore/kurl.h:
        Defined methods to access canonical components,
        currently conditionally excluded.
        
2002-09-16  David Hyatt  <hyatt@apple.com>

	Fix the stylesheet loading regression on rubyfruit.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLStyleElementImpl::HTMLStyleElementImpl):
        (HTMLStyleElementImpl::childrenChanged):
        (HTMLStyleElementImpl::isLoading):
        * khtml/html/html_headimpl.h:

2002-09-13  David Hyatt  <hyatt@apple.com>

	Landing code that makes textfields, buttons, checkboxes, radio
	buttons, and dropdown lists all draw correctly with respect to
	z-index.  They all employ the same simple hack (just never paint
	unless KHTML tells them to).

	Unpatched widgets include the password field, the listbox, and the
	textarea.  

	The only issue with regards to painting with the widgets I've
	patched is the textfield... its editor floats to the top when the
	field is being edited.

	Event handling will also be incorrect and will need to be patched
	separately.
	
        * khtml/rendering/render_body.cpp:
        (RenderBody::printBoxDecorations):
        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::printObject):
        * kwq/KWQButton.mm:
        (QButton::QButton):
        (QButton::paint):
        (-[KWQNSButton drawRect:]):
        (-[KWQNSButton paint]):
        * kwq/KWQComboBox.mm:
        (-[KWQNSPopUpButton drawRect:]):
        (-[KWQNSPopUpButton paint]):
        (QComboBox::QComboBox):
        (QComboBox::insertItem):
        (QComboBox::paint):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::paint):
        * kwq/KWQNSTextField.h:
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField paint]):
        * kwq/qt/qbutton.h:
        * kwq/qt/qcombobox.h:
        * kwq/qt/qlineedit.h:
        * kwq/qt/qwidget.h:

2002-09-13  Richard Williamson (Home)  <rjw@apple.com>

        Fixed navigation to link on mouse up after drag.
        
        * khtml/khtmlview.cpp:
        (KHTMLView::viewportMousePressEvent):
        (KHTMLView::viewportMouseDoubleClickEvent):
        Change khtml's definition of double click to be based on
        mouse up of second click, not mouse down. 
        
        (KHTMLView::viewportMouseReleaseEvent):

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):
        (-[WebCoreBridge mouseDown:]):
        Changed double click to be on mouse up with click count of two.

2002-09-13  Darin Adler  <darin@apple.com>

	Fix crash in slot code.

        * kwq/KWQSignal.mm: (KWQSignal::call): Copy the slots before
	calling through in case we are destroyed by the called function.

2002-09-13  Darin Adler  <darin@apple.com>

	Here's the *real* mistake that killed plugins. I accidentally
	stopped creating objects at all! Duh. Fixed now.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::createPart):
	Make a part for a plugin if we need one. Not a KHTMLPart, but
	a KWQPluginPart.

2002-09-13  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::createPart):
	Fix plugin-related crashes by making sure each part has a unique
	frame name. There may be something fundamentally wrong with how this
	is working now.

2002-09-13  Richard Williamson (Home)  <rjw@apple.com>

        Made justified text work correctly in khtml for rendering
        and selection.  Optimized selection point calculation by
        only doing characters measurements once.
        
        * khtml/rendering/font.cpp:
        (Font::floatCharacterWidths):
        * khtml/rendering/font.h:
        * khtml/rendering/render_text.cpp:
        (TextSlave::checkSelectionPoint):
        (RenderText::position):
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::floatCharacterWidths):
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        * kwq/WebCoreTextRenderer.h:
        * kwq/qt/qfontmetrics.h:

2002-09-13  Darin Adler  <darin@apple.com>

	Quiet error messages related to the slot/signal changes.

        * khtml/khtml_part.cpp:
        (KHTMLPart::startAutoScroll): Ifdef this out.
        (KHTMLPart::stopAutoScroll): Ditto.

        * kwq/KWQObject.mm:
        (QObject::connect): Add two more expected members to the list for
	setStatusBarText and slotViewCleared.

        * kwq/KWQSignal.h: Allow 4 slots per signal.
	I don't want to make it a variable number, but we can if we have to.
        * kwq/KWQSignal.mm:
        (KWQSignal::connect): Support multiple slots.
        (KWQSignal::disconnect): Support multiple slots.
        (KWQSignal::call): Support multiple slots.

2002-09-13  Darin Adler  <darin@apple.com>

	Fix assertion that happens on any page that has a non-HTML frame.

	We were sending signals for objects in m_objects that are only supposed
	to be sent for frames in m_frames. The fix is to use actual slot/signal
	connections instead of our hard-coded logic.

        * kwq/KWQKHTMLPartImpl.h: Add signals for started and completed.
        * kwq/KWQKHTMLPartImpl.mm:
        (KHTMLPart::completed): Emit completed signal.
        (KHTMLPart::started): Emit started signal.
        (KWQKHTMLPartImpl::KWQKHTMLPartImpl): Create signals.

        * kwq/KWQObject.mm:
        (QObject::connect): Write out an error message if we see any signal connections
	to signals that aren't implemented, with a hardwired exception list for ones we
	either aren't ever going to do or just haven't gotten around to yet.

        * kwq/KWQSignal.h: Add support for signals that take bool and KIO::Job *.
        * kwq/KWQSignal.mm:
        (KWQSignal::connect): Put in an actual ERROR call for the case where this fails.
        (KWQSignal::disconnect): Put in an actual ERROR call for the case where it fails.
        (KWQSignal::call): Add overloads for bool and KIO::Job *.

        * kwq/KWQSlot.h: Add support for slots that take bool and KIO::Job *.
        * kwq/KWQSlot.mm:
        (KWQSlot::KWQSlot): Add four new members.
        (KWQSlot::call): Add overloads for bool and KIO::Job * and support for the new
	members.

2002-09-12  Darin Adler  <darin@apple.com>

        * kwq/KWQAssertions.h: Update assertions from from the copy in WebFoundation.
        * WebCorePrefix.h: Remove NSURLPathUtilities.h include.

	Use even more of the KHTML code so we get referrers in one more place.

        * kwq/WebCoreBridge.h: Add referrer to createChildFrameNamed.

        * khtml/khtml_part.h: Less APPLE_CHANGES, no substantive change.
        * khtml/khtml_part.cpp:
        (KHTMLPart::requestFrame): Use more of this, less APPLE_CHANGES.
        (KHTMLPart::requestObject): Ditto.
        (KHTMLPart::processObjectRequest): Ditto.

        * khtml/rendering/render_frames.h: Less APPLE_CHANGES.
        * khtml/rendering/render_frames.cpp: Less APPLE_CHANGES.

        * kwq/kparts/browserextension.h: Add lockHistory/setLockHistory and
	openURLNotify.

        * kwq/khtml/khtml_ext.h: Add openURLNotify.
        * kwq/KWQKHTMLPartImpl.h: Add openURLNotify.
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::openURLNotify): Implement.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::createPart):
	Changed name from requestFrame. Do less work.

        * kwq/qt/qtimer.h: Add singleShot.
        * kwq/KWQTimer.mm:
        (+[KWQSingleShotTimerTarget targetWithQObject:member:]): Added.
	Used to implement singleShot.
        (-[KWQSingleShotTimerTarget dealloc]): Ditto.
        (-[KWQSingleShotTimerTarget timerFired:]): Ditto.
        (QTimer::singleShot): Added.

        * kwq/qt/qmap.h: Add contains.

        * kwq/qt/qvaluelist.h: Add iterator return value for append and prepend.
        * kwq/KWQValueListImpl.h: Add iterator return value for appendNode
	and prependNode.
        * kwq/KWQValueListImpl.mm:
        (KWQValueListImpl::appendNode): Add iterator.
        (KWQValueListImpl::prependNode): Add iterator.

        * kwq/kparts/part.h: Add openURL.

2002-09-12  Richard Williamson  <rjw@apple.com>

        Rewrite of khtml selection drawing code.  Now does
        a delta between old and new selection and only
        draw those objects that have changed.  Selection
        drawing is now MUCH faster.
        
        * khtml/rendering/render_root.cpp:
        (enclosingPositionedRect):
        (RenderRoot::setSelection):
        (RenderRoot::clearSelection):
        * khtml/rendering/render_root.h:
        
        Added additional absolute position property to render node
        stuff for debug render tree view.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge copyRenderNode:copier:]):

2002-09-12  David Hyatt  <hyatt@apple.com>

	KHTML was butchering the laws of background propagation from
	the <body> to the <html>.  This fixes the logical flaws and
	makes some of the geekiest CSS on the planet render correctly. ;)
	
        * khtml/rendering/render_body.cpp:
        (RenderBody::printBoxDecorations):
        * khtml/rendering/render_html.cpp:
        (RenderHtml::printBoxDecorations):

2002-09-12  David Hyatt  <hyatt@apple.com>

	Make fixed positioned elements work when you scroll.  We were
	just missing the implementation of a QScrollView method.
	
        * kwq/KWQScrollView.mm:
        (QScrollView::setStaticBackground):

2002-09-12  David Hyatt  <hyatt@apple.com>

	Fix a bug in KHTML that leads it to claim cached @imported stylesheets
	are not loaded (when in fact they are).

	This fixes the W3C CSS page.
	
        * khtml/css/css_ruleimpl.cpp:
        (CSSImportRuleImpl::init):

2002-09-12  Chris Blumenberg  <cblu@apple.com>

	Fixed livepage crash. It is naughty to divide by 0 so we now check before doing that.

        * khtml/rendering/render_box.cpp:
        (RenderBox::printBackground):

2002-09-12  David Hyatt  <hyatt@apple.com>

	Fix crash on trekweb.com.  My simplified FOUC code was a little
	bit too simple. ;)
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::setStyleSheet):
        (HTMLStyleElementImpl::childrenChanged):

2002-09-12  David Hyatt  <hyatt@apple.com>

	Fix the Warcraft 3 page on blizzard.com so that the relative
	positioned blocks inside centered tables inside enclosing tables
	with percentage widths work correctly.

	This fix also causes the textfields on mrskin.com to show up
	again.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::RenderBox):
        (RenderBox::setPos):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_container.cpp:
        (RenderContainer::addChild):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        * khtml/rendering/render_object.h:

2002-09-11  Maciej Stachowiak  <mjs@apple.com>

	Don't show the window here any more, now that WebBrowser will set
	it up to be shown properly itself.
	
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow):

2002-09-11  David Hyatt  <hyatt@apple.com>

	Fix horizontal scrolling.  The HTML render object lies.  It lies, 
	I tell you.
	
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):

2002-09-11  David Hyatt  <hyatt@apple.com>

	Fix clipping to work with layers.  This fixes the marquee
	(once again) on livepage.apple.com.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::getClipRect):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_container.cpp:
        (RenderContainer::addChild):
        (RenderContainer::removeChildNode):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::setStyle):
        (RenderFlow::printObject):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::enclosingPositionedAncestor):
        (RenderLayer::convertToLayerCoords):
        (RenderLayer::paint):
        (RenderLayer::constructZTree):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::print):

2002-09-11  Darin Adler  <darin@apple.com>

        * kwq/KWQAssertions.h: Updated copy of the assertions macros (made by script).

2002-09-11  Darin Adler  <darin@apple.com>

	- fixed 3047552 -- crash using CFNotification calls on an NSNotification

        * kwq/KWQWindowWidget.mm:
        (KWQWindowWidget::KWQWindowWidget): Create a KWQWindowWidgetDeleter, and
	hook it up to the notification.
        (KWQWindowWidget::~KWQWindowWidget): Disconnect the KWQWindowWidgetDeleter
	and release it.
        (-[KWQWindowWidgetDeleter initWithWindowWidget:]): Store a pointer.
        (-[KWQWindowWidgetDeleter deleteWindowWidget]): Do a delete.

2002-09-11  Darin Adler  <darin@apple.com>

	- fixed 3021137 -- changing font prefs doesn't redraw frames
	other than the main frame

        * kwq/WebCoreSettings.m: Renamed to WebCoreSettings.mm.
        * kwq/WebCoreSettings.mm: Renamed from WebCoreSettings.m so I could
	use C++.
        (-[WebCoreSettings _updateAllViews]): Iterate over all KWQKHTMLPartImpl
	instances, calling setNeedsReapplyStyles on each one.
        * WebCore.pbproj/project.pbxproj: Updated for name change.

        * kwq/KWQKHTMLPartImpl.h: Add instances() and mutableInstances().
	Get rid of frameExists(), findFrame(), and frames().
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::KWQKHTMLPartImpl): Add to instance list.
        (KWQKHTMLPartImpl::~KWQKHTMLPartImpl): Remove from instance list.
        (KWQKHTMLPartImpl::requestFrame): Update to not use frameExists().
        (KWQKHTMLPartImpl::overURL): Update to not use frameExists, and improve
	handling of various cases.
        (KWQKHTMLPartImpl::mutableInstances): Create and return instance list.

        * kwq/WebCoreBridge.h: Add setNeedsReapplyStyles; already implemented
	in WebKit.

        * khtml/khtml_part.cpp:
        (KHTMLPart::findFrame): Remove APPLE_CHANGES.
        (KHTMLPart::frameExists): Remove APPLE_CHANGES.
        (KHTMLPart::frames): Remove APPLE_CHANGES.

2002-09-10  Darin Adler  <darin@apple.com>

	WebCore part of support for the "Referer" header.

        * khtml/khtml_part.cpp:
        (KHTMLPart::urlSelected): Use much more of this function.
        (KHTMLPart::submitForm): Use much more of this function.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Parse the
	referrer out of the URLArgs and pass it along.

        * kwq/KWQKHTMLPartImpl.h: Change parameters to urlSelected
	and submitForm to allow KHTML to do more of the work. Add
	referrer helper function.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::bridgeForFrameName): Pass referrer of nil
	when opening a blank window.
        (KWQKHTMLPartImpl::referrer): Extract referrer from metadata.
        (KWQKHTMLPartImpl::openURLRequest): Pass referrer from args
	through the bridge.
        (KWQKHTMLPartImpl::urlSelected): Remove code that duplicates
	what's in KHTMLPart. Also pass referrer from args through the
	bridge as above.
        (KWQKHTMLPartImpl::submitForm): Ditto.

        * kwq/kdeui/kmessagebox.h: Add information member function.
        * kwq/KWQKMessageBox.mm: (KMessageBox::information): Implement.

        * kwq/kdecore/kurl.h: Add encode_string member function.
        * kwq/KWQKURL.mm:
        (KURL::KURL): Fix buffer overflow bug, and add an assert so we
	will notice these overflows even when using the static buffer.
        (KURL::parse): Added a similar assert, even though I didn't fix
	any overflow bug here.
        (KURL::encode_string): Implemented this, but didn't test it.

        * kwq/KWQLoaderImpl.mm: (KWQServeRequest): Pass referrer through
	the bridge.

        * kwq/WebCoreBridge.h: Add referrer parameters to loadURL, postWithURL,
	openNewWindowWithURL, and startLoadingResource.

        * kwq/kparts/browserextension.h: Implement setDoPost, setContentType,
	const version of metaData().

        * kwq/qt/qstring.h: Implement fromLatin1(const char *, int).

        * WebCore-tests.exp: Not sure why, but I needed to remove isMalformed,
	and the tests seem to still work with it removed.

2002-09-11  David Hyatt  <hyatt@apple.com>

	This patch fixes a slew of bugs.  It is an implementation
	of the IE extensions offsetLeft, offsetTop, and offsetParent.
	Konqueror actually had implementations for these properties
	that were totally wrong, leading any DHTML that would use
	these properties (like the DHTML on brainjar.com or livepage.apple.com)
	to misposition child elements.

	With these properties now implemented, the menus on brainjar.com
	position correctly, and the marquee on livepage.apple.com once
	again shows up (and now you can see how I've regressed clipping
	by not shoving it into the layer system as well).

	Next up will be fixing the clipping bug on livepage.apple.com.
	
        * khtml/ecma/kjs_dom.cpp:
        (DOMNode::getValueProperty):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::offsetHeight):
        (RenderFlow::offsetLeft):
        (RenderFlow::offsetTop):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::offsetLeft):
        (RenderObject::offsetTop):
        (RenderObject::offsetParent):
        * khtml/rendering/render_object.h:

2002-09-10  David Hyatt  <hyatt@apple.com>

	Get more elements on mrskin painting as well as the menus
	on brainjar.com.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layout):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):
        * khtml/rendering/render_object.cpp:
        (RenderObject::setLayouted):
        * khtml/rendering/render_object.h:

2002-09-10  David Hyatt  <hyatt@apple.com>

	Fix the CSS clip property.
	
        * khtml/css/cssparser.cpp:
        (StyleBaseImpl::parseValue):
        * khtml/css/cssstyleselector.cpp:
        * khtml/ecma/kjs_css.cpp:
        (DOMCSSStyleDeclaration::tryPut):
        * khtml/rendering/render_box.cpp:
        (RenderBox::calcClip):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::printObject):
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::print):
        * khtml/rendering/render_style.cpp:
        (StyleVisualData::StyleVisualData):
        (RenderStyle::diff):
        * khtml/rendering/render_style.h:

2002-09-10  Richard Williamson  <rjw@apple.com>

        Fixed broken DOM handling of click count.  DOM click 
        events can be tested with Labyrinth/Test/html/mousetest.html.
        Preparation work for double and triple click selection.
        
        * khtml/khtml_events.cpp:
        * khtml/khtml_events.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::khtmlMouseTripleClickEvent):
        * khtml/khtml_part.h:
        * khtml/khtmlview.cpp:
        (KHTMLView::viewportMousePressEvent):
        (KHTMLView::viewportMouseTripleClickEvent):
        (KHTMLView::viewportMouseDoubleClickEvent):
        (KHTMLView::viewportMouseReleaseEvent):
        * khtml/khtmlview.h:
        * kwq/KWQEvent.mm:
        (QMouseEvent::QMouseEvent):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge mouseUp:]):
        (-[WebCoreBridge mouseDown:]):
        * kwq/qt/qevent.h:

2002-09-10  David Hyatt  <hyatt@apple.com>

	Fix FOUC to behave correctly.  I was smoking crack when I
	implemented this the first time (mainly because KHTML had
	a badly named API that didn't mean even remotely what
	I thought it should).
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
        (HTMLLinkElementImpl::setStyleSheet):
        (HTMLLinkElementImpl::sheetLoaded):
        (HTMLStyleElementImpl::childrenChanged):
        (HTMLStyleElementImpl::sheetLoaded):

2002-09-10  Maciej Stachowiak  <mjs@apple.com>

	WebCore part of fix for:

	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
	3021360 - second window pops up on 'Search' at chrysler.com
	3030485 - Unexpected new window created with no scroll bars at sony.com

	* kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
	frame if possible. Pass frame name when opening a new window.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
	new window. Check non-descendant frames too.
        (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
        * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.

2002-09-10  Darin Adler  <darin@apple.com>

	Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
	before we remove our alternate versions of these (but I still hope we do remove them).

        * khtml/khtml_part.cpp:
        (KHTMLPart::findFrame): Back to the old way.
        (KHTMLPart::frameExists): Ditto.
        (KHTMLPart::frames): Ditto.

2002-09-10  Darin Adler  <darin@apple.com>

	- fixed 2942809 -- remove all direct access to "WebKit" defaults from WebCore

        * kwq/WebCoreSettings.h: Add willLoadImagesAutomatically and userStyleSheetLocation.
        * kwq/WebCoreSettings.m:
        (-[WebCoreSettings _updateAllViews]): Added. Placeholder for a function that will
	cause all views to update styles and layout.
        (-[WebCoreSettings setStandardFontFamily:]): Call _updateAllViews if a change happened.
        (-[WebCoreSettings setFixedFontFamily:]): Ditto.
        (-[WebCoreSettings setSerifFontFamily:]): Ditto.
        (-[WebCoreSettings setSansSerifFontFamily:]): Ditto.
        (-[WebCoreSettings setCursiveFontFamily:]): Ditto.
        (-[WebCoreSettings setFantasyFontFamily:]): Ditto.
        (-[WebCoreSettings setMinimumFontSize:]): Ditto.
        (-[WebCoreSettings setDefaultFontSize:]): Ditto.
        (-[WebCoreSettings setDefaultFixedFontSize:]): Ditto.
        (-[WebCoreSettings setWillLoadImagesAutomatically:]): Added.
        (-[WebCoreSettings willLoadImagesAutomatically]): Added.
        (-[WebCoreSettings setUserStyleSheetLocation:]): Added. Call _updateAllViews if a change happened.
        (-[WebCoreSettings userStyleSheetLocation]): Added.

        * WebCore.exp: Add WebCoreSettings to the exported class list.

        * kwq/KWQKHTMLSettings.mm: Get settings from WebCoreSettings rather than going
	directly at WebKit user defaults.
        * kwq/KWQKConfigBase.mm:
        (KConfig::readNumEntry): Check key.
        (KConfig::readUnsignedNumEntry): Use WebCoreSettings to get the value of the
	"JavaScript can open windows automatically" setting, rather than going directly
	at a WebKit user default.
        (KConfig::readColorEntry): Remove log message. This is implemented well enough.

	- fixed 3015877 -- either wean WebCore from _web_URLFromString, or make it public API in WebFoundation

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::redirectionTimerStartedOrStopped):
	Use KURL to make an NSURL rather than using [NSURL _web_URLWithString:].
        * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::setBaseURL): Ditto.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge completeURLForDOMString:]): Ditto.

	After fixing the above bugs, I noticed that I could remove the WebFoundation dependency.

        * WebCore.pbproj/project.pbxproj: Remove WebFoundation framework.

        * kwq/WebCoreBridge.h: Replace reportError with reportBadURL.
        * kwq/KWQLoaderImpl.mm: (KWQServeRequest): Use reportBadURL instead of reportError.
	This was the last bit of direct dependency on WebFoundation.

	Do some preparation work for implementing "referrer".

        * khtml/khtml_part.cpp: Remove lots of APPLE_CHANGES and compile more
	original code. This in preparation for using the "referrer" code from KHTML.
        * khtml/khtmlview.h: Ditto.
        * khtml/misc/loader.cpp: Ditto.

        * kwq/kdecore/kurl.h: Add things needed by code formerly inside APPLE_CHANGES.
        * kwq/KWQKURL.mm: (KURL::hasRef): Ditto.
        (urlcmp): Implement in a simple-minded way. Needed by some code formerly inside
	APPLE_CHANGES. We can make a more full-featured version when and if we need it.
        * kwq/kio/global.h: Ditto.
        * kwq/kio/job.h: Ditto.
        * kwq/kio/jobclasses.h: Ditto.
        * kwq/KWQKjobclasses.mm: Ditto.
        * kwq/kparts/browserextension.h:
        * kwq/kparts/part.h: Ditto.
        * kwq/qt/qstringlist.h: Ditto.
        * kwq/KWQStringList.mm: (QStringList::pop_front): Ditto.
        * kwq/qt/qvaluelist.h: Ditto.
        * kwq/KWQValueListImpl.h: Ditto.
        * kwq/KWQValueListImpl.mm: (KWQValueListImpl::isEqual): Ditto.

	Other changes.

        * kwq/KWQApplication.mm:
        (QApplication::setOverrideCursor): Don't report an error for this, it's OK
	to do nothing.
        (QApplication::restoreOverrideCursor): Ditto.

2002-09-09  Richard Williamson  <rjw@apple.com>

        Implemented disable images automatically (2896319).

        * kwq/KWQKHTMLSettings.mm:
        (KHTMLSettings::autoLoadImages):

2002-09-09  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::nextKeyView):
	Remove stray printf.

2002-09-09  David Hyatt  <hyatt@apple.com>

	Switching over to the layer system for the handling of mouse
	events.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::nodeAtPoint):
        * khtml/rendering/render_image.cpp:
        (RenderImage::nodeAtPoint):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::paint):
        (RenderLayer::nodeAtPoint):
        (RenderLayer::constructZTree):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_object.cpp:
        (RenderObject::nodeAtPoint):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::prepareMouseEvent):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):
        (-[WebCoreBridge elementAtPoint:]):
        * kwq/qt/qrect.h:

2002-09-09  Darin Adler  <darin@apple.com>

        * khtml/rendering/render_layer.h: Add a call to delete to fix a storage leak.

2002-09-09  Darin Adler  <darin@apple.com>

        * khtml/misc/helper.cpp: (khtml::setNamedColor): Add a missing return I spotted.

        * kwq/KWQApplication.mm:
        * kwq/KWQChar.mm:
        * kwq/KWQCompletion.mm:
        * kwq/KWQCursor.mm:
        * kwq/KWQEvent.mm:
        * kwq/KWQFontInfo.mm:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQInputDialog.mm:
        * kwq/KWQKConfigBase.mm:
        * kwq/KWQKFileDialog.mm:
        * kwq/KWQKFileItem.mm:
        * kwq/KWQKGlobalSettings.mm:
        * kwq/KWQKHTMLSettings.mm:
        * kwq/KWQKIconLoader.mm:
        * kwq/KWQKMimeType.mm:
        * kwq/KWQKSimpleConfig.mm:
        * kwq/KWQKjobclasses.mm:
        * kwq/KWQKnetaccess.mm:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQScrollView.mm:
        * kwq/KWQString.mm:
        * kwq/KWQWidget.mm:
        * kwq/KWQbrowserinterface.mm:
        * kwq/KWQtextstream.mm:
        * kwq/KWQxml.mm:
	Change various LOG(NotYetImplemented) to ERROR, FATAL, or removed them entirely.
	This will help us with the task of getting every last one either "not implemented
	on purpose" or implemented. I'm not sure the NotYetImplemented log channel is
	useful, because it's chock full of continuous "direction not implemented" messages.

        * kwq/KWQLogging.h:
        * kwq/KWQLogging.m:
	Removed the NeverImplemented logging channel. The distinction is no longer worth
	keeping around. We use NotYetImplemented instead.

2002-09-08  Darin Adler  <darin@apple.com>

	Switch over to new assertion/logging scheme.

        * kwq/KWQAssertions.h: Added.
        * kwq/KWQAssertions.m: Added.
        * kwq/KWQLogging.h: Added.
        * kwq/KWQLogging.m: Added.
        * kwq/kwqdebug.h: Removed.
        * kwq/kwqdebug.mm: Removed.
        * WebCore.pbproj/project.pbxproj: Update to reflect above changes.

        * kwq/KWQApplication.mm:
        * kwq/KWQChar.mm:
        * kwq/KWQColor.mm:
        * kwq/KWQComboBox.mm:
        * kwq/KWQCompletion.mm:
        * kwq/KWQCursor.mm:
        * kwq/KWQDrawUtil.mm:
        * kwq/KWQEvent.mm:
        * kwq/KWQFontInfo.mm:
        * kwq/KWQFontMetrics.mm:
        * kwq/KWQFrame.mm:
        * kwq/KWQHBox.mm:
        * kwq/KWQInputDialog.mm:
        * kwq/KWQInvisibleButton.mm:
        * kwq/KWQKConfigBase.mm:
        * kwq/KWQKFileDialog.mm:
        * kwq/KWQKFileItem.mm:
        * kwq/KWQKGlobalSettings.mm:
        * kwq/KWQKHTMLPartImpl.mm:
        * kwq/KWQKHTMLSettings.mm:
        * kwq/KWQKIconLoader.mm:
        * kwq/KWQKJob.mm:
        * kwq/KWQKLocale.mm:
        * kwq/KWQKMimeType.mm:
        * kwq/KWQKPartsEvent.mm:
        * kwq/KWQKSimpleConfig.mm:
        * kwq/KWQKURL.mm:
        * kwq/KWQKWin.mm:
        * kwq/KWQKWinModule.mm:
        * kwq/KWQKjobclasses.mm:
        * kwq/KWQKnetaccess.mm:
        * kwq/KWQLabel.mm:
        * kwq/KWQLineEdit.mm:
        * kwq/KWQListBox.mm:
        * kwq/KWQListImpl.mm:
        * kwq/KWQLoaderImpl.mm:
        * kwq/KWQObject.mm:
        * kwq/KWQPaintDeviceMetrics.mm:
        * kwq/KWQPainter.mm:
        * kwq/KWQPixmap.mm:
        * kwq/KWQRegion.mm:
        * kwq/KWQScrollView.mm:
        * kwq/KWQSlot.mm:
        * kwq/KWQString.mm:
        * kwq/KWQTimer.mm:
        * kwq/KWQWidget.mm:
        * kwq/KWQbrowserinterface.mm:
        * kwq/KWQtextcodec.mm:
        * kwq/KWQtextstream.mm:
        * kwq/KWQxml.mm:
        * kwq/WebCoreBridge.mm:
        * kwq/WebCoreCookieAdapter.m:
        * kwq/WebCoreHistory.m:
        * kwq/WebCoreImageRendererFactory.m:
        * kwq/WebCoreTextRendererFactory.m:
        * kwq/WebCoreViewFactory.m:
	Update to use new assertions and logging macros.
	In some cases, just removed unneeded includes.

2002-09-08  David Hyatt  <hyatt@apple.com>

	Landing the new layer system and turning it on for painting of
	all types of positioned blocks (and for painting the root
	and HTML layers as well).

	Event handling is not yet using the new layer system, so you
	may see oddities like DHTML menus now displaying correctly but
	events not working (since the event code may still be stacking
	incorrectly and think the DHTML is behind other content).
	
        * khtml/css/cssstyleselector.cpp:
        * khtml/rendering/render_box.cpp:
        (RenderBox::setStyle):
        (RenderBox::calcHeight):
        (RenderBox::calcAbsoluteHorizontal):
        * khtml/rendering/render_container.cpp:
        (RenderContainer::addChild):
        (RenderContainer::removeChildNode):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::setStyle):
        (RenderFlow::printObject):
        (RenderFlow::printSpecialObjects):
        (RenderFlow::layout):
        (RenderFlow::layoutSpecialObjects):
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::insertSpecialObject):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_html.cpp:
        (RenderHtml::layout):
        * khtml/rendering/render_image.cpp:
        (RenderImage::printObject):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::updateLayerPosition):
        (RenderLayer::enclosingAncestor):
        (RenderLayer::addChild):
        (RenderLayer::convertToLayerCoords):
        (RenderLayer::paint):
        (RenderLayer::constructZTree):
        (RenderLayer::RenderZTreeNode::constructLayerList):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_replaced.cpp:
        (RenderReplaced::print):
        (RenderWidget::printObject):
        * khtml/rendering/render_root.cpp:
        (RenderRoot::calcHeight):
        (RenderRoot::layout):
        (RenderRoot::printObject):
        * khtml/rendering/render_root.h:
        * khtml/rendering/render_style.cpp:
        (StyleBoxData::StyleBoxData):
        (StyleBoxData::operator==):
        * khtml/rendering/render_style.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):
        * kwq/qt/qrect.h:

2002-09-06  Maciej Stachowiak  <mjs@apple.com>

        Fix another instance of the same problem:

	* kwq/KWQString.mm:
        (QString::detach):

2002-09-06  Maciej Stachowiak  <mjs@apple.com>

	Fix optimized build:
	
        * kwq/KWQString.mm:
        (QString::detachInternal): Uselessly Initialize newData to NULL
	since the compiler can't tell that FATAL won't return.

2002-09-06  Darin Adler  <darin@apple.com>

        * kwq/WebCoreResourceLoader.h:
	Define WebCoreResourceHandle protocol.

        * kwq/kio/jobclasses.h:
        * kwq/KWQKjobclasses.mm:
        * kwq/KWQLoaderImpl.mm: (KWQServeRequest):
        * kwq/WebCoreBridge.h:
	Use WebCoreResourceHandle instead of WebResourceHandle.

        * kwq/KWQString.mm: (QString::fill): Fix case where the new string
	is going to be empty, but the old string was not. Before, it leaked
	a handle.

        * kwq/character-sets.txt: Updated to 2002-06-14 version from 2001-08-23 version.
        * kwq/mac-encodings.txt: Updated encoding names to include ones gleaned from
	the I18N-Charset-1.17 Perl module.

        * kwq/KWQCharsets.mm: Formatting tweaks.

2002-09-06  Richard Williamson  <rjw@apple.com>

        Start using khtml's 'toAdd' parameter to justify text.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):
        
        Normalize all calls to get width to minimize use of
        ObjC.  Will make it easier to use IMPL cache later.
        
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::width):
        (QFontMetrics::floatWidth):
        (QFontMetrics::floatCharacterWidth):
        
        Pass additional 'toAdd' parameter.
        
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        * kwq/qt/qpainter.h:
        
        Remove methods now that width calls are normalized to single
        method.
        * kwq/WebCoreTextRenderer.h:


=== Alexander-22 ===

2002-09-05  Richard Williamson  <rjw@apple.com>

        Add the first child text node of the element to the
        element dictionary.  This will be used as a link 'label'.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]):

2002-09-05  Richard Williamson  <rjw@apple.com>
    
        Removed debugging.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::closeURL):

2002-09-05  Richard Williamson  <rjw@apple.com>

        Always call KHTMLPart::closeURL when a new document is loaded.
        
        Added support for saving and restoring document state in
        the back/forward list.  Document state includes form data.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::openURL):
        (KHTMLPart::closeURL):
        (KHTMLPart::begin):
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::saveDocumentState):
        (KWQKHTMLPartImpl::restoreDocumentState):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge saveDocumentState]):
        (-[WebCoreBridge restoreDocumentState]):

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

        * WebCore.pbproj/project.pbxproj:
        * kwq/KWQObject.mm:
        * kwq/KWQPainter.mm:
        * kwq/KWQTimer.mm:
        * kwq/WebCoreCookieAdapter.h:
        * kwq/WebCoreImageRenderer.h:
        * kwq/WebCoreImageRendererFactory.h:
	Tweaks, no substantive changes.

2002-09-02  David Hyatt  <hyatt@apple.com>

	Tweak the damage rect testing to account for the fact that a child
	layer may fall entirely outside the bounds of its parent layer.
	
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::constructZTree):

2002-08-31  Darin Adler  <darin@apple.com>

	- fixed 3038336 -- repro crash in QTextDecoder trying to display UTF-16 file

        * kwq/mac-encodings.txt: Hook up the UTF-16 encoding to the name iso-10646-ucs-2.
	We have a long way to go to get this right. There are almost certainly going to
	be other bugs with 16-bit character pages.

        * kwq/KWQKHTMLSettings.mm: (KHTMLSettings::encoding): Just return "latin1",
	not "NSISOLatin1StringEncoding".

        * kwq/KWQString.mm: (QString::fromStringWithEncoding): Pass true for the
	"pay attention to BOM" flag.

        * khtml/rendering/render_object.cpp: Take out unneeded APPLE_CHANGES.

2002-08-30  Ken Kocienda  <kocienda@apple.com>

	Fixed a problem in this function where broken UTF-8 would cause a crash.

        * WebCore.pbproj/project.pbxproj:
        * kwq/KWQString.mm:
        (QString::fromStringWithEncoding)

2002-08-30  Richard Williamson  <rjw@apple.com>

        Removed debugging log.
        
        * kwq/KWQString.mm:
        (QString::fromStringWithEncoding):

2002-08-30  Richard Williamson  <rjw@apple.com>

        Made decoder more robust wrt nulls in content.  Changed use
        of QCString to null safe QString rather than modify
        content.
        
        * khtml/misc/decoder.cpp:
        (Decoder::decode):
        (Decoder::flush):
        * khtml/misc/decoder.h:
        * kwq/KWQString.mm:
        (QString::fromStringWithEncoding):

2002-08-30  Darin Adler  <darin@apple.com>

	- fixed 3027407 -- Console error refers to closed bug

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::bridgeForFrameName):
	Update bug number from 2959902 to 2942073.

	- fixed 3027532 -- can't tab into or out of textareas
	
        * kwq/KWQTextArea.h: Add setFont:.
        * kwq/KWQTextArea.mm:
        (-[KWQTextArea _createTextView]): Make a KWQTextAreaTextView.
        (-[KWQTextArea textDidChange:]): Send text changed messages when the text
	is changed, not when done editing. I did this for KWQNSTextField a while ago;
	it's tragic that AppKit leads us to have two separate classes for these nearly
	identical purposes.
        (-[KWQTextArea setFont:]): Call setFont on the text view.
        (-[KWQTextArea becomeFirstResponder]): Call makeFirstResponder on the text view.
        (-[KWQTextArea nextKeyView]): Do that voodoo, just like KWQNSTextField.
        (-[KWQTextArea previousKeyView]): Ditto.
        (-[KWQTextArea nextValidKeyView]): Ditto.
        (-[KWQTextArea previousValidKeyView]): Ditto.
        (-[KWQTextAreaTextView insertTab:]): Select the next key view. We don't get this
	automatically because this is not a field editor. But being a field editor leads
	to other unwanted behavior.
        (-[KWQTextAreaTextView insertBacktab:]): Ditto.
        (-[KWQTextAreaTextView becomeFirstResponder]): Select all on entry.
        (-[KWQTextAreaTextView shouldDrawInsertionPoint]): Don't draw insertion point
	when we are not the first responder.
        (-[KWQTextAreaTextView selectedTextAttributes]): Don't draw the selection when
	we are not the first responder.

        * kwq/qt/qtextedit.h:
        * kwq/KWQTextEdit.mm: (QTextEdit::setFont): Call -[KWQTextArea setFont:].
        (QTextEdit::focusPolicy): Always return TabFocus, because the top level widget
	is not an NSControl so QWidget::focusPolicy does not suffice.

        * kwq/qt/qwidget.h: Make focusPolicy virtual.

        * kwq/qt/qfont.h:
        * kwq/KWQFont.mm: (QFont::getNSFont): Add this helper function
	so we don't have to repeat this in multiple places.

        * kwq/KWQLineEdit.mm: (QLineEdit::setFont): Use QFont::getNSFont.

        * force-clean-timestamp: For you poor bastards who aren't using the new
	Project Builder yet.

2002-08-30  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Allowed the new Project Builder to put in
	encodings for each file.

2002-08-29  David Hyatt  <hyatt@apple.com>

	Begin connecting the layer system.  The root box and the <html>
	box now construct layers for themselves.  Those layers are
	connected in a layer tree properly and they correctly update
	their positions.

	Implemented all the code for layer construction and for keeping
	the layer tree in sync with the render object tree.  

	The goal is to get the layer tree fully constructed and correct
	(with lots of testing) before actually switching over to it for
	painting.

	This change requires a clean of WebCore.
	
        * force-clean-timestamp:
        * khtml/rendering/render_box.cpp:
        (RenderBox::RenderBox):
        (RenderBox::~RenderBox):
        (RenderBox::setPos):
        (RenderBox::positionChildLayers):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_container.cpp:
        (RenderContainer::~RenderContainer):
        (RenderContainer::addChild):
        (RenderContainer::removeChildNode):
        * khtml/rendering/render_container.h:
        * khtml/rendering/render_html.cpp:
        (RenderHtml::RenderHtml):
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::updateLayerPosition):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_object.h:
        * khtml/rendering/render_root.cpp:
        (RenderRoot::RenderRoot):

=== Alexander-21 ===

2002-08-28  David Hyatt  <hyatt@apple.com>

	Implement the flattening algorithm that walks the layer 
	hierarchy and produces the correct layer list for back
	to front painting.  (Still under construction.  Not used yet.)
	
        * khtml/rendering/render_layer.cpp:
        (sortByZOrder):
        (RenderLayer::RenderZTreeNode::constructLayerList):
        * khtml/rendering/render_layer.h:

2002-08-28  Richard Williamson  <rjw@apple.com>

        More tweaks to ccs.
        Added underline to visited links.
        Made outline for active normal and visited links gray.
        
        * khtml/css/html4.css:

2002-08-28  Richard Williamson  <rjw@apple.com>

        Fixed outline of for active link style.
        
        * khtml/css/html4.css:
        * kwq/KWQPainter.mm:
        (QPainter::drawLine):

2002-08-28  David Hyatt  <hyatt@apple.com>

	Adding knowledge to the style system of auto z-indices.  The old
	code doesn't use this yet, but the new layering code will.

	Also wrote the ztree construction function (not used yet) and
	stubbed out the display list flattening routines.
	
        * khtml/rendering/render_layer.cpp:
        (RenderLayer::convertToLayerCoords):
        (RenderLayer::constructZTree):
        (RenderLayer::constructLayerList):
        * khtml/rendering/render_layer.h:
        * khtml/rendering/render_style.cpp:
        (StyleBoxData::StyleBoxData):
        * khtml/rendering/render_style.h:

2002-08-28  Darin Adler  <darin@apple.com>

	- fixed 2977587 -- JavaScript code that reads the values of text areas
	misses the last line if no trailing CR

        * kwq/KWQTextArea.mm: (-[KWQTextArea paragraphs]):

2002-08-28  David Hyatt  <hyatt@apple.com>

	Putting design notes and API details for the layering system
	into the header file.
	
        * khtml/rendering/render_layer.h:

2002-08-28  Darin Adler  <darin@apple.com>

        * kwq/mac-encodings.txt: Sort all the character set names alphabetically, and use all lower case.
        * kwq/make-charset-table.pl: Require lower-case sorted lists of character set names.

2002-08-28  Darin Adler  <darin@apple.com>

	- fixed 3032148 -- Button not disabled in page

        * kwq/KWQWidget.mm: (QWidget::setEnabled): Call setEnabled:
	on the NSView if it implements it.

2002-08-28  Darin Adler  <darin@apple.com>

	- fixed 3030212 -- Problems rendering pages that specify "x-mac-roman" character
	set (like our Danish help pages)

        * kwq/mac-encodings.txt: Added x-mac-roman as an alias for macintosh.

2002-08-27  Darin Adler  <darin@apple.com>

        * force-clean-timestamp: Dave's changes require a full build. I found out the
	hard way, by debugging for a while.

2002-08-27  Richard Williamson <rjw@apple.com>

        * kwq/WebCoreBridge.h:
        
        Fixed constants to conform to WebKit.  These need to be shared.

2002-08-27  David Hyatt  <hyatt@apple.com>

	Change relative positioned blocks so that they are treated as special objects and
	painted last along with absolutely positioned blocks and floaters.  Note that the
	entire special object system is fundamentally flawed, and it needs to be replaced
	with a real layering subsystem.

	This checkin at least gets relatively positioned divs painting correctly some of
	the time (in the cases where the containing blocks of absolute and relative positioned
	divs happen to be the same).  It does not, however, deal with the problem of ensuring
	correct stacking of positioned elements with different containing blocks.

	render_layer.h and .cpp include a new implementation (not used yet, just the beginnings)
	of a layering subsystem that I am going to be working on over the next few days
	that will eventually be responsible for handling event dispatching and painting and that
	will also understand how to deal with form controls and other objects that have Cocoa
	views.
	
        * WebCore.pbproj/project.pbxproj:
        * khtml/rendering/render_box.cpp:
        (RenderBox::RenderBox):
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::printObject):
        (RenderFlow::printSpecialObjects):
        (RenderFlow::layoutSpecialObjects):
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::insertSpecialObject):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_layer.cpp: Added.
        (RenderLayer::RenderLayer):
        (RenderLayer::~RenderLayer):
        (RenderLayer::addChild):
        (RenderLayer::removeChild):
        * khtml/rendering/render_layer.h: Added.

2002-08-27  Darin Adler  <darin@apple.com>

	- fixed 3031952 -- null-dereference in dispatchToUInt32 closing window

        * khtml/ecma/kjs_window.cpp: (History::getValueProperty):
	Use Undefined(), not Value() for an error result. Value() is pure evil.

2002-08-27  Darin Adler  <darin@apple.com>

	- fixed 3021018 -- Crash selecting from popup just after choosing radio button

        * kwq/KWQComboBox.mm:
        (QComboBox::QComboBox): Pass the widget in when creating the cell.
        (-[KWQPopUpButtonCell initWithWidget:]): Store a widget pointer.
        (-[KWQPopUpButtonCell trackMouse:inRect:ofView:untilMouseUp:]): Get to the bridge
	and tell it to defer loading while we track the mouse.

        * kwq/KWQKHTMLPartImpl.h: Add bridgeForWidget.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::nextKeyViewForWidget): Use nodeForWidget and partForNode.
        (KWQKHTMLPartImpl::bridgeForWidget): Added. Use nodeForWidget and partForNode.
        (KWQKHTMLPartImpl::partForNode): Move code here from nextKeyViewForWidget.
        (KWQKHTMLPartImpl::nodeForWidget): Move code here from nextKeyViewForWidget.

        * kwq/WebCoreBridge.h: Add defersLoading and setDefersLoading. Both are already
	in WebKit.

2002-08-26  David Hyatt  <hyatt@apple.com>

	Fix for 3026006.  Ensure that TABLES inside <div>s with align="right"
	are properly positioned.  <div align="right"> was completely
	unimplemented.  This patch implements it for the common cases
	(nested divs, tables within divs, and paragraphs).
	
        * khtml/css/html4.css:

2002-08-26  Darin Adler  <darin@apple.com>

        * khtml/rendering/render_list.cpp:
	Make file match the original KDE more closely (no substantive change).

2002-08-26  Richard Williamson  <rjw@apple.com>

        * WebCore.exp:

        Added WebCoreHistory
        
        * WebCore.pbproj/project.pbxproj:

        Added WebCoreHistory
        
        * kwq/KWQKHistoryProvider.mm:
        Use WebCoreHistory to determine visited link.
        
        * kwq/WebCoreHistory.h: Added.
        * kwq/WebCoreHistory.m: Added.
        
        Stage 1.  Use WebKit's WebHistory.  Writing
        of history and initialization still handled
        by Alex until stage 2.
        
        (+[WebCoreHistory setSharedHistory:]):
        (+[WebCoreHistory sharedHistory]):
        (-[WebCoreHistory containsURL:]):

        * kwq/KWQString.mm:
        (QString::compare):

        Optimization, use strcmp when both src and dst have valid ascii.
        

2002-08-26  David Hyatt  <hyatt@apple.com>

	- Patch drawText to understand right-aligned drawing.  
	- Fixed <ul> bullets so that they position properly.
	- Fixed bugs with horizontal and vertical positioning of
	  <ol> bullets.
	
        * khtml/rendering/render_list.cpp:
        (RenderListMarker::printObject):
        * kwq/KWQPainter.mm:
        (QPainter::drawText):

2002-08-24  Darin Adler  <darin@apple.com>

	- fixed 3032072 -- Crash on reload in DOM::DocumentImpl::~DocumentImpl [unified]()

	This was a tough one to debug.
	Turned out to be a subtle bug in our new QConstString implementation.

        * kwq/KWQString.mm:
        (QStringData::makeAscii): Don't invalidate the Unicode buffer unless the ASCII
	buffer is taking over the internal buffer from the Unicode. In other cases, it's
	important not to invalidate the Unicode because it can result in the Unicode being
	freed and re-created when unicode() is called, which is disastrous in the QConstString
	case because we can't free the Unicode.
        (QStringData::makeUnicode): Make the corresponding change for ASCII too. In this
	case, it's just an optimization, not a bug fix.
        (QString::insert), (QString::remove), (QString::fill), (QString::operator+=):
	Mark the other string invalid whenever we modify either the ASCII or the Unicode
	string. This was handled correctly for some operations before, but not all, and it
	now matters because makeAscii and makeUnicode will now allow this state.

	Fixed a separate QString problem; I think I may have introduced this one.

        * kwq/KWQString.mm:
        (QString::getNSString): Since by ASCII, we actually mean ISO Latin 1, we can't use
	[NSString stringWithCString:]. Use CFStringCreateWithCString instead, pass
	CFStringCreateWithCString as the encoding, and use autorelease. We shouldn't really
	use the term ASCII in this class for the 8-bit-per-character buffer. Something more
	like Latin1 would be a more accurate way to refer to it. Maybe I'll do that renaming
	after talking to Richard about it on Monday.

	Fixed a small storage leak.

        * khtml/css/css_valueimpl.cpp: (CSSPrimitiveValueImpl::cleanup): Added braces to
	fix obviously-incorrect if/else grouping.

2002-08-23  Darin Adler  <darin@apple.com>

	Got the kurl-test in the Tests directory working again.

        * kwq/KWQKURL.mm: (KURL::KURL): Fixed problem where relative path resolution code
	for "../" could eat up the host name too, treating it as part of the path.

2002-08-23  Darin Adler  <darin@apple.com>

	- fixed 3032058 -- Links on local developer doc pages all broken (all local files?)

        * kwq/KWQKURL.mm: (KURL::getNSURL): Re-added a workaround for CFURL bug 2908969.
	We have to hack to make NSURL take "file:/" URLs.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::nextKeyViewInFrame): Add a nil check.
	I ran into this because my frame failed to load.

2002-08-23  Maciej Stachowiak  <mjs@apple.com>

	A few more KURL changes that reduce it down to background noise
	level.

	For me this gave another 1-2% improvement on cvs-base.

        * kwq/kdecore/kurl.h:
        * kwq/KWQKURL.mm:
        (KURL::KURL): In the relative constructor, do all work in a char
	array for the relative path case, and leave it up to ::parse to
	create a QString.
        (KURL::parse): Do all work in a char array, only creating a
	QString at the end if needed. Also, take an optional pointer to
	the QString that the char * was created from, and if the final
	processed URL is the same as the original, assign the original
	instead of creating a new QString.
        (KURL::setProtocol): Adjust for prase() interface change.
        (KURL::setHost): Likewise.
        (KURL::setPort): Likewise.
        (KURL::setRef): Likewise.
        (KURL::setQuery): Likewise.
        (KURL::setPath): Likewise.
        (appendEscapingBadChars): Instead of taking and returning
	a QString like the old escapeBadChars, copy from and write into
	existing C string buffers.

2002-08-22  Darin Adler  <darin@apple.com>

        * force-clean-timestamp: Without this, I crash on startup.

2002-08-22  Maciej Stachowiak  <mjs@apple.com>

	Brand new KURL implementation which avoids CFURL, CFString, and
	all that other allocation-happy goodness and instead does as much
	work as possible with raw ASCII buffers.

	For me this gave a ~5% performance improvement on cvs-base.
	
        * kwq/KWQKURL.mm:
        (KURL::KURL):
        (KURL::hasPath):
        (KURL::protocol):
        (KURL::host):
        (KURL::port):
        (KURL::pass):
        (KURL::user):
        (KURL::ref):
        (KURL::query):
        (KURL::path):
        (KURL::setProtocol):
        (KURL::setHost):
        (KURL::setPort):
        (KURL::setRef):
        (KURL::setQuery):
        (KURL::setPath):
        (KURL::prettyURL):
        (KURL::decode_string):
        (escapeBadChars):
        (KURL::parse):
        (KURL::getNSURL):
        * kwq/kdecore/kurl.h:
        * khtml/khtml_part.cpp:
        (KHTMLPart::end): Don't call KURL::clearCaches() any more.

2002-08-22  Darin Adler  <darin@apple.com>

        * kwq/KWQButton.mm: (QButton::~QButton): Disconnect the view
	from the widget by doing setTarget:nil.
        * kwq/KWQComboBox.mm: (QComboBox::~QComboBox): Ditto.

2002-08-22  David Hyatt  <hyatt@apple.com>

	Add vertical margins for checkboxes and radios.  A later rule
	in the file was overriding my earlier attempt to set up these margins.
	
        * khtml/css/html4.css:

2002-08-22  Richard Williamson  <rjw@apple.com>

        New faster char * append (actually insert) for mjs.
        
        * kwq/KWQString.mm:
        (QString::insert):
        * kwq/qt/qstring.h:

2002-08-22  Darin Adler  <darin@apple.com>

	Some small QString improvements.

        * kwq/qt/qstring.h: Add printf attribute to sprintf member function.
        * kwq/KWQString.mm:
	Remove extra \n characters from QSTRING_FAILURE calls. Change some
	fprintf to QSTRING_FAILURE. Change some QSTRING_FAILURE to KWQ_ASSERT.
        (QStringData::makeAscii): Fix bug where it would update _maxAscii
	with a new size even when it didn't allocate a new buffer.
        (QStringData::makeUnicode): Fix bug where it would update _maxUnicode
	with a new size even when it didn't allocate a new buffer.
        (QString::utf8): Fix bug where it assumed the UTF-8 form of a string
	has the same length as the Unicode version. Also save one allocation
	by doing it right into the QCString.
        (QString::local8Bit): Just call utf8().
        (QString::setNum): Have all these call our sprintf.
        (QString::sprintf): Format once to get the length. Then do the second
	format right into the string buffer. This way we don't have to do
	any allocation at all, nor use CFString.

=== Alexander-20 ===

2002-08-22  Darin Adler  <darin@apple.com>

	Fixed a one-click crasher that Ken and Don told me about.

        * kwq/KWQObject.mm: (QObject::QObject): Initialize m_eventFilterObject.

2002-08-21  Darin Adler  <darin@apple.com>

	- fixed 3021908 -- text areas should be plain text only

        * kwq/KWQTextArea.mm:
        (-[KWQTextArea _createTextView]): setRichText:NO
        (-[KWQTextArea dealloc]): Release the text view so we don't leak.

2002-08-21  Darin Adler  <darin@apple.com>

        * kwq/KWQNSViewExtras.m: (-[NSClipView _KWQ_scrollRectToVisible:inView:]):
	Use bounds, not visibleRect. Seems to work better.

2002-08-21  John Sullivan  <sullivan@apple.com>

	- commented out (with FIXME 2935687) the code that was advertising in
	the status bar that shift-command would open a link behind the
	current window, since it doesn't.

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::overURL):

2002-08-21  Darin Adler  <darin@apple.com>

	Fix for two problems with password fields.

	   1) Return wasn't working.
 	   2) They were wrapping instead of scrolling.

        * kwq/KWQNSTextField.mm: 
        (-[KWQNSTextField setUpTextField:]): Shared initialization, needed by both
	the text field and the secure field. This includes the two things we needed
	for the password text field; wiring up action properly and setScrollable:YES.
        (-[KWQNSTextField initWithFrame:]): Use setUpTextField.
	(-[KWQNSTextField setPasswordMode:]): Use setUpTextField.

2002-08-21  David Hyatt  <hyatt@apple.com>

	Fix for 3015372, tables and blocks nested inside other tables
	don't center.  This fixes a lot of sites, from the forum
	sites to the www.ve3d.com voodooextreme site.
	
        * khtml/html/html_tableimpl.cpp:
        (HTMLTablePartElementImpl::parseAttribute):

2002-08-21  Darin Adler  <darin@apple.com>

	- fixed 3027927 -- selected text fields do not cause the web view to scroll to reveal them

        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField becomeFirstResponder]): Call [self _KWQ_scrollFrameToVisible].
        (-[KWQSecureTextField becomeFirstResponder]): Call [self _KWQ_scrollFrameToVisible].

        * kwq/KWQNSViewExtras.h: Added. New scrolling functions.
        * kwq/KWQNSViewExtras.m: Added. New scrolling functions.
        * WebCore.pbproj/project.pbxproj: Added KWQNSViewExtras.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::nextKeyViewInFrame):
	Make sure superview and position is set up properly before we try to tab to something.
        * kwq/KWQWidget.mm: (QWidget::setFocus):
	Make sure superview and position is set up properly before we try to focus something.

	Unrelated change.

        * kwq/KWQInvisibleButton.h:
        * kwq/KWQInvisibleButton.mm:
	Add KWQ prefix to the name of the private Objective C class to avoid potential conflicts.

2002-08-21  Darin Adler  <darin@apple.com>

	Implemented baseline alignment for form elements. We decided that this was better
	than what we're currently doing. But it will look even better when the font of the
	text field matches the font of the surrounding text, so we should consider that.

	I also nudged the text down one pixel in popup menus, to match buttons. I think we
	probably should suggest that this be done in Aqua by default (buttons and popup menus
	already match in the normal size; this is the small size).

        * khtml/rendering/render_form.h: Remove some APPLE_CHANGES.
        * khtml/rendering/render_form.cpp:
        (RenderFormElement::baselinePosition): Use the widget's concept of the baseline
	position (the new QWidget::baselinePosition function).
        (RenderButton::baselinePosition): Just call the inherited version.
        (RenderSubmitButton::baselinePosition): Remove our ifdef because we want what the
	original code said, which was just calling the inherited version.
	(RenderLineEdit::baselinePosition): Removed our added method since we want to just
	call the inherited version.
        (RenderSelect::baselinePosition): Just call the inherited version for the pop up
	menu case. For the list box, just left the old code alone until someone can take
	a look at it.

        * kwq/qt/qwidget.h: Added new virtual baselinePosition function.
        * kwq/KWQWidget.mm: (QWidget::baselinePosition): Default for baseline is the bottom.

        * kwq/qt/qlineedit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::baselinePosition): Compute the baseline based on how NSTextField does it.
	Compared to the other widgets this was easy, because the cell's drawingRectForBounds
	gives you the place where the top of the line is. It does use defaultLineHeightForFont,
	which is not used by other widgets, but that's no real problem.

        * kwq/qt/qbutton.h:
        * kwq/KWQButton.mm: Moved all the code that's push-button specific into QPushButton.

        * kwq/qt/qpushbutton.h:
        * kwq/KWQPushButton.mm:
        (QPushButton::QPushButton): Set the bezel style of the button.
        (QPushButton::sizeHint): Moved here from QButton.
        (QPushButton::frameGeometry): Moved here from QButton.
        (QPushButton::setFrameGeometry): Moved here from QButton.
        (QPushButton::baselinePosition): Compute the baseline based on how NSButton does it.
	The rule for the style of button we use is "centered vertically in the available space,
	offset by kThemePushButtonSmallTextOffset", so I had to hardcode the value of
	kThemePushButtonSmallTextOffset; I called it VERTICAL_FUDGE_FACTOR (2).

        * kwq/qt/qcombobox.h:
        * kwq/KWQComboBox.mm:
        (-[KWQPopUpButtonCell drawInteriorWithFrame:inView:]): Custom cell class that nudges
	the text down one pixel.
        (QComboBox::QComboBox): Attach the custom cell class.
        (QComboBox::baselinePosition): Compute the baseline based on how NSPopUpButton does it.
	The rule for the style of pop-up button we use is "CELLOFFSET pixels down from the top",
	so I had to hardcode the value of CELLOFFSET; I called it VERTICAL_FUDGE_FACTOR (2).

        * force-clean-timestamp: Yes, again.

2002-08-20  Darin Adler  <darin@apple.com>

	- fix 3028936 -- fields are not submitting the correct data if they are selected
	when you submit

        * kwq/KWQNSTextField.mm: (-[KWQNSTextField controlTextDidChange:]):
	Call widget->textChanged and set edited to true here. The old code had two problems.
	First, it only sent textChanged from controlTextDidEndEditing. Second, it overrode
	textDidChange without calling super, preventing controlTextDidChange from being
	sent to the delegate.

2002-08-20  David Hyatt  <hyatt@apple.com>

	Fix background positioning so that it works with table cells.
	This fixes the tabs on www.msn.com.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::printBackground):
        * khtml/rendering/render_table.h:

2002-08-20  Darin Adler  <darin@apple.com>

	WebCore part of support for tabbing into and out of the toolbar.

        * kwq/KWQKHTMLPartImpl.h: Renamed static nextKeyView to nextKeyViewForWidget.
	Added nextKeyViewInFrameHierarchy.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::nextKeyViewInFrameHierarchy): New name for the old nextKeyView.
        (KWQKHTMLPartImpl::nextKeyView): Added. Does all the logic for handling views outside
	the frame hierarchy that used to be only in the static nextKeyView.
        (KWQKHTMLPartImpl::nextKeyViewForWidget): New name for the static nextKeyView, which
	now just does the widget-specific bits. Removed null check in here that's no longer needed.

        * kwq/KWQNSTextField.mm: Update to call nextKeyViewForWidget.

        * kwq/WebCoreBridge.h: Added nextKeyViewInsideWebViews, previousKeyViewInsideWebViews,
	nextKeyViewOutsideWebViews, and previousKeyViewOutsideWebViews.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge nextKeyViewInsideWebViews]): Call nextKeyViewInFrameHierarchy.
        (-[WebCoreBridge previousKeyViewInsideWebViews]): Call nextKeyViewInFrameHierarchy.

	Introduced QString to sprong. See <http://www.goat.demon.co.uk/sprong.html>.
	A few other tweaks to QString API; wean it from mutable strings.

        * kwq/qt/qstring.h:
        * kwq/KWQString.mm: Sprongify it.
        (QString::setBufferFromCFString): Add a fixed-size buffer to avoid malloc.
        (QString::getCFString): Replace getCFMutableString with this.
        (QString::getNSString): Use NSString directly.

        * kwq/KWQDictImpl.mm:
        * kwq/KWQKURL.mm:
        * kwq/KWQStringList.mm:
        * kwq/KWQtextcodec.mm:
        * kwq/WebCoreBridge.mm:
	Use getCFString, not getCFMutableString.

2002-08-19  Darin Adler  <darin@apple.com>

        * force-clean-timestamp: Richard's changes require a clean build.

2002-08-19  Richard Williamson  <rjw@apple.com>

        QString rewrite.  Much faster now.
        QString has an inline rep, QStringData, which
        has an inline character buffer.  reps are
        referenced indirectly via a handle.  inline
        reps are detached when necessary.  Typical
        stack based usage requires no allocations
        for small string.  Attempts are made to avoid
        costly conversions between ascii and unicode.
        Extensive diagnostics can be enable by
        defining QSTRING_DEBUG_ALLOCATIONS and calling
        _printQStringAllocationStatistics().
        
        There appear to be a few small lingering leaks
        that I need to track down.
        
        * WebCore-tests.exp:
        
        Added symbols for qstring-test.cpp.
        
        * khtml/css/cssstyleselector.cpp:
        
        Removed old string optimization hack.
        
        * kwq/KWQString.mm:
        
        Rewrite.
        (_isOnStack):
        (countInstance):
        (allocatedBuffers):
        (ALLOC_CHAR):
        (REALLOC_CHAR):
        (DELETE_CHAR):
        (ALLOC_QCHAR):
        (REALLOC_QCHAR):
        (DELETE_QCHAR):
        (_printQStringAllocationStatistics):
        (ucstrcmp):
        (ucstrncmp):
        (ucstrnicmp):
        (ok_in_base):
        (QStringData::QStringData):
        (QStringData::initialize):
        (QStringData::operator new):
        (QStringData::operator delete):
        (QString::makeSharedNullHandle):
        (QString::makeSharedNull):
        (QStringData::~QStringData):
        (QStringData::ascii):
        (QStringData::increaseAsciiSize):
        (QStringData::unicode):
        (QStringData::increaseUnicodeSize):
        (QStringData::makeAscii):
        (QStringData::makeUnicode):
        (QString::setBufferFromCFString):
        (QString::fromStringWithEncoding):
        (QString::fromCFMutableString):
        (QString::fromCFString):
        (QString::fromNSString):
        (QString::getCFMutableString):
        (QString::getNSString):
        (QString::~QString):
        (QString::QString):
        (QString::operator=):
        (QString::at):
        (QString::unicode):
        (QString::compare):
        (QString::startsWith):
        (QString::endsWith):
        (QString::latin1):
        (QString::isNull):
        (QString::find):
        (QString::findRev):
        (QString::contains):
        (QString::toShort):
        (QString::toUShort):
        (QString::toInt):
        (QString::toUInt):
        (QString::toLong):
        (QString::toULong):
        (QString::toDouble):
        (QString::findArg):
        (QString::arg):
        (QString::left):
        (QString::right):
        (QString::mid):
        (QString::copy):
        (QString::lower):
        (QString::stripWhiteSpace):
        (QString::simplifyWhiteSpace):
        (QString::deref):
        (QString::setUnicode):
        (QString::setLatin1):
        (QString::sprintf):
        (QString::append):
        (QString::insert):
        (QString::detachInternal):
        (QString::detach):
        (QString::remove):
        (QString::replace):
        (QString::forceUnicode):
        (QString::setLength):
        (QString::truncate):
        (QString::fill):
        (QString::operator+=):
        (QString::convertToQCString):
        (operator==):
        (QConstString::QConstString):
        (QConstString::~QConstString):
        (_initializeHandleNodeBlock):
        (_allocatePageNode):
        (_initializeHandleNodes):
        (_allocateNode):
        (allocateHandle):
        (freeHandle):
        
        * kwq/qt/qstring.h:
        Rewrite
        
2002-08-19  Maciej Stachowiak  <mjs@apple.com>

        * Makefile.am: Added new mechanism to clean only the objects that
	depend on JavaScript.
	* force-js-clean-timestamp: Touched since I changed JSC just now.
        * .cvsignore: Ignore previous-js-clean-timestamp.
	
2002-08-19  Darin Adler  <darin@apple.com>

	Fixed tab cycle on slashdot.org and elsewhere by being stricter about what is
	included in the tab cycle.

        * kwq/KWQWidget.mm: (QWidget::focusPolicy): Use the same rule as AppKit.

2002-08-19  David Hyatt  <hyatt@apple.com>

	Tweak baselines to look a little better for form controls.
	This will be redone by Darin to really baseline align... this
	is just temporary.

	Also adding 3px margins to <input> and <textarea> and <select>.
	
        * khtml/css/html4.css:
        * khtml/rendering/render_form.cpp:
        (RenderButton::baselinePosition):
        (RenderSelect::baselinePosition):

2002-08-19  Darin Adler  <darin@apple.com>

	- fixed 3027791 -- Crash when pressing "tab" after going to http://slashdot.org/

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::nextKeyViewInFrame): Add null check.

2002-08-19  Darin Adler  <darin@apple.com>

	Put in more robust version of the next/previous key view checking
	that matches what I did in WebHTMLView.

        * kwq/KWQNSTextField.h: Add inNextValidKeyView instance variable.
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField dealloc]): No need to nil out widget.
        (-[KWQNSTextField nextKeyView]): Only do the computation when called from nextValidKeyView.
        (-[KWQNSTextField previousKeyView]): Only do the computation when called from previousValidKeyView.
        (-[KWQNSTextField nextValidKeyView]): Set boolean.
        (-[KWQNSTextField previousValidKeyView]): Set boolean.
        (-[KWQSecureTextField nextKeyView]): Only do the computation when called from nextValidKeyView.
        (-[KWQSecureTextField previousKeyView]): Only do the computation when called from nextValidKeyView.
        (-[KWQSecureTextField nextValidKeyView]): Set boolean.
        (-[KWQSecureTextField previousValidKeyView]): Set boolean.

	Unrelated change.

        * kwq/mac-encodings.txt: Add an encoding name of gb18030, since I saw mention of it in bug 3002016.

2002-08-19  Darin Adler  <darin@apple.com>

	Support so that WebKit can tab into a web view's fields.

        * kwq/KWQKHTMLPartImpl.h: Made another nextKeyView() version public.
        * kwq/WebCoreBridge.h: Add new methods, change parameters to one existing one.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge createKHTMLViewWithNSView:marginWidth:marginHeight:]):
	Remove width and height parameters. The passed-in view already has the correct
	width and height.
        (-[WebCoreBridge nextKeyView]): Call nextKeyView() with node == 0.
        (-[WebCoreBridge previousKeyView]): Call nextKeyView() with node == 0.

2002-08-19  Darin Adler  <darin@apple.com>

	First cut at implementation of "tab to change focus": Lots of loose ends, but it's
	going well.

        * kwq/KWQNSTextField.h: Change initWithWidget to initWithQLineEdit.
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField initWithQLineEdit:]): Keep a QLineEdit pointer so we don't cast later.
        (-[KWQNSTextField dealloc]): Sets widget to 0 to make nextKeyView and previousKeyView
	return nil while deallocating.
        (-[KWQNSTextField setPasswordMode:]): Pass widget when creating secure text field so it
	can handle the next/previous links properly.
        (-[KWQNSTextField nextKeyView]): Added. Calls KWQKHTMLPartImpl::nextKeyView.
        (-[KWQNSTextField previousKeyView]): Added. Calls KWQKHTMLPartImpl::nextKeyView.
        (-[KWQTextFieldCell isOpaque]): Added. Returns NO; fixes focus rectangle updating.
        (-[KWQSecureTextField initWithQWidget:]): Added.
        (-[KWQSecureTextField dealloc]): Added. Sets widget to 0 to make nextKeyView and
	previousKeyView return nil while deallocating.
        (-[KWQSecureTextField nextKeyView]): Added. Calls KWQKHTMLPartImpl::nextKeyView.
        (-[KWQSecureTextField previousKeyView]): Added. Calls KWQKHTMLPartImpl::nextKeyView.

        * kwq/KWQKHTMLPartImpl.h: Add KWQSelectionDirection. Change name of getBridge() to
	bridge(), getDocument() to document(), getRenderer() to renderer(), getBridgeForFrameName()
	to bridgeForFrameName(). Also added nextKeyView family of member functions.

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::nextKeyViewInFrame): Added.
        (KWQKHTMLPartImpl::nextKeyView): Added.

        * kwq/qt/qwidget.h: Remove unneeded parameters from constructor. Also added a
	constructor that takes an NSView.
        * kwq/KWQWidget.mm:
        (QWidget::QWidget): Don't store focus policy (it was uninitialized before).
        (QWidget::focusPolicy): Return TabFocus for any widget that has a view with a first
	responder, NoFocus for any other.
        (QWidget::setFocusPolicy): Do nothing.
        (QWidget::setFocusProxy): Do nothing.

        * kwq/qt/qobject.h: Store the event filter object when installEventFilter is called.
	This is used to find the RenderWidget for a QWidget by the new tabbing code.
        * kwq/KWQObject.mm: Removed event-filter functions. Two are now inlines, one deleted.

	Other changes related to KWQKHTMLPartImpl improvements.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        * kwq/KWQKHTMLPartImpl.mm:
        * kwq/KWQLoaderImpl.mm:
        * kwq/WebCoreBridge.mm:
	Update for KWQKHTMLPartImpl member name changes.

	Various improvements for other widget implementations.

        * kwq/qt/qbutton.h:
        * kwq/KWQButton.mm: Stop using KWQNSButton. Instead just use a button adapter
	object, and a plain old NSButton.
        (QButton::QButton): Put all the NSButton setup in here.
        (QButton::~QButton): Release the adapter here.
        (QButton::clicked): Move this in here because it's virtual now so that QCheckBox
	can override it.
        (-[KWQButtonAdapter initWithQButton:]): Added.
        (-[KWQButtonAdapter action:]): Just call clicked().

        * kwq/qt/qpushbutton.h: Don't pass unused parent pointer to QButton constructor.
        * kwq/KWQPushButton.mm: (QPushButton::QPushButton): Don't pass unused parent pointer to
	QButton contructor.

        * kwq/qt/qcheckbox.h:
        * kwq/KWQCheckBox.mm: Just use NSButton, not KWQNSButton.
        (QCheckBox::clicked): Move the state-changed logic here; used to be in KWQNSButton.

        * kwq/KWQRadioButton.mm:
        (QRadioButton::QRadioButton): Don't pass unused parent pointer to
	QButton contructor.

        * kwq/qt/qcombobox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::QComboBox): Removed extra constructor. Make a plain NSPopUpButton,
	and use an adapter object, rather than having a KWQNSComboBox.
        (QComboBox::~QComboBox): Release the adapter.
        (QComboBox::insertItem): New implementation. No need to keep an items array around,
	because the menu does that just fine.
        (QComboBox::clear): Remove the items from the pop-up button directly.
        (-[KWQComboBoxAdapter initWithQComboBox:]): Added.
        (-[KWQComboBoxAdapter action:]): Just call activated().

        * kwq/kdeui/kcombobox.h: Empty this out and make it use only inlines.

        * khtml/rendering/render_form.cpp: (RenderSelect::updateFromElement):
	Remove the setSize()/doneLoading() optimization for QComboBox because the new
	simpler QComboBox implementation obviates the speed problem this was originally
	intended to fix.

        * kwq/qt/qlineedit.h:
        * kwq/KWQLineEdit.mm: (QLineEdit::QLineEdit): Call initWithQLineEdit instead of
	initWithWidget. Also don't take an unused parent pointer parameter.

        * kwq/kdeui/klineedit.h: Empty this out and make it use only inlines.

        * kwq/qt/qframe.h: Remove unused parent pointer from constructor.
        * kwq/KWQFrame.mm: Remove unneeded constructor.
        * kwq/KWQHBox.mm: (QHBox::QHBox): Don't pass unused parent pointer to QFrame.
        * kwq/KWQLabel.mm: (QLabel::QLabel): Don't pass unused parent pointer to QFrame.
        * kwq/qt/qscrollview.h: Make constructor inline.
        * kwq/KWQScrollView.mm: Remove unneeded constructor.
        * kwq/KWQWindowWidget.h: Remove unneeded constructor.

        * WebCore.pbproj/project.pbxproj: Remove KWQKComboBox.mm, KWQKLineEdit.mm,
	and KWQScrollBar.h.
        * kwq/KWQKComboBox.mm: Removed.
        * kwq/KWQKLineEdit.mm: Removed.
        * kwq/KWQScrollBar.h: Removed. Unused.

        * kwq/KWQTextArea.h: Change initWithWidget to initWithQTextEdit.
        * kwq/KWQTextArea.mm: (-[KWQTextArea initWithQTextEdit:]): Changed name.
        * kwq/KWQTextEdit.mm: (QTextEdit::QTextEdit): Call initWithQTextEdit instead of
	initWithWidget.

        * kwq/KWQView.h: Eliminated KWQNSButton, KWQNSComboBox, and KWQNSScrollView.
        * kwq/KWQView.mm: Ditto.

	Housekeeping.

        * force-clean-timestamp: Yes, again.

        * khtml/khtml_part.h: Rearrange APPLE_CHANGES a bit.

        * kwq/qt/qvaluelist.h: Added -- as well as ++ for the const iterator, and fixed some
	minor const issues. At one point I needed this for the focus changes, but not any more.

2002-08-16  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::userAgent):
	Call bridge's userAgentForURL: method.
        * kwq/WebCoreBridge.h: Added userAgentForURL: to the protocol

2002-08-16  Darin Adler  <darin@apple.com>

	Step 2 in adding user agent API to WebKit and WebFoundation.
	In this step, I change WebCore so that it the KWQKHTMLPartImpl
	is responsible for fetching the user agent. Later it will
	get the user agent from WebKit via the bridge.

        * khtml/ecma/kjs_navigator.cpp: (Navigator::getValueProperty):
	Get the user agent from the part, not KProtocolManager.
        * khtml/ecma/kjs_proxy.cpp: (KJSProxyImpl::initScript):
	Get the user agent from the part, not KProtocolManager.

        * kwq/KWQKHTMLPartImpl.h: Add userAgent member function.
        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::userAgent): Added.

        * WebCore.pbproj/project.pbxproj: Removed KWQKProtocolManager.mm.
        * kwq/KWQKProtocolManager.mm: Removed.
        * kwq/kio/kprotocolmanager.h: Made empty.

2002-08-16  Maciej Stachowiak  <mjs@apple.com>

        * force-clean-timestamp: Need to rebuild for JavaScriptCore changes.

2002-08-16  Darin Adler  <darin@apple.com>

	- fixed 3023851 -- screen garbage created by scrolling text

	Our implementation of clipRegion didn't reflect the clip that was
	already set for the view, so we drew outside the view. To fix it,
	I eliminated the clipRegion call and changed clients to use a new
	addClip call instead that doesn't require getting the clip in the
	form of a region (which is not really possible with CoreGraphics).

        * khtml/rendering/render_box.cpp: (RenderBox::calcClip):
	Call addClip instead of clipRegion(), intersect(), setClipRegion().

        * kwq/qt/qpainter.h: Added addClip(), removed clipRegion(), setClipRegion().
        * kwq/KWQPainter.mm: (QPainter::addClip): Calls [NSBezierPath clipRect:].

        * kwq/qt/qregion.h: Went back to a single-path implementation, since
	we don't need intersect() any more. Also removed isNull() and setClip().
        * kwq/KWQRegion.mm:
        (QRegion::QRegion): New simpler versions.
        (QRegion::~QRegion): Release the path.
        (QRegion::operator=): Copy the other path.
        (QRegion::contains): Call [containsPoint:].
        (QRegion::translate): Call [transformUsingAffineTransform:].
        (QRegion::boundingRect): Call [bounds].

2002-08-16  Darin Adler  <darin@apple.com>

	- fixed 3026042 -- hide frames button at developer documentation doesn't work

	This regression was introduced by the anchor changes we made just after
	the Alexander-15 release.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::urlSelected):
	Make decisions about special handling for links with anchors based
	on the target frame, not the current frame.

2002-08-16  Maciej Stachowiak  <mjs@apple.com>

        * force-clean-timestamp: rebuild for JavaScriptCore changes.

2002-08-16  David Hyatt  <hyatt@apple.com>

	Fix for the intuit.com and eweek.com <form><tr> bgcolor problem.
	Improve the error handling of the parser so that it doesn't
	lose attributes when errors like this occur in a page.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::~KHTMLParser):
        (KHTMLParser::reset):
        (KHTMLParser::parseToken):
        (KHTMLParser::insertNode):
        * khtml/html/htmlparser.h:

2002-08-15  Darin Adler  <darin@apple.com>

	- fixed 2983959 -- pages that try to use JavaScript to focus fail to do so

        * kwq/KWQWidget.mm: (QWidget::setFocus): Call makeFirstResponder.

2002-08-15  Darin Adler  <darin@apple.com>

	Give the same good loving to the check boxes and radio buttons.
	I'm not saying our rules for where to position them are great, but
	the rules are implemented cleanly and thus easier to tweak.

	Got rid of the old Action system altogether, using signals now.

        * khtml/rendering/render_form.h: Remove now-unneeded APPLE_CHANGES.
        * khtml/rendering/render_form.cpp:
        (RenderButton::baselinePosition): All the buttons now share a single
	version of this call, since none need any special baseline hacking at
	the moment.
        (RenderSubmitButton::baselinePosition): Just call the RenderButton version.

        * kwq/KWQCheckBox.mm:
        (QCheckBox::sizeHint): Use 12x12, not 22x22.
        (QCheckBox::frameGeometry): Adjust for margins.
        (QCheckBox::setFrameGeometry): Adjust for margins.
        * kwq/KWQRadioButton.mm:
        (QRadioButton::sizeHint): Use 12x12, not 22x22.
        (QRadioButton::frameGeometry): Adjust for margins.
        (QRadioButton::setFrameGeometry): Adjust for margins.

        * kwq/qt/qcombobox.h:
        * kwq/KWQComboBox.mm: (QComboBox::QComboBox): Set up the activated signal.
        * kwq/KWQView.mm: (-[KWQNSComboBox action:]): Emit the activated signal.

        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm:
        (-[KWQBrowserDelegate browserSingleClick:]): Send a selectionChanged signal
	and a clicked signal instead of a ACTION_LISTBOX_CLICKED.
        (QListBox::QListBox): Set up the clicked and selectionChanged signals.

        * kwq/qt/qobject.h: Remove Actions, ACTION_TEXT_AREA_END_EDITING,
	ACTION_LISTBOX_CLICKED, ACTION_COMBOBOX_CLICKED, emitAction, performAction,
	and target.
        * kwq/KWQObject.mm:
        (QObject::connect): Remove the target hack, no longer needed.
        (QObject::QObject): Remove target initialization.

        * kwq/KWQSlot.mm: (KWQSlot::KWQSlot), (KWQSlot::call):
	Added selected and selectionChanged slots.

        * kwq/KWQTextArea.mm:
        (-[KWQTextArea textDidEndEditing:]): Removed code to emit the
	ACTION_TEXT_AREA_END_EDITING action, which was no longer used.

        * force-clean-timestamp: Yes, again.

2002-08-15  Darin Adler  <darin@apple.com>

	- fixed 3017376 -- button height is too tall

	Reworked how widget sizing and positioning is done for a few of the most important
	widget types.

        * khtml/rendering/render_form.h: Remove more of the performAction hackery.
        * khtml/rendering/render_form.cpp:
        (RenderCheckBox::calcMinMaxWidth): Get size from widget.
        (RenderRadioButton::calcMinMaxWidth): Get size from widget.
        (RenderSubmitButton::RenderSubmitButton): Remove old unneeded APPLE_CHANGES.
        (RenderSubmitButton::baselinePosition): Put the bottom of the button on the
	baseline without any magic numbers.
        (RenderLineEdit::baselinePosition): Put the bottom of the text field two pixels
	below the baseline without any other magic numbers.
        (RenderLineEdit::calcMinMaxWidth): Get size from widget.
        (RenderSelect::baselinePosition): Put the bottom of the menu on the
	baseline without any magic numbers. List box case is untouched for now.

        * kwq/qt/qbutton.h:
        * kwq/KWQButton.mm:
        (QButton::QButton): Move most of the setup into KWQNSButton.
        (QButton::sizeHint): Use cellSize, account for margins.
        (QButton::frameGeometry): Adjust for margins.
        (QButton::setFrameGeometry): Adjust for margins.
        * kwq/qt/qcheckbox.h:
        * kwq/KWQCheckBox.mm:
        (QCheckBox::QCheckBox): QButton takes care of most of the setup now.
        (QCheckBox::sizeHint): Added.
        (QCheckBox::frameGeometry): Adjust for margins.
        (QCheckBox::setFrameGeometry): Adjust for margins.
        * kwq/qt/qcombobox.h:
        * kwq/KWQComboBox.mm:
        (QComboBox::init): KWQNSComboBox takes care of most of the setup now.
        (QComboBox::sizeHint): Adjust for margins.
        (QComboBox::frameGeometry): Adjust for margins.
        (QComboBox::setFrameGeometry): Adjust for margins.
        * kwq/qt/qlineedit.h:
        * kwq/KWQLineEdit.mm:
        (QLineEdit::sizeForCharacterWidth): Added.
        (QLineEdit::frameGeometry): Adjust for margins.
        (QLineEdit::setFrameGeometry): Adjust for margins.
        * kwq/qt/qradiobutton.h:
        * kwq/KWQRadioButton.mm:
        (QRadioButton::QRadioButton): QButton takes care of most of the setup now.
        (QRadioButton::sizeHint): Added.
        (QRadioButton::frameGeometry): Adjust for margins.
        (QRadioButton::setFrameGeometry): Adjust for margins.

        * kwq/qt/qwidget.h:
        * kwq/KWQWidget.mm:
        (QWidget::setFrameGeometry): New name for internalSetGeometry, now public.

	- fixed 3010695 -- Slashdot.org starts with password field focused, but shouldn't

	Added KWQSecureTextField to work around the bug.

        * kwq/KWQNSTextField.h: Made formatter and other details private.
        * kwq/KWQNSTextField.mm:
        (+[KWQNSTextField initialize]): Set up custom cell class that works around focus border.
        (-[KWQNSTextField initWithFrame:]): Put the work in here, since this is NSView's designated
	initializer.
        (-[KWQNSTextField initWithWidget:]): Now just calls [init] which calls [initWithFrame],
	and then sets the widget.
        (-[KWQNSTextField action:]): Use the returnPressed signal instead of ACTION_TEXT_FIELD.
        (-[KWQNSTextField controlTextDidEndEditing:]): Use textChanged signal instead of
	ACTION_TEXT_FIELD_END_EDITING.
        (-[KWQNSTextField dealloc]): Release the secureField (was a leak).
        (-[KWQNSTextField updateSecureFieldFrame]): Added. Used to keep secure field in the right
	place.
        (-[KWQNSTextField setFrameSize:]): Added. Calls updateSecureFieldFrame.
        (-[KWQNSTextField setPasswordMode:]): Change all the details, but this does the same
	thing it used to.
        (-[KWQNSTextField selectText:]): Only call selectText on one of the two field, since it
	causes the field to grab focus and we don't want to do that twice.
        (-[KWQNSTextField setStringValue:]): Set the string value in both fields any time someone
	gives us a new value.
        (-[KWQNSTextField setFont:]): Set the font in both fields any time someone gives us a new
	font.
        (-[KWQTextFieldCell cellSizeForBounds:]): Add space for focus border.
        (-[KWQTextFieldCell drawWithFrame:inView:]): Inset by focus border.
        (-[KWQTextFieldCell editWithFrame:inView:editor:delegate:event:]): Inset by focus border.
        (-[KWQTextFieldCell selectWithFrame:inView:editor:delegate:start:length:]): Inset by focus border.
        (-[KWQSecureTextField selectText:]): Override to do nothing while in setFrameSize to work around
	bug in AppKit.
        (-[KWQSecureTextField setFrameSize:]): Set flag to trigger selectText check.

	- fixed 3025166 -- check boxes and radio buttons on google.com's preferences pages
	are not "linked"

	We were not emitting onClicked for check boxes.

        * kwq/KWQView.h: No need to pass frames any more. Default is empty.
        * kwq/KWQView.mm:
        (-[KWQView initWithFrame:]): Do most of the work in here.
        (-[KWQView initWithWidget:]): Just call [init] and set up widget.
        (-[KWQNSButton initWithFrame:]): Do most of the work in here. Remove the special
	cell class, and always use a small control with the small system font.
        (-[KWQNSButton initWithWidget:]): Just call [init] and set up widget.
        (-[KWQNSButton action:]): Call the clicked() signal instead of ACTION_BUTTON_CLICKED.
        (-[KWQNSButton stateChanged:]): Call the stateChanged() signal instead of
	ACTION_CHECKBOX_CLICKED.
        (-[KWQNSComboBox initWithFrame:]): Do most of the work in here.
        (-[KWQNSComboBox initWithWidget:]): Just call [init] and set up widget.
        (-[KWQNSScrollView initWithWidget:]): Just call [init] and set up widget.

	- fixed 3025211 -- find person in Apple directory never displays person information

	When I enabled the code to wait and not redirect until loads are complete, that
	broke this case, because we didn't have enough hooked up to notice loads completing.
	I hooked everything up and its working now.

        * khtml/khtml_part.h: Add started().
        * khtml/khtml_part.cpp:
        (KHTMLPart::restoreURL): Un-ifdef emission of started().
        (KHTMLPart::openURL): Un-ifdef emission of started().
        (KHTMLPart::end): Don't do an explicit call to slotFinishedParsing().
	We actually hook up a signal for this now.
        (KHTMLPart::slotChildCompleted): Un-ifdef the rest of the code here.

        * khtml/xml/dom_docimpl.h:
        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::DocumentImpl):
        * khtml/xml/xml_tokenizer.h:
	Do the necessary setup so we can use KWQSignal for finishedParsing.

        * kwq/KWQKHTMLPartImpl.mm:
        (KHTMLPart::started): Added. Calls slotChildStarted on parent.
        (KHTMLPart::completed): Added slotParentCompleted calls.

        * kwq/qt/qobject.h: Add sender() and KWQObjectSenderScope.
        * kwq/KWQObject.mm:
        (KWQObjectSenderScope::KWQObjectSenderScope): Added. Sets sender() and saves the old value.
        (KWQObjectSenderScope::~KWQObjectSenderScope): Added. Resets sender().

        * kwq/KWQSignal.h:
        * kwq/KWQSlot.h:
        * kwq/KWQSignal.mm: (KWQSignal::call): Added overloads for calling signals with int and
	QString parameters. Also set up sender() using KWQObjectSenderScope.

        * kwq/KWQSlot.mm: (KWQSlot::KWQSlot), (KWQSlot::call): Add support for one signal
	(calls through to whatever is connected to that signal's slot) and six new slots.

        * kwq/KWQsignals.mm:
        (Tokenizer::Tokenizer): Construct the finishedParsing signal.
        (Tokenizer::finishedParsing): Emit the finishedParsing signal.

	- fixed 3025170 -- right sides of borders placed incorrectly around table cells

	There was some silly code that I just removed.

        * khtml/rendering/render_table.cpp:
        (RenderTable::addColInfo): Turn off the half-assed collapse borders stuff here.

	- other changes

        * force-clean-timestamp: Big changes; full rebuild needed.

        * khtml/khtmlview.cpp: (KHTMLView::~KHTMLView): Make the code to kill
	the timers be unconditional, just in case.

        * kwq/KWQCharsets.mm: (buildDictionaries): Remove UTF-16 special case since it's now
	in the character sets table.

        * kwq/qt/qpoint.h:
        * kwq/KWQPoint.mm:
        (QPoint::QPoint): Converts from NSPoint.
        (QPoint::operator NSPoint): Converts to NSPoint.
        * kwq/qt/qrect.h:
        * kwq/KWQRect.mm:
        (QRect::QRect): Converts from NSRect.
        (QRect::isEmpty): Fix backwards logic.
        (QRect::operator NSRect): Converts to NSRect.
        * kwq/qt/qsize.h:
        * kwq/KWQSize.mm:
        (QSize::QSize): Converts from NSSize.
        (QSize::operator NSSize): Converts to NSSize.

        * kwq/qt/qpushbutton.h:
        * kwq/KWQPushButton.mm: Removed unused methods.

        * kwq/KWQRegion.mm: Use new QPoint/NSPoint/QRect/NSRect functions.

        * kwq/KWQScrollView.mm: (QScrollView::addChild): Update comment.

        * kwq/KWQTextArea.h:
        * kwq/KWQTextArea.mm:
        (-[KWQTextArea initWithFrame:]): Do most of the work in here.
        (-[KWQTextArea initWithWidget:]): Just call [init] and set up widget.

        * kwq/KWQTextEdit.mm: (QTextEdit::QTextEdit): Don't pass an empty frame any more.

        * kwq/KWQWindowWidget.h:
        * kwq/KWQWindowWidget.mm: Update for name change.

        * kwq/WebCoreTestController.h: Placeholder for the feature I should be working on.

=== Alexander-19 ===

=== Alexander-18 ===

2002-08-15  Maciej Stachowiak  <mjs@apple.com>

        * force-clean-timestamp: Need to rebuild for JavaScriptCore
	changes.

2002-08-14  David Hyatt  <hyatt@apple.com>

	ROFL. The KHTML table code had a hardcoded "20" being
	subtracted out of table heights instead of using the
	actual margins on the <body> element.  This patch
	removes the hardcoded "20" and replaces it with the
	actual <body> margins.
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::layoutRows):

2002-08-14  David Hyatt  <hyatt@apple.com>

	Fix marginwidth and marginheight on the <body> element.
	These attributes were not applying the correct margins,
	which would cause many many pages to mis-render!
	
        * khtml/html/html_baseimpl.cpp:
        (HTMLBodyElementImpl::parseAttribute):

2002-08-14  David Hyatt  <hyatt@apple.com>

	Ensure that a rendering object gets built for <fieldset>
	elements.  Content inside a <fieldset> was being discarded
	and not rendered.

	This fixes the top frame on blogger comment posting so that
	it shows up properly.
	
        * khtml/html/html_formimpl.cpp:
        (HTMLFieldSetElementImpl::attach):
        * khtml/html/html_formimpl.h:

2002-08-14  Darin Adler  <darin@apple.com>

	Fix the build.

        * khtml/ecma/kjs_html.cpp: (KJS::HTMLDocument::putValue):
	Add braces and fix a syntax error.

        * kwq/mac-encodings.txt: Add comments. Make utf-16 be a synonym for
	utf-8 rather than having it actually try to treat things as 16-bit.
	We will have to revisit this, but for now it makes zingermans.com work again.

        * kwq/make-charset-table.pl: Allow comments.

2002-08-14  Maciej Stachowiak  <mjs@apple.com>

	Fixed a JavaScript object leak that was plaguing ign.com and
	livepage.apple.com, among other things.
	
        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLDocument::putValue): Create a Value wrapper for a newly allocated
	DOMNode object that's not used past this function so it gets GC'd properly.
        (KJS::HTMLElement::putValue): Likewise.

2002-08-14  Maciej Stachowiak  <mjs@apple.com>

        * khtml/ecma/kjs_window.cpp: Fix to build clean after
	JavaScriptCore live class changes (this way of handling it is kind
	of a hack, but kjs is unhappy to have Boolean defined so it can't
	unconditionally include CoreFoundation.h in collector.h; will fix
	better later).

2002-08-13  Maciej Stachowiak  <mjs@apple.com>

	Add the ability to determine the classes of live JavaScript
	objects, to help with leak fixing.

        * kwq/WebCoreJavaScript.h:
        * kwq/WebCoreJavaScript.mm:
        (+[WebCoreJavaScript liveObjectClasses]):

2002-08-13  David Hyatt  <hyatt@apple.com>

	An initial implementation of percentage height table cells.
	This implementation will properly distribute space among
	rows with percentage table cells, although there could be
	issues with percentage height cells that span rows.  

	I have also fixed replaced elements so that they understand when they
	are a percentage height and contained within a percentage height
	cell that they can grow.  This fixes the textarea on bloggers'
	comment posting page so that it sizes properly.

	There are many issues remaining with this implementation;
	blocks need to be taught how to flex when they specify a percent
	height.  There is also some sort of rounding error with tables
	that specify a height of 100% that I haven't yet figured out.
	(This error was present before my changes, and it's still present
	after my changes.)

	Also, percentage height tables seem to "lock" to the largest size
	they've ever been and don't properly relayout when they become
	smaller.  Again, this bug existed before my changes.
	
        * khtml/rendering/render_box.cpp:
        (RenderBox::calcReplacedHeight):
        * khtml/rendering/render_table.cpp:
        (RenderTable::RenderTable):
        (RenderTable::calcRowHeight):
        (RenderTable::layout):
        (RenderTable::layoutRows):
        (RenderTable::print):
        (RenderTableCell::RenderTableCell):
        * khtml/rendering/render_table.h:

2002-08-13  Darin Adler  <darin@apple.com>

	Character set handling improvements. In total, this adds 92 new character encoding
	names to the list we know how to handle (299, up from 207), so it probably makes
	some pages work that didn't work before. It probably also adds character encoding
	names that are never used in practice.

        * kwq/character-sets.txt: Took out all but one of our changes. We now handle aliases
	that are not in this file by adding them to mac-encodings.txt.
        * kwq/mac-encodings.txt: Added. Lists CFStringEncoding values and IANA names for them.
	We keep this file small by using the aliasing in character-sets.txt, and we also continue
	to get MIB numbers from character-sets.txt.
        * kwq/make-charset-table.pl: Rewrote to read from new format mac-encodings.txt file, and
	check for new kinds of errors.

        * kwq/.cvsignore: Don't ignore the make-mac-encodings files any more, since we
	don't compile that any more.
        * kwq/Makefile.am: Remove rules for compiling and running make-mac-encodings.
	* kwq/make-mac-encodings.c: Removed.

2002-08-13  Darin Adler  <darin@apple.com>

	- fixed 3023439 -- support for windows-874 charset for thai

        * kwq/character-sets.txt: Added cp874 and windows-874.
        * kwq/make-charset-table.pl: Fix bug where it would right out a bad MIB enum for
	the many Macintosh character sets without associated MIB numbers.

2002-08-13  Darin Adler  <darin@apple.com>

	Some QRegion fixes inspired by Dave's clipping work.

        * kwq/qt/qregion.h: Add setClip, remove getNSBezierPath.
        * kwq/KWQRegion.mm:
        (NSMakePoint): Added. Helper function; could go in a header some day.
        (NSMakeRect): Added. Helper function; could go in a header some day.
        (MakeQRect): Added. Helper function; could go in a header some day.
        (QRegion::QRegion): Make a paths array instead of a single path. Also, change things
	so we actually copy the paths. The old code might translate a path that was shared
	by two QRegion objects.
        (QRegion::intersect): Merge the paths arrays of the two passed-in paths.
        (QRegion::contains): Return true only if all paths in the array contain the point.
        (QRegion::isNull): Return true if any of the paths in the array are empty.
        (QRegion::translate): Translate all the paths in the array.
        (QRegion::boundingRect): Return the intersection of the bounding rects of all the
	paths in the array.
        (QRegion::setClip): Call setClip on the first path, and addClip on the others.

        * kwq/KWQPainter.mm: (QPainter::setClipRegion): Use QRegion::setClip().

2002-08-12  David Hyatt  <hyatt@apple.com>

	Reverting a change that I unintentionally checked in last
	week.  I wasn't yet ready to land it.  It may work, but I
	want to test it more first.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):

2002-08-12  David Hyatt  <hyatt@apple.com>

	Implement clipping.  The one thing that still needs
	to be done is that the intersect method in KWQRegion.mm
	needs to be implemented.  Even without that, this gets
	the ticker on livepage.apple.com clipping properly.
	
        * kwq/KWQPainter.mm:
        (QPainter::xForm):
        (QPainter::save):
        (QPainter::restore):
        (QPainter::setClipRegion):
        * kwq/qt/qregion.h:

2002-08-12  David Hyatt  <hyatt@apple.com>

	Make the news ticker on livepage.apple.com scroll properly.
	It still doesn't clip though.  Fixing this involved correctly
	dirtying the render tree when dynamic DOM changes occurred
	(this was a bug in KHTML's DOM), as well as providing an
	implementation of the MSIE offsetWidth extension that took
	inlines into account (KHTML's impl was always returning a width
	of 0 for inlines).
	
        * khtml/ecma/kjs_dom.cpp:
        (DOMNode::getValueProperty):
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::offsetWidth):
        (RenderFlow::offsetHeight):
        * khtml/rendering/render_flow.h:
        * khtml/rendering/render_object.h:
        * khtml/xml/dom_nodeimpl.cpp:
        (NodeBaseImpl::insertBefore):
        (NodeBaseImpl::replaceChild):
        (NodeBaseImpl::appendChild):

2002-08-12  Darin Adler  <darin@apple.com>

        * khtml/misc/loader.cpp: (Cache::insertInLRUList):
	Add missing piece of the last check-in.

2002-08-12  Darin Adler  <darin@apple.com>

	At Ken's urging, fixed the loader cache to be more efficient.
	Gives 1% on the cvs-base test.

        * force-clean-timestamp: This requires a full rebuild.

        * khtml/misc/loader.h:
        * khtml/misc/loader.cpp:
        (CachedObject::~CachedObject): No longer inline, which is fine since
	it was a virtual function anyway. Remove from the LRU list.
        (CachedObject::setRequest): Add to the LRU list if it qualifies now.
        (CachedObject::ref): Remove from the LRU list.
        (CachedObject::deref): Add to the LRU list if it qualifies now.
        (CachedCSSStyleSheet::ref): Call CachedObject::ref.
        (CachedCSSStyleSheet::deref): Call CachedObject::deref.
        (CachedScript::ref): Call CachedObject::ref.
        (CachedScript::deref): Call CachedObject::deref.
        (CachedImage::ref): Call CachedObject::ref.
        (CachedImage::deref): Call CachedObject::deref.
        (Cache::init): No "LRU list" to create.
        (Cache::clear): No "LRU list" to delete.
        (Cache::requestImage): Call moveToHeadOfLRUList.
        (Cache::requestStyleSheet): Call moveToHeadOfLRUList.
        (Cache::requestScript): Call moveToHeadOfLRUList.
        (Cache::flush): New algorithm.
        (Cache::removeCacheEntry): Call removeFromLRUList.
        (Cache::removeFromLRUList): Added.
        (Cache::moveToHeadOfLRUList): Added.
        (Cache::insertInLRUList): Added.

        * kwq/KWQLoaderImpl.mm: (KWQCheckIfReloading):
        * kwq/WebCoreBridge.h:
	Change dataSourceIsReloading to isReloading.

2002-08-12  David Hyatt  <hyatt@apple.com>

	Fix for the crash (assert) at mlb.com (3014322).  recalcStyle was
	re-entrant, causing the render tree to be reconstructed
	while in the process of being destroyed.

	Also patched object frame to only fire load/unload if
	render objects exist (since the plugin cannot load without
	the render object initializing it anyway).
	
        * khtml/html/html_objectimpl.cpp:
        (HTMLObjectElementImpl::attach):
        (HTMLObjectElementImpl::detach):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::recalcStyle):
        * khtml/xml/dom_docimpl.h:

2002-08-12  Darin Adler  <darin@apple.com>

        * force-clean-timestamp: Need a full build because of KJS changes.
        * khtml/ecma/kjs_window.h: Need to store an Object, not an ObjectImp, because there's no way
	to copy an ObjectImp. KJS changes caught this mistake.

2002-08-12  Darin Adler  <darin@apple.com>

	- re-fixed 2948387 -- stop button flashes to "go" two extra times while loading citibank.com

	It turns out Maciej and I rebroke this when we made the "completed" code run.
	There was a related APPLE_CHANGES that had to be removed so that we do each redirect only once.
	Doing the redirect multiple times sent confusing signals to the web browser.

        * khtml/khtml_part.cpp: (KHTMLPart::scheduleRedirection): Remove APPLE_CHANGES so we don't
	try to redirect until the page is complete.

=== Alexander-17 ===

2002-08-10  Ken Kocienda  <kocienda@apple.com>

	Check box in target setting panel to enable prebinding.

        * WebCore.pbproj/project.pbxproj

2002-08-10  Ken Kocienda  <kocienda@apple.com>

	Added an extra function which checks with WebKit to see if
	the load is a reload. If it is, the WebCore cache is bypassed.

        * khtml/misc/loader.cpp:
        (DocLoader::requestImage): Added acall to new KWQCheckIfReloading function.
        (DocLoader::requestStyleSheet): Ditto.
        (DocLoader::requestScript): Ditto.
        * kwq/KWQLoaderImpl.h:
        * kwq/KWQLoaderImpl.mm:
        (KWQCheckIfReloading): New function which checks with WebKit to see if the load is a reload.
        * kwq/WebCoreBridge.h:

2002-08-09  Darin Adler  <darin@apple.com>

        * force-clean-timestamp: JavaScriptCore headers changed that require a full build here.

2002-08-09  Darin Adler  <darin@apple.com>

	- fixed 3018063 -- frame problems at directory.apple.com
        - fixed 3021484 -- Go to "xxxx" mouseover status message should not show ".."

	Basically, we had no frame targeting for forms. I made the form code share
	the same frame targeting code we use for clicking on URLs.

        * khtml/khtml_part.cpp: (KHTMLPart::openURLInFrame): Don't compile this
	function at all any more.

        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::openURLRequest): Call the impl's openURLRequest
	instead of calling the part's openURLInFrame. Clearer.

        * kwq/KWQKHTMLPartImpl.h: Remove openURLInFrame, add openURLRequest.
	Change urlSelected args parameter to a const reference. Add private
	getBridgeForFrameName helper function.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::getBridgeForFrameName): Moved rules for choosing a frame
	here from urlSelected so they can be shared.
        (KWQKHTMLPartImpl::openURLRequest): Use getBridgeForFrameName instead of
	having our own different code for finding the right frame.
        (KWQKHTMLPartImpl::urlSelected): Move frame choosing code into getBridgeForFrameName.
        (KWQKHTMLPartImpl::submitForm): Use getBridgeForFrameName instead of always
	ignoring the target and using our own frame.
	(KWQKHTMLPartImpl::overURL): Take base targeting into account when making the
	status bar messages, and use the completed URL, not the partial, for the message.

2002-08-09  Darin Adler  <darin@apple.com>

	- fixed 2945441 -- base target is ignored

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::urlSelected):
	Add code to respect the base target in the document. It would be way better
	to use more of the KHTML code instead of copying it a line at a time into
	KWQ -- that can come later when the fire drill is over.

=== milestone 0.5 ===

=== Alexander-16 ===

2002-08-09  Darin Adler  <darin@apple.com>

	- fixed 3020594 -- crash in KWQKHTMLPartImpl::end() visiting particular page

        * khtml/khtml_part.cpp: (KHTMLPart::end): Our hacked alternative to a signal
	requires a NULL check.

2002-08-08  Maciej Stachowiak  <mjs@apple.com>

	Fix to get onLoad to fire, so the iBench test works.
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::checkCompleted): Put back some needed code that was
	ifdef'd out (the part that emits completed()).
        (KHTMLPart::slotChildCompleted): Enabled; ifdef'd out part.
        (KHTMLPart::frame): Enabled.
        * khtml/khtml_part.h:
        * kwq/KWQKHTMLPartImpl.mm:
	(KHTMLPart::completed): Hack to get completed signal delivered to
	parent.
        (KWQKHTMLPartImpl::requestFrame): Initialize m_part
        * kwq/WebCoreBridge.h: createChildFrameNamed method now returns
	the bridge for the child frame.

2002-08-08  Richard Williamson  <rjw@apple.com>

        Move stuff out of core into kit.
        
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):
        * kwq/WebCoreTextRendererFactory.h:
        * kwq/WebCoreTextRendererFactory.m:

2002-08-08  Darin Adler  <darin@apple.com>

	- fixed 3019353 -- Japanese (Autodetect) encoding not properly supported

        * kwq/make-charset-table.pl: Add a "japanese-autodetect" entry to the table
	explicitly, with a hardcoded encoding value. This should be good enough.

        * kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFixedFontSize):
        * kwq/WebCoreEncodings.h:
        * kwq/WebCoreSettings.h:
        * kwq/WebCoreSettings.m:
        Change "fixed font size" to "default fixed font size".

	Placeholders for the "drawing observer" method that I'll be using
	to implement the "dump page as diffable text" feature.

        * kwq/WebCoreTestController.h: Added.
        * kwq/WebCoreTestController.m: Added.
        * WebCore.exp: Mention new class.
        * WebCore.pbproj/project.pbxproj: Mention new files.

2002-08-08  Maciej Stachowiak  <mjs@apple.com>

	Added an SPI that can be used to get at the WebCore
	charset-name/encoding table; this is useful for a couple of things
	in WebKit.

        * kwq/WebCoreEncodings.h: Added.
        * kwq/WebCoreEncodings.mm: Added.
        (+[WebCoreEncodings charsetNameForEncoding:]):
        (+[WebCoreEncodings encodingForCharsetName:]):
        * WebCore.exp: Export the new class.
        * WebCore.pbproj/project.pbxproj: Add new files.

2002-08-08  Richard Williamson  <rjw@apple.com>

        Changes to coalesce all drawing calls of the same text
        style and color into one call to CG.  Significantly
        improves drawing time.  My tests should about 7-8% on 
        ALL pages.  Disabled the code for now until I can verify
        on speed improvements on Ken's test rig.
        
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):
        * kwq/WebCoreTextRendererFactory.h:
        * kwq/WebCoreTextRendererFactory.m:
        (-[WebCoreTextRendererFactory endCoalesceTextDrawing]):
        (-[WebCoreTextRendererFactory startCoalesceTextDrawing]):

2002-08-07  Maciej Stachowiak  <mjs@apple.com>

	WebCore work for:

	- fixed 2956008 - Need API for getting/setting text encoding for current page

        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::slotData): Handle the possibility of override encoding -
	one that's not just a hint from the server but should override
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge addData:withEncoding:]): Adjust for slotData interface change.
        (-[WebCoreBridge addData:withOverrideEncoding:]): New method that allows
	passing override encoding as a CFStringEncoding.
        (-[WebCoreBridge textEncoding]): Return the current text encoding.

2002-08-07  David Hyatt  <hyatt@apple.com>

	Adding support for a separate fixed font size to WebCore.
	Your fixed font size pref will now be honored when the
	generic monospace family is used.
	
        * khtml/css/cssstyleselector.cpp:
        * khtml/css/cssstyleselector.h:
        * khtml/rendering/font.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):
        * kwq/KWQKHTMLSettings.mm:
        (KHTMLSettings::mediumFixedFontSize):
        * kwq/WebCoreSettings.h:
        * kwq/WebCoreSettings.m:
        (-[WebCoreSettings setFixedFontSize:]):
        (-[WebCoreSettings fixedFontSize]):
        * kwq/khtml/khtml_settings.h:

2002-08-07  Darin Adler  <darin@apple.com>

	- fixed 3017499 -- One-click crasher at hondamotorcycle.com

        * kwq/KWQKURL.mm: (operator==): Just compare the strings.
	Faster and safer.

2002-08-07  Richard Williamson  <rjw@apple.com>
        
        Removed debug log.
        
        * kwq/KWQFrame.mm:
        (QFrame::setFrameStyle):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):

2002-08-07  Darin Adler  <darin@apple.com>

        * kwq/KWQKURL.mm: (KURL::KWQKURLPrivate::decompose): Use CFURLCopyPath
	instead calling _NSParseStringToGenericURLComponents.

2002-08-07  Richard Williamson  <rjw@apple.com>

        Turned off temporary debugging I accidentally checked in.
        
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):

2002-08-06  David Hyatt  <hyatt@apple.com>

	Make user stylesheet changes dynamic.  Web documents will now
	update as the user stylesheet is applied and unapplied.  Altered
	how reapplyStyles works a bit.
		
        * khtml/khtml_part.cpp:
        (KHTMLPart::reparseConfiguration):
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::setUserStyleSheet):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge reapplyStyles]):

2002-08-06  David Hyatt  <hyatt@apple.com>

	Enable user stylesheet support.  It works from a fresh start but
	is not yet completely dynamic.
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::setUserStyleSheet):
        * kwq/KWQKHTMLSettings.mm:
        (KHTMLSettings::userStyleSheet):

2002-08-06  Darin Adler  <darin@apple.com>

	- fixed 2965321 -- Crash on window close in kthml::Loader::cancelRequests from particular page

        * khtml/misc/loader.cpp: (Loader::servePendingRequests):
	Look at return value from KWQServeRequest instead of assuming it will always succeed.
        * kwq/KWQLoaderImpl.h: Add return value for KWQServeRequest.
        * kwq/KWQLoaderImpl.mm: (KWQServeRequest): Return false if we fail to make either the NSURL
	or the WebResourceHandle. Also make sure that we delete the job if necessary.

2002-08-06  John Sullivan  <sullivan@apple.com>

        * force-clean-timestamp:
	Edited this file to force a make clean in WebCore after
	discovering that it was necessary the hard way. I'm not
	sure which earlier checkin made this be required.

2002-08-06  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::overURL):
	Fix crash in overURL, another case just like bug 3006336.

2002-08-06  Richard Williamson  <rjw@apple.com>

        Frame resizing related changes.  Frames are now resizable
        w/ a resize bar.  Still need to draw frame borders.
        
        * khtml/rendering/render_frames.cpp:
        (RenderFrameSet::userResize):
        (RenderFrame::slotViewCleared):
        * kwq/KWQFrame.mm:
        (QFrame::setFrameStyle):
        (QFrame::frameStyle):
        (QFrame::frameWidth):
        * kwq/KWQWidget.mm:
        (QWidget::lockDrawingFocus):
        (QWidget::unlockDrawingFocus):
        (QWidget::flushDrawing):
        (QWidget::enableFlushDrawing):
        (QWidget::disableFlushDrawing):
        (QWidget::setDrawingAlpha):
        (QWidget::displayRect):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge drawRect:withPainter:]):
        * kwq/qt/qframe.h:
        * kwq/qt/qwidget.h:

2002-08-06  Maciej Stachowiak  <mjs@apple.com>

	Removed some APPLE_CHANGES no longer needed after the part change.
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::openedByJS): Don't call impl version.
        (KHTMLPart::setOpenedByJS): Don't call impl version.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm: Removed openedByJS and setOpenedByJS.
        * kwq/WebCoreBridge.h: Don't prototype setOpenedByScript: and
	openedByScript methods now that they are not needed.

2002-08-06  David Hyatt  <hyatt@apple.com>

	Make checkboxes and radio buttons use the small control
	size.  Tweak their baselines to not use font metrics and
	to line up properly.  (voodooextreme.com nearly renders
	the left column correctly now.)
	
        * khtml/rendering/render_form.cpp:
        (RenderCheckBox::baselinePosition):
        (RenderRadioButton::baselinePosition):
        * khtml/rendering/render_form.h:
        * kwq/KWQCheckBox.mm:
        (QCheckBox::QCheckBox):
        * kwq/KWQRadioButton.mm:
        (QRadioButton::QRadioButton):

2002-08-06  John Sullivan  <sullivan@apple.com>

	WebCore part of fix for 2915396 -- implement larger/smaller font
	or page zoom functionality

        * khtml/khtml_part.cpp:
        (KHTMLPart::setZoomFactor): inside APPLE_CHANGES, remove use of
	KHTML limits for zoom factor; this is a client responsibility in
	our model.

2002-08-06  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::urlSelected):
	Put in a check for nil that I missed.

2002-08-06  Darin Adler  <darin@apple.com>

	- fixed 2948805 -- Need WebKit API for larger/smaller font feature

        * khtml/khtml_part.cpp:
        (KHTMLPart::clear): Head in the direction of using the m_frames and
	m_objects arrays, by turning some APPLE_CHANGES code on.
        (KHTMLPart::checkCompleted): More code turned on here.
        (KHTMLPart::checkEmitLoadEvent): And more code turned on here.
        (KHTMLPart::parentPart): Remove APPLE_CHANGES version. We can use the original now.
        (KHTMLPart::setZoomFactor): Remove APPLE_CHANGES. We want this function now.
        * khtml/khtml_part.h: Remove some APPLE_CHANGES to make xmlDocImpl public.
	No longer needed.
        * khtml/khtmlpart_p.h: Remove a bunch of APPLE_CHANGES.
        * kwq/KWQKHTMLPartImpl.h: Remove parentPart(), add getDocument() and getRenderer().
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::urlSelected): Use parentPart() instead of [bridge parent].
        (KWQKHTMLPartImpl::requestFrame): Set up a ChildFrame in the m_frames array.
        (KWQKHTMLPartImpl::layout): Use getRenderer().
        (KWQKHTMLPartImpl::getDocument): Added.
        (KWQKHTMLPartImpl::getRenderer): Added.
        * kwq/WebCoreBridge.h: Add [setParent:], remove [parent].
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge setParent:]): Added.
        (-[WebCoreBridge reapplyStyles]): Use getDocument().
        (-[WebCoreBridge forceLayout]): Use getRenderer().
        (-[WebCoreBridge drawRect:withPainter:]): Use getRenderer().
        (-[WebCoreBridge copyDOMTree:]): Use getDocument().
        (-[WebCoreBridge copyRenderTree:]): Use getRenderer().
        (-[WebCoreBridge completeURLForDOMString:]): Use getDocument().
        (-[WebCoreBridge elementAtPoint:]): Use getRenderer().
        (-[WebCoreBridge setTextSizeMultiplier:]):
        * kwq/khtml/khtml_ext.h: Add dummy setEnabled function to make khtml_part.cpp compile.
        * kwq/kparts/part.h: Add real parent() and setParent() implementation.

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

	Fixed crashers and leaks that come up when changing the view
	associated with a part.
	
        * khtml/khtmlview.cpp:
        (KHTMLView::~KHTMLView): Don't zero out the part's view, because
	that will mess up setting a new one.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge createKHTMLViewWithNSView:width:height:marginWidth:marginHeight:]):
	Destroy the old view if we own it.

2002-08-05  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::openURLInFrame):
        (KWQKHTMLPartImpl::urlSelected):
        (KWQKHTMLPartImpl::requestFrame):
        (KWQKHTMLPartImpl::requestObject):
	Add some nil checks before making calls with nil NSURL objects.
	But we also have to figure out how to report some kind of error
	in these cases, because the current behavior is not so good.

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

	- fixed 3007072 - need to be able to build fat
	
        * WebCore.pbproj/project.pbxproj: Fixed DeploymentFat build.

2002-08-05  Darin Adler  <darin@apple.com>

	- fixed 3016374 -- Change font default from small back to medium

        * khtml/css/cssstyleselector.cpp:
	(CSSStyleSelector::computeFontSizes): Change back to basing everything on
	mediumFontSize() as opposed to a defaultFontSize that was the same as "small".
	(CSSStyleSelector::applyRule): Default is m_fontSizes[3] again.
        * khtml/html/html_inlineimpl.cpp: (HTMLFontElementImpl::parseAttribute):
	Shift all the sizes up one, so 3 is now medium. It's important that 3 be the same as the default.
        * khtml/html/html_tableimpl.cpp: (HTMLTableElementImpl::attach): Change the default back to medium.
        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyle): Change the default back to [3].
        * kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): Change name back.
        * kwq/khtml/khtml_settings.h: Change name back to medium.

	Do a little bit of wiring for the "text size multiplier" feature.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge setTextSizeMultiplier:]): Added.

2002-08-05  Darin Adler  <darin@apple.com>

	- fixed 3009321 -- bookmark and history menus show black square for (tm)

        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::parseSpecial): Call fixUpChar.
        (HTMLTokenizer::parseText): Call fixUpChar.
        (HTMLTokenizer::parseTag): Call fixUpChar.

2002-08-05  Darin Adler  <darin@apple.com>

        - fixed 3016795 -- http://www.google.co.il/ fails to decode

        * kwq/make-charset-table.pl: Added a hack that makes us treat for
	iso-8859-8-e and iso-8859-8-i the same as iso-8859-8; may not be exactly
	right, but it's probably OK modulo the actual bidi support.

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

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::slotData): Simplified a bit.

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

        Merged KHTMLPart::end method with khtml original.

        * khtml/khtml_part.cpp:
        (KHTMLPart::end): Remove call to impl. Use original version, but
	clear KURL cache and call slotFinishedParsing as well.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::end): Removed.
	(KWQKHTMLPartImpl::gotoBaseAnchor): Removed. No longer needed.
        * kwq/KWQKURL.mm:
        (KURL::encodedHtmlRef): Implemented.
        (KURL::htmlRef): Implemented.
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
	(-[WebCoreBridge scrollToBaseAnchor]): Removed. No longer needed.
	
2002-08-05  Maciej Stachowiak  <mjs@apple.com>

        Merged KHTMLPart::openURL method with khtml original.

        * khtml/khtml_part.cpp:
	(KHTMLPart::openURL): Don't call the impl version. Leave most of
	this #ifdef'd, except the parts that look useful.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::openURL): Removed.

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

        Merged KHTMLPart::begin method with khtml original.

	* khtml/khtml_part.cpp:
	(KHTMLPart::begin): Restore this method and don't call the impl
	version. ifdef out the parts that don't compile.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
	(KWQKHTMLPartImpl::begin): Removed.
        * kwq/KWQKHTMLSettings.mm:
        (KHTMLSettings::showAnimations): Implemented; always return false.
        (KHTMLSettings::userStyleSheet): Implemented; always return empty
	string.
        * kwq/kdecore/kurl.h: Implemented isValid as inline method.

2002-08-04  David Hyatt  <hyatt@apple.com>

	Fix my bungled CSS for input fields in the user agent style
	sheet.
	
        * khtml/css/html4.css:

2002-08-03  Darin Adler  <darin@apple.com>

	- fixed 2943519 - &#149; is rendered as an asterisk rather than a bullet

        * khtml/html/htmltokenizer.cpp: (fixUpChar): Replaced the macro of this
	name by an inline function that follows the Unicode specification. The
	macro was both making Windows Latin 1 extensions character codes
	(like 149 for bullet) work, but also mapping to characters that were
	suitable for Qt. Since OS X has no problem with the real Unicode values,
	we don't need that hack.

2002-08-02  Darin Adler  <darin@apple.com>

	- fixed 3015522 -- crash decoding http://www.haaretz.co.il/

        * khtml/misc/decoder.cpp: (Decoder::setEncoding): Put some hacks for
	handling Hebrew text encoding inside ifndef APPLE_CHANGES. It's not clear
	that these or the equivalent are needed for WebCore (they are related to
	the as-yet unimplemented bidirectional text support) and they were making
	us crash.

	- fixed 2949235 -- checkboxes in wrong place until you scroll away and back

	I fixed this once before, then removed that fix in favor of a simpler one.
	But the simpler one didn't work, and I didn't test it properly. Now I have
	a fix that works without the drawbacks of the original.

        * khtml/rendering/render_replaced.cpp: (RenderWidget::layout): Remove the
	call to move the widget aside. This does no good because it's only called
	if the widget is told it needs to layout, which only happens if it's resized.

        * khtml/rendering/render_root.cpp: (RenderRoot::layout): Call a KWQ function
	so we can do some work at layout time.

        * kwq/KWQKHTMLPartImpl.mm:
        (moveWidgetsAside): Added. Function used recursively to move all widgets aside.
        (KWQKHTMLPartImpl::layout): Added. Called at layout time; moves all the widgets
	aside. They are moved back when print functions are called.

	WebCore support for feature where client redirects are treated as if the
	page was continuing to load. A big part of this was changing redirection
	so that it uses QTimer, allowing us to use more of the original KHTMLPart
	code. I added a feature to QTimer that KWQKHTMLPartImpl uses to monitor
	what KHTMLPart does with the timer.

        * kwq/qt/qobject.h: Changed "slots" definition so that all slots are public (to help
	KWQSlot get at them). Added a prefix for the slot and signal strings, so that we can detect
	the case where it's trying to connect a slot to another slot. Implement the convenience
	version of connect here in the header. Implement blockSignals. Remove setTarget.
	Make target mutable. Add new m_signalListHead and m_signalsBlocked.
        * kwq/KWQObject.mm:
        (QObject::findSignal): Added. Helper function that locates a signal by name.
        (QObject::connect): Connects a signal to a slot using the new KWQSignal and KWQSlot.
        (QObject::disconnect): Disconnects, similar to the above.
        (QObject::QObject): Initialize target, m_signalListHead, and m_signalsBlocked.
        (QObject::~QObject): Assert that m_signalListHead is 0.

        * khtml/khtml_part.cpp:
        (KHTMLPart::init): Move the code that connects the redirection timer out
	of APPLE_CHANGES.
        (KHTMLPart::~KHTMLPart): Remove the APPLE_CHANGES around the code that
	stops the redirection timer.
        (KHTMLPart::restoreURL): Remove the APPLE_CHANGES around the code that
	stops the redirection timer.
        (KHTMLPart::openURL): Move the APPLE_CHANGES so the code that stops the
	redirection timer will run.
        (KHTMLPart::closeURL): Remove the APPLE_CHANGES around the code that
	stops the redirection timer.
        (KHTMLPart::scheduleRedirection): Remove most of this function from the
	APPLE_CHANGES. We still probably need to revisit the handling of m_bComplete.

        * kwq/KWQSignal.h: Added.
        * kwq/KWQSignal.mm: Added.
        * kwq/KWQSlot.h: Added.
        * kwq/KWQSlot.mm: Added.
        * WebCore.pbproj/project.pbxproj: Added KWQSignal.h/mm, KWQSlot.h/mm.

        * khtml/misc/loader.h: Simplify APPLE_CHANGES ifdefs since all slots are now public.

       * force-clean-timestamp: Touch this since header files were changed.

        * khtml/ecma/kjs_window.cpp:
        (Window::get): Disable the "name" part of this. We can re-enable it if we
	need it, but every QObject had a name because of this one piece of code,
	and I don't think it was effectively setting the frame name.
        (Window::put): Disable the "name" part of this for the same reason.
        (History::getValueProperty): Disable the "length" part of this. It was
	calling some unimplemented stuff. We can re-enable this and implement
	what we need in KWQ then.

        * khtml/rendering/render_form.h: Remove RenderTextArea::performAction, because I
	changed this one case to use the new connect machinery. We can convert all the other
	form items to use the new machinery, and then eliminate performAction altogether.
        * khtml/rendering/render_form.cpp:
        (RenderSubmitButton::RenderSubmitButton): Remove unneeded setTarget. For the moment,
	connect takes care of this, and in the long run we won't need to set the target at all.
        (RenderLineEdit::RenderLineEdit): Ditto.

        * khtml/rendering/render_frames.h:
        * khtml/rendering/render_frames.cpp: Put partLoadingErrorNotify inside ifndef APPLE_CHANGES
	because it uses a bunch of Qt stuff that's not used anywhere else, and we never call it.

        * kwq/KWQKHTMLPartImpl.h: Remove scheduleRedirection, timerEvent, and m_redirectionTimer,
	add redirectionTimerStartedOrStopped and layout.
        * kwq/KWQKHTMLPartImpl.mm:
        (redirectionTimerMonitor): Added. Small stub that calls redirectionTimerStartedOrStopped.
        (KWQKHTMLPartImpl::KWQKHTMLPartImpl): Set up a monitor on the redirection timer.
        (KWQKHTMLPartImpl::~KWQKHTMLPartImpl): Remove now-unneeded killTimer call.
        (KWQKHTMLPartImpl::jumpToSelection): Simplify by using dynamic_cast instead of render_name().
        (KWQKHTMLPartImpl::redirectionTimerStartedOrStopped): Added. Calls bridge to report client
	redirect events whenever the redirection timer is started or stopped.

        * kwq/qt/qtextedit.h: Define a KWQSignal for textChanged, and a function that calls it.
        * kwq/KWQTextEdit.mm: (QTextEdit::QTextEdit): Set up a KWQSignal for textChanged.
        * kwq/KWQTextArea.mm: (-[KWQTextArea textDidEndEditing:]): Instead of calling emitAction,
	call textChanged, which will emit the signal using the new signal machinery.

        * kwq/qt/qtimer.h:
        * kwq/KWQTimer.mm:
        (+[KWQTimerTarget targetWithQTimer:]): Added. Used to implement QTimer in terms of NSTimer.
        (-[KWQTimerTarget timerFired:]): Added. Used to implement QTimer in terms of NSTimer.
        (QTimer::QTimer): Added.
        (QTimer::isActive): Implemented.
        (QTimer::start): Implemented.
        (QTimer::stop): Implemented.
        (QTimer::setMonitor): Implemented.
        (QTimer::fire): Implemented.

        * kwq/WebCoreBridge.h: Changed name of gotoAnchor to scrollToAnchor. Added client redirect
	methods.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge scrollToAnchor:]): Changed name.

2002-08-02  David Hyatt  <hyatt@apple.com>

	Lots of form control changes.
	- Inputs and textareas now respond to setFont and can have their font set by the Web page
	explicitly.  These fields emulate the WinIE behavior of defaulting to the UI system font
	and only picking up new fonts if they are explicitly specified on the element itself.
	- Buttons and selects use the small versions now.
	- Stopped trying to align controls along baselines of their interior text.  Konqueror is
	the only browser that does this, and it looks bad on many pages.  With this patch controls
	align along their bottom borders (which extend slightly below the baseline of surrounding
	text).  This matches Gecko, MacIE, and WinIE behavior.
	- Stopped using monospace for textareas and inputs.
	- Fixed a bug with inputs not calling setScrollable on their cells.
	
        * khtml/css/html4.css:
        * khtml/rendering/render_form.cpp:
        (RenderSubmitButton::calcMinMaxWidth):
        (RenderSubmitButton::baselinePosition):
        (RenderLineEdit::baselinePosition):
        (RenderSelect::baselinePosition):
        * khtml/rendering/render_form.h:
        * kwq/KWQButton.mm:
        (QButton::QButton):
        (QButton::sizeHint):
        * kwq/KWQComboBox.mm:
        (QComboBox::init):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::cursorPosition):
        (QLineEdit::setFont):
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextField initWithFrame:widget:]):
        * kwq/KWQView.mm:
        (-[KWQNSButtonCell cellSizeForBounds:]):
        (+[KWQNSButton initialize]):
        * kwq/WebCoreTextRendererFactory.h:
        * kwq/WebCoreTextRendererFactory.m:
        (-[WebCoreTextRendererFactory fontWithFamily:traits:size:]):
        * kwq/qt/qbutton.h:
        * kwq/qt/qlineedit.h:

2002-08-01  Darin Adler  <darin@apple.com>

        - fixed 2841277 -- support for charset=gb2312

        * kwq/character-sets.txt: Added "euc-cn" to the list of aliases for
	"gb2312", since that's the name used by CFStringEncoding for that
	character set.

2002-08-01  Maciej Stachowiak  <mjs@apple.com>

	Remove KWQKHTMLPartImpl's setBaseURL method and m_baseURL field,
	since nothing should really need them any more.
	
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::begin): Set base URL on document, if it exists.
        (KWQKHTMLPartImpl::requestFrame): Get base URL from document.
        (KWQKHTMLPartImpl::requestObject): Ditto.
        (KWQKHTMLPartImpl::frames): Ditto.
        (KWQKHTMLPartImpl::setBaseURL): Removed.

2002-08-01  Richard Williamson  <rjw@apple.com>

        Added method to allow WebKit to direct khtml to
        goto to an anchor point.  Need for back/forward.
        
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::urlSelected):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge gotoAnchor:]):

2002-08-01  Ken Kocienda  <kocienda@apple.com>

	Tweaked WebCore cache settings. The WebCore cache will now grow
	to 1 MB (was 512k). The maximum cacheable item is 16k instead of 40k.

        * khtml/misc/loader.cpp

=== Alexander-15 ===

2002-08-01  Maciej Stachowiak  <mjs@apple.com>

        Restored the original KHTMLPart::write() now that none of our
	changes in the impl version are beneficial in any way.

	* khtml/khtml_part.cpp:
        (KHTMLPart::write): Restore original code in lieue of calling impl
	version.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::openURL): Remove initialization of
	m_decodingStarted, since it is now gone.
	(KWQKHTMLPartImpl::write): Removed.

2002-08-01  Maciej Stachowiak  <mjs@apple.com>

	Removed m_documentSource and remaining ill-conceived uses thereof.
	
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::openURL): Don't initialize it.
        (KWQKHTMLPartImpl::write): Don't use it.

2002-08-01  Maciej Stachowiak  <mjs@apple.com>

        Remove stuff formerly useful for "View Reconstructed Source"
	feature but now useless.

	* kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
	(KWQKHTMLPartImpl::documentSource): Removed.
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
	(-[WebCoreBridge documentTextFromDOM]): Removed.

2002-07-31  Darin Adler  <darin@apple.com>

        * kwq/qt/qptrvector.h:
        * kwq/qt/qvector.h:
        * kwq/KWQVectorImpl.h:
        * kwq/KWQVectorImpl.mm:
	* force-clean-timestamp:
	New implementation of QVector that does not use CFArray. Should fix some data()
	anomalies. Shares wierdnesses with the original Qt class.

        * WebCore-tests.exp: Remove old QVector entry points and add new ones.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::write): Did a tiny optimization
	by initializing the QString rather than first assigning and then initializing.
	Also reworded some comments and rearranged code to make it clearer that
	m_decodingStarted is now used only to decide when to call determineParseMode.

        * khtml/css/cssparser.cpp: Removed the APPLE_CHANGES around a change that's
	fine for non-Apple use as well.

2002-07-30  Maciej Stachowiak  <mjs@apple.com>

	Fixes of various bugs that prevented Alexander from running the
	Mozilla page load test.

	- fixed 3008682 - Alexander cannot run Mozilla-PLT

        * khtml/misc/decoder.cpp:
        (Decoder::decode): Don't drop the accumulated buffer if the document
	happens to be unicode!
	* kwq/KWQCString.mm:
        (operator==): Fix reversed logic when comparing an empty QCString
	to a const char *.
        * kwq/KWQKHTMLPartImpl.mm:
	(KWQKHTMLPartImpl::slotData): Set complete flag later so that
	initializing it to false doesn't clobber setting it.
        (KWQKHTMLPartImpl::begin): Initialize complete flag to false.
        (KWQKHTMLPartImpl::write): Don't buffer things up for the decoder -
	the decoder does that internally.
        * kwq/WebCoreBridge.h, kwq/WebCoreBridge.mm: Remove setURL: method.

2002-07-30  Richard Williamson  <rjw@apple.com>

        Don't create unnecessary unicode string.  Of the 
        95695 unnecessary unicode allocations we do loading
        the base test, this usage accounted for 7185.  Most
        of the others come from DOMString to QConstString to
        QString to unicode() conversion during parsing.  All
        that unnecessary work needs to be removed.
        
        * kwq/KWQColor.mm:
        (decodeColorFromHexColorString):

2002-07-30  David Hyatt  <hyatt@apple.com>

	Ok, this time i've got it.  I hope.  I think.  Fingers crossed.
	Putting the table recalc check back in one more time. :)
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::addColumns):
        (RenderTable::addColInfo):

2002-07-30  David Hyatt  <hyatt@apple.com>

	Backing myself out again.  No crashes, but now pages stall.
	#*^&*#@^%*&!!!!
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::recalcColInfo):
        (RenderTable::addColInfo):

2002-07-30  David Hyatt  <hyatt@apple.com>

	Putting my table patch back in.  Also optimizing the code
	to avoid deleting and recreating the same colinfo over
	and over again.  Now colinfos can recalc their own
	information.
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::addColumns):
        (RenderTable::recalcColInfo):
        (RenderTable::addColInfo):
        (RenderTable::calcMinMaxWidth):
        * khtml/rendering/render_table.h:

2002-07-30  Richard Williamson  <rjw@apple.com>

        Inline critical function.
        
        * kwq/KWQString.mm:
        (compareToLatinCharacter):

2002-07-30  Richard Williamson  <rjw@apple.com>

        Wow!  Avoid creation of unicode string when only a single character
        is needed.  Simple change for big gains, 7% - 10% improvement
        on cached pages.  Other similar gains may remain to be had.
        
        * khtml/css/cssparser.cpp:

2002-07-30  Darin Adler  <darin@apple.com>

        * khtml/css/makevalues: Fail if we don't find gperf.

2002-07-30  David Hyatt  <hyatt@apple.com>

	Back myself out. I seem to have stumbled onto another bug.
	Until I figure it out, turn this back off.
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::addColumns):
        (RenderTable::addColInfo):

2002-07-30  David Hyatt  <hyatt@apple.com>

	Fix for 3000604, 2902173, 2921313.  Ensure that tables recalc their
	column widths like they are supposed to.  This fixes livepage.apple.com,
	applemuseum.com, and many other pages (that didn't have bugs filed).
	Yay!
	
        * khtml/rendering/render_table.cpp:
        (RenderTable::recalcColInfo):
        (RenderTable::addColInfo):

2002-07-29  David Hyatt  <hyatt@apple.com>

	Fix for 3008660, arstechnica regression.  Move the acquisition
	of the document's text color (and the addition of CSS properties)
	to the attach() call instead of the constructor.  The table won't
	add the properties until it is building its render object.

	Also removing the #ifndef around the layout scheduler.  This fixes
	:hover feedback and reflows from things like the marquee on
	livepage.apple.com.
	
        * khtml/html/html_tableimpl.cpp:
        (HTMLTableElementImpl::HTMLTableElementImpl):
        (HTMLTableElementImpl::id):
        (HTMLTableElementImpl::attach):
        * khtml/html/html_tableimpl.h:
        * khtml/rendering/render_object.h:

2002-07-29  Darin Adler  <darin@apple.com>

	- fixed 3010875 -- Find only works for latin characters
	- dealt with part of 2948387 -- stop button flashes to "go" twice while loading citibank.com

        * force-clean-timestamp: Make everyone do a make clean because dependencies won't do
	the right thing.

        * khtml/khtml_part.h:
        * khtml/khtml_part.cpp: (KHTMLPart::slotRedirect): Changed the APPLE_CHANGES ifdefs around
	in this function so we can start using it again.
	(KHTMLPart::jumpToSelection): Removed. The bridge goes straight to the impl. 

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge jumpToSelection]): Go straight to the impl.

        * WebCore-tests.exp: One new export needed for tests with change to qstring.h.

        * kwq/qt/qevent.h:
        * kwq/KWQEvent.mm: Removed unused stuff.

        * kwq/KWQKHTMLPartImpl.h: Removed redirectURL(); we now use KHTMLPart::slotRedirect().

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::write): Call latin1() explicitly in here for m_documentSource. It was being
	done implicitly before.
        (KWQKHTMLPartImpl::scheduleRedirection): Get rid of 1-second minimum delay for meta refresh.
        (KWQKHTMLPartImpl::timerEvent): Call KHTMLPart::slotRedirect() instead of redirectURL(), because
	they were identical, so we don't need our own copy.

        * kwq/kdeui/kmessagebox.h:
        * kwq/KWQKMessageBox.mm: (KMessageBox::questionYesNo): Added dontAskAgain string parameter.
	Before, it was being turned into a bool!

        * kwq/KWQKProtocolManager.mm: Tweak and add FIXME.

        * kwq/qt/qstring.h: Remove implicit conversion to const char *, which causes only pain.
        * kwq/KWQString.mm:
        (QString::find): Add caseSensitive parameter to the QString overload of this.
        (QString::contains): Add a QString version of this.

        * kwq/character-sets.txt: Add the MIB number for ISO-10646-J-1.
        * kwq/make-charset-table.pl: Remove special case for ISO-10646-J-1 MIB number.

2002-07-29  Richard Williamson  <rjw@apple.com>

        Fixed 3009074.  Added KHTMLPart::jumpToSelection and related scaffolding (part impl, bridge, etc.)
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::jumpToSelection):
        * khtml/khtml_part.h:
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::jumpToSelection):
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge jumpToSelection]):

2002-07-29  Richard Williamson  <rjw@apple.com>

        Fixed 3009067.  We were not correctly testing the first character of the node string.  Fixed in KWQString.
        This highlighted another problem.  KWQ does not support unichar * string find w/ case sensitive argument.
        KWQString implements QString::find(const char *chs, int index, bool caseSensitive), so  QStrings passed 
        will be auto-cast to char *.  Filed 3010875 to track that issue.

        * kwq/KWQString.mm:
        (compareToLatinCharacter):
        (QString::find):

2002-07-26  David Hyatt  <hyatt@apple.com>

	Changing the default user agent to be Gecko.  This fixes
	the layout issues with livepage.apple.com.  We simply
	cannot support absolute positioning while claiming to
	be Mac MSIE, since Mac MSIE incorrectly computes the containing
	block and sites have to correct for that.
	
        * kwq/KWQKProtocolManager.mm:
        (KProtocolManager::userAgentForHost):

2002-07-26  David Hyatt  <hyatt@apple.com>

	Fix for 2944382, NOWRAP was being incorrectly applied in KHTML.
	It was being ignored incorrectly if a fixed width was specified
	on a cell.  This width on the cell is actually irrelevant and
	should not have been checked, since NOWRAP will affect the
	whole column and not just a specific cell.
	
        * khtml/rendering/render_table.cpp:
        (RenderTableCell::calcMinMaxWidth):

2002-07-25  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Add DeploymentFat build style.

	- fixed 3007532 -- Main documentation frame doesn't load on Apple docs page

	This was caused by my recent fix for the "checkboxes in wrong place" bug.
	While discussing that bug fix with Richard, I realized that I needed to do the
	work at layout time, not print time. Luckily, this code ends up being simpler
	than the original solution.

        * khtml/rendering/render_replaced.cpp:
        (RenderWidget::resizeWidget): Take out size limits based on X limits.
        (RenderWidget::layout): Move widgets off into far away coordinate space when
	layout happens. They get moved back on to the right position during the print process.

        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm: Removed paint, buildViewsNotYetAddedSet, viewsNotYetAdded,
	and addedWidget.
        * kwq/KWQScrollView.mm: (QScrollView::addChild): Removed call to addedWidget.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge drawRect:withPainter:]): Put the call to the
	renderer to print back in here, since it's simple again.

        * kwq/KWQWidget.mm: (QWidget::internalSetGeometry): Left in a couple of asserts that
	were useful in narrowing this one down.

2002-07-25  David Hyatt  <hyatt@apple.com>

	Floated images using "align" should have margins to prevent the text from running right
	up against them.  Matches IE and Mozilla behavior.
	
        * khtml/css/html4.css:

2002-07-25  David Hyatt  <hyatt@apple.com>

	Fix <blockquote> tags to have top and bottom margins of 1em.  This matches the <blockquote>
	behavior in Gecko.
	
        * khtml/css/html4.css:

2002-07-25  Darin Adler  <darin@apple.com>

	- fixed 2965269 -- sizes reported to progress handler from KWQCheckCacheObjectStatus for images are wrong
	- fixed 3006054 -- assert error failingURL != nil

        * khtml/misc/loader.h: Add dataSize() and m_dataSize.
        * khtml/misc/loader.cpp:
        (CachedImage::CachedImage): Initialize m_dataSize.
        (CachedImage::data): Update m_dataSize.

        * kwq/kio/jobclasses.h:
        * kwq/KWQKjobclasses.mm: Store a KURL instead of an NSURL, because KURL can hold any string.

        * kwq/KWQLoaderImpl.mm:
        (KWQServeRequest): Send an error with [WebCoreBridge reportError:] if the URL is so bad we can't
	construct an NSURL from it. This is the only case in all our code where we need to have failingURL
	accept a string.
        (KWQCheckCacheObjectStatus): If the object is an image, use the dataSize() rather than size().
	The size() is a (bad) estimate of how much memory is used in the case of an image, but we want
	to report the size of the original data.

        * kwq/WebCoreBridge.h: Add a [reportError:] method.

2002-07-25  David Hyatt  <hyatt@apple.com>

	Fix for huge white space problem on appleturns.com, bug 2947818.  Vertical-align
	was being applied to block-level elts in violation of the CSS2 spec.  Vertical-align
	is only supposed to apply to inline-level elts and table cells.  getVerticalPosition
	will now bail if the element is block-level.
	
        * khtml/rendering/render_object.cpp:
        (RenderObject::getVerticalPosition):

2002-07-25  Chris Blumenberg  <cblu@apple.com>

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementAtPoint:]): renamed

2002-07-25  David Hyatt  <hyatt@apple.com>

	Fix for bug 2992158, the calendar on www.blog.org in the upper
	right was shoved offscreen (and causing a horizontal scrollbar
	to be necessary).  KHTML was not recomputing the margins for
	the table when it became displaced by the float.  It was also
	mispositioning the float itself.  
	
        * khtml/rendering/render_box.h:
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layoutBlockChildren):
        (RenderFlow::addOverHangingFloats):
	
2002-07-24  David Hyatt  <hyatt@apple.com>

	Fix for bug 2953423, viamichelin.com lays out incorrectly.
	Remove a completely bogus optimization in the KHTML code that
	attempted to bail when the specified width was 0.  This was
	a very basic problem, and it should fix other pages that were
	laying out incorrectly as well.
	
        * khtml/rendering/render_flow.cpp:
        (RenderFlow::layout):

2002-07-24  Darin Adler  <darin@apple.com>

        * khtml/khtml_part.cpp: (KHTMLPart::clear): Remove code that reset m_frameNameId,
	to complete Maciej's change to fix bug 3006354.

2002-07-24  Darin Adler  <darin@apple.com>

	- fixed 2906567 -- Font size calculations should use 96 dpi instead of 72 dpi
	- fixed 3005932 -- fonts specified in 'ex' units rendered waaaaaaay too large
	
        * khtml/css/cssstyleselector.cpp: (CSSStyleSelector::computeFontSizes):
	Use a default font size that's the same as small, rather than a "medium font
	size". Don't multiply the values from settings by the scaling factor.
	(CSSStyleSelector::applyRule): Make the default font size here for nodes with
	no parents be small (m_fontSizes[2]) rather than medium (m_fontSizes[3]).

        * khtml/html/html_inlineimpl.cpp: (parseFontSizeNumber): Added. Tolerant of
	non-numeric characters after the numeric size. Also distinguishes a size like
	"0" from something that's not a numeric size at all.
        (HTMLFontElementImpl::parseAttribute): Use parseFontSizeNumber, but also make
	size 3 be the same as CSS_VAL_SMALL, not CSS_VAL_MEDIUM. This mistake (using
	CSS_VAL_MEDIUM) led to all kinds of strangeness in the KHTML code, including
	mishandling of 0 and the need to create CSS_VAL__KONQ_XXX_LARGE. Also change
	code so that 0 is treated as CSS_VAL_SMALL (same as 3) rather than CSS_VAL_XX_SMALL.
	This makes 0 between -1 and +1.

        * khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyle): Make default font
	size be small (fontSizes()[2]) rather than medium (fontSizes()[3]).
        * khtml/html/html_tableimpl.cpp: (HTMLTableElementImpl::HTMLTableElementImpl):
	Make default font size be CSS_VAL_SMALL, not CSS_VAL_MEDIUM.

        * kwq/qt/qfontmetrics.h:
        * kwq/KWQFontMetrics.mm: (QFontMetrics::xHeight): Added.
        * kwq/WebCoreTextRenderer.h: Added xHeight.

        * khtml/css/css_valueimpl.cpp: (CSSPrimitiveValueImpl::computeLengthFloat):
	Use xHeight rather than computing the height of an actual letter 'x'.
        * khtml/rendering/render_object.cpp: (RenderObject::getVerticalPosition):
	Use xHeight rather than computing the height of an actual letter 'x'.

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge reapplyStyles]): Fixed backwards
	if that prevented font changes from being reflected in the browser window.

        * kwq/khtml/khtml_settings.h:
        * kwq/KWQKHTMLSettings.mm:
	(KHTMLSettings::defaultFontSize):
        * kwq/WebCoreSettings.h:
        * kwq/WebCoreSettings.m:
        (-[WebCoreSettings setDefaultFontSize:]):
        (-[WebCoreSettings defaultFontSize]):
	Replace mediumFontSize with defaultFontSize.

        * WebCore.pbproj/project.pbxproj: Rearrange some of the files.

2002-07-24  Richard Williamson  <rjw@apple.com>

        Support for find in HTML.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge searchFor:direction:caseSensitive:]):

2002-07-24  Darin Adler  <darin@apple.com>

	- fixed 2949235 -- checkboxes in wrong place until you scroll away and back

	The problem here was that we put views in when we print, but we never removed them.
	I added code to keep track of existing views, and remove them if they are not re-added.

        * kwq/KWQKHTMLPartImpl.h: Add paint, addedWidget, buildViewsNotAddedSet, and viewsNotYetAdded.
	It might be nice to find a different place to hang this that is not included by the KHTML code.
	But I think that having this on the bridge would be worse.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::paint): Added. Removes any views that are not explicitly added by RenderWidget
	during the print process.
        (KWQKHTMLPartImpl::addedWidget): Added. Called by KWQScrollView to tell us a view was added.
        (KWQKHTMLPartImpl::buildViewsNotYetAddedSet): Added. Used to build the initial set of views.

        * kwq/KWQScrollView.mm: (QScrollView::addChild): Added call to KWQKHTMLPartImpl::addedWidget.
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge drawRect:withPainter:]): Calls KWQKHTMLPartImpl::paint.

        * kwq/KWQWindowWidget.mm: (KWQWindowWidget::frameGeometry), (KWQWindowWidget::mapToGlobal),
	(KWQWindowWidget::mapFromGlobal), (KWQWindowWidget::internalSetGeometry):
	Fixed logic to work properly for windows not on main screen.

        * khtml/khtml_part.cpp: Moved the boundary of an existing ifndef APPLE_CHANGES so that
	KHTMLPart::show() and hide() are not compiled, mainly for clarity.
        * khtml/rendering/render_replaced.cpp: (RenderWidget::detach): Removed unneeded APPLE_CHANGES.

        * kwq/KWQWindowWidget.h: Removed some unneeded virtual functions.
        * kwq/qt/qscrollview.h: Removed some unneeded virtual functions, made others non-virtual.
        * kwq/qt/qwidget.h: Removed some unneeded virtual functions, made others non-virtual.
        * kwq/KWQWidget.mm: Removed a lot of unused and unneeded stuff.

        * force-clean-timestamp: Needed to do this because I changed header files.

2002-07-24  Darin Adler  <darin@apple.com>

	- fixed 3006329 - space should be stripped from beginning of relative url

        * kwq/KWQKURL.mm: (KURL::normalizeRelativeURLString): Added a call to stripWhiteSpace.

2002-07-24  Maciej Stachowiak  <mjs@apple.com>

	Made frame names globally unique, not just unique per parent frame
	- this is needed to avoid triggering the assertion in 3006354
	(Assertion failure on salon.com). Clearing my cache made the
	assertion go away by itself, but it seems good to avoid the
	possibility of triggering it in the future.
	
        * khtml/khtmlpart_p.h: Make m_frameNameId static.
        * khtml/khtml_part.cpp: Initialize it here.

2002-07-24  Darin Adler  <darin@apple.com>

	- fixed 3006336 -- crash in _NSDescriptionWithLocaleFunc

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::overURL):
	Don't use the result of getNSString() on a C++ temporary object.
	We could also fix this by doing retain autorelease in getNSString().

2002-07-23  Chris Blumenberg  <cblu@apple.com>

	More plumbing for contextual menu support.

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge completeURLForDOMString:]): renamed
        (-[WebCoreBridge elementInfoAtPoint:]): renamed
        * kwq/qt/qpixmap.h: added an accessor to the WebCoreImageRenderer

2002-07-23  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Fix file reference types to be more consistent.

        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::parseTag): Changed indenting to use spaces, makes our diff with
	KDE smaller.
        (HTMLTokenizer::end): Remove unneeded APPLE_CHANGES.

        * kwq/KWQDOMNode.cpp: Tweak.
        * kwq/KWQDOMNode.h: Tweak.

2002-07-23  David Hyatt  <hyatt@apple.com>

	Fix bug 2803155 - images not displayed on http://bscw.gmd.de.
	My fix is to use our newfound quirks mode to implement a comment
	parsing quirk (this is how Mozilla handles this same issue).
	Only in quirks mode, the tokenizer will treat <!--> atomically as
	a complete comment.

	This is bug 34302 on bugs.kde.org, for those who are curious.
	
        * khtml/html/htmltokenizer.cpp:
        (HTMLTokenizer::parseTag):

2002-07-23  Chris Blumenberg  <cblu@apple.com>

	Initial plumbing for contextual menu support.

        * WebCore.pbproj/project.pbxproj:
        * kwq/KWQDOMNode.cpp: Added.
        (isImage):
        * kwq/KWQDOMNode.h: Added.
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge _URLForDOMString:]): added
        (-[WebCoreBridge _elementInfoForMouseEvent:]): added

2002-07-23  Richard Williamson  <rjw@apple.com>

        Turn on find related code in part in preparation for
        implementing find in WebKit.
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::init):
        (KHTMLPart::clear):
        (KHTMLPart::findTextNext):

2002-07-23  David Hyatt  <hyatt@apple.com>

	Fixing two bugs here.  The first is bug with @import sheets not inheriting strict parsing mode from their parent sheet.
	This means all @import sheets are being treated as strict mode! 

	The second bug is in KWQ.  We were never calling determineParseMode, so we always defaulted to strict mode, and therefore
	were highly intolerant of unitless numbers on absolutely positioned blocks.  This fixes many problems, notably www.netscape.com
	and ZDNet.com on the cvs-base tests.
        * khtml/css/cssparser.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::write):

2002-07-23  Darin Adler  <darin@apple.com>

	- fixed 3004818 -- relative urls are assembled incorrectly at ticketmaster
	- fixed 2999279 -- Invalid URI in request at subpage of swatch.com

	The issue here is URLs with paths that start with "/../". RFC 2396 says one
	thing, and that's what CFURL does. But real web browsers do another thing.

        * kwq/KWQKURL.mm:
        (KURL::KWQKURLPrivate::KWQKURLPrivate): Clean up a bit by removing unneeded init().
        (escapeQString): Don't make a copy of the passed-in QString.
        (pathEndsWithSlash): Don't make a copy of the passed-in QString.
        (copyEscapedPath): Make this a static function instead of extern.
        (KURL::KWQKURLPrivate::decompose): Add the new "../" and "./" logic.

2002-07-23  David Hyatt  <hyatt@apple.com>

        * khtml/rendering/font.cpp:
	Fix deployment build bustage by including <algorithm>.
	
        * khtml/rendering/render_frames.cpp:
        (RenderPartObject::calcReplacedWidth):
	Fix a bug with http://www.moveabletype.com's top portion
	not showing up (bug 2986714).  A hack was being improperly
	applied to fixed width plugins, when it should have only
	been applied to variable width plugins.
	
2002-07-23  Darin Adler  <darin@apple.com>

        * Makefile.am: Clean based on all, not all-am, so it happens before subdirs
	if any.

2002-07-23  Darin Adler  <darin@apple.com>

	Changes require a make clean because of the Project Builder bug.
	So I added the "make clean timestamp" hackery.

        * .cvsignore: Ignore the new clean timestamp.
        * force-clean-timestamp: Added.
        * Makefile.am: Add rules for making clean happen.

        * khtml/html/html_formimpl.cpp:
        (HTMLGenericFormElementImpl::defaultEventHandler): Fix NULL dereference
	bug in here that I ran into. Code later down in the same function has
	the check for NULL, so clearly this is just a bug.

        * khtml/rendering/font.cpp:
        (Font::drawText): Simplify by using new drawText that takes a QChar array,
	no need to make a QConstString.
        * khtml/rendering/render_text.cpp:
        (TextSlave::printDecoration): Simplify by using new drawUnderlineForText that
	takes a QChar array, no need to make a QConstString.

        * kwq/WebCoreTextRenderer.h: Change underline-drawing to use a UniChar array.

        * kwq/qt/qpainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::drawText): Change to take QChar array instead of a QString, but
	also discovered a bizarre overloading thing that was happening before and
	dealt with that by adding a new drawText that still does take a QString.
        (QPainter::drawUnderlineForText): Change to take QChar array.

        * kwq/qt/qcolor.h: Mark constructor explicit, so we don't get subtle strangess
	like where the string to draw was being converted to a QColor.

        * khtml/css/cssstyleselector.cpp: No need for APPLE_CHANGES for
	this change any more.

        * kwq/kdecore/kcharsets.h:
        * kwq/KWQKCharsets.mm: Remove unused functions.

        * kwq/khtml/khtml_settings.h:
        * kwq/KWQKHTMLSettings.mm: Remove unused functions.

        * kwq/qt/qfont.h:
        * kwq/KWQFont.mm: Simplify.

        * kwq/KWQPaintDeviceMetrics.mm: Simplify.

        * kwq/qt/qtextcodec.h:
        * kwq/KWQtextcodec.mm: (QTextCodec::codecForName): Remove unused parameter.

2002-07-23  David Hyatt  <hyatt@apple.com>

	The STYLE element was ignoring both the media and type
	attributes (unlike its cousin, the LINK element).  This
	patch implements support for media and type and further
	stops us from loading stylesheets that we should have no
	business parsing.
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
        (HTMLStyleElementImpl::parseAttribute):
        (HTMLStyleElementImpl::insertedIntoDocument):
        (HTMLStyleElementImpl::removedFromDocument):
        (HTMLStyleElementImpl::childrenChanged):
        (HTMLStyleElementImpl::sheetLoaded):
        * khtml/html/html_headimpl.h:

=== Alexander-14 ===

2002-07-23  David Hyatt  <hyatt@apple.com>

        * khtml/html/html_objectimpl.cpp:
        (HTMLObjectElementImpl::attach):
	Oops.  I accidentally removed the call to an ancestor class
	attach function.  What made this subtle is that it deliberately
	skipped over a couple of base classes and called the one three
	superclasses up.  When I went to put it back in, I messed up
	and called the base class instead of the distant ancestor.  

	Silly me.  marvel.com and matadorrecords.com should be ok now.
	
2002-07-22  Darin Adler  <darin@apple.com>

        * khtml/rendering/render_text.cpp:
        (TextSlave::printSelection): Add comments to APPLE_CHANGES.
        (TextSlave::printDecoration): Add comments to APPLE_CHANGES.
        (TextSlave::checkSelectionPoint): Add comments to APPLE_CHANGES.

        * khtml/xml/dom_stringimpl.cpp: Add comments to APPLE_CHANGES.

        * khtml/xml/xml_tokenizer.cpp: (XMLTokenizer::end): Remove APPLE_CHANGES.
        * kwq/KWQsignals.mm: Add a new signal dummy function.

        * kwq/WebCoreJavaScript.h: Fix header.
        * kwq/WebCoreJavaScript.mm: Fix header.

        * kwq/WebCoreSettings.h: Added. Not used yet.
        * kwq/WebCoreSettings.m: Added. Not used yet.
        * WebCore.pbproj/project.pbxproj: Added WebCoreSettings.h and .m.

        * English.lproj/InfoPlist.strings: Fixed a spelling error.

        * kwq/WebCoreTextRendererFactory.h: Tweak.

2002-07-22  Maciej Stachowiak  <mjs@apple.com>

	Fixed Radar 3004897 - assert at mapquest

        * khtml/html/html_baseimpl.cpp:
        (HTMLIFrameElementImpl::attach): Put back frame name uniqueness
	check. Lack of this check was causing duplicate frames to be left
	floating in space.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::requestFrame): Add an assertion that no frame
	of the requested name already exists.

2002-07-22  David Hyatt  <hyatt@apple.com>

	Fix for bug 3004889, plugin content on stylesheet pages not
	showing up.  The rendering tree needed to perform an update
	when all children had arrived, and this was being handled by
	the parser.  With async rendering construction, I had to store
	this in the content node instead, so it could do the update
	once the render object was built at a later date.
	
        * khtml/html/html_objectimpl.cpp:
        (HTMLObjectElementImpl::HTMLObjectElementImpl):
        (HTMLObjectElementImpl::attach):
        * khtml/html/html_objectimpl.h:
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::processCloseTag):

2002-07-22  David Hyatt  <hyatt@apple.com>

	This checkin adds support for querying the selected style set,
	for querying the preferred style set, and for changing the
	selected style set dynamically.  With this checkin, a Web page
	in Alexander now has the capability to present its own alternate
	stylesheet UI in the page and to toggle between sets using script.
	
        * khtml/dom/css_stylesheet.cpp:
        (DocumentStyle::preferredStylesheetSet):
        (DocumentStyle::setSelectedStylesheetSet):
        (DocumentStyle::selectedStylesheetSet):
        * khtml/dom/css_stylesheet.h:
	Added new methods to the DocumentStyle interface as per Hixie's
	proposed spec.
	
        * khtml/dom/dom_doc.cpp:
        * khtml/dom/dom_doc.h:
        * khtml/ecma/kjs_dom.cpp:
        (DOMDocument::getValueProperty):
        (DOMDocument::tryPut):
        (DOMDocument::putValue):
        * khtml/ecma/kjs_dom.h:
	Implement the JS binding glue for the new properties.
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::processHttpEquiv):
        (DocumentImpl::preferredStylesheetSet):
        (DocumentImpl::selectedStylesheetSet):
        (DocumentImpl::setSelectedStylesheetSet):
        (DocumentImpl::recalcStyleSelector):
        * khtml/xml/dom_docimpl.h:
	The implementation of the new properties.  Also fixed a bug
	caused by the 3.02 merge in the stylesheet filtering code in
	recalcStyleSelector.
	
2002-07-22  Maciej Stachowiak  <mjs@apple.com>

        Merged WebCoreBridge and WebCoreFrameBridge.

        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::openURLInFrame): Use bridge, not frameBridge.
        (KWQKHTMLPartImpl::urlSelected): Use bridge, not frameBridge.
        (KWQKHTMLPartImpl::submitForm): Use bridge, not frameBridge.
        (KWQKHTMLPartImpl::findFrame): Use bridge, not frameBridge.
        (KWQKHTMLPartImpl::frames): Use bridge, not frameBridge.
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge dealloc]): Free RenderPart if set.
        (-[WebCoreBridge renderPart]): Moved here from WebFrameBridge.
        (-[WebCoreBridge setRenderPart:]): Moved here from WebFrameBridge.
        (-[WebCoreBridge copyRenderNode:khtml::copier:]): No more need to get render part from frame bridge.
        (-[WebCoreBridge installInFrame:]): No more need to get render part from frame bridge.
        * kwq/WebCoreFrameBridge.h: Removed.
        * kwq/WebCoreFrameBridge.mm: Removed.
	* WebCore.exp: Removed WebCoreFrameBridge.
        * WebCore.pbproj/project.pbxproj: Removed WebCoreFrameBridge.

2002-07-21  Maciej Stachowiak  <mjs@apple.com>

        Removed provisional/committed distinction from WebCore and the
	WebCore SPI. WebCore will never see a provisional data source or
	provisional anything, any more.

        * kwq/KWQScrollView.mm: Remove mention of provisional widget from comment.
        * kwq/WebCoreFrameBridge.h: Remove commitedBridge method, and remove comment
	about provisionality from bridge method.
	* kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::write): Remove bogus comment about provisional/committed
	transition.
        (KWQKHTMLPartImpl::findFrame): Call bridge, not committedBridge.
        (KWQKHTMLPartImpl::frames): Likewise.

2002-07-21  Darin Adler  <darin@apple.com>

	* khtml/*: Roll KDE 3.0.2 changes in. Also switch to not using APPLE_CHANGES
	for some of the changes that we definitely want to contribute upstream.

        * WebCore.pbproj/project.pbxproj: Add KWQStyle.mm, remove KWQStyle.h, moving contents
	into qstyle.h.

        * kwq/KWQApplication.mm: (QApplication::globalStrut): Remove _logNotYetImplemented().

        * kwq/KWQButton.mm: (QButton::QButton): Use plain release, not autorelease.
        * kwq/KWQComboBox.mm: (QComboBox::init): Use plain release, not autorelease.
        * kwq/KWQListBox.mm: (QListBox::QListBox): Use plain release, not autorelease.
        * kwq/KWQPainter.mm: (QPainter::drawArc): Use plain release, not autorelease.

        * kwq/KWQKHTMLPartBrowserExtension.mm: Remove import of KWQKHTMLPartImpl.h, now that
	it's always part of khtml_part.h.
        * kwq/KWQKHTMLPartImpl.cpp: Simplify.
        * kwq/KWQKHTMLPartImpl.h: Add wrapper to allow multiple inclusion. Don't include
	khtml_part.h any more, since that file now includes this one to minimize changes to
	KDE code that needs to get to functions in here.
        * kwq/KWQKHTMLPartImpl.mm:
        (KHTMLPart::onURL), (KHTMLPart::nodeActivated), (KHTMLPart::setStatusBarText):
	Moved here from khtml_part.cpp.
        * kwq/KWQLoaderImpl.mm: Include khtml_part.h instead of KWQKHTMLPartImpl.h.

        * kwq/KWQPushButton.mm:
        (buttonFontMetrics), (QPushButton::fontMetrics): Added. Used by the form code to size buttons.
        * kwq/KWQStyle.mm: Added.
        (QStyle::sizeFromContents): Added. Used by the form code to size buttons.

        * kwq/KWQStyle.h: Removed.
        * kwq/qt/qstyle.h: Moved contents of KWQStyle.h in here.
        * kwq/qt/qwidget.h: Include <qstyle.h> rather than KWQStyle.h.

        * kwq/WebCoreBridge.mm: (-[WebCoreBridge isFrameSet]): Call straight to impl.

        * kwq/kdeui/klineedit.h: Add KLineEdit::frameWidth().
        * kwq/qt/qnamespace.h: Remove GUIStyle, MacStyle, and WindowsStyle.
        * kwq/qt/qpaintdevice.h: Add QInternal, QInternal::Printer, and QPaintDevice::devType().
        * kwq/qt/qpainter.h: Add QPainter::device().
        * kwq/qt/qpushbutton.h: Add QPushButton::fontMetrics().

2002-07-21  Maciej Stachowiak  <mjs@apple.com>

	Fix a recent regression that made JavaScript window closing
	crash. Window closing was counting on delayed dealloc/destruction
	of things associated with the window, but now that we have made
	deallocs more synchronous, we need to add an explicit delay in
	this case.

	Also, change some fprintf diagnostics of things that should never
	happen into assertions, since I actually ran into one.
	
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::slotData): Change fprintf diagnostic to assertion,
	remove comment that the diagnostic should be removed.
        (KWQKHTMLPartImpl::end): Change fprintf diagnostic to assertion,
	remove comment that the diagnostic should be removed.
        (KWQKHTMLPartImpl::scheduleClose): Renamed from close, changed to schedule
	window closing from the run loop rather than doing it immediately.
        * khtml/ecma/kjs_window.cpp:
        (Window::scheduleClose): Adjusted for above rename.

2002-07-21  David Hyatt  <hyatt@apple.com>

        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
	Fix incorrect handling of alternate stylesheets that could
	cause KHTML to incorrectly interpret alternate representation
	links (e.g., <link rel=alternate> to a PDF representation)) as 
	alternate stylesheets instead.
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::processHttpEquiv):
	Add support for the selection of alternate stylesheets and
	preferred stylesheet sets as specified in section 14.3.2 of
	the HTML 4.0 spec.  If you want to hook up a UI to expose
	alternate stylesheets, the back end code is ready to rock. :)
	
        (DocumentImpl::recalcStyleSelector):
	Fixed a bug in recalcStyleSelector that could lead it to
	pick an alternate stylesheet as a preferred set incorrectly
	(thus loading alternate stylesheets when it shouldn't).  This
	is probably the cause of bungled display on some pages with
	alternate stylesheets (e.g., Eric Meyer's pages).

	On Ian Hickson's simple import test suite, we now pass tests 35 and
	36 (where before both were failed).
	
2002-07-21  Maciej Stachowiak  <mjs@apple.com>

        * Makefile.am: Remove products from symroots on `make clean'.

2002-07-21  Maciej Stachowiak  <mjs@apple.com>

        * WebCore.pbproj/project.pbxproj: Set directories for the group
	folders, so that creating new files in them will put them in the
	right directory by default.

2002-07-21  David Hyatt  <hyatt@apple.com>

	Fixing bug 3003837, list boxes are extremely slow.  The
	buildup of a list box was order n squared, since on every
	insert of an item the list box was rebuilding its entire
	contents.  This patch adds smarts to the list buildup, so that
	the underlying NSBrowser only rebuilds itself one time, after
	all the items have been inserted.

	This speeds up the Bugzilla forms page on cvs-base by 60%.
	
        * khtml/rendering/render_form.cpp:
        (RenderSelect::updateFromElement):
	Patched to make calls to beginBatchInsert and endBatchInsert
	on KListBox.
	
        * kwq/KWQListBox.h:
        * kwq/KWQListBox.mm:
        (QListBox::QListBox):
        (QListBox::insertItem):
        (QListBox::beginBatchInsert):
        (QListBox::endBatchInsert):
	If in the middle of a batch insert, the insertitem function will
	not rebuild the NSBrowser's list.  endBatchInsert will actually
	do this now.
	
2002-07-20  David Hyatt  <hyatt@apple.com>

	This patch fixes the FOUC (flash of unstyled content) problem.
	
        * khtml/css/cssstyleselector.cpp:
        * khtml/css/cssstyleselector.h:
	If stylesheets are still loading, the styleForElement method
	will return a default "display: none" style that prevents
	the rendering tree from being built for that element.  
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
        (HTMLLinkElementImpl::setStyleSheet):
        (HTMLStyleElementImpl::sheetLoaded):
	The link element has been patched to notify the document
	when stylesheet loads start and finish.
	
        * khtml/html/htmlparser.cpp:
        (KHTMLParser::startBody):
	This function has been hacked to unblock the layout of
	inlines within a block.  This can be done the moment the
	stylesheet loads have been kicked off (you don't have to
	wait for them to finish).
	
        * khtml/rendering/render_object.h:
	Contains a new method for recursively descending into the
	render tree to unblock the layout of inlines.  This is done
	as soon as the <body> is encountered, so the render tree is
	small at the time the unblocking occurs.
	
        * khtml/xml/dom_docimpl.cpp:
        (DocumentImpl::DocumentImpl):
        (DocumentImpl::stylesheetLoaded):
        (DocumentImpl::updateStyleSelector):
	The new function, stylesheetLoaded, is invoked by link elements
	when a stylesheet loads.  It simply decrements the loading sheet
	count and calls updateStyleSelector.  updateStyleSelector has
	been patched to avoid the recalculation of style until all 
	stylesheets have loaded.
	
        * khtml/xml/dom_docimpl.h:
	Two new methods.  The first, stylesheetLoaded, is described
	above.  The second is haveStylesheetsLoaded, which indicates
	whether or not all the sheets have completed loading.  A single
	new member variable, m_pendingStylesheets, tracks the number
	of sheets currently pending.
	
2002-07-20  Darin Adler  <darin@apple.com>

        * khtml/css/css_ruleimpl.cpp: (CSSImportRuleImpl::~CSSImportRuleImpl):
	Fix a potential leak by doing setParent(0) here just as is done in
	CSSMediaRuleImpl.

        * kwq/WebCoreBridge.h: Fix a misspelling of visible.

2002-07-20  Maciej Stachowiak  <mjs@apple.com>

	Changed the code to handle "icon" and "SHORTCUT ICON" links
	separately, and give higher priority to the former.

	- fixed 3003672 - Assertion failure related to iconloader on metafilter
	
        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process): Changed to handle both "icon" and
	"SHORTCUT ICON" links properly.
        * kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::setIconURL): Moved here from
	KWQKHTMLPartImpl to do it more the way KDE does.
        (KHTMLPartBrowserExtension::setTypedIconURL): New method for
	handling moz-style icon links, which include a type as well as a
	URL.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::loadIcon): Removed.
        * kwq/WebCoreBridge.h: Prototype setIcon: and setIcon:withType: methods.
        * kwq/khtml/khtml_ext.h: Prototype new methods.
        * kwq/kparts/browserextension.h: Make setIcon pure virtual instead
	of a no-op.

2002-07-19  Chris Blumenberg  <cblu@apple.com>

	Per darin, only define loadIcon in KWQKHTMLPartImpl

        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process):
        * khtml/khtml_part.cpp:
        * khtml/khtml_part.h:

2002-07-19  Chris Blumenberg  <cblu@apple.com>

        * khtml/html/html_headimpl.cpp:
        (HTMLLinkElementImpl::process): added an APPLE_CHANGES
        * khtml/khtml_part.cpp: 
        (KHTMLPart::loadIcon): added
        * khtml/khtml_part.h: added loadIcon
        * kwq/KWQKHTMLPartImpl.h: added loadIcon
        * kwq/KWQKHTMLPartImpl.mm: added loadIcon
        (KWQKHTMLPartImpl::loadIcon):
        * kwq/WebCoreBridge.h: added loadIcon

2002-07-19  Darin Adler  <darin@apple.com>

        * khtml/css/makeprop: Fail if we don't find gperf.
        * khtml/misc/makeattrs: Fail if we don't find gperf.
        * khtml/misc/maketags: Fail if we don't find gperf.

2002-07-19  Maciej Stachowiak  <mjs@apple.com>

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge installInFrame:]): Assert that this bridge is
	either for the main frame, or that it's frame has a render
	part. If neither of these conditions is met, the view will never
	get installed in the view hiearchy leading to nasty silent
	failure; and this condition should be guaranteed.

2002-07-18  David Hyatt  <hyatt@apple.com>

        * khtml/css/css_valueimpl.cpp:
        Changed the QRegExps used for font family matching to statics.  Helped out
        one page on the base tests a fair bit.  Overall (spread over all 40 pages)
        it's not that big though.
        
2002-07-18  David Hyatt  <hyatt@apple.com>

        Small change that gives us 25% speedup (uncached) on the cvs-base suite.

        * khtml/css/cssstyleselector.cpp:
        Optimized CLASS style comparison to avoid allocing QStrings when the CLASS
        attribute only contains one entry (as opposed to a list of entries).
        
=== Alexander-13 ===

2002-07-17  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::requestFrame):
	Take out bogus check for nil path -- a URL with a nil path is OK, for example "about:blank".
	Also improved log message.

2002-07-16  Maciej Stachowiak  <mjs@apple.com>

        Moved URL mouseover status to KWQKHTMLPartImpl, and made it
	responsive to modifier key presses, if enabled. Fixes:

	Radar 2980152 - Link mouseover status messages are not localizable
	Radar 2982043 - Link mouse-over status should change in response to modifier keys

	* khtml/khtml_part.cpp:
        (KHTMLPart::overURL): Remove extensive APPLE_CHANGES, and just call the
	impl method.
        * kwq/KWQKHTMLPartImpl.h: Prototype overURL method.
        * kwq/KWQKHTMLPartImpl.mm:
        (KWQKHTMLPartImpl::overURL): Construct status messages using format strings
	for localizability; change message in response to modifiers if modifier
	tracking is enabled.
        * kwq/WebCoreBridge.h: Prototype modifierTrackingEnabled method.

2002-07-16  Richard Williamson  <rjw@apple.com>

        Fixed field length test.  We were testing >= instead of >.
        * kwq/KWQNSTextField.mm:
        (-[KWQNSTextFieldFormatter isPartialStringValid:newEditingString:errorDescription:]):

2002-07-16  Darin Adler  <darin@apple.com>

	- fixed 2997244 -- crash when visiting cnn.com followed by another page

	Turns out the requestFrame code I've been tinkering with used to be
	dead code until we accidentally re-triggered the code path.

        * khtml/html/html_baseimpl.cpp: (HTMLFrameElementImpl::attach):
	Remove APPLE_CHANGES that were causing us to reuse the same frame which
	were an attempt to fix a frame targeting problem that was actually elsewhere.

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::requestFrame): Remove the code
	that handles the case of an already-existing frame with the same name. This
	is handled at a higher level.

        * kwq/WebCoreBridge.h: Remove now-unneeded childFrameNamed method.

2002-07-16  Darin Adler  <darin@apple.com>

	- fixed 2998692 -- crash when you type "googl" into the page address

        * kwq/KWQKHTMLPartImpl.mm: (KWQKHTMLPartImpl::requestFrame): Check for
	a nil part here to restore the old behavior. Whether that's OK or not
	is another question that I'd prefer to deal with later.

2002-07-16  Darin Adler  <darin@apple.com>

        * almost every file: Renamed IF* -> Web*.

2002-07-15  Darin Adler  <darin@apple.com>

	A teeny weeny bit of refactoring.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge stateForEvent:]): Replaces addModifiers:toState:.
        (-[WebCoreBridge mouseUp:]): Use stateForEvent:.
        (-[WebCoreBridge mouseDown:]): Use stateForEvent:.
        (-[WebCoreBridge mouseMoved:]): Use stateForEvent:.

2002-07-15  Richard Williamson  <rjw@apple.com>

        Added isFrameSet method.
        
        * WebCore.pbproj/project.pbxproj:
        * khtml/khtml_part.cpp:
        (KHTMLPart::isFrameSet):
        * khtml/khtml_part.h:
        * kwq/KWQKHTMLPart.mm:
        * kwq/KWQKHTMLPartImpl.cpp: Added.
        (KWQKHTMLPartImpl::isFrameSet):
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge isFrameSet]):

2002-07-15  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Removed KWQKPrinter.mm.
        * kwq/KWQKPrinter.mm: Removed.

2002-07-15  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Removed unused qpopupmenu.h.
        * kwq/kdecore/ksimpleconfig.h: Removed unnecessary include of <config.h>.
        * kwq/kio/global.h: Removed unnecessary include of <config.h>.
        * kwq/kio/kprinter.h: Emptied out this file.
        * kwq/qt/qpopupmenu.h: Removed.
        * kwq/qt/qstylesheet.h: Removed unnecessary include of <config.h>.
        * kwq/qt/qtextedit.h: Removed unnecessary include of <config.h>.

2002-07-15  Darin Adler  <darin@apple.com>

        * kwq/qt/qfontmetrics.h: Remove unused, and not properly implemented,
	empty constructor. Add some const that was missing. Remove most of the
	parameters of size().
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::charWidth): Add const.
        (QFontMetrics::floatWidth): Add const.
        (QFontMetrics::floatCharacterWidth): Add const.
        (QFontMetrics::size): Remove unused parameters.

        * kwq/WebCoreTextRenderer.h: Remove two unused drawString methods and one
	unused widthForCharacters method.

2002-07-14  Darin Adler  <darin@apple.com>

        * kwq/WebCoreFrame.mm: (-[WebCoreFrame dealloc]): Fix NULL-dereferencing
	problem that was hidden by the "leak the world" bug in WebBrowser.

2002-07-14  Maciej Stachowiak  <mjs@apple.com>

        Assign getView() results to variable of appropriate type to work
	around apparent ObjC++ compiler bug. I wonder why other people
	aren't running into this (and why I haven't run into it before).

	* kwq/KWQButton.mm:
        (QButton::setText):
        (QButton::text):
        * kwq/KWQLineEdit.mm:
        (QLineEdit::setEchoMode):
        (QLineEdit::setText):
        (QLineEdit::text):
        (QLineEdit::setMaxLength):
        (QLineEdit::isReadOnly):
        (QLineEdit::setReadOnly):
        (QLineEdit::maxLength):
        (QLineEdit::selectAll):
        (QLineEdit::edited):
        (QLineEdit::setEdited):

2002-07-14  Darin Adler  <darin@apple.com>

        * WebCore-tests.exp: Tests needed access to QPoint, QString, and KURL symbols
	that were formerly exported for the benefit of WebKit.

        * kwq/KWQPixmap.mm: I needed to touch something since .exp files don't cause
	a rebuild, so I fixed a comment in here.

2002-07-14  Darin Adler  <darin@apple.com>

	Changes to WebCore that allow WebKit to work through Objective C without going
	straight to the KHTML headers. Also remove a bunch of unused stuff, especially
	in QPainter.

        * WebCore.exp: Export the new classes WebCoreCache and WebCoreJavaScript.
	Don't export any C++ symbols at all.

        * WebCore.pbproj/project.pbxproj: Remove KWQWMatrix.mm, add WebCoreCache.*
	and WebCoreJavaScript.*.

        * khtml/khtml_part.cpp: Put more unused code inside ifndef APPLE_CHANGES.
        * khtml/khtmlview.cpp: Put unused code inside #ifndef APPLE_CHANGES
        * khtml/khtmlview.h: Put unused virtual functions inside #ifndef APPLE_CHANGES.
        * khtml/misc/loader.cpp: (CachedImage::tiled_pixmap): Change this so it
	always returns pixmap(). Handling it at this level is better than changing
	all the callers for now.
        * khtml/rendering/render_box.cpp: (RenderBox::printBackground): Took out the
	APPLE_CHANGES now that tiled_pixmap() always just returns pixmap().
        * khtml/rendering/render_frames.cpp: (RenderFrameSet::userResize): Put some
	unused code inside APPLE_CHANGES.

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::requestFrame): Made it get the view using the bridge, since we
	don't have a [widget] method on the frame any more.
        (KWQKHTMLPartImpl::findFrame): Used committedBridge instead of bridge, since
	I changed bridge to return the provisional if available.
        (KWQKHTMLPartImpl::frames): Used committedBridge instead of bridge, since
	I changed bridge to return the provisional if available.

        * kwq/qt/qpixmap.h: Put an empty version of QWMatrix in here. We don't actually ever
	need a real matrix, just a class to let us compile.

        * kwq/qt/qpainter.h: Moved QWMatrix into qpixmap.h. Removed constructors that take
	QPixmap and QWidget. Removed unused variants of drawText. Removed unused setClipping,
	setClipRect, hasClipping, translate, scale, begin, end, and device functions.
        * kwq/KWQPainter.mm:
        (QPainter::QPainter): Remove the constructors that take a paint device, widget,
	or pixmap. We can get away without them.
        (QPainter::save): Simplify. Also remove the optimization for painters without
	stacks, since having an empty stack is very inexpensive.
        (QPainter::restore): Simplify.
        (QPainter::_drawPoints): Move paintingDisabled check in here.
        (QPainter::drawText): Removed many unused drawText variants.

        * kwq/KWQView.h: Tweaked.
        * kwq/KWQView.mm: Removed [KWQView drawRect:].

        * kwq/KWQWMatrix.mm: Removed.

        * kwq/qt/qwidget.h: Removed paint() virtual function.
        * kwq/KWQWidget.mm: Removed QWidget::paint().

        * kwq/WebCoreBridge.h: Added new methods installInFrame:, removeFromFrame,
	mouseDown:, mouseUp:, mouseMoved:, mouseDragged:, copyDOMTree:, and copyRenderTree:.

        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge dealloc]): Call removeFromFrame.
        (-[WebCoreBridge createKHTMLViewWithNSView:width:height:marginWidth:marginHeight:]):
	Don't return the view any more, also set bridgeOwnsKHTMLView to YES.
        (-[WebCoreBridge copyDOMNode:DOM::copier:]): Added helper method for copyDOMTree.
        (-[WebCoreBridge copyDOMTree:]): Added method to be used by IFDOMNode to get at DOM
	tree without using C++.
        (-[WebCoreBridge copyRenderNode:khtml::copier:]): Added helper method for copyRenderTree.
        (-[WebCoreBridge copyRenderTree:]): Added method to be used by IFRenderNode to get at
	render tree without using C++.
        (-[WebCoreBridge removeFromFrame]): Added. Deletes the view if we own it. We don't want
	to wait for dealloc time to do this, since a lingering view might be visible.
        (-[WebCoreBridge installInFrame:]): Added. Does a set of things we need to do at the
	time we commit a provisional data source.
        (-[WebCoreBridge addModifiers:toState:]): Moved here from IFHTMLView.
        (-[WebCoreBridge mouseUp:]): Added. Used to get a mouse up event to the KHTMLView.
        (-[WebCoreBridge mouseDown:]): Added. Used to get a mouse down event to the KHTMLView.
        (-[WebCoreBridge mouseMoved:]): Added. Used to get a mouse moved event to the KHTMLView.
        (-[WebCoreBridge mouseDragged:]): Added. Used to get a mouse moved event to the KHTMLView
	in the case where we are dragging -- perhaps could be merged with mouseMoved.

        * kwq/WebCoreCache.h: Added. Allows control of the WebCore cache; previously done directly
	in IFCache in WebKit.
        * kwq/WebCoreCache.mm: Added.

        * kwq/WebCoreFrame.h: Remove widget method. Change semantics of bridge method to return
	provisional bridge if available, which corresponds to what the widget method did before.
	Added a committedBridge method that has the semantics that bridge did before.

        * kwq/WebCoreJavaScript.h: Added. Returns statistics about the state of JavaScript objects;
	previously done directly in IFCache in WebKit.
        * kwq/WebCoreJavaScript.mm: Added.

2002-07-13  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Add a few files that are sources
	although they should not be compiled for any target.

        * kwq/qt/qpushbutton.h: Simplified.
        * kwq/KWQPushButton.mm: (QPushButton::QPushButton): Implemented text parameter.

2002-07-13  Darin Adler  <darin@apple.com>

        * ForwardingHeaders/*: Added. New approach to headers to try to
	make Project Builder's header dependency support work even for
	includes like #include <render/render_object.h>.
        * kwq/kjs/*: Removed. Now part of ForwardingHeaders.

        * Makefile.am: Remove embed.am support.

        * WebCore.pbproj/project.pbxproj: Remove other search paths, and
	add ForwardingHeaders directory as a search path. Add qucomextra_p.h.
	
        * khtml/ecma/kjs_navigator.cpp: Made gratuitous changes to touch this
	file to make things build without requiring clean rebuild.

        * khtml/rendering/render_form.cpp: Removed many unneeded QObject::
	qualifiers from inside APPLE_CHANGES to touch this file to make things
	build without requiring clean rebuild.

        * kwq/KWQButton.mm: (QButton::setText), (QButton::text):
        * kwq/KWQColor.mm: (QColor::setNamedColor):
	* kwq/KWQKConfigBase.mm: (KConfig::readEntry):
        * kwq/KWQKHTMLSettings.mm: (KHTMLSettings::stdFontName), (KHTMLSettings::fixedFontName):
        (KHTMLSettings::serifFontName), (KHTMLSettings::sansSerifFontName),
	(KHTMLSettings::cursiveFontName), (KHTMLSettings::fantasyFontName), (KHTMLSettings::encoding):
        * kwq/KWQKLocale.mm: (i18n):
        * kwq/KWQKMessageBox.mm: (KMessageBox::error), (KMessageBox::warningYesNo):
        (KMessageBox::questionYesNo), (KMessageBox::sorry):
        * kwq/KWQListBox.mm: (-[KWQBrowserDelegate browser:willDisplayCell:atRow:column:]):
        * kwq/WebCoreBridge.mm: (-[WebCoreBridge selectedText]):
        Wean from QSTRING_TO_NSSTRING and NSSTRING_TO_QSTRING.

        * kwq/KWQComboBox.mm:
        (QComboBox::insertItem): Wean from QSTRING_TO_NSSTRING. Note that this
	now stores a copy of the string in the array. The old version was unsafe
	if anyone later modified the QString that was passed in.

        * kwq/KWQFontMetrics.mm: (QFontMetrics::width):
        * kwq/KWQPainter.mm: (QPainter::drawUnderlineForText), (QPainter::drawText):
	Wean from QSTRING_TO_NSSTRING_LENGTH and _FAST_QSTRING_TO_NSSTRING. We still have
	speed as high as before, in the "length" case slightly faster.

        * kwq/qt/qstring.h: Remove QSTRING_TO_NSSTRING family of macros.

        * kwq/KWQInvisibleButton.mm:
        * kwq/KWQKHTMLPart.mm:
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        * kwq/KWQKJavaAppletWidget.mm:
        * kwq/KWQKloader.mm:
        * kwq/KWQView.mm:
        * kwq/KWQsignals.mm:
        * kwq/WebCoreBridge.mm:
        * kwq/kdecore/kconfig.h:
        * kwq/kdecore/klibloader.h:
        * kwq/kdecore/klocale.h:
        * kwq/khtml/khtml_ext.h:
        * kwq/khtml/khtml_factory.h:
        * kwq/kio/kmimetype.h:
	Remove subdirectory prefix from imports to match Project Builder include scheme.

        * kwq/KWQKCursor.mm: (+[NSCursor _WebCore_linkCursor]):
        * kwq/KWQKLocale.mm: (i18n):
        * kwq/KWQKstddirs.mm: (locate):
	Use bundleForClass instead of bundleWithIdentifier to avoid any potential problems
	with multiple versions of the framework installed on the same system.

        * kwq/KWQKLineEdit.mm:
        (KLineEdit::completionBox): Remove _logNotYetImplemented, since this is implemented
	well enough for our needs now, and if we need to implement it later, it will become
	clear from the application behavior. This should be the destiny of most of these.

        * kwq/kdecore/kglobal.h: Simplify.
        * kwq/KWQKGlobal.mm: Simplify.
        * kwq/qt/qlineedit.h: Simplify.
        * kwq/KWQLineEdit.mm: Simplify.

        * kwq/KWQPaintDeviceMetrics.mm: Remove unneeded import.
        * kwq/qt/qbutton.h: Remove unneeded destructor.

2002-07-13  Richard Williamson  <rjw@apple.com>

        * kwq/KWQPainter.mm:
        Added disable drawing mode.
        (QPainter::drawRect):
        (QPainter::drawLine):
        (QPainter::drawEllipse):
        (QPainter::drawArc):
        (QPainter::drawLineSegments):
        (QPainter::drawPolyline):
        (QPainter::drawPolygon):
        (QPainter::drawConvexPolygon):
        (QPainter::drawPixmap):
        (QPainter::drawTiledPixmap):
        (QPainter::drawText):
        (QPainter::drawUnderlineForText):
        (QPainter::fillRect):
        (QPainter::setPaintingDisabled):
        
        * kwq/KWQWidget.mm:
        (QWidget::frameGeometry):
        Use the IFWebView's geometry.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge _drawRect:withPainter:]):
        (-[WebCoreBridge drawRect:]):
        (-[WebCoreBridge adjustFrames:]):
        Added adjustFrames:.  Factored some code.
        
        * kwq/qt/qpainter.h:
        Added setPaintingDisabled.

        * khtml/html/html_baseimpl.cpp:
        (HTMLFrameElementImpl::attach):
        (HTMLIFrameElementImpl::attach):
        Removed uniqueness check.  Need to revisit vis-a-vis provisional ds.
        
2002-07-12  Darin Adler  <darin@apple.com>

        * WebCore.pbproj/project.pbxproj: Add WebCoreFrame.mm, also export all
	the WebCore headers as Private so WebKit can see them.

        * khtml/khtmlview.cpp: (KHTMLView::drawContents): Remove APPLE_CHANGES
	since we don't use this function any more.

        * kwq/KWQDef.h: Since <sys/types.h> now includes ushort and uint, update
	code here to take that into account.

        * kwq/KWQKHTMLPartImpl.h: Added getView().
        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::getView): Added. Used by bridge.

        * kwq/qt/qpainter.h:
        * kwq/KWQPainter.mm: Simplify a bit, and remove some unused stuff.

        * kwq/WebCoreBridge.h: Add reapplyStyles, forceLayout, drawRect:.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge reapplyStyles]): Added.
        (-[WebCoreBridge forceLayout]): Added.
        (-[WebCoreBridge drawRect:]): Added.

        * kwq/WebCoreFrame.h: Make this a class as well as an interface.
        * kwq/WebCoreFrame.mm: Added.

        * WebCore.exp: Since WebCoreFrame is now a class as well as a protocol,
	export it so we can subclass.

2002-07-12  Darin Adler  <darin@apple.com>

	Build WebCore with Project Builder instead of make.
	Also wean WebCore from peeking inside the WebKit bundle.

        * WebCore.pbproj/.cvsignore: Added.
        * WebCore.pbproj/project.pbxproj: Added.

        * Makefile.am: Removed rules about building the framework,
	and just use pbxbuild instead.

        * dummy.mm: Removed.

        * khtml/Makefile.am: Removed everything but SUBDIRS.
        * khtml/css/Makefile.am: Removed everything but the rules for
	generated sources.
        * khtml/dom/Makefile.am: Removed.
        * khtml/ecma/Makefile.am: Removed everything but the rules for
	generated sources.
        * khtml/html/Makefile.am: Removed everything but the rules for
	generated sources.
        * khtml/misc/Makefile.am: Removed everything but the rules for
	generated sources.
        * khtml/rendering/Makefile.am: Removed.
        * khtml/xml/Makefile.am: Removed.
        * kwq/Makefile.am: Removed everything but the rules for
	generated sources.

        * kwq/KWQKLocale.mm: (i18n): Look in WebCore bundle, not WebKit bundle.
        * kwq/KWQKstddirs.mm:
        (locate): Look in WebCore bundle, not WebKit bundle. Also, always assume
	we are looking for html4.css.
        (locateLocal): Don't waste code making a bad path, just return empty string.

        * kwq/qt/qpixmap.h:
        * kwq/KWQPixmap.mm: Changed convertToImage() to an inline since we
	never need to implement it.

        * kwq/KWQKDebug.mm: Removed.
        * kwq/KWQKImageIO.mm: Removed.
        * kwq/kdecore/kcmdlineargs.h: Emptied out the file.
        * kwq/kdecore/kdebug.h: Made the do-nothing code here all be
	inlines for smaller code size.

        * kwq/KWQScrollBar.h: Fixed header guard.

        * .cvsignore:
        * kwq/.cvsignore:
        * khtml/dom/.cvsignore: Removed.
        * khtml/rendering/.cvsignore: Removed.
        * khtml/xml/.cvsignore: Removed.
        * kwq/kdecore/.cvsignore: Removed.
        * kwq/qt/.cvsignore: Removed.
	Don't ignore things we don't generate any more.

        * kwq/kjs/collector.h: Added.
        * kwq/kjs/internal.h: Added.
        * kwq/kjs/interpreter.h: Added.
        * kwq/kjs/lookup.h: Added.
        * kwq/kjs/object.h: Added.
	Used so that khtml can see the headers from JavaScriptCore.

2002-07-11  Maciej Stachowiak  <mjs@apple.com>

        Fixed Radar 2953254 - JavaScript window.scroll() and
	window.scrollBy() do not work

	* khtml/ecma/kjs_window.cpp:
        (WindowFunc::tryCall): Handle Scroll the same as ScrollBy.
        * kwq/KWQScrollView.mm:
        (QScrollView::scrollBy): Implement this method, since it's needed
	for JS scrolling.

2002-07-10  Darin Adler  <darin@apple.com>

	- fixed 2978796 -- Client-side image map not working

        * kwq/KWQRegion.mm: (QRegion::QRegion): Implement constructor that
	takes a QPointArray.

        * kwq/qt/qarray.h: Fix some const loopholes.

        * kwq/KWQCString.mm:
        (QCString::find): Use const char * instead of char *.
        (QCString::contains): Use const char * instead of char *.
        (QCString::right): Use const char * instead of char *.
        (QCString::mid): Use const char * instead of char *.

2002-07-10  Maciej Stachowiak  <mjs@apple.com>

        WebCore part of fix for:

	Radar 2953250 - JavaScript window.focus() and window.blur()
	methods don't work

        * khtml/ecma/kjs_window.cpp:
        (WindowFunc::tryCall): Call the appropriate things on focus and blur.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::unfocusWindow): Implemented by calling bridge.
        * kwq/KWQKHTMLPartImpl.h, kwq/KWQWidget.mm:
	(QWidget::setActiveWindow): Implemented by ordering the window
	front and making it key.
        * kwq/WebCoreBridge.h: Prototype new bridge method.

2002-07-10  Darin Adler  <darin@apple.com>

	- fixed 2979153 -- charset sjis page is gibberish

        * kwq/character-sets.txt: Add x-sjis as an alias for Shift JIS.

2002-07-10  Darin Adler  <darin@apple.com>

        * kwq/KWQPixmap.mm:
        (QPixmap::QPixmap): Restore the imageRenderer == nil case to fix a regression
	related to resized images. Otherwise, isNull was returning true for all images.
	In copy constructor, set needCopyOnWrite on both the source and destination;
	setting it on the destination was not enough.
        (QPixmap::receivedData): Create the imageRenderer if it's nil.
        (QPixmap::operator=): Set needCopyOnWrite on both the source and destination.

        * kwq/qt/qpixmap.h: Make needCopyOnWrite mutable so we can set it on the source
	when copying or assigning.

2002-07-10  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::setBaseURL):
	Call setBaseURL on the underlying document all the time, not just
	when we add a missing "/" character.

2002-07-07  Maciej Stachowiak  <mjs@apple.com>

        WebCore part of fix for Radar 2953431 - JavaScript window.close()
	method is not working

        * khtml/ecma/kjs_window.cpp:
        (Window::scheduleClose): In AppleChanges
        * khtml/khtml_part.cpp:
        (KHTMLPart::openedByJS): Call kwq implementations, because we need
	to remember the openedByJS state across location changes, which in
	our case means replacing the part.
        (KHTMLPart::setOpenedByJS): Likewise.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::openedByJS): Implement by calling bridge.
        (KWQKHTMLPartImpl::setOpenedByJS): Likewise.
        (KWQKHTMLPartImpl::close): Likewise.
        * kwq/KWQKHTMLPartImpl.h: Prototype new PartImpl methods.
        * kwq/WebCoreBridge.h: Prototype new bridge methods.

2002-07-06  Darin Adler  <darin@apple.com>

        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::write): Remove reference
	to nonexistent class in a comment.
        * kwq/KWQKHTMLPartImpl.h: Remove unused and unimplemented getDataSource().

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

	Say "Go to" instead of "Link to" for links that won't open a new
	window. Also, the code is now set up to change the status text
	when modifier keys are pressed, but the code is disabled for now
	because it's impossible to do reliably.
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::overURL):
        (KHTMLPart::khtmlMouseMoveEvent):
        * khtml/khtml_part.h:

2002-07-03  Darin Adler  <darin@apple.com>

	A small KURL speed improvement.

        * khtml/misc/loader.cpp:
        (Cache::requestImage):
        (Cache::requestStyleSheet):
        (Cache::requestScript):
	Don't do the isMalformed check, because it's expensive and has no clear benefit.
	There's no harm in caching null results for malformed URLs.

        * kwq/KWQKURL.mm:
        (KURL::KURL): Make the default constructor faster by not running all the
	normalize code on the empty string.

=== Alexander-11 ===

2002-07-03  Maciej Stachowiak  <mjs@apple.com>

        WebCore part of fixes for:

	Radar 2950616 - JavaScript window.screenX and window.screenY always return -1
	Radar 2950614 - JavaScript window.screenLeft and window.screenTop
	properties are unimplemented
	Radar 2950609 - JavaScript window.outerHeight and
	window.outerWidth properties always return 0

        * khtml/ecma/kjs_window.h:
        * khtml/ecma/kjs_window.cpp:
	(Window::get): Make ScreenLeft and ScreenTop synonyms for ScreenX
	and ScreenY respectively.
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::setView): Set the real part's view too.
        * kwq/kdecore/kwin.h: Remove unneeded fields.
        * kwq/KWQKWin.mm:
        (KWin::info): Implemented.
        * kwq/qt/qwidget.h: 
        * kwq/KWQWidget.mm: 
	(QWidget::winId): Return long instead of int, to make sure there
	is room for a pointer even on 64-bit architectures.
        (QWidget::mapToGlobal): Use the top level widget to map.

2002-07-03  Richard Williamson  <rjw@apple.com>

        * kwq/KWQScrollView.mm:
        (QScrollView::addChild):
        Fixed regression that caused IFWebView frame origin to sometimes
        never be set correctly.  (khtml sets the x origin to -500000
        during initialization, and it was never getting set correctly).
        This problem manifested itself as blank white frames.
        
        * kwq/KWQWidget.mm:
        (QWidget::internalSetGeometry):

2002-07-03  Maciej Stachowiak  <mjs@apple.com>

	WebKit part of fix for:

	Radar 2943465 - JavaScript window.defaultStatus property not implemented
	Radar 2943464 - JavaScript window.status property is not implemented
	Radar 2926213 - show url of moused-over link in status bar

	Also fixed:

	Radar 2980091 - KHTMLPart::findFrame() and KHTML::frameExists()
	should search all frames, not just child frames
	
        * khtml/khtml_part.cpp:
        (KHTMLPart::overURL): Unifdef most of this, but adjust the wording.
        (KHTMLPart::setStatusBarText): Implement by calling KWQKHTMLPartImpl.
        * khtml/khtml_part.h:
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::frameExists): Search all frames, not just child frames.
        (KWQKHTMLPartImpl::findFrame): Search all frames, not just child frames.
        (KWQKHTMLPartImpl::setStatusBarText): Implemented by calling WebCoreBridge.
        * kwq/KWQKHTMLPartImpl.h:
        * kwq/WebCoreBridge.h: Declare new setStatusText method
        * kwq/kparts/part.h: Remove setStatusBarText method.

2002-07-02  Darin Adler  <darin@apple.com>

	- fixed 2978806 -- Crash going to ebay home page

        * khtml/ecma/kjs_navigator.cpp: (PluginBase::PluginBase): Check to be sure
	that we are not at the end of the "tokens" collection before dereferencing
	the iterator.

2002-07-01  Maciej Stachowiak  <mjs@apple.com>

        Fixed Radar 2953256 - JavaScript window.moveTo() and
	window.moveBy() methods do not work

	This was done by creating a class to wrap an NSWindow as a
	QWidget, which should be useful for many other window-related
	features.
	
	* kwq/KWQWidget.mm:
        (QWidget::x): Implement in terms of the virtual frameGeometry() method.
        (QWidget::y): Likewise.
        (QWidget::width): Likewise.
        (QWidget::height): Likewise.
        (QWidget::size): Likewise.
        (QWidget::pos): Likewise.
        (QWidget::topLevelWidget): Implement by creating a KWQWindowWidget
        (QWidget::isVisible): Added FIXME comment.
        * kwq/KWQWindowWidget.h: Added.
        * kwq/KWQWindowWidget.mm: Added.
	(KWQWindowWidget::fromNSWindow): Static method that maintains a
	dictionary of top-level widgets, and creates them on demand.
        (deleteOnWindowClose): Delete top level widget on close.
        (KWQWindowWidget::KWQWindowWidget):
        (KWQWindowWidget::~KWQWindowWidget):
        (KWQWindowWidget::sizeHint): Implemented using NSWindow.
        (KWQWindowWidget::minimumSizeHint): Likewise.
        (KWQWindowWidget::frameGeometry): Likewise.
        (KWQWindowWidget::topLevelWidget): Likewise.
        (KWQWindowWidget::mapToGlobal): Likewise.
        (KWQWindowWidget::mapFromGlobal): Likewise.
        (KWQWindowWidget::setCursor): No-op implementation.
        (KWQWindowWidget::internalSetGeometry): Implemented using NSWindow.
        * kwq/Makefile.am: Add new files to build.
        * kwq/qt/qwidget.h: Make methods virtual as needed.

2002-07-01  Darin Adler  <darin@apple.com>

        * khtml/css/cssparser.cpp:
        * khtml/misc/htmlhashes.cpp:
	Remove workaround for a PFE bug that no longer affects us.

        * khtml/xml/dom_nodeimpl.h:
        * khtml/xml/dom_nodeimpl.cpp:
	Remove some unneeded APPLE_CHANGES.

        * WebCore.exp: One less symbol to export.

2002-06-29  Maciej Stachowiak  <mjs@apple.com>

        WebCore part of fix for:

	Radar 2942074 - JavaScript size, positioning and feature
	parameters to window.open are ignored

        * kwq/WebCoreBridge.h: Add new calls needed for window
	size/position/feature getting and setting.
        * kwq/KWQKHTMLPartBrowserExtension.mm:
        (KHTMLPartBrowserExtension::createNewWindow): Set properties on window
	after creating it using new bridge calls; make it visible.
	* khtml/ecma/kjs_window.cpp:
        (WindowFunc::tryCall): Support scrollbars feature too.
        * kwq/kparts/browserextension.h: Include scrollbar setting stuff.

2002-06-28  Richard Williamson  <rjw@apple.com>

        Use float character measurement to determine selection
        region.  Necessary to ensure accuracy of selection
        region.  First step towards weaning khtml off int
        measurements.
        
        * khtml/rendering/font.cpp:
        (Font::floatWidth):
        (Font::floatCharacterWidth):
        * khtml/rendering/font.h:
        * khtml/rendering/render_text.cpp:
        (TextSlave::checkSelectionPoint):
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::floatWidth):
        (QFontMetrics::floatCharacterWidth):
        * kwq/WebCoreTextRenderer.h:
        * kwq/qt/qfontmetrics.h:

2002-06-27  Chris Blumenberg  <cblu@apple.com>

	Added an APPLE_CHANGES to fix 2894742. The attributes of an EMBED tag
	must override the attributes of PARAM tags.

        * khtml/rendering/render_frames.cpp:
        (RenderPartObject::updateWidget):

2002-06-27  Darin Adler  <darin@apple.com>

	- fixed 2973342 -- copied text seems to have an extra blank line between paragraphs

        * khtml/khtml_part.cpp: (KHTMLPart::selectedText):
	Get rid of code that was adding an extraneous newline at the
	ends of various types of nodes, including <P>

2002-06-27  Darin Adler  <darin@apple.com>

	Fix Java. My changes this morning broke it.

        * khtml/rendering/render_applet.cpp: (RenderApplet::processArguments):
	Re-add required APPLE_CHANGES. Pass arguments to KJavaAppletWidget::processArguments.
        * kwq/khtml/java/kjavaappletwidget.h: Added KJavaAppletWidget::processArguments.
        * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::processArguments): Added.

	Some QFont fixes.

        * kwq/qt/qfont.h: Remove unused setPixelSizeFloat.
        * kwq/KWQFont.mm: Change to keep family names in a set. Since there are only
	a small number of family names ever encountered, this is a bit of a memory win.
        (QFont::QFont): Don't retain the family name.
        (QFont::~QFont): Don't release the family name.
        (QFont::setFamily): Put the family name in a set, and use the one from the set.
        (QFont::operator=): Don't retain or release.
        (QFont::operator==): Use == to compare the name.

=== Alexander-10 ===

2002-06-27  Richard Williamson  <rjw@apple.com>

        Method name changes in preparation for fixing
        TextSlave::checkSelectionPoint().
        
        * kwq/WebCoreTextRenderer.h:

2002-06-27  Richard Williamson  <rjw@apple.com>

        Removed calls to old method.
        
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        * kwq/WebCoreTextRenderer.h:
        Removed old methods.

2002-06-27  Darin Adler  <darin@apple.com>

        * khtml/rendering/render_applet.cpp: Remove include of <iostream.h> to avoid bloat.
        (RenderApplet::RenderApplet): Remove APPLE_CHANGES.
        (RenderApplet::processArguments): Remove APPLE_CHANGES.
	This file is now back to 100% the same as the KDE original.

        * kwq/khtml/java/kjavaappletwidget.h: Added a bit of stuff so we match the interface
	of the KDE original and don't need APPLE_CHANGES.
        * kwq/KWQKJavaAppletWidget.mm: Remove include of <iostream.h> to avoid bloat.
        (KJavaAppletWidget::KJavaAppletWidget): Update for parameters that match the
	KDE original.
        (KJavaAppletWidget::~KJavaAppletWidget): Added.
        (KJavaAppletWidget::setBaseURL): Added.
        (KJavaAppletWidget::setParameter): Put strings into an NSMutableDictionary.
        (KJavaAppletWidget::showApplet): Use the new baseURL and parameters dictionary.

        * kwq/WebCoreViewFactory.h: Add baseURL parameter.
        * kwq/WebCoreViewFactory.m:
        (-[WebCoreViewFactory viewForJavaAppletWithFrame:baseURL:parameters:]): Add baseURL parameter.

        * kwq/kdecore/kurl.h: Fix NSURL definition to fit idiom.
        * kwq/qt/qmap.h: Added the const version of the [] operator.

        * khtml/ecma/kjs_navigator.cpp: Tweak whitespace.
        * khtml/html/html_documentimpl.cpp: Tweak to make it a little closer to original.

        * kwq/KWQKCookieJar.h: Reduce includes.
        * kwq/KWQKCookieJar.mm: Move includes in here.

        * kwq/WebCoreCookieAdapter.h: Fix comment that emacs munged.

2002-06-27  Richard Williamson  <rjw@apple.com>

        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge selectAll]):
        Select all using the part.

2002-06-27  Maciej Stachowiak  <mjs@apple.com>

	WebCore part of fixes for JavaScript cookie bugs:
	
	2943749 - JavaScript navigator.cookieEnabled property is always "true"
	2856039 - JavaScript document.cookies property is not implemented
	
	Thereby also fixing:
	
	2944378 - Trying to log into my Yahoo web mail account sent
	Alexander into a loop
	
        * kwq/KWQKCookieJar.h: Added.
        * kwq/KWQKCookieJar.mm: Added.
        (KWQKCookieJar::cookie): C++ veneer over WebCoreCookieAdapter call.
        (KWQKCookieJar::setCookie): Likewise.
        (KWQKCookieJar::cookieEnabled): Likewise.
        * kwq/Makefile.am: Add new files to build.
        * kwq/WebCoreCookieAdapter.h: Added.
        * kwq/WebCoreCookieAdapter.m: Added.
	(+[WebCoreCookieAdapter sharedAdapter]): Method to return shared
	instance, al la the WebCoreFactory classes.
        (-[WebCoreCookieAdapter init]): Establish self as shared instance.
        (-[WebCoreCookieAdapter cookiesEnabled]): No-op implementation.
        (-[WebCoreCookieAdapter cookiesForURL:]): Likewise.
        (-[WebCoreCookieAdapter setCookies:forURL:]): Likewise.
        * WebCore.exp: Export WebCoreCookieAdapter class.
        * khtml/ecma/kjs_navigator.cpp:
        (Navigator::getValueProperty): Call appropriate KWQCookieJar method.
        * khtml/html/html_documentimpl.cpp:
        (HTMLDocumentImpl::cookie): Call appropriate KWQCookieJar method.
        (HTMLDocumentImpl::setCookie): Likewise

2002-06-27  Chris Blumenberg  <cblu@apple.com>

	Fix to support sending PARAM tags to the Java plug-in.

        * khtml/rendering/render_applet.cpp:
        (RenderApplet::RenderApplet): removed APPLE_CHANGES
        (RenderApplet::layout): removed APPLE_CHANGES
        * kwq/KWQKJavaAppletWidget.mm:
        (KJavaAppletWidget::KJavaAppletWidget): removed setView
        (KJavaAppletWidget::showApplet): call setView here
        * kwq/WebCoreViewFactory.h:
        * kwq/WebCoreViewFactory.m:
        (-[WebCoreViewFactory viewForJavaAppletWithFrame:andArguments:]): renamed
        * kwq/khtml/java/kjavaappletwidget.h: added KJavaApplet

2002-06-26  Richard Williamson  <rjw@apple.com>

        Many improvements to selection.  More Cocoa like,
        normalized all text drawing code paths for selected 
        and unselected cases.  Still need to work on
        TextSlave::checkSelectionPoint.  Fixed redraw region
        problems.
        
        khtml redraw the entire visible region when selection changes.
        This could be optimzed.
        
        * khtml/rendering/font.cpp:
        (Font::drawText):
        (Font::width):
        * khtml/rendering/render_text.cpp:
        (TextSlave::printSelection):
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
        (QPainter::selectedTextBackgroundColor):
        * kwq/KWQScrollView.mm:
        (QScrollView::contentsX):
        (QScrollView::contentsY):
        * kwq/WebCoreTextRenderer.h:
        * kwq/qt/qpainter.h:

2002-06-26  Maciej Stachowiak  <mjs@apple.com>

        Implement KHTMLPart::findFrame() to fix the following Radar bugs:
        
        Radar 2943177 - infinite JavaScript loop sfcu.org online bill paying
        Radar 2950580 - Unknown JavaScript properties on the Window object return self instead of Undefined
        
        * khtml/khtml_part.cpp:
        (KHTMLPart::findFrame):
        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::findFrame):
        * kwq/KWQKHTMLPartImpl.h:

2002-06-26  Darin Adler  <darin@apple.com>

	- fixed 2969378 -- "A with hat" characters (Unicode 00C2) showing up at Zingermans.com

        * kwq/KWQCharsets.mm: (buildDictionaries): Put UTF-16 in the dictionary, but pointing
	at the string encoding for UTF-8. This mimics what Internet Explorer does.

        * kwq/KWQtextcodec.mm: (QTextCodec::fromUnicode): Fix implementation so it will convert
	the specified encoding instead of always Latin-1.

2002-06-26  Darin Adler  <darin@apple.com>

	Fixed (or at least worked around) a crash I saw where KWQKHTMLPartImpl::end was
        making calls after the KHTMLView was gone. This is specific to our APPLE_CHANGES
        code; it's handled differently in KDE.

        * khtml/khtml_part.h: Added detachView.
        * khtml/khtml_part.cpp: (KHTMLPart::detachView): Added. Nils out the view pointer.
        * khtml/khtmlview.cpp: (KHTMLView::~KHTMLView): Call m_part->detachView().
        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::end): Don't try to make calls to the view
        if it's nil.

2002-06-25  Richard Williamson  <rjw@apple.com>
        
        Support for khtml style selection drawing.  Ugly,
        we'll want to make this more Mac like.

        * khtml/rendering/font.cpp:
        (Font::drawText):
            Enable khtml code path.  Removed APPLE_CHANGES
        * kwq/KWQFontMetrics.mm:
        (QFontMetrics::charWidth):
            Implemented in terms of width().
        * kwq/KWQPainter.mm:
        (QPainter::drawText):
            Implemented.
        * kwq/qt/qfontmetrics.h:
            Added QFontMetrics::charWidth.

2002-06-25  Richard Williamson  <rjw@apple.com>

        Support for rudimentary plain text 'copy'.
        
        * kwq/WebCoreBridge.h:
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge selectedText]):

2002-06-25  Richard Williamson  <rjw@apple.com>

        Enabled progressive image loading code.

        * khtml/misc/loader.cpp:
        (CachedImage::data):
        * kwq/KWQPixmap.mm:
        (QPixmap::QPixmap):

2002-06-25  Darin Adler  <darin@apple.com>

	Removed remaining uses of BORROWED defines.
	Made some simplifications and formatting fixes. All safe.

        * kwq/KWQArrayImpl.h:
        * kwq/KWQArrayImpl.mm:
        * kwq/KWQChar.mm:
        * kwq/KWQCharsets.mm:
        * kwq/KWQFile.mm:
        * kwq/KWQKCursor.mm:
        * kwq/KWQKHTMLPart.mm:
        * kwq/KWQListImpl.h:
        * kwq/KWQMapImpl.mm:
        * kwq/KWQString.mm:
        * kwq/KWQValueListImpl.mm:
        * kwq/KWQVectorImpl.h:
        * kwq/KWQtextcodec.mm:
        * kwq/make-charset-table.pl:
        * kwq/make-mac-encodings.c:
        * kwq/qt/qfile.h:
        * kwq/qt/qregexp.h:
        * kwq/qt/qtextcodec.h:

        * WebCore-tests.exp: Small change to exports for the array test.

2002-06-24  Chris Blumenberg  <cblu@apple.com>

	Changed the plug-in view constructor to take NSURL's rather
	than URL strings.	

        * kwq/KWQKHTMLPart.mm:
        (KWQKHTMLPartImpl::requestObject):
        * kwq/WebCoreViewFactory.h:
        * kwq/WebCoreViewFactory.m:

2002-06-24  Darin Adler  <darin@apple.com>

        * khtml/khtmlview.cpp: (KHTMLView::~KHTMLView): Put APPLE_CHANGES
        later in the sequence so we don't deref the part before the code
        gets to run.

        * kwq/kwqdebug.h: Re-add the __format__ attribute, now that Radar
        2920557 is fixed.

2002-06-21  Darin Adler  <darin@apple.com>

        * kwq/KWQFont.mm: Made it store a copy of the family name instead of
	storing a reference to the mutable CFString.

        * kwq/KWQPainter.mm:
        (QPainter::drawPixmap): Simplified.
        (QPainter::drawTiledPixmap): Used the new [tileInRect:].

        * kwq/WebCoreImageRenderer.h: Added [tileInRect:], removed [drawInRect:],
	and also removed view parameter from [beginAnimation].
	
        * kwq/qt/qpixmap.h: Removed unneeded getImageRenderer().

2002-06-21  Darin Adler  <darin@apple.com>

        - fixed 2964718 -- crash in KWQCheckCacheObjectStatus

	* kwq/KWQKloader.mm: (KWQCheckCacheObjectStatus):
	Handle case of nil object. Add comments. Remove questionable use
	of floating point abs() to convert always positive int to uint.

2002-06-20  Darin Adler  <darin@apple.com>

	* kwq/KWQKCharsets.mm: Removed unneeded parts.
	* kwq/KWQStyle.mm: Removed.
	* kwq/KWQToolTip.mm: Removed.
	* kwq/KWQVariant.mm: Simplified.
	* kwq/Makefile.am: Removed KWQStyle.mm and KWQToolTip.mm.

	* kwq/KWQRefPtr.h: Streamlined implementation that inlines
	a bit less and is more efficient for creating empty pointers.

	* kwq/KWQStyle.h: Removed unused stuff.

	* kwq/kdecore/kcharsets.h: Removed unneeded parts.
	* kwq/qt/qsortedlist.h: Removed unneeded parts.
	* kwq/qt/qtooltip.h: Removed unneeded parts.
	* kwq/qt/qvariant.h: Removed unneeded parts.

	* khtml/khtmlview.cpp: (KHTMLView::~KHTMLView):
	Remove unneeded APPLE_CHANGES -- no need to nil something out in
	a destructor.

=== Alexander-9 ===

2002-06-19  Richard Williamson  <rjw@apple.com>

	* kwq/KWQScrollView.mm:
	(QScrollView::addChild):
	    Fixed regression from fix to 2956444.  Wrong view was being checked
	    for conformance to WebCoreFrameView.
	* kwq/KWQWidget.mm:
	(QWidget::internalSetGeometry):
	    Fixed regression from fix to 2956444.  Wrong view was being checked
	    for conformance to WebCoreFrameView.

2002-06-19  Richard Williamson  <rjw@apple.com>

	* khtml/khtmlview.cpp: (KHTMLView::~KHTMLView): 
	    Tweak
	* khtml/rendering/render_image.cpp:
	(RenderImage::setPixmap):
	    Call stopAnimations when a image changes, i.e. may be changed
	    by JS.
	* kwq/KWQPixmap.mm:
	(QPixmap::stopAnimations):
	    Call image renderer's stopAnimation.
	* kwq/qt/qpixmap.h:
        Added stopAnimations.
        
2002-06-19  Darin Adler  <darin@apple.com>

	- fixed 2956444 -- mac os x feedback form missing textarea

	* kwq/WebCoreFrameView.h: Added.

	* kwq/KWQWidget.mm:
	(QWidget::setCursor): Checked for cursor-setting call based on the
	WebCoreFrameView protocol instead of using an informal protocol.
	Also walk up the view chain so the cursor actually gets set.
	(QWidget::internalSetGeometry): Changed the special case in here to use the new
	WebCoreFrameView protocol, so it won't happen for all NSScrollView objects.
	Also add comments to explain the hack better and mention the code in QScrollView.

	* kwq/KWQScrollView.mm:
	(-[NSView _KWQ_isScrollView]): Gave these KWQ names instead of IF names.
	(-[NSView _KWQ_getDocumentView]): Gave these KWQ names instead of IF names.
	(QScrollView::addChild): Changed the special case in here to use the new
	WebCoreFrameView protocol, so it won't happen for all NSScrollView objects.
	Also add comments to explain the hack better and mention the code in QWidget.

	Other changes:

	* kwq/kwqdebug.h: Cloned improved assert code from WebFoundation.

	* kwq/KWQTextArea.h: Removed unused isReadOnly/setReadOnly.
	* kwq/KWQTextArea.mm: Removed unused isReadOnly/setReadOnly.

	* kwq/WebCoreViewFactory.h: Removed extraneous import and WebCoreCursorSetting
	API from here.

	* kwq/KWQTextEdit.mm: Tweaked.
	* kwq/kparts/part.h: Tweaked.

2002-06-18  Kenneth Kocienda  <kocienda@apple.com>

        Fix for this bug:

        Radar 2928483 (activity viewer does not show all the pieces of a web page when the page is cached)

	* khtml/misc/loader.cpp:
	(DocLoader::requestImage): Added APPLE_CHANGES call to the KWQCheckCacheObjectStatus function 
                                   described below 
	(DocLoader::requestStyleSheet): ditto
	(DocLoader::requestScript): ditto
	* kwq/KWQKloader.mm:
	(KWQCheckCacheObjectStatus): New function that informs WebKit of the
                                     fact that a URL was loaded from the WebCore/khtml cache.
	* kwq/KWQLoaderImpl.h: Added prototype for KWQCheckCacheObjectStatus
	* kwq/WebCoreBridge.h: Added KWQCheckCacheObjectStatus to WebCoreBridge protocol

2002-06-18  Darin Adler  <darin@apple.com>

	* kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::~KWQKHTMLPartImpl):
	Remove an NSLog I left in by accident.

2002-06-17  Richard Williamson  <rjw@apple.com>

    Fixed window.open regression.
    Partial fix to targeting frame of new name.
    
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::urlSelected):
	    Partial fix to frame not found problem.
	* kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::createNewWindow):
	    Fix for window.open regression.
	* kwq/WebCoreBridge.h:
        Changed return type of openNewWindowWithURL:

2002-06-17  Darin Adler  <darin@apple.com>

	Fixed a storage leak.

	* kwq/WebCoreBridge.mm: (-[WebCoreBridge documentTextFromDOM]): Add a missing autorelease.

	Remove a bunch of loader-related APPLE_CHANGES.

	* khtml/misc/loader.h: Remove KWQURLLoadClient and KWQLoaderImpl.
	* khtml/misc/loader.cpp:
	(Loader::Loader): Remove unneeded KWQLoaderImpl object.
	(Loader::~Loader): Remove unneeded KWQLoaderImpl object.
	(Loader::servePendingRequests): Call KWQServeRequest instead of KWQLoaderImpl::serveRequest.
	(Loader::slotFinished): Remove unneeded KWQLoaderImpl::objectFinished.

	* kwq/KWQLoaderImpl.h:
	* kwq/KWQKloader.mm: (KWQServeRequest): Replaces the KWQLoaderImpl class. The rest of what
	was in this class was obsolete.

2002-06-17  Richard Williamson  <rjw@apple.com>

    Fixed www.2cpu.com regression.  QWidget::_displayRect was displaying the wrong
    view.  This was a regression that would impact all DHTML.

	* khtml/khtmlview.cpp:
	(KHTMLView::timerEvent):
	* kwq/KWQScrollView.mm:
	(QScrollView::updateContents):
	* kwq/KWQWidget.mm:
	(QWidget::QWidget):
	(QWidget::endEditing):
	* kwq/qt/qwidget.h:

2002-06-17  Darin Adler  <darin@apple.com>

	Fixed bug where some images would get left behind when scrolling. Turned out it
	was all the tiled images that were getting left behind.

	* kwq/KWQPainter.mm: (QPainter::drawTiledPixmap): Fixed to get the view for
	coordinates from [NSView focusView] the way drawPixmap does, rather than using
	data->widget->getView(), which gives the scroll view instead of the scrolled view.

2002-06-16  Darin Adler  <darin@apple.com>

	* kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::frames):
	Fixed this function to get from frames to parts properly. It was still
	assuming that [WebCoreBridge childFrames] would return a list of WebCoreBridge
	objects, but now it returns WebCoreFrame objects.

	* kwq/WebCoreFrame.h: Added [WebCoreFrame bridge] for the case above.
	Note that it always gives the "committed" bridge, not the provisional one.

2002-06-16  Darin Adler  <darin@apple.com>

	Add a separate WebCoreFrame alongside WebCoreBridge to facilitate
	handling of frames with no HTML content in them. This probably fixes
	frames named "_blank".

	Also fixed the build, because a clean build failed.

	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::openURLInFrame):
	(KWQKHTMLPartImpl::urlSelected):
	(KWQKHTMLPartImpl::requestFrame):
	(KWQKHTMLPartImpl::submitForm):
	(KWQKHTMLPartImpl::parentPart):
	Work with WebCoreFrame objects instead of WebCoreBridge objects when dealing with
	frame operations -- loading new URLs mainly.

	* kwq/WebCoreBridge.h: Removed frame-related operations, now they are on WebCoreFrame.
	Broke out WebCoreResourceLoader into its own file. Added comments.

	* kwq/WebCoreFrame.h: Added.

	* kwq/WebCoreResourceLoader.h: Added.
	* kwq/KWQKloader.mm: Include WebCoreResourceLoader.h now that it's broken out.

	* WebCore-tests.exp: Tests still need QString::latin1(), although we don't need
	to export it for WebKit any more.

2002-06-16  Darin Adler  <darin@apple.com>

	Moved the IFURLHandleClient subclass to WebKit, so it can some day be merged
	with the one for the frames themselves; this one is for resources.

	* kwq/kio/jobclasses.h:
	* kwq/KWQKjobclasses.mm:
	(TransferJob::setHandle): Replaced the old TransferJob::begin with this.

	* kwq/KWQLoaderImpl.h: Remove setClient.
	* kwq/KWQKloader.mm:
	(-[WebCoreResourceLoader initWithLoader:job:]): Added.
	(-[WebCoreResourceLoader dealloc]): Added.
	(-[WebCoreResourceLoader addData:]): Added.
	(-[WebCoreResourceLoader cancel]): Added.
	(-[WebCoreResourceLoader finish]): Added.
	(KWQLoaderImpl::serveRequest): Use [WebCoreBridge startLoadingResource:withURL:].
	* khtml/misc/loader.cpp: (Loader::load): Removed unneeded call to setClient.

	* kwq/WebCoreBridge.h: Remove unneeded methods. Added [WebCoreBridge startLoadingResource:withURL:].

2002-06-15  Darin Adler  <darin@apple.com>

	Fix frame-related calls. I was always searching all the frames, which was disastrous.
	Also do name changes.

	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::urlSelected): Use descendantFrameNamed rather than frameNamed.
	(KWQKHTMLPartImpl::requestFrame): Use childFrameNamed rather than frameNamed.
	(KWQKHTMLPartImpl::frameExists): Use childFrameNamed rather than frameNamed.

	* kwq/KWQScrollView.mm: (QScrollView::addChild): Asserts I used while debugging.

	* kwq/WebCoreBridge.h: Add new calls. Change names of old ones to include the
	word frame consistently. (Also bits of new work that will do no harm, but are
	not really needed yet.)

2002-06-15  Darin Adler  <darin@apple.com>

	* kwq/KWQKloader.mm:
	(-[KWQURLLoadClient IFURLHandle:didRedirectToURL:]):
	Rolled out an assert I added by accident that will break Deployment builds.

2002-06-15  Darin Adler  <darin@apple.com>

	* kwq/KWQKloader.mm:
	(-[KWQURLLoadClient IFURLHandleResourceDidCancelLoading:]):
	(-[KWQURLLoadClient IFURLHandleResourceDidFinishLoading:data:]):
	(-[KWQURLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	Fixed the order so the URL handles are removed before we send notifications
	as before my change. This seems to fix the rest of the breakage.

2002-06-15  Darin Adler  <darin@apple.com>

	* kwq/KWQKloader.mm: (-[KWQURLLoadClient initWithLoader:bridge:]):
        Fix bridge/m_bridge typo that was responsible for at least some of the breakage
        I caused.

2002-06-15  Richard Williamson  <rjw@apple.com>

    Fixed factoring problem.
    
	* kwq/KWQScrollView.mm:
	(-[NSView _IF_getDocumentView]):
	(-[NSView _IF_isScrollView]):
	(QScrollView::visibleWidth):
	(QScrollView::visibleHeight):
	(QScrollView::contentsWidth):
	(QScrollView::contentsHeight):
	(QScrollView::contentsX):
	(QScrollView::contentsY):
	(QScrollView::setContentsPos):
	(QScrollView::addChild):
	(QScrollView::resizeContents):
	(QScrollView::contentsToViewport):
	(QScrollView::viewportToContents):
	* kwq/qt/qscrollview.h:

2002-06-15  Darin Adler  <darin@apple.com>

	* kwq/WebCoreBridge.mm:
	(-[WebCoreBridge createKHTMLViewWithNSView:width:height:marginWidth:marginHeight:]):
	Implement the rule where a negative number means "don't set the margin".

2002-06-15  Darin Adler  <darin@apple.com>

	* kwq/kio/jobclasses.h: Removed import of WebFoundation.h.
	* kwq/KWQKjobclasses.mm: Added import of IFURLHandle.h.
	* kwq/KWQKloader.mm: Added import of IFError.h and IFURLHandle.h.

	* kwq/WCLoadProgress.h: Removed.
	* kwq/WCWebDataSource.h: Removed.
	* kwq/KWQKHTMLPart.mm: Removed import of WCWebDataSource.h.

	* *.mm: Changed all includes to imports using a perl script.

2002-06-15  Darin Adler  <darin@apple.com>

	- fixed 2942808 -- remove all calls to WebKit from WebCore

	More work on the bridge. Now we don't call anything in WebKit explicitly,
	although there are still implicit connections that need to be fixed.

	* WebCore.exp: Remove exports that are no longer needed, now that
	WebKit is using the bridge to get at more things.

	* khtml/misc/loader.h:
	* khtml/misc/loader.cpp:
	(CachedCSSStyleSheet::CachedCSSStyleSheet):
	(CachedScript::CachedScript):
	(CachedImage::CachedImage):
	Remove the extra parameter to the CachedObject constructor. We don't
	need it any more, so we can remove all these APPLE_CHANGES.

	* kwq/KWQKHTMLPart.mm: Remove getDataSource.

	* kwq/KWQLoaderImpl.h: Remove destructor.
	* kwq/KWQKloader.mm:
	(-[KWQURLLoadClient initWithLoader:bridge:]): Keep the bridge around instead
	of the data source.
	(-[KWQURLLoadClient dealloc]): Release the bridge instead of the data source.
	Also put another workaround for 2954901 here, like in WebKit.
	(-[KWQURLLoadClient IFURLHandleResourceDidBeginLoading:]):
	(-[KWQURLLoadClient IFURLHandle:resourceDataDidBecomeAvailable:]):
	(-[KWQURLLoadClient doneWithHandle:error:]):
	(-[KWQURLLoadClient IFURLHandleResourceDidCancelLoading:]):
	(-[KWQURLLoadClient IFURLHandleResourceDidFinishLoading:data:]):
	(-[KWQURLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	(-[KWQURLLoadClient IFURLHandle:didRedirectToURL:]):
	(KWQLoaderImpl::setClient):
	(KWQLoaderImpl::serveRequest):
	Use the bridge to do all the heavy lifting, and put lots of common code into
	a doneWithHandle:error: method. Also store the URL so the redirect code works
	properly for multiple redirects and add asserts like the ones in IFMainURLHandleClient.
	(KWQLoaderImpl::objectFinished): Add a comment.

	* kwq/WebCoreBridge.h: Make header so it can be included from plain Objective C,
	not just Objective C++. Add a bunch of methods for bridging in to WebCore as opposed
	to out of WebCore. Add new methods for bridging out from WebCore too for all the
	progress hooks. Put all the subclass responsibility methods into a protocol
	in such a way that we don't need to implement them in the base class, and subclasses
	can set things up so they get errors if they forget to implement anything.

	* kwq/WebCoreBridge.mm:
	(-[WebCoreBridge openURL:]): Added.
	(-[WebCoreBridge addData:withEncoding:]): Added.
	(-[WebCoreBridge closeURL]): Added.
	(-[WebCoreBridge end]): Added.
	(-[WebCoreBridge setURL:]): Added.
	(-[WebCoreBridge createKHTMLViewWithNSView:width:height:marginWidth:marginHeight:]): Added.
	(-[WebCoreBridge documentTextFromDOM]): Added.
	(-[WebCoreBridge scrollToBaseAnchor]): Added.

	* kwq/external.h: Removed.

2002-06-15  Maciej Stachowiak  <mjs@apple.com>

	Get current bits per pixel from CoreGraphics, thereby fixing
        
        Radar 2943736 - JavaScript screen.colorDepth and screen.pixelDepth properties always returns 32, 
        regardless of real depth
        
        * kwq/KWQPaintDeviceMetrics.mm:
	(QPaintDeviceMetrics::depth):

2002-06-15  Maciej Stachowiak  <mjs@apple.com>

	Removed product and vendor properties, thereby fixing:
        
        Radar 2943751 - JavaScript navigator.product property is "Konqueror/khtml"
        Radar 2943753 - JavaScript navigator.vendor property is "KDE"
        
        * khtml/ecma/kjs_navigator.cpp:
	(Navigator::getValueProperty): Return undefined for the above mentioned properties.

2002-06-15  Maciej Stachowiak  <mjs@apple.com>

        Implemented functionality needed for missing Screen properties, thereby fixing the following
        bugs:
        
        Radar 2943730 - JavaScript screen.availHeight property is not implemented
        Radar 2943732 - JavaScript screen.availLeft property is not implemented
        Radar 2943734 - JavaScript screen.availTop property not implemented
        Radar 2943735 - JavaScript screen.availWidth property is not implemented
        
	* kwq/KWQKWinModule.mm:
	(KWinModule::workArea): Return the correct screen size to fix the above bugs.

2002-06-14  Richard Williamson  <rjw@apple.com>

    Changed IFResourceProgressHandler to pass back resource handle instead of
    string description.  This will address the needs descibed in 2954160.

	* kwq/KWQKloader.mm:
	(-[KWQURLLoadClient IFURLHandleResourceDidBeginLoading:]):
	(-[KWQURLLoadClient IFURLHandleResourceDidCancelLoading:]):
	(-[KWQURLLoadClient IFURLHandleResourceDidFinishLoading:data:]):
	(-[KWQURLLoadClient IFURLHandle:resourceDataDidBecomeAvailable:]):
	(-[KWQURLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	(-[KWQURLLoadClient IFURLHandle:didRedirectToURL:]):
	(KWQLoaderImpl::serveRequest):
	* kwq/external.h:

2002-06-14  Darin Adler  <darin@apple.com>

	* kwq/KWQDateTime.mm: Add ifdefs needed to make Deployment build compile.

2002-06-14  Darin Adler  <darin@apple.com>

	Worked on eliminating calls to WebKit. About 3/4 done.

	* WebCore.exp: Export new WebCoreBridge class, fewer other things.

	* WebCorePrefix.h: #include <ostream> in debug builds; we couldn't
	before because of a PFE bug that has since been fixed (2920556).

	* khtml/html/html_objectimpl.cpp: (HTMLObjectElementImpl::attach):
	Add a comment explaining our latest change here.

	* khtml/khtml_part.cpp: (KHTMLPart::~KHTMLPart): Fix storage leak
	by deleting m_hostExtension.

	* khtml/misc/loader.h: Set type properly on client member so we
	don't have to do so much casting.

	* kwq/KWQKHTMLPartImpl.h: Add getBridge and setBridge, remove setDataSource.
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::KWQKHTMLPartImpl): Eliminate m_dataSource.
	(KWQKHTMLPartImpl::openURLInFrame): Use WebCoreBridge.
	(KWQKHTMLPartImpl::urlSelected): Use WebCoreBridge.
	(KWQKHTMLPartImpl::requestFrame): Use WebCoreBridge.
	(KWQKHTMLPartImpl::requestObject): Move WebCoreViewFactory code
	here; we don't need an entire WCPluginWidget file just for this
	function.
	(KWQKHTMLPartImpl::submitForm): Use WebCoreBridge.
	(KWQKHTMLPartImpl::frameExists): Use WebCoreBridge.
	(KWQKHTMLPartImpl::frames): Use WebCoreBridge.
	(KWQKHTMLPartImpl::setTitle): Use WebCoreBridge.
	(KWQKHTMLPartImpl::getDataSource): Use WebCoreBridge.
	(KWQKHTMLPartImpl::parentPart): Use WebCoreBridge.

	* kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::createNewWindow): Use WebCoreBridge.

	* kwq/KWQKloader.mm: Move the part of external.h that we still use in
	here, with the expectation of eliminating it soon. Also renamed
	URLLoadClient to KWQURLLoadClient so we don't hog namespace.

	* kwq/qt/qscrollview.h:
	* kwq/KWQScrollView.mm: Used helper functions to do the "documentView"
	selector thing more consistently.

	* kwq/KWQWidget.mm: Get interface for changing the cursor from
	WebCoreViewFactory.h instead of from external.h.

	* kwq/WebCoreViewFactory.h:
	* kwq/Makefile.am: Remove WCPluginWidget.mm, add WebCoreBridge.mm.
	* kwq/WCPluginWidget.h: Removed.
	* kwq/WCPluginWidget.mm: Removed.
	* kwq/WebCoreBridge.h: Added.
	* kwq/WebCoreBridge.mm: Added.

	* kwq/qt/qarray.h: Use <ostream> instead of <iostream>.
	* kwq/qt/qcstring.h: Remove <iostream> include since we include <qarray.h>.
	* kwq/qt/qdatetime.h: Replace unconditional <iostream> include with a
	conditional <ostream> include. Also made streaming operators conditional.
	* kwq/qt/qlist.h: Use <ostream> instead of <iostream>.
	* kwq/qt/qmap.h: Use <ostream> instead of <iostream>.
	* kwq/qt/qpoint.h: Use <iosfwd> instead of <iostream>.
	* kwq/qt/qsize.h: Use <iosfwd> instead of <iostream>.
	* kwq/qt/qvaluelist.h: Use <ostream> instead of <iostream>.
	* kwq/qt/qvector.h: Replace unconditional <iostream> include with a
	conditional <ostream> include. Also made streaming operators conditional.

2002-06-14  Richard Williamson  <rjw@apple.com>

    Name change view -> webView.
    
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::requestFrame):
	* kwq/external.h:

2002-06-14  Chris Blumenberg  <cblu@apple.com>

	Put #ifndef APPLE_CHANGES around one line that
	was causing EMBED and OBJECT tags to not have render objects.

	* khtml/html/html_objectimpl.cpp:
	(HTMLObjectElementImpl::attach):

2002-06-14  Chris Blumenberg  <cblu@apple.com>

	Committing Richard's changes to KWQPainter

2002-06-13  Richard Williamson  <rjw@apple.com>

    More cleanup to deal with special case of provisional view
    not being in a scrollview.
    
	* kwq/KWQScrollView.mm:
	(QScrollView::contentsWidth):
	(QScrollView::contentsHeight):
	(QScrollView::contentsX):
	(QScrollView::contentsY):

2002-06-13  Richard Williamson  <rjw@apple.com>

    
	* kwq/KWQWidget.mm: (QWidget::setCursor):  restored code
	* kwq/external.h:   removed definitions no longer needed
	* khtml/rendering/render_form.cpp: (RenderLineEdit::calcMinMaxWidth): tweaked size

2002-06-12  Kenneth Kocienda  <kocienda@apple.com>

	* kwq/kwqdebug.h: Made assertion failure console message bolder and easier to see.

2002-06-11  Darin Adler  <darin@apple.com>

	* kwq/KWQKURL.mm:
	(RelativeURLKeyRetainCallBack): Use a ref count.
	(RelativeURLKeyReleaseCallBack): Use a ref count instead of assuming there will
	never be more than one reference.
	(KURL::normalizeRelativeURLString): Remove the workaround for CFURL bug 2891336.
	(operator==): Don't put URLs on the autorelease pool just to compare them.

2002-06-10  Darin Adler  <darin@apple.com>

	* khtml/css/cssstyleselector.cpp: Fix uninitialized variable warning.

2002-06-10  Darin Adler  <darin@apple.com>

	Merged in changes from KDE 3.0.1.

	* kwq/kdecore/kurl.h:
	* kwq/KWQKURL.mm: (operator==): New, needed by some 3.0.1 code.

	* kwq/qt/qpalette.h: Add QPalette::NColorGroups and QColorGroup::NColorRoles.
	* kwq/KWQPalette.mm: Simplify by getting rid of "private" indirection.
	(QPalette::color): New, needed by some 3.0.1 code.
	* kwq/KWQColorGroup.mm: Simplify by getting rid of "private" indirection.

	* kwq/qt/qstring.h:
	* kwq/KWQString.mm: (QConstString::QConstString): Change parameter to const QChar *
	to match Qt so we compile.

	* kwq/qt/qtextedit.h:
	* kwq/KWQTextEdit.mm: (QTextEdit::setTabStopWidth): Add unimplemented placeholder,
	needed by some 3.0.1 code.

	* kwq/qt/qvaluelist.h:
	* kwq/KWQValueListImpl.h:
	* kwq/KWQValueListImpl.mm: Simplify implementation.

	* WebCore-tests.exp: Update for changes in QValueList implementation.

	* kwq/kdecore/klibloader.h: Add include of <kio/global.h> to make something compile.

	* kwq/khtml/java/kjavaappletcontext.h: Add JType and constructor that takes DCOPObject*.

	* kwq/kio/global.h: Add KIO::CacheControl.

	* khtml/css/css_ruleimpl.cpp:
	* khtml/css/css_ruleimpl.h:
	* khtml/css/css_stylesheetimpl.cpp:
	* khtml/css/css_stylesheetimpl.h:
	* khtml/css/css_valueimpl.cpp:
	* khtml/css/css_valueimpl.h:
	* khtml/css/cssparser.cpp:
	* khtml/css/cssparser.h:
	* khtml/css/cssstyleselector.cpp:
	* khtml/css/cssstyleselector.h:
	* khtml/css/html4.css:
	* khtml/dom/css_rule.cpp:
	* khtml/dom/css_rule.h:
	* khtml/dom/css_stylesheet.cpp:
	* khtml/dom/css_stylesheet.h:
	* khtml/dom/css_value.cpp:
	* khtml/dom/dom2_events.cpp:
	* khtml/dom/dom2_range.cpp:
	* khtml/dom/dom2_range.h:
	* khtml/dom/dom2_views.cpp:
	* khtml/dom/dom_doc.cpp:
	* khtml/dom/dom_element.cpp:
	* khtml/dom/dom_exception.h:
	* khtml/dom/dom_node.cpp:
	* khtml/dom/dom_string.cpp:
	* khtml/dom/dom_text.cpp:
	* khtml/dom/dom_xml.cpp:
	* khtml/dom/html_base.cpp:
	* khtml/dom/html_block.cpp:
	* khtml/dom/html_document.cpp:
	* khtml/dom/html_element.cpp:
	* khtml/dom/html_element.h:
	* khtml/dom/html_form.cpp:
	* khtml/dom/html_head.cpp:
	* khtml/dom/html_image.cpp:
	* khtml/dom/html_inline.cpp:
	* khtml/dom/html_list.cpp:
	* khtml/dom/html_misc.cpp:
	* khtml/dom/html_object.cpp:
	* khtml/dom/html_table.cpp:
	* khtml/ecma/kjs_html.cpp:
	* khtml/ecma/kjs_proxy.cpp:
	* khtml/ecma/kjs_traversal.cpp:
	* khtml/ecma/kjs_window.cpp:
	* khtml/html/html_baseimpl.cpp:
	* khtml/html/html_formimpl.cpp:
	* khtml/html/html_miscimpl.h:
	* khtml/html/html_objectimpl.cpp:
	* khtml/html/html_objectimpl.h:
	* khtml/html/htmlparser.cpp:
	* khtml/html/htmlparser.h:
	* khtml/html/htmltokenizer.cpp:
	* khtml/html/htmltokenizer.h:
	* khtml/khtml_part.cpp:
	* khtml/khtmlpart_p.h:
	* khtml/khtmlview.cpp:
	* khtml/misc/helper.cpp:
	* khtml/misc/khtmllayout.h:
	* khtml/misc/loader.cpp:
	* khtml/misc/loader.h:
	* khtml/misc/loader_client.h:
	* khtml/misc/shared.h: Added.
	* khtml/rendering/bidi.cpp:
	* khtml/rendering/break_lines.cpp:
	* khtml/rendering/font.cpp:
	* khtml/rendering/render_applet.cpp:
	* khtml/rendering/render_applet.h:
	* khtml/rendering/render_container.cpp:
	* khtml/rendering/render_form.cpp:
	* khtml/rendering/render_form.h:
	* khtml/rendering/render_frames.cpp:
	* khtml/rendering/render_image.cpp:
	* khtml/rendering/render_object.cpp:
	* khtml/rendering/render_object.h:
	* khtml/rendering/render_replaced.cpp:
	* khtml/rendering/render_replaced.h:
	* khtml/rendering/render_root.cpp:
	* khtml/rendering/render_style.cpp:
	* khtml/rendering/render_style.h:
	* khtml/rendering/render_table.cpp:
	* khtml/rendering/render_table.h:
	* khtml/rendering/render_text.cpp:
	* khtml/rendering/render_text.h:
	* khtml/xml/dom2_eventsimpl.h:
	* khtml/xml/dom2_rangeimpl.h:
	* khtml/xml/dom2_traversalimpl.cpp:
	* khtml/xml/dom2_traversalimpl.h:
	* khtml/xml/dom2_viewsimpl.h:
	* khtml/xml/dom_docimpl.cpp:
	* khtml/xml/dom_docimpl.h:
	* khtml/xml/dom_elementimpl.h:
	* khtml/xml/dom_nodeimpl.cpp:
	* khtml/xml/dom_nodeimpl.h:
	* khtml/xml/dom_stringimpl.cpp:
	* khtml/xml/dom_stringimpl.h:
	* khtml/xml/xml_tokenizer.h:
	Merge in 3.0.1 changes and add APPLE_CHANGES as necessary to get it to compile.

2002-06-07  Darin Adler  <darin@apple.com>

	* Makefile.am: Use new shared "embed.am" file so we don't need four copies of
	the embedding rules for WebFoundation, JavaScriptCore, WebCore, and WebKit.

2002-06-07  Maciej Stachowiak  <mjs@apple.com>

	* Makefile.am: Rename libwebcore.dylib to libwebcore.a; since this
	target is just a fake for dependency purposes, it doesn't matter
	what it's called.
	* .cvsignore: Update ignorance.

2002-06-07  Darin Adler  <darin@apple.com>

	* Makefile.am: I was running into failures in the embed rule, so I made it
	always remove the framework before copying the new one in. This is better
	for cases where a header was removed, too, so maybe we should do this in
	the other directories.

	* kwq/KWQDrawUtil.mm:
	* kwq/KWQKComboBox.mm:
	* kwq/KWQKConfigBase.mm:
	* kwq/KWQKDebug.mm:
	* kwq/KWQKMessageBox.mm:
	* kwq/KWQKMimeType.mm:
	* kwq/KWQKPrinter.mm:
	* kwq/KWQKURL.mm:
	* kwq/KWQMapImpl.mm:
	* kwq/KWQObject.mm:
	* kwq/KWQRegExp.mm:
	* kwq/KWQRegion.mm:
	* kwq/KWQScrollView.mm:
	* kwq/KWQStringList.mm:
	Remove repeated default values for parameters -- the new compiler
	won't allow these and they are illegal C++.

2002-06-07  Darin Adler  <darin@apple.com>

	* kwq/KWQPtrDictImpl.h: Use CoreFoundation.h -- new compiler
	is picky about the difference between struct and typedef.

	* kwq/KWQValueListImpl.h: Add a friend declaration that we need
	because the new compiler is more strict.

	- fix 2949882 -- joecartoon.com crashes

	* khtml/ecma/kjs_window.cpp: (Window::get): Turn off some code that
	doesn't work for us -- similar to code elsewhere in this file that
	was also turned off.

2002-06-07  Chris Blumenberg  <cblu@apple.com>

        Made IFWebController a class.
        Fixed all places where IFWebController was referred to as a protocol.
        Renamed IFBaseWebController files to IFWebController.
        IFWebController.h replaces IFWebBaseController.h.

	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::requestFrame):
	* kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::createNewWindow):
	* kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	(-[URLLoadClient IFURLHandle:didRedirectToURL:]):
	(KWQLoaderImpl::serveRequest):
	* kwq/external.h:

=== Alexander-8 ===

2002-06-07  Darin Adler  <darin@apple.com>

	Try to make Jersey work again.

	* kwq/KWQInvisibleButton.h: Simplify includes.
	* kwq/KWQInvisibleButton.mm: Simplify includes.

2002-06-05  Darin Adler  <darin@apple.com>

	Some fixes to speed up the citibank.com page, and other related changes.

	* khtml/ecma/kjs_dom.cpp: (DOMNode::getValueProperty): Only do a layout
	if it's actually needed. This speeds things up immensely, and I'm pretty
	sure it's correct.

	* kwq/KWQListImpl.h: To speed things up, get rid of the "private part"
	level of indirection. This is particularly vital for list iterators, which
	are created and destroyed a lot on the stack. Also made trivial functions
	be inline.

	* kwq/KWQListImpl.mm:
	(copyList): Now a static function rather than a member of the now-defunct
	private class.
	(KWQListImpl::KWQListImpl): Set up all the new members that used to be in
	the separate private object.
	(KWQListImpl::~KWQListImpl): Update the iterator-detaching code to do it
	the new way, with intrusive list. Also, use clear() instead of having our
	own code to delete the list -- note this is only used after the level above
	us does a clear() anyway.
	(KWQListImpl::clear): Use a loop to delete all the nodes rather than making
	a delete of one node recursively delete the next -- iteration is more efficient,
	and also easier to understand in this case. Also update all the iterators so
	they don't point to deleted nodes.
	(KWQListImpl::containsRef): Update to return the count, rather than just a
	true or false value, since that's how the class is defined.
	(KWQListImpl::assign): Delete the items if asked to (fixes a FIXME). Also
	use a new swap member function since there's more to swap now.
	(KWQListImpl::addIterator): Rewrite to use an intrusive linked list.
	(KWQListImpl::removeIterator): Rewrite to use an intrusive linked list; this
	makes it much faster since it doesn't have to search the list.
	(KWQListImpl::swap): Implement this private member function used by assign.
	(KWQListIteratorImpl::KWQListIteratorImpl): Set up the new members that
	used to be in the separate private object.

	* kwq/qt/qlist.h: Re-add the operator= definition. This would cause a storage
	leak, although I haven't actually observed the leak.

	* kwq/qt/qbuffer.h: Initialize opened to false. This was causing a test failure.

	* kwq/KWQDictImpl.h:
	* kwq/KWQDictImpl.mm: Streamline implementation a bit by getting rid of
	unneeded copy constructor definition and making trivial constructor for
	iterator inline.

	* kwq/KWQPtrDictImpl.h: Remove unneeded include.

	* WebCore-tests.exp: Update for changes in the entry points
	used by the tests.

2002-06-05  Richard Williamson  <rjw@apple.com>

    Fixed 2938552.  This required an implementation of KHTMLPart::frames which
    is used by the JS window.frames property.
    
	* khtml/khtml_part.cpp:
	(KHTMLPart::frames):
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::frames):
	* kwq/KWQKHTMLPartImpl.h:

2002-06-05  Richard Williamson  <rjw@apple.com>

    Fixed window.top JS property (2939353).  This caused funny recursion problems at
    www.megapixel.net and other pages that try to pop frames.

	* khtml/khtml_part.cpp:
	(KHTMLPart::parentPart):
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::parentPart):
	* kwq/KWQKHTMLPartImpl.h:

2002-06-05  Richard Williamson  <rjw@apple.com>

    Cleaned up call to frameNamed:.  Now use frame relative naming.
    Fixed various frame related bugs.
    
	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::urlSelected):
	* kwq/external.h:

2002-06-04  Richard Williamson  <rjw@apple.com>

	* kwq/KWQKHTMLPart.mm:
	(KWQKHTMLPartImpl::timerEvent):
	(KWQKHTMLPartImpl::redirectURL):
	
	Renamed redirectJS to redirectURL to more correctly reflect it's
	function.
	
	(KWQKHTMLPartImpl::urlSelected):

    Fixed 2935505.  We now pop out of a frame if a link is clicked in a frame
    and that frame is the only frame in a frameset.  This emulates the behavior of IE.

	* kwq/KWQKHTMLPartImpl.h:
	* kwq/external.h:

2002-06-04  Richard Williamson  <rjw@apple.com>

    More exclusion for pre 6C48.
    
	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap):

2002-06-04  Kenneth Kocienda  <kocienda@apple.com>

	* kwq/kwqdebug.h: Added a line of stderr output into the 
        assertion failure code so that we have some idea of what happened.

2002-06-04  Richard Williamson  <rjw@apple.com>

    Changes to support progressive image loading.  Currently disabled
    until 2945218 is fixed.
    
	* khtml/misc/loader.cpp:
	* kwq/KWQKloader.mm:
	* kwq/KWQPixmap.mm:
	* kwq/WebCoreImageRenderer.h:
	* kwq/WebCoreImageRendererFactory.h:
	* kwq/WebCoreImageRendererFactory.m:
	* kwq/qt/qpixmap.h:

2002-06-04  Darin Adler  <darin@apple.com>

	- fixed 2943897 -- Initial uncached load of amazon.com renders partial page.

	* khtml/khtml_part.cpp: (KHTMLPart::setEncoding): Put the code that
	reloads the page when the encoding is changed back inside APPLE_CHANGES.
	This was causing partial loads because of how it interacts with our
	way of saving up text and not decoding until we discover what the
	encoding is.

2002-06-03  Darin Adler  <darin@apple.com>

	* LICENSE: Add 2002.
        
	* kwq/KWQApplication.mm:
	* kwq/kdecore/kapplication.h:
	* kwq/qt/qapplication.h:
        Found a way to simplify the application objects by making more of
        the functions static so we don't need to actually allocate an object.

	* kwq/Makefile.am:
	* kwq/KWQKApplication.mm: Removed.
	* kwq/kdecore/kapp.h: Removed.

2002-06-03  Darin Adler  <darin@apple.com>

	A few more unused things.

	* kwq/Makefile.am: Removed KWQKProcess.mm
	* kwq/KWQKProcess.mm: Removed.
	* kwq/KWQStrList.h: Removed.
	* kwq/kdecore/kprocess.h: Removed.

2002-06-03  Darin Adler  <darin@apple.com>

	Forgot one file.

	* kwq/qt/qframe.h: Added.

2002-06-03  Darin Adler  <darin@apple.com>

	Get rid of many unneeded APPLE_CHANGES.
	Also get rid of _KWQ_ and _KWQ_PEDANTIC_.

	* WebCore.exp: Don't export DomShared::ref/deref any more.
	* WebCore-tests.exp: Changed around as needed due to changes in
	the classes being tested.

	* khtml/html/htmlparser.cpp:
	* khtml/html/htmltokenizer.cpp:
	Simplified APPLE_CHANGES for better merging.

	* khtml/dom/dom_misc.h:
	* khtml/dom/dom_misc.cpp:
	* khtml/dom/html_document.cpp:
	* khtml/khtmlview.cpp:
	* khtml/ecma/kjs_css.h:
	* khtml/ecma/kjs_dom.cpp:
	* khtml/ecma/kjs_dom.h:
	* khtml/ecma/kjs_window.cpp:
	* khtml/html/html_formimpl.cpp:
	* khtml/html/html_objectimpl.cpp:
	* khtml/misc/helper.cpp:
	* khtml/rendering/bidi.cpp:
	* khtml/rendering/render_flow.cpp:
	* khtml/rendering/render_form.cpp:
	* khtml/rendering/render_text.cpp:
	* khtml/xml/xml_tokenizer.h:
	* kwq/qt/qtextedit.h:
	Remove now-unneeded APPLE_CHANGES.

	* khtml/misc/loader.cpp: (CachedImage::pixmap): Turned off more of
	the QMovie code.

	* khtml/html/html_documentimpl.cpp:
	* khtml/html/htmltokenizer.h:
	* khtml/xml/dom_elementimpl.h:
	* kwq/KWQKHTMLPart.mm:
	Formatting and other minor tweaks.

	* kwq/KWQApplication.mm: (QApplication::sendEvent): Implemented.
	* kwq/KWQChar.mm: (QChar::direction): Improved implementation.

	* kwq/KWQCollection.h: Removed.
	* kwq/KWQIcon.h: Removed.

	* kwq/Makefile.am: Removed following files.
	* kwq/KWQKCompletionBox.mm: Removed.
	* kwq/KWQKFactory.mm: Removed.
	* kwq/KWQListBox.mm: Removed.
	* kwq/KWQKImageIO.mm: Removed.

	* kwq/KWQObject.mm: (QObject::event): Added, does nothing.
	(QObject::inherits): Put in real implementation (good enough for us).

	* kwq/WCWebDataSource.h: Removed extern declaration of global.

	* kwq/KWQCursor.mm: (QCursor::handle): Made the handle be an
	NSCursor *.

	* kwq/external.h: Moved [IFWebView setFrameSize:] here.
	Got rid of IFAnimatedImage.

	* kwq/KWQDef.h: Remove unused Q_INT8, Q_INT16, Q_UINT8, Q_UINT16,
	QCOORD, WFlags, WId, ASSERT, CHECK_PTR, Q_EXPORT, Q_PACKED,
	QT_STATIC_CONST, QT_STATIC_CONST_IMPL. Define _KWQ_IOSTREAM_ only
	when NDEBUG is not defined.

	* kwq/KWQBuffer.mm:
	* kwq/KWQCString.mm:
	* kwq/KWQCollection.mm:
	* kwq/KWQCompletion.h:
	* kwq/KWQCompletion.mm:
	* kwq/KWQFrame.h:
	* kwq/KWQFrame.mm:
	* kwq/KWQHBox.mm:
	* kwq/KWQKFileItem.mm:
	* kwq/KWQKIconLoader.mm:
	* kwq/KWQKLineEdit.mm:
	* kwq/KWQKProtocolManager.mm:
	* kwq/KWQLabel.mm:
	* kwq/KWQListBox.h:
	* kwq/KWQMovie.mm:
	* kwq/KWQWidget.mm:
	* kwq/KWQxml.mm:
	* kwq/qt/qbuffer.h:
	* kwq/kdecore/kdebug.h:
	* kwq/kdecore/kglobal.h:
	* kwq/kdecore/kglobalsettings.h:
	* kwq/kdecore/kiconloader.h:
	* kwq/kdecore/kstaticdeleter.h:
	* kwq/kdecore/kstringhandler.h:
	* kwq/kdeui/kcombobox.h:
	* kwq/kdeui/kcompletionbox.h:
	* kwq/kdeui/klineedit.h:
	* kwq/kdeui/klistbox.h:
	* kwq/kdeui/kmessagebox.h:
	* kwq/kio/kfileitem.h:
	* kwq/kio/kimageio.h:
	* kwq/kio/kmimetype.h:
	* kwq/kio/kprotocolmanager.h:
	* kwq/kio/netaccess.h:
	* kwq/qt/qxml.h:
	* kwq/kparts/browserinterface.h:
	* kwq/kparts/factory.h:
	* kwq/kparts/part.h:
	* kwq/qt/qarray.h:
	* kwq/qt/qcollection.h:
	* kwq/qt/qcstring.h:
	* kwq/qt/qcursor.h:
	* kwq/qt/qdict.h:
	* kwq/qt/qhbox.h:
	* kwq/qt/qlabel.h:
	* kwq/qt/qlist.h:
	* kwq/qt/qmap.h:
	* kwq/qt/qmovie.h:
	* kwq/qt/qobject.h:
	* kwq/qt/qpaintdevicemetrics.h:
	* kwq/qt/qpainter.h:
	* kwq/qt/qpoint.h:
	* kwq/qt/qradiobutton.h:
	* kwq/qt/qrect.h:
	* kwq/qt/qregion.h:
	* kwq/qt/qscrollview.h:
	* kwq/qt/qsize.h:
	* kwq/qt/qstack.h:
	* kwq/qt/qstringlist.h:
	* kwq/qt/qtextedit.h:
	* kwq/qt/qvaluelist.h:
	* kwq/qt/qvector.h:
	* kwq/qt/qwidget.h:
	* kwq/qt/qxml.h:
	Removed unused stuff.

	* kwq/KWQListBox.mm:
	* kwq/KWQMapImpl.h:
	* kwq/KWQMapImpl.mm:
	* kwq/KWQPainter.mm:
	* kwq/KWQPoint.mm:
	* kwq/KWQRadioButton.mm:
	* kwq/KWQRect.mm:
	* kwq/KWQRegion.mm:
	* kwq/KWQScrollBar.h:
	* kwq/KWQScrollView.mm:
	* kwq/KWQSize.mm:
	* kwq/KWQStringList.mm:
	* kwq/KWQbrowserinterface.mm:
	Simplified.

	* kwq/kdecore/kurl.h:
	Added include to match what's expected by clients.

	* kwq/qt/qobjectlist.h: Added. Empty file to make includers happy.

	* kwq/khtml/khtml_printsettings.h: Added. Empty file.
	* kwq/qt/qobjectlist.h: Added. Empty file.

	* kwq/kio/kssl/ksslkeygen.h: Define just enough to make callers
	happy.

	* kwq/qt/qobject.h: Added event().
	* kwq/kparts/part.h: Added bool return type to event().
	* kwq/qt/qvector.h: Added QGVector base class.

2002-06-01  Darin Adler  <darin@apple.com>

	* kwq/KWQPtrDictImpl.mm: (KWQPtrDictPrivate::~KWQPtrDictPrivate):
	Fix compile error.

2002-05-31  Darin Adler  <darin@apple.com>

	Fix infinite loop while cancelling bug that was caused by dictionary
	iterators not getting updated when keys are removed.

	* kwq/KWQPtrDictImpl.mm:
	(KWQPtrDictPrivate::KWQPtrDictPrivate): Set iterators list to 0.
	(KWQPtrDictPrivate::~KWQPtrDictPrivate): Tell iterators dict is gone.
	(KWQPtrDictImpl::remove): Tell each iterator that the item was removed.
	(KWQPtrDictIteratorPrivate::KWQPtrDictIteratorPrivate): Insert the
	iterator into a list with a head stored in the dict.
	(KWQPtrDictIteratorPrivate::~KWQPtrDictIteratorPrivate): Remove the
	iterator from the list.
	(KWQPtrDictIteratorPrivate::remove): Remove the key from the iterator's
	private storage.
	(KWQPtrDictIteratorPrivate::dictDestroyed): Clear out the dict pointer
	and set the count to 0.

	* kwq/KWQPtrDictImpl.h: Move private classes out so they can get at each
	other without being friends of each other.

	* kwq/qt/qptrdict.h: Simplify a bit.

2002-05-31  Darin Adler  <darin@apple.com>

	* khtml/khtmlview.h: Add KWQKHTMLPartImpl as friend class, remove khtml_part.h
	include that we added inside APPLE_CHANGES.

	* kwq/KWQKHTMLPart.mm: (KWQKHTMLPartImpl::end): Reinstate a line of code that
	required friend status.

	* kwq/KWQView.mm: Add include of khtml_part.h.

2002-05-31  Darin Adler  <darin@apple.com>

	* kwq/kwqdebug.h: Don't use displayableString; it's an SPI and those
	are no nos inside WebCore.

2002-05-31  Darin Adler  <darin@apple.com>

	* kwq/kio/jobclasses.h: Removed SimpleJob and made Job just enough for
	TransferJob to inherit from it. Removed unused stuff and made url() return
	an NSURL rather than a KURL.
	* kwq/KWQKjobclasses.mm: Removed much of the code, and reworked what
	remains to simplify it.
	* kwq/KWQKloader.mm: Update users of TransferJob::url since it now returns
	an NSURL rather than a KURL.

	* kwq/kio/job.h: Simplify.
	* kwq/KWQKJob.mm: Simplify.

	* kwq/kio/scheduler.h: Emptied this file out.
	* kwq/KWQKScheduler.mm: Removed.
	* kwq/Makefile.am: Removed KWQKScheduler.mm.

2002-05-31  Darin Adler  <darin@apple.com>

	Remove some unused stuff; total of 1000s of lines.

	* Makefile.am: Removed some strange uses of "./" and
	improved stamp-related rules.

	* WebCore-tests.exp: Removed QDir functions.

	* khtml/Makefile.am: Removed java subdirectory.
	* khtml/java/*: Removed.
	* khtml/rendering/render_applet.cpp: Rearrange APPLE_CHANGES so
	that we use our own KJavaAppletWidget rather than a QWidget.
	* kwq/khtml/java/kjavaappletcontext.h: Added.
	* kwq/khtml/java/kjavaappletwidget.h: Added.
	* kwq/KWQKJavaAppletWidget.mm: Added. Replaces WCJavaAppletWidget.mm.
	* kwq/KWQsignals.mm: Removed java-related signals.

	* khtml/css/Makefile.am:
	* khtml/misc/Makefile.am:
	Improve stamp-related rules.

	* khtml/misc/loader.cpp: Move around and add ifdefs so we don't
	need as much KWQ code. Maybe revisit this later -- related to the
	KDE implementation of animated and progressive loading images,
	which we probably don't need, but it may integrate slightly better than
	doing our hacks inside QPixmap.

	* kwq/KWQApplication.mm:
	* kwq/KWQFontInfo.mm:
	* kwq/KWQInputDialog.mm:
	* kwq/KWQKFileDialog.mm:
	* kwq/KWQKHTMLPartBrowserExtension.mm:
	* kwq/KWQKWin.mm:
	* kwq/KWQKWinModule.mm:
	* kwq/KWQKstddirs.mm:
	* kwq/KWQPixmap.mm:
	Simplified, removed unused code, minor tweaks.

	* kwq/Makefile.am: Removed all the old files, added some new ones.
	* kwq/KWQBitmap.mm: Removed.
	* kwq/KWQBrush.mm: Removed.
	* kwq/KWQDCOPClient.mm: Removed.
	* kwq/KWQDataStream.h: Removed.
	* kwq/KWQDir.mm: Removed.
	* kwq/KWQFontDatabase.mm: Removed.
	* kwq/KWQImage.mm: Removed.
	* kwq/KWQKInstance.mm: Removed.
	* kwq/KWQPaintDevice.mm: Removed.
	* kwq/KWQPart.mm: Removed.
	* kwq/KWQasyncimageio.mm: Removed.
	* kwq/KWQasyncio.mm: Removed.
	* kwq/KWQbrowserextension.mm: Removed.
	* kwq/WCJavaAppletWidget.h: Removed.
	* kwq/WCJavaAppletWidget.mm: Removed.
	* kwq/qt/qdatastream.h: Removed.
	* kwq/qt/qdir.h: Removed.
	* kwq/qt/qlayout.h: Removed.

	* kwq/KWQCursor.mm:
	(QCursor::handle): Return the cursor object as an integer rather than
	just returning 0; makes the code that uses handle() more likely to work
	although it introduces a 64-bit cleanliness problem.

	* kwq/KWQEvent.mm: Initialize event type in QEvent subclasses.

	* kwq/WebCoreImageRenderer.h: Added NSObject and NSCopying protocols to
	the WebCoreImageRenderer protocol.

	* kwq/kwqdebug.h: Use displayableString in DEBUG_OBJECT for better logging.

	* kwq/dcop/dcopclient.h:
	* kwq/kdecore/kstddirs.h:
	* kwq/kdecore/kwin.h:
	* kwq/kdecore/kwinmodule.h:
	* kwq/kfile/kfiledialog.h:
	* kwq/kparts/browserextension.h:
	* kwq/kparts/event.h:
	* kwq/qt/qapplication.h:
	* kwq/qt/qasyncimageio.h:
	* kwq/qt/qasyncio.h:
	* kwq/qt/qbitmap.h:
	* kwq/qt/qbrush.h:
	* kwq/qt/qbutton.h:
	* kwq/qt/qcheckbox.h:
	* kwq/qt/qcollection.h:
	* kwq/qt/qcolor.h:
	* kwq/qt/qcombobox.h:
	* kwq/qt/qcursor.h:
	* kwq/qt/qdrawutil.h:
	* kwq/qt/qevent.h:
	* kwq/qt/qfont.h:
	* kwq/qt/qfontdatabase.h:
	* kwq/qt/qfontinfo.h:
	* kwq/qt/qimage.h:
	* kwq/qt/qinputdialog.h:
	* kwq/qt/qintcache.h:
	* kwq/qt/qintdict.h:
	* kwq/qt/qpaintdevice.h:
	* kwq/qt/qpixmap.h:
	* kwq/qt/qstring.h:
	Removed lots of unused stuff, including old conditionals and the like.

	* khtml/khtml_part.cpp:
	(KHTMLPart::khtmlMouseMoveEvent): Add missing parenthesis.

2002-05-30  Maciej Stachowiak  <mjs@apple.com>

	WebCore part of fixes for:

	Radar 2926169 - no support for window.open
	Radar 2890469 - Preference to prevent JavaScript from automatically
	opening new windows doesn't work
	Radar 2938569 - link cursor does not appear on some pages
	
	* khtml/ecma/kjs_window.cpp:
	(WindowFunc::tryCall): #ifdef'd out some parts of this code that are
	broken (but fortunately also unnecessary) in our project.
	* kwq/KWQKConfigBase.mm:
	(KConfig::KConfig): Changes to support JavaScript window opening pref.
	(KConfig::readUnsignedNumEntry): Likewise.
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::openURLInFrame): Implemented.
	* kwq/KWQKHTMLPartBrowserExtension.mm:
	(KHTMLPartBrowserExtension::KHTMLPartBrowserExtension): Implemented.
	(KHTMLPartBrowserExtension::openURLRequest): Implemented by
	calling openURLInFrame on the part.
	(KHTMLPartBrowserExtension::createNewWindow): Implemented by
	calling new WebController openNewWindowWIthURL method.
	* kwq/KWQKHTMLSettings.mm:
	(KHTMLSettings::isJavaScriptEnabled): Handle renaming of pref.
	* kwq/KWQView.mm:
	(-[KWQHTMLView setCursor:]): Fixes to set cursor properly even if
	none was set.	
	* kwq/external.h: Declare some new WebKit methods.
	* kwq/kparts/browserextension.h: Make formerly empty methods pure virtual.
	* kwq/khtml/khtml_ext.h: Declare some virtual methods.

2002-05-30  Darin Adler  <darin@apple.com>

	Cut down our copied and pasted code even more.

	* WebCore.exp: Change what's exported for things that moved from
	KHTMLPart into KWQKHTMLPartImpl.

	* khtml/.cvsignore:
	* khtml/css/.cvsignore:
	* khtml/dom/.cvsignore:
	* khtml/ecma/.cvsignore:
	* khtml/html/.cvsignore:
	* khtml/java/.cvsignore:
	* khtml/misc/.cvsignore:
	* khtml/rendering/.cvsignore:
	* khtml/xml/.cvsignore:
	Some .cvsignore hygiene.

	* khtml/khtml_part.cpp: Use a lot more of this file, rather than using a copy inside
	the kwq directory. Now we have KWQKHTMLPartImpl for the part that does need to be in kwq.
	* khtml/khtml_part.h: Add KWQKHTMLPartImpl pointer, remove most of the other APPLE_CHANGES.
	* khtml/khtmlpart_p.h: Remove almost all of the APPLE_CHANGES.
	* kwq/KWQKHTMLPart.mm: Changed everything from being part of KHTMLPart to be a separate
	KWQKHTMLPartImpl class. Minimized copied and pasted code; still more to do.
	* kwq/KWQKHTMLPartImpl.h: Added. Interface so KHTMLPart can call into kwq as necessary.

	* khtml/misc/Makefile.am: Added loader.cpp.
	* khtml/misc/loader.cpp: Added from KDE 3.0. Rolled most of the changes from KWQKloader.mm
	in here. The kwq-specific part is now in a KWQLoaderImpl class.
	* khtml/misc/loader.h: Replace LoaderPrivate with KWQLoaderImpl.
	* khtml/misc/loader.moc: Added empty file.
	* kwq/KWQKloader.mm: Changed everything to be a separate KWQLoaderImpl class.
	Minimized copied and pasted code.
	* kwq/KWQLoaderImpl.h: Added. Interface so loader can call into kwq as necessary.
	* kwq/loader.moc: Removed empty file.

	* kwq/kparts/historyprovider.h: Add HistoryProvider::insert.
	* kwq/KWQKHistoryProvider.mm: Add HistoryProvider::insert.

	* kwq/KWQKLocale.mm: (KLocale::language): Simplify.

	* kwq/KWQListBox.h:
	* kwq/KWQNSTextField.h:
	Use import instead of include for Cocoa.h.

	* kwq/KWQScrollView.mm: (QScrollView::contentsToViewport): Implement this.

	* kwq/external.h: Add declarations so this can be included cleanly.

	* kwq/khtml/khtml_pagecache.h: Put a no-op cache in here so we don't have to do so
	many APPLE_CHANGES ifdefs.

	* kwq/kparts/part.h: Put ref/deref and event/customEvent in here so they don't need
	to be added to KHTMLPart.

	* kwq/kio/scheduler.h: Add <qtimer.h> include to help us build (not sure if it's
	really needed.
	* kwq/kparts/partmanager.h: Add <qdatetime.h> include to help us build (not sure if it's
	really needed.

=== Alexander-7 ===

2002-05-29  Richard Williamson  <rjw@apple.com>

    Changes to support animated image rendering.
    Moved image rendering into webkit.
    
	* WebCore.exp:
	* kwq/KWQPainter.mm:
	(QPainter::drawPixmap):
	(QPainter::drawTiledPixmap):
	(QPainter::translate):
	(QPainter::scale):
	(QPainter::begin):
	(QPainter::end):
	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap):
	(QPixmap::~QPixmap):
	(QPixmap::isNull):
	(QPixmap::size):
	(QPixmap::rect):
	(QPixmap::width):
	(QPixmap::height):
	(QPixmap::resize):
	(QPixmap::operator=):
	* kwq/Makefile.am:
	* kwq/WebCoreImageRenderer.h: Added.
	* kwq/WebCoreImageRendererFactory.h: Added.
	* kwq/WebCoreImageRendererFactory.m: Added.
	(+[WebCoreImageRendererFactory sharedFactory]):
	(-[WebCoreImageRendererFactory init]):
	(-[WebCoreImageRendererFactory imageRendererWithBytes:length:]):
	(-[WebCoreImageRendererFactory imageRendererWithSize:]):
	* kwq/qt/qpixmap.h:

2002-05-28  Richard Williamson  <rjw@apple.com>

    Moved cancellation check before creation on job instance,
    preventing leak.
    
	* kwq/KWQKloader.mm:
	(Loader::servePendingRequests):

2002-05-28  Richard Williamson  <rjw@apple.com>

    Fixed edge case cancellation problem (actually happens a lot).
    No new loads are allowed after a data source has been
    set as "stopping".
    
	* kwq/KWQKloader.mm:
	(Loader::servePendingRequests):
	* kwq/external.h:

2002-05-28  Richard Williamson  <rjw@apple.com>

    Fixed reporting of malformed resources URLs.  This fixed
    exceptions that were being thrown because nil handles were
    being added to datasource handle array.

	* kwq/KWQKjobclasses.mm:
	* kwq/KWQKloader.mm:
	(Loader::servePendingRequests):

2002-05-28  Chris Blumenberg  <cblu@apple.com>

	Added framework-header-stamp

	* .cvsignore:

2002-05-27  John Sullivan  <sullivan@apple.com>

	* Resources/linkCursor.tiff: Added. Maciej forgot to cvs add
	this new file. I stole the one from haircut.

2002-05-27  Maciej Stachowiak  <mjs@apple.com>

	Fixed the vexing and long-standing:

	Radar 2894699 - Crash at: http://cb.apple.com/jsplugins.html
	
	* khtml/ecma/kjs_navigator.cpp: This crash was caused by Plugin
	and MimeType objects referring to data that was held and
	refcounted by PluginBase, without holding a ref. I fixed it by
	making these individual items participate in the refcounting as
	well.

2002-05-26  Maciej Stachowiak  <mjs@apple.com>

	Webcore part of fix for:

	Radar 2884085 - add support for changing cursor over links

	* Makefile.am: Install tiff of link cursor.
	* kwq/qt/qcursor.h, kwq/KWQCursor.mm:
	(QCursor::QCursor): Change QCursor to contain an NSCursor.
	(QCursor::~QCursor): Likewise.
	(QCursor::operator=): Likewise.
	(QCursor::handle): Likewise.
	* kwq/KWQKCursor.mm:
	(+[NSCursor _WebCore_linkCursor]): NSCursor extension method that
	provides the link cursor.	
	(KCursor::handCursor): Use the link cursor instead of the default
	arrow cursor.
	* kwq/KWQKHTMLSettings.mm:
	(KHTMLSettings::changeCursor): Return TRUE; we always want cursor
	tracking.
	* kwq/KWQView.h, kwq/KWQView.mm:
	(-[KWQHTMLView setCursor:]): Remember the new cursor and
	invalidate cursor rects.
	(-[KWQHTMLView resetCursorRects]): Establish cursor rect for
	currently set cursor, if not default.
	* kwq/KWQWidget.mm:
	(QWidget::setCursor): Call setCursor: on the underlying
	NSView, if implemented.
	(QWidget::cursor): Implemented.
	(QWidget::unsetCursor): Implemented.

2002-05-25  Maciej Stachowiak  <mjs@apple.com>

	Changed WebCore to build as a framework, not a dylib, so resources
	can be added to it.

	* Makefile.am: Actual changes to build WebCore.framework
	* Resources/Info.plist: Added.
	* English.lproj/InfoPlist.strings: Added.
	* WebCore-tests.exp: Added.
	* WebCore.exp: Added.
	* libwebcore.exp: Removed.
	* libwebcoretests.exp: Removed.
	* .cvsignore: Updated.

=== 0.3 ===

2002-05-24  Shelley A Sheridan  <sheridan@apple.com>

	* ChangeLog:

=== Alexander-6 ===

2002-05-23  Maciej Stachowiak  <mjs@apple.com>

	Fixes for the following (the first bug also requires WebKit and
	WebBrowser changes):
	
	Radar 2896391 - command-click should open link in new window
	Radar 2935858 - two mails for each mailto:

	* khtml/html/html_inlineimpl.cpp:
	(HTMLAnchorElementImpl::defaultEventHandler): Set flag for Meta
	key in addition to Control, Shift and Alt, since the Command key
	is treated as Meta.
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::urlSelected): Open a new window if the user
	command-clicked.
	(KHTMLPart::khtmlMouseMoveEvent): Clean up use of braces and ifdefs to
	make prepare-ChangeLog happy.
	(KHTMLPart::khtmlMouseReleaseEvent): Remove code that tried to
	process link click events here. This made link clicks get
	processed twice, now that mouse events are hooked up for real.
	* kwq/external.h: prototype openNewWindowWithURL: method.

2002-05-23  Kenneth Kocienda  <kocienda@apple.com>

        More work to fix this bug:

        Radar 2883631 (need to implement support for META HTTP_EQUIV=REFRESH)

        There was yet two more cases where the refresh timers were getting clobbered.
        Fixed.

	* khtml/ecma/kjs_window.cpp:
	(WindowQObject::parentDestroyed)
	* khtml/khtmlview.cpp:
	(KHTMLView::clear)

2002-05-23  Richard J. Williamson  <rjw@apple.com>

    Fixed crasher 2935757.  I still need to investigate the root cause
    of this problem.
    
	* khtml/rendering/render_text.cpp:
	(RenderText::setText):

2002-05-23  Kenneth Kocienda  <kocienda@apple.com>

        Fixes for these bugs:

        Radar 2883631 (need to implement support for META HTTP_EQUIV=REFRESH)
        Radar 2935472 (Non-standard html pages don't always get decoded)

	* khtml/khtml_part.cpp: Don't kill all timers. Just kill the ones for this object.
	(KHTMLPart::~KHTMLPart):
	* khtml/khtml_part.h: Modified interface to slotData to add a flag for when all data 
          for a load has been received.
	* khtml/khtmlview.cpp:
	(KHTMLView::~KHTMLView): Don't kill all timers. Just kill the ones for this object.
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::slotData): Senses when text encoding is not available, but all data has been received.
	(KHTMLPart::write): Ditto
	(KHTMLPart::scheduleRedirection):
	* libwebcore.exp: Changed symbol for slotData

2002-05-23  Shelley A Sheridan  <sheridan@apple.com>

	* ChangeLog:

=== Alexander-5 ===

2002-05-23  Maciej Stachowiak  <mjs@apple.com>

	Notify when loads of sub-URLs start and stop, so panels for these
	can be attached to the right windows.

	* kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandleResourceDidBeginLoading:]):
	(-[URLLoadClient IFURLHandleResourceDidCancelLoading:]):
	(-[URLLoadClient IFURLHandleResourceDidFinishLoading:data:]):
	(-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	(-[URLLoadClient IFURLHandle:didRedirectToURL:]):
	* kwq/external.h:

2002-05-22  Richard J. Williamson  <rjw@apple.com>
    

    Additional additional callback when resource is first loaded.
        
	* kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandleResourceDidBeginLoading:]):

2002-05-21  Richard J. Williamson  <rjw@apple.com>

    Lots of changes for DHTML.
    Bugs fixes, and fixes to regressions.
    
	* khtml/misc/decoder.cpp:
	(Decoder::decode):
	* khtml/rendering/render_flow.cpp:
	(RenderFlow::print):
	(RenderFlow::layout):
	* khtml/rendering/render_text.cpp:
	(RenderText::print):
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::urlSelected):
	* kwq/qt/qevent.h:
	* kwq/qt/qstring.h:
	* libwebcore.exp:

2002-05-21  Kenneth Kocienda  <kocienda@apple.com>

        Fix for this bug:

        Radar 2924728 (post form fails at pt.apple.com; succeeds at macosx.apple.com)

        Posted forms are now submitted with the IFURLHandleFlagLoadFromOrigin 
        load flag set.  This prevents a potential bug which may cause a page 
        with a form that uses itself as an action to be returned from the 
        cache without submitting.

	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::submitForm)

2002-05-21  Kenneth Kocienda  <kocienda@apple.com>

        Merged these four include files into the precompiled header.
        These are used for the enhanced assertion/debuggin support I
        added yesterday.

        <signal.h>
        <sys/types.h>
        <sys/time.h>
        <sys/resource.h>

	* WebCorePrefix.h

2002-05-20  Darin Adler  <darin@apple.com>

	Forgot one file.

	* khtml/khtml_part.moc: Added.

2002-05-20  Darin Adler  <darin@apple.com>

	Use more of the original khtml_part.cpp; a step in the direction of factoring
	our code out so more of it can go in WebKit and we don't need external.h.

	* khtml/Makefile.am:
	* khtml/khtml_part.cpp:
	* khtml/khtml_part.h:
	* khtml/khtmlpart_p.h:
	Start compiling khtml_part.cpp and using khtmlpart_p.h again.

	* kwq/KWQKHTMLPart.mm:
	Remove code that was identical to khtml_part.cpp. We aren't going to use the
	"copy and hack our copy" approach on this class for the long termk, and this
	is the first step in cleaning things up.

	* khtml/khtml_ext.h: Removed.
	* khtml/khtml_factory.h: Removed.

	* khtml/misc/loader.h:
	* khtml/xml/dom_docimpl.cpp:
	(DocumentImpl::recalcStyleSelector):
	Remove some APPLE_CHANGES ifdefs we don't need any more.

	* kwq/KWQDateTime.mm:
	Simplify things like copy constructors.

	* kwq/kdeui/kcursor.h:
	* kwq/KWQKCursor.mm:
	Add handCursor.

	* kwq/KWQKHTMLFactory.mm:
	Put in real implementations, not just placeholders.

	* kwq/KWQKHTMLPartBrowserExtension.mm:
	* kwq/KWQKInstance.mm:
	* kwq/KWQPart.mm:
	* kwq/KWQbrowserextension.mm:
	Empty these files out, nothing in them is needed any more.

	* kwq/khtml/khtml_settings.h:
	* kwq/KWQKHTMLSettings.mm:
	(KHTMLSettings::isJavaEnabled):
	(KHTMLSettings::autoLoadImages):
	(KHTMLSettings::isPluginsEnabled):
	(KHTMLSettings::isJavaScriptEnabled):
	(KHTMLSettings::isJavaScriptDebugEnabled):
	Moved settings here from KWQKHTMLPart.mm

	* kwq/kdecore/kurl.h:
	* kwq/KWQKURL.mm:
	(KURL::encodedHtmlRef):
	(KURL::htmlRef):
	Placeholders for these two, called in KHTMLPart, but maybe not really needed.

	* kwq/KWQKloader.mm:
	(Cache::preloadScript):
	(Cache::preloadStyleSheet):
	Empty functions for these, called in KHTMLPart but no implementation needed.

	* kwq/qt/qtimer.h:
	* kwq/KWQTimer.mm:
	(QTimer::isActive):
	(QTimer::start):
	(QTimer::stop):
	More timer functions.

	* kwq/qt/qscrollview.h: Add one more function.

	* kwq/kdecore/kinstance.h: Simplify.
	* kwq/kdeui/kaction.h: Simplify.
	* kwq/khtml/khtml_factory.h: Simplify.
	* kwq/kparts/browserextension.h: Simplify.
	* kwq/kparts/part.h: Simplify.
	* kwq/qt/qdatetime.h: Simplify.

	* kwq/kdecore/klibloader.h: Added.
	* kwq/khtml/khtml_ext.h: Added.
	* kwq/kparts/partmanager.h: Added.
	Nearly-empty files with just simple placeholders so we can compile more.

	* kwq/dcop/kdatastream.h: Added.
	* kwq/kdecore/kmultipledrag.h: Added.
	* kwq/kdecore/ktempfile.h: Added.
	* kwq/kdecore/kurldrag.h: Added.
	* kwq/kdeui/kstdaction.h: Added.
	* kwq/kdeui/kxmlguifactory.h: Added.
	* kwq/khtml/khtml_find.h: Added.
	* kwq/khtml/khtml_iface.h: Added.
	* kwq/khtml/khtml_pagecache.h: Added.
	* kwq/khtml/khtml_run.h: Added.
	* kwq/kio/kssl/ksslcertchain.h: Added.
	* kwq/kio/kssl/ksslinfodlg.h: Added.
	* kwq/kio/ktrader.h: Added.
	* kwq/qt/private/qucomextra_p.h: Added.
	* kwq/qt/qclipboard.h: Added.
	* kwq/qt/qmetaobject.h: Added.
	Empty files just so includes of these names will compile.

	* libwebcoretests.exp: Remove one export that's no longer needed.

2002-05-20  Richard J. Williamson  <rjw@apple.com>

	* khtml/ecma/kjs_events.cpp:
	(JSEventListener::handleEvent):
	* khtml/khtml_part.h:
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::~KHTMLPart):
	(KHTMLPart::scheduleRedirection):
	(KHTMLPart::timerEvent):
	(KHTMLPart::redirectJS):
	(KHTMLPart::urlSelected):
	* kwq/KWQVariant.mm:
	(QVariant::asString):
	* kwq/qt/qvariant.h:

2002-05-20  Kenneth Kocienda  <kocienda@apple.com>

	* kwq/kwqdebug.h: Now includes <sys/time.h> to prevent possible
        build breakage in the inclusion of <sys/resource.h>

2002-05-20  Kenneth Kocienda  <kocienda@apple.com>

        Changed assertion failure code to send a SIGQUIT instead
        of raising an NSException.

	* kwq/kwqdebug.h

2002-05-19  Darin Adler  <darin@apple.com>

	* khtml/rendering/render_object.cpp: (RenderObject::drawBorder):
	Add missing break statement so borders don't draw strangely.

	* khtml/rendering/render_style.h: Remove unneeded QColor workaround,
	now that we handle invalid colors properly.

	* kwq/KWQColor.mm:
	(createStaticConstructorAutoreleasePool): New solution to the problem
	of autorelease at static constructor time.
	(getNamedColors): Function that creates this dictionary when needed
	rather than creating it inside an init function.
	(QColor::QColor): Share code with setRgb, get rid of _initialize.
	(hex2int): Return -1 for bad digit rather than 0.
	(decodeColorFromHexColorString): Make more robust and simpler.
	(QColor::setNamedColor): Set color to invalid rather than black when
	the passed in name is empty or unrecognized.
	(QColor::red), (QColor::green), (QColor::blue): Round instead of truncating.
	(QColor::setRgb): Set color to invalid if r, g, or b is out of range.
	(QColor::operator=): Simplify.
	(QColor::operator==): Handle invalid colors correctly.
	(QColor::getNSColor): Return black of invalid colors.

	* kwq/KWQCursor.mm: Simplify cursor globals.

	* kwq/KWQPainter.mm:
	(QPainter::_setColorFromBrush): Use getNSColor() to handle invalid colors correctly.
	(QPainter::_setColorFromPen): Use getNSColor() to handle invalid colors correctly.
	(QPainter::drawLine): Add code to respect style and width and handle endpoints in a
	way that will make the lines look like Qt users expect.
	(QPainter::drawText): Use getNSColor() to handle invalid colors correctly.
	(QPainter::drawUnderlineForText): Use getNSColor() to handle invalid colors correctly.
	(QPainter::fillRect): Use getNSColor() to handle invalid colors correctly.

	* kwq/KWQPen.mm: (QPen::QPen): (QPen::setStyle): Remove use of MPenStyle.

	* kwq/KWQPixmap.mm: (QPixmap::QPixmap): Add comments.

	* kwq/qt/qcolor.h: Simplify ifdefs, remove cname, _initialize, globals_init, and
	initGlobalColors.

	* kwq/qt/qnamespace.h: Remove AlignTop, AlignBottom, SingleLine, ExpandTabs, DontPrint,
	DashDotLine, DashDotDotLine, MPenStyle, WResizeNoRease, WRepaintNoErase, color0, color1,
	darkRed, darkGreen, darkBlue, darkCyan, darkMagenta, darkYellow. Simplify the QColor
	and QCursor globals.

	* kwq/qt/qpen.h: QPainter is no longer a friend class. Remove linest.

2002-05-17  Darin Adler  <darin@apple.com>

	* khtml/rendering/render_list.cpp: (RenderListItem::setStyle):
	OK. This time it's correct.

2002-05-17  Darin Adler  <darin@apple.com>

	* khtml/rendering/render_list.cpp: (RenderListItem::setStyle):
	Roll the change out while I see why it causes a crash.

2002-05-17  Darin Adler  <darin@apple.com>

	* khtml/rendering/render_list.cpp: (RenderListItem::setStyle):
	Remove an old incorrect fix for a style leak in here and put in
	a new correct fix.

2002-05-16  Richard J. Williamson  <rjw@apple.com>

	Fixed 2896350.  Ignore DPI in images and render directly at pixel size.
	
	* kwq/KWQPainter.mm:
	(QPainter::drawPixmap):
	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap):

2002-05-16  Richard J. Williamson  <rjw@apple.com>

	Fixed 2925638.  Don't send last progress message from resourceDataDidBecomeAvailable,
	it is sent from IFURLHandleResourceDidFinishLoading, avoiding duplication.
	
	* kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandle:resourceDataDidBecomeAvailable:]):

2002-05-15  Richard J. Williamson  <rjw@apple.com>
    
    Alerts, useful for validating that js handlers work.
    Validated that onsubmit is working.
    
	* kwq/KWQKMessageBox.mm:
	(KMessageBox::error):
	(KMessageBox::warningYesNo):
	(KMessageBox::questionYesNo):
	(KMessageBox::sorry):

2002-05-15  Darin Adler  <darin@apple.com>

	* kwq/qt/qguardedptr.h: Fix reversed sense of check in isNull. Fixes
	a bug that was causing a lot of DHTML not to work.

2002-05-15  Kenneth Kocienda  <kocienda@apple.com>

	* kwq/KWQInvisibleButton.h: Changed an #include of Cocoa.h to an #import

2002-05-15  Darin Adler  <darin@apple.com>

	* kwq/KWQListImpl.mm:
	(KWQListImpl::KWQListPrivate::copyList): Take out unnecessary line of code.
	(KWQListImpl::KWQListPrivate::~KWQListPrivate): Delete the iterator nodes
	also, not just the item nodes. Fixes a storage leak.
	(KWQListIteratorImpl::KWQListIteratorPrivate::KWQListIteratorPrivate):
	Change interface to take a list pointer so we don't rely on the undefined
	behavior of &* on a null pointer.
	(KWQListImpl::addIterator): Set up the prev pointer of the old head of
	the list. This was causing the crash I was debugging.
	(KWQListIteratorImpl::operator=): Simpler implementation.

2002-05-14  Richard J. Williamson  <rjw@apple.com>

    Added another symbol for stack based event constructor.
    Change to support onLoad.
    
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::end):    
	* libwebcore.exp:

2002-05-14  Chris Blumenberg  <cblu@apple.com>

	Changed slotData to slotData(NSString *encoding, const char *bytes, int length)

	* khtml/khtml_part.h:
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::slotData):
	* libwebcore.exp:

2002-05-14  Darin Adler  <darin@apple.com>

	Fixed 2925291 -- CSS2 test page causes infinite recursion, crash

	* khtml/rendering/render_container.cpp: (RenderContainer::addChild):
	Add code to detect the case of a render object that uses text cell
	style but is not itself a text style, and make sure we don't try to
	nest such an object inside an infinite number of tables.

2002-05-14  Darin Adler  <darin@apple.com>

	* kwq/KWQListImpl.mm: (KWQListIteratorImpl::KWQListIteratorImpl):
	Add a missing check for a null pointer.

	* kwq/KWQGuardedPtr.mm: (KWQGuardedPtrBase::KWQGuardedPtrBase):
	Remove an unnecessary call to "toFirst", because new iterators
	already default to pointing to the first element of the list.

2002-05-13  Darin Adler  <darin@apple.com>

	* kwq/KWQListImpl.mm: (KWQListImpl::~KWQListImpl): Detach all the iterators from
	the list when the list is destroyed. I thought this was done before, but it seems not.

2002-05-13  Darin Adler  <darin@apple.com>

	Fixed bug 2922884 (JavaScript object leak creating Image object from JavaScript).
	There was a reference loop created when a document contained a variable that
	referenced an image, because images held references to the document; the C++
	kind that do not participate in the JavaScript garbage collection.

	* khtml/ecma/kjs_html.h: Use a QGuardedPtr to the DocumentImpl instead of using
	a Document object.
	* khtml/ecma/kjs_html.cpp:
	(Image::tryPut): Change because the "doc" pointer is now a pointer to the
	DocumentImpl, not the Document. Also check for 0, since it's now a QGuardedPtr
	that can become 0.
	(Image::Image): Newly out of line. Changed because the "doc" pointer is now a
	pointer to the DocumentImpl, not the Document.

	Since the solution used QGuardedPtr, I had to implement it.

	* kwq/qt/qguardedptr.h: Put the implementation in a new KWQGuardedPtrBase class,
	with only the bare minimum in a template. This new implementation uses iterators
	on a QPtrList, which means there's not much code needed.
	* kwq/KWQGuardedPtr.mm: (KWQGuardedPtrBase::KWQGuardedPtrBase): Rewrite to use
	a QPtrListIterator to a dummy list in the QObject. This reuses code nicely, but
	a custom-coded solution would be a bit more efficient.

	* kwq/qt/qobject.h:
	* kwq/KWQObject.mm: (QObject::QObject): Create the one-element list that's used
	by the QGuardedPtr instances.

	Since the above code needed to copy a QPtrListIterator, I needed to support that.

	* kwq/qt/qlist.h: Move the iterator's copy constructor out of the private part,
	and implement it. This class was strange in that it has a public assignment
	operator, but a private unimplemented copy constructor. Implementing it was trivial,
	though, so this was no obstacle.

2002-05-13  Maciej Stachowiak  <mjs@apple.com>

	Removed libjpeg dependency. Turns out we don't need it.
	
	* Makefile.am: Remove -ljpeg from link line.
	* khtml/misc/loader_jpeg.cpp: Removed.
	* khtml/misc/loader_jpeg.h: Removed.
	* khtml/misc/Makefile.am: Remve loader_jpeg from build.

2002-05-10  Richard J. Williamson  <rjw@apple.com>

	Made log output match webkit logging.

	* kwq/kwqdebug.mm:
	(KWQLog):

2002-05-10  Chris Blumenberg  <cblu@apple.com>

	Changed WCIFWebDataSourceMake to wrap around [IFWebDataSource initWithURL: attributes: flags:]
	instead of initWithHandle. 

	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::requestFrame):
	(KHTMLPart::submitForm):
	* kwq/WCWebDataSource.h:
	* libwebcore.exp:

2002-05-10  Darin Adler  <darin@apple.com>

	* kwq/WebCoreTextRenderer.h:

2002-05-09  Richard J. Williamson  <rjw@apple.com>

    Added new method to avoid creation of NSString.
    
        - (void)drawCharacters:(const UniChar *)characters length: (unsigned)length atPoint:(NSPoint)point withColor:(NSColor *)color;

	* kwq/KWQPainter.mm:
	(QPainter::drawText):
	* kwq/WebCoreTextRenderer.h:

2002-05-09  Kenneth Kocienda  <kocienda@apple.com>

        Fix for this bug:

        Radar 2890624 (need to remove workaround for double free of image data from QPixmap)

        The appropriate, bug-free AppKit code is now available to us on Jaguar. 
        Rolling out the workaround.

	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap)

=== Alexander-3 ===

2002-05-07  Darin Adler  <darin@apple.com>

	* kwq/KWQFontMetrics.mm: Fixed storage leak by initializing refCount.

2002-05-07  Darin Adler  <darin@apple.com>

	Move more plugin code into WebKit.

	Stop using IF for anything in WebCore to help make it clear what's part of
	the BSD licensed stuff and what's part of our proprietary stuff.

	* libwebcore.exp: Names of what exported changed.
	* kwq/Makefile.am: Source file names changed.

	* kwq/IFTextRenderer.h: Renamed to WebCoreTextRenderer.
	* kwq/IFTextRendererFactory.h: Renamed to WebCoreTextRendererFactory.
	* kwq/IFTextRendererFactory.m: Renamed to WebCoreTextRendererFactory.
	* kwq/WebCoreTextRenderer.h: Renamed from IFTextRenderer.
	* kwq/WebCoreTextRendererFactory.h: Renamed from IFTextRendererFactory.
	* kwq/WebCoreTextRendererFactory.m: Renamed from IFTextRendererFactory.

	* kwq/KWQFontMetrics.mm:
	* kwq/KWQPainter.mm:
	Updated for IF -> WebCore name change.

	* kwq/WebCoreViewFactory.h: Added.
	* kwq/WebCoreViewFactory.m: Added.

	* kwq/KWQKConfigBase.mm: (KConfig::readEntry): (KConfig::readNumEntry):
	Use the new [WebCoreViewFactory pluginsInfo] so we don't have to have
	the plugin database in WebCore any more.

	* kwq/WCJavaAppletWidget.h:
	* kwq/WCJavaAppletWidget.mm: (IFJavaAppletWidgetCreate):
	* kwq/WCPluginWidget.h:
	* kwq/WCPluginWidget.mm: (IFPluginWidgetCreate):
	Remove creation function machinery, and use the WebCoreViewFactory instead.

	* kwq/WCPlugin.h: Moved to WebKit.
	* kwq/WCPlugin.mm: Moved to WebKit.
	* kwq/WCPluginDatabase.h: Moved to WebKit.
	* kwq/WCPluginDatabase.mm: Moved to WebKit.
	* kwq/npapi.h: Moved to WebKit.
	* kwq/npapi.mm: Moved to WebKit.

2002-05-06  Darin Adler  <darin@apple.com>

	* WebCorePrefix.h: Added.

	* .cvsignore: Ignore the .pfe files in this directory.

	* khtml/dom/dom_doc.cpp:
	* khtml/dom/dom_text.cpp:
	Added namespace directives as a clean workaround for a conflict
	with the struct named Comment in <Carbon/AIFF.h>

	* kwq/KWQFont.mm:
	* kwq/KWQFontMetrics.mm:
	* kwq/KWQKGlobal.mm:
	* kwq/KWQListImpl.mm:
	* kwq/KWQPtrDictImpl.h:
	* kwq/KWQVectorImpl.mm:
	* kwq/kwqdebug.h:
	* kwq/qt/qcolor.h:
	* kwq/qt/qcombobox.h:
	* kwq/qt/qregion.h:
	* kwq/qt/qstring.h:
	* kwq/qt/qwidget.h:
	Remove old workaround for conflicts with Fixed, Rect, and Boolean.
	It does not good with a precompiled header anyway, and there is a
	more elegant small fix in the KDE code itself.

	* kwq/qt/qpoint.h:
	* kwq/KWQPointArray.mm: (QPointArray::setPoints):
	Work around bug with va_arg and PFE by not using varargs here.

	* kwq/KWQRect.mm: (QRect::unite): (QRect::operator&):
	Use std::min and std::max instead of defining our own MIN and MAX, which
	conflict with something in one of the headers we are precompiling (error
	message did not make it clear which).

	* kwq/KWQView.mm: (-[KWQHTMLView layout]), (-[KWQHTMLView drawRect:]):
	Switch from xNDEBUG to NDEBUG.

	* kwq/Makefile.am: Remove stuff for getting at the header inside the
	ApplicationServices and QD frameworks, since that code is now in WebKit.

	* kwq/kwqdebug.h: Get rid of format attribute because of bug 2920557.
	Switch from xNDEBUG to NDEBUG.

	* kwq/kwqdebug.mm: Switch from xNDEBUG to NDEBUG.

	* kwq/qt/qstring.h: Define QT_VERSION in here instead of on the command
	line to work around a PFE bug with -D, Radar 2921026.

2002-05-06  Richard J. Williamson  <rjw@apple.com>
        
        Changes to support dhmtl.
        Changes to support targeting (regression after 3.0 merge).

	* khtml/khtmlview.cpp:
	* kwq/KWQEvent.mm:
	* kwq/KWQKHTMLPart.mm:
	* kwq/KWQObject.mm:
	* kwq/KWQWidget.mm:
	* kwq/qt/qevent.h:
	* kwq/qt/qobject.h:
	* kwq/qt/qwidget.h:

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

	* khtml/css/cssstyleselector.cpp:
	* khtml/dom/css_value.cpp:
	* khtml/xml/dom_stringimpl.cpp:
	Put in some namespace-related statements to more-elegantly work around the
	conflicts between Macintosh and khtml identifiers.

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

	* kwq/IFTextRenderer.h: Added.
	* kwq/IFTextRendererFactory.h: Added.
	* kwq/IFTextRendererFactory.m: Added.
	These three are the new API for supplying text rendering machinery for WebCore.
	The implementation is in WebKit. Later we might want to flesh out the default
	implementation in WebCore so that it works OK by itself.

	* khtml/rendering/font.cpp: (Font::width): Function is now "width" without
	an underscore. We don't really need to hide the overload we added in this
	case.

	* kwq/qt/qfont.h: Simplify a lot. Doesn't hold an NSFont any more.
	* kwq/KWQFont.mm:
	(QFont::QFont): Eliminated the concept of "default font". Also, a QFont no
	longer holds an NSFont object. That's handled inside IFTextRenderer machinery.
	(QFont::~QFont): Simplify since we don't have an NSFont.
	(QFont::setFamily): Simplify since we don't have an NSFont.
	(QFont::setPixelSize): Simplify since we don't have an NSFont.
	(QFont::setPixelSizeFloat): Simplify since we don't have an NSFont.
	(QFont::setWeight): Simplify since we don't have an NSFont.
	(QFont::weight): Fix a bug where it would return Normal for a QFont that was
	both bold and italic.
	(QFont::setItalic): Simplify since we don't have an NSFont.
	(QFont::italic): Simplify since we have real "bool".
	(QFont::bold): Simplify since we have real "bool".
	(QFont::operator=): Simplify since we don't have an NSFont.
	(QFont::operator==): Rewrite since we don't have an NSFont.

	* kwq/qt/qfontmetrics.h: Simplify a little. The _width() method is now just an
	overload of the width() method. The main change was removing the include of Cocoa.h.
	* kwq/KWQFontMetrics.mm:
	Move most of the code out of here into WebKit.
	(QFontMetrics::ascent): Get it from the renderer.
	(QFontMetrics::descent): Get it from the renderer.
	(QFontMetrics::lineSpacing): Get it from the renderer.
	(QFontMetrics::width): Get it from the renderer.
	(QFontMetrics::boundingRect): Combine width and height that came from the renderer.
	(QFontMetrics::size): Combine width and height that came from the renderer.

	* kwq/Makefile.am: Add IFTextRendererFactory.m, remove KWQTextStorage.mm and KWQTextContainer.mm.
	* kwq/KWQMetrics.h: Removed.
	* kwq/KWQTextContainer.h: Removed.
	* kwq/KWQTextContainer.mm: Removed.
	* kwq/KWQTextStorage.h: Removed.
	* kwq/KWQTextStorage.mm: Removed.

	* kwq/KWQPainter.mm:
	Move most of the code out of here into WebKit.
	(QPainter::drawText): Call the renderer to do it.
	(QPainter::drawUnderlineForText): Call the renderer to do it.

	* libwebcore.exp: Export the IFTextRendererFactory class.

2002-04-26  Darin Adler  <darin@apple.com>

	* kwq/make-mac-encodings.c: (main): One more place that needed a workaround
	for Radar 2912404 (kCFStringEncodingInvalidId is negative even though
	CFStringEncoding is unsigned).

	* kwq/KWQTextArea.mm: (-[KWQTextArea paragraphs]): Do this
	ourselves so we don't rely on WebFoundation.
	* kwq/Makefile.am: Don't do a -I for WebFoundation.

2002-04-26  Darin Adler  <darin@apple.com>

	Pay no attention to the man who is not supposed to be working.

	* khtml/Makefile.am:
	* khtml/css/Makefile.am:
	* khtml/ecma/Makefile.am:
	* khtml/html/Makefile.am:
	* khtml/java/Makefile.am:
	* khtml/misc/Makefile.am:
	* khtml/rendering/Makefile.am:
	* khtml/xml/Makefile.am:
	Don't generate empty .moc files or khtmldata.h; there's no reason
	not to just check them in instead. Also tweak a few build rules to
	use automatic make variables.

	* khtml/ecma/kjs_window.moc: Added.
	* khtml/html/html_documentimpl.moc: Added.
	* khtml/html/htmltokenizer.moc: Added.
	* khtml/java/kjavaapplet.moc: Added.
	* khtml/java/kjavaappletcontext.moc: Added.
	* khtml/java/kjavaappletserver.moc: Added.
	* khtml/java/kjavaappletwidget.moc: Added.
	* khtml/java/kjavadownloader.moc: Added.
	* khtml/java/kjavaprocess.moc: Added.
	* khtml/khtmlview.moc: Added.
	* khtml/misc/khtmldata.h: Added.
	* khtml/rendering/render_form.moc: Added.
	* khtml/rendering/render_frames.moc: Added.
	* khtml/rendering/render_replaced.moc: Added.
	* khtml/xml/dom_docimpl.moc: Added.
	* khtml/xml/xml_tokenizer.moc: Added.

	* kwq/kwqdebug.mm: Make some globals private.

2002-04-25  Darin Adler  <darin@apple.com>

	* kwq/KWQMetrics.h: Add NSObject to required protocols for
	the KWQLayoutFragment protocol so we can retain and release.

	* kwq/KWQTextStorage.mm: (-[KWQTextStorage _buildFragmentForString:]):
	Removed a cast to NSObject * that worked around the lack of the above.

2002-04-25  Richard Williamson  <rjw@apple.com>

        Little changes in preparation for events.

	* khtml/ecma/kjs_proxy.cpp:
	(KJSProxyImpl::createHTMLEventHandler):
	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::createHTMLEventListener):

2002-04-25  Darin Adler  <darin@apple.com>

	Add a workaround for Radar 2912404 (kCFStringEncodingInvalidId is negative even
	though CFStringEncoding is unsigned)

	* kwq/KWQCharsets.mm:
	(KWQCFStringEncodingFromIANACharsetName):
	(KWQCFStringEncodingFromMIB):
	* kwq/KWQtextcodec.mm:
	(QTextCodec::codecForMib):
	(QTextCodec::codecForName):
	* kwq/make-charset-table.pl:
	Add casts to (CFStringEncoding) wherever we use kCFStringEncodingInvalidId.

2002-04-25  Darin Adler  <darin@apple.com>

	Rework plugin code to prepare to move more of it into WebKit.

	* khtml/rendering/render_applet.cpp:
	(RenderApplet::RenderApplet): Create a widget for the applet using
	the new simpler API.

	* kwq/kdecore/kconfig.h:
	* kwq/KWQKConfigBase.mm: Eliminate KConfigBase.
	Set things up so we are poised to handle the other non-plugin
	config keys easily in the future.

	* kwq/KWQKHTMLPart.mm: (KHTMLPart::requestObject): Use the new simpler
	IFPluginWidgetCreate API instead of the older WCPluginWidget one.

	* kwq/qt/qstring.h: Add simpler conversions to/from NSString.
	* kwq/KWQString.mm: (QString::fromNSString): New.

	* kwq/WCPluginWidget.h: Made this API simpler both for the C++
	side and the Objective-C side. There's now no class, and only one
	function that needs to be supplied (normally by WebKit).
	* kwq/WCJavaAppletWidget.h: Same thing for the Java case.

	* kwq/WCJavaAppletWidget.mm:
	(IFSetJavaAppletViewCreationFunction): New.
	(IFJavaAppletWidgetCreate): New. Most of the code that was in here
	is now moved into WebKit.
	* kwq/WCPluginWidget.mm:
	(IFSetPluginViewCreationFunction): New.
	(IFPluginWidgetCreate): New. Most of the code that was in here
	is now moved into WebKit.

	* libwebcore.exp: Update for new function names.

2002-04-24  Chris Blumenberg  <cblu@apple.com>

	Renamed [IFWebDataSource frame] to [IFWebDataSource webFrame]

	* kwq/KWQKHTMLPart.mm:
	(KHTMLPart::submitForm):
	(KHTMLPart::khtmlMouseReleaseEvent):
	* kwq/external.h:

=== Alexander 0.3c2 (v1) ===

2002-04-24  Darin Adler  <darin@apple.com>

	Get rid of all NEED_BOGUS_XXX.

	* khtml/java/Makefile.am: Remove -DNEED_BOGUS_TEXTSTREAMS and
	-DNEED_BOGUS_X_DEFINES.
	* khtml/rendering/Makefile.am: Remove -DNEED_BOGUS_X_DEFINES.
	* khtml/xml/Makefile.am: Remove -DNEED_BOGUS_TEXTSTREAMS.
	* kwq/Makefile.am: Remove -DNEED_BOGUS_X_DEFINES and KWQKJavaEmbed.mm.
	* kwq/KWQKJavaEmbed.mm: Removed.

	* kwq/KWQDef.h: Remove XEvent define (inside NEED_BOGUS_X_DEFINES).

	* kwq/qt/qtextstream.h: Don't look at NEED_BOGUS_TEXTSTREAMS.
	* kwq/KWQtextstream.mm: Don't look at NEED_BOGUS_TEXTSTREAMS.

	* khtml/java/javaembed.h: Made this just a QWidget typedef for now.
	* khtml/java/kjavaappletwidget.cpp: ifdef out the unused setWindow function.

2002-04-23  Darin Adler  <darin@apple.com>

	* khtml/css/css_valueimpl.cpp:
	(CSSPrimitiveValueImpl::computeLengthFloat):
	* khtml/css/cssstyleselector.cpp:
	(CSSStyleSelector::computeFontSizes):
	Remove our 72/96 dpi changes. They weren't doing much good.
	But this doesn't fix all the 72/96 dpi issues. It's just the start.

	* kwq/khtml/khtml_settings.h:
	* kwq/KWQKHTMLSettings.mm:
	Remove some unused stuff: charset(), setCharset(), availableFamilies(),
	fontSizes(), SCREEN_RESOLUTION.

2002-04-23  Kenneth Kocienda  <kocienda@apple.com>

        Reviewed by: Darin Adler

        Fix for Radar 2908403 (Fix names in WebFoundation extensions code)

        Extensions code in WebFoundation now is in its own namespace.
        Where we have added categories to existing Foundation and AppKit
        classes, the categories begin with the IF prefix. All method names
        begin with the _IF_ prefix.

        The file here was changed to use the new names.

	* kwq/KWQTextArea.mm:
	(-[KWQTextArea paragraphs])

2002-04-23  Kenneth Kocienda  <kocienda@apple.com>

	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap): Fixed unneeded leak of an NSImage in
        the case where we are still covering for a double-release
        bug in AppKit. No need to add insult to injury. :)

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

	Fix width of non-breaking spaces. There's code to hack this
	at the KDE level for fonts that don't have non-breaking space
	characters, but we need it even for fonts that do.

	Not sure why this worked better on Puma, but now it's fine on
	both Puma and Jaguar.

	* kwq/KWQFontMetrics.mm:
	(ConvertCharactersToGlyphs): New. Turns non-breaking spaces into
	normal spaces if needed.
	(-[KWQLayoutInfo drawString:atPoint:withFont:color:]),
	(-[KWQLayoutInfo _initializeCaches]), (_rectForString): Change to
	call ConvertCharactersToGlyphs instead of ATSUConvertCharToGlyphs.

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

	* kwq/qt/qpixmap.h:
	* kwq/KWQPixmap.mm:
	(QPixmap::QPixmap): Clear needsCopyOnWrite flag in all the
	constructors other than the copy constructor. Set it in the copy
	constructor.
	(QPixmap::~QPixmap): Simplify.
	(QPixmap::mask): Always return 0 rather than leaking a QBitmap each time,
	since Qt uses 0 to mean "no mask".
	(QPixmap::isNull): Simplify.
	(QPixmap::resize): Do the copy here if we need it, and do the setScalesWhenResized:
	call in here instead of trying to do it elsewhere.
	(QPixmap::xForm): Only copy the pixmap once.
	(QPixmap::operator=): Set the needsCopyOnWrite flag. Also change the retain/release
	idiom around so we don't need to check for self-assignment.

	* khtml/ecma/Makefile.am: Don't build kjs_debugwin any more.
	* khtml/ecma/kjs_debugwin.cpp: Removed.
	* khtml/ecma/kjs_debugwin.h: Removed.

2002-04-22  Chris Blumenberg  <cblu@apple.com>

	Added a new method to WCPluginDatabase allHandledMIMETypes.
	It returns an  array of the mime types that plug-ins handle.

	* kwq/WCPluginDatabase.h:
	* kwq/WCPluginDatabase.mm:
	(-[WCPluginDatabase allHandledMIMETypes]):

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

	Problems loading iframes seemed to be due to NSURL objects that
	were not normalized, so I made the NSURL creation all be done
	by KURL, which fixed the problem.

	* kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame), (KHTMLPart::submitForm),
	(KHTMLPart::khtmlMouseReleaseEvent):
	* kwq/KWQKjobclasses.mm:
	Call getNSURL instead of creating NSURLs by converting to strings.

	* kwq/kdecore/kurl.h:
	* kwq/KWQKURL.mm: (KURL::getNSURL): New.

2002-04-19  Kenneth Kocienda  <kocienda@apple.com>

        Changes to support submission of forms using HTTP POST.
                
        These changes move us over to using the new WebKit interface for creating 
        WebDataSource instances, one that passes a handle rather than just a URL, 
        enabling the specific request method to be communicated to WebFoundation.
        This fixes:

        Radar 2903602 (IFWebDataSource API must passes attributes and flags to IFURLHandle)

        Fixed handling of password fields:

        Radar 2903605 (WebCore form processing drops out password input data)
        
        Added some hacks to get form <input type=image ...> working correctly:

        Radar 2907198 (Forms not getting submitted correctly when <input type=image>)
        
        
	* khtml/rendering/render_form.cpp: (RenderImageButton::RenderImageButton),
	(RenderImageButton::~RenderImageButton), (RenderImageButton::printObject):
	* khtml/rendering/render_form.h:
	* kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame), (KHTMLPart::submitForm),
	(KHTMLPart::khtmlMouseReleaseEvent):
	* kwq/KWQNSTextField.mm: (-[KWQNSTextField setPasswordMode:]), (-[KWQNSTextField
	textDidChange:]), (-[KWQNSTextField stringValue]):
	* kwq/Makefile.am:
        * kwq/KWQInvisibleButton.h: Added
        * kwq/KWQInvisibleButton.mm: Added

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

	Fixes for compiling with gcc3 and more warnings.

	* khtml/html/.cvsignore: Add kentities.c; I could have sworn I did this
	already.
	* khtml/html/Makefile.am: Remove erroneous duplicate definition of
	CLEAN_FILES.

	* libwebcore.exp:
	* libwebcoretests.exp:
	Rebuilt these lists from scratch. Almost everything in here is different
	since the C++ name mangling rules changed.

	* khtml/css/cssparser.cpp:
	* khtml/misc/htmlhashes.cpp:
	Disable inlining in part of this file as a workaround for Radar 2905890.

	* kwq/KWQApplication.mm: (QDesktopWidget::screenGeometry):
	Add casts to int needed to make gcc3 happy.
	* kwq/KWQArrayImpl.mm: Add missing #include of <string.h>.

	* kwq/KWQBitmap.mm:
	* kwq/KWQFrame.mm:
	* kwq/KWQLineEdit.mm:
	Removed some unused copy constructors and assignment operators to avoid
	warnings in them.

	* kwq/KWQButton.mm: (QButton::setText):
	* kwq/KWQListBox.mm: (QListBox::~QListBox), (QListBox::clear),
	(QListBox::setSelectionMode), (QListBox::currentItem), (QListBox::insertItem),
	(QListBox::setSelected), (QListBox::isSelected), (QListBoxItem::width),
	(QListBoxItem::height):
	* kwq/KWQScrollView.mm: (QScrollView::setContentsPos), (QScrollView::addChild),
	(QScrollView::resizeContents), (QScrollView::viewportToContents),
	Use local variables to work around Radar 2905835.

	* kwq/KWQCString.mm: (operator<<):
	* kwq/KWQPoint.mm: (operator<<):
	* kwq/KWQRect.mm: (operator<<):
	* kwq/KWQSize.mm: (operator<<):
	* kwq/qt/qarray.h:
	* kwq/qt/qcstring.h:
	* kwq/qt/qdatetime.h:
	* kwq/qt/qdict.h:
	* kwq/qt/qlist.h:
	* kwq/qt/qmap.h:
	* kwq/qt/qpainter.h:
	* kwq/qt/qpoint.h:
	* kwq/qt/qptrdict.h:
	* kwq/qt/qrect.h:
	* kwq/qt/qsize.h:
	* kwq/qt/qstack.h:
	* kwq/qt/qvaluelist.h:
	* kwq/qt/qvector.h:
	Say std::ostream instead of just ostream.

	* kwq/KWQCharsets.mm: Fix a const problem.

	* kwq/KWQDateTime.mm: (QTime::elapsed), (QTime::restart): Use int instead
	of uint, since these functions try to handle values that are less than 0.
	(operator<<): Say std::ostream instead of just ostream.
	* kwq/KWQTextArea.mm: (RangeOfParagraph): Fix an int/uint issue.

	* kwq/KWQFile.mm: (QFile::KWQFilePrivate::KWQFilePrivate),
	(QFile::KWQFilePrivate::~KWQFilePrivate): Use new/delete instead of
	malloc/free so we don't get void * warnings.

	* kwq/KWQFontMetrics.mm: (__IFFillStyleWithAttributes),
	(-[KWQLayoutInfo drawString:atPoint:withFont:color:]),
	(-[KWQLayoutInfo _initializeCaches]),
	(_rectForString):
	* kwq/KWQKURL.mm: (KURL::KWQKURLPrivate::KWQKURLPrivate),
	(RelativeURLKeyRetainCallBack), (RelativeURLKeyReleaseCallBack),
	(RelativeURLKeyEqualCallBack), (RelativeURLKeyHashCallBack),
	(KURL::normalizeURLString), (KURL::normalizeRelativeURLString):
	* kwq/KWQPainter.mm: (QPainter::save):
	* kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]),
	(-[URLLoadClient IFURLHandle:didRedirectToURL:]):
	Add type casts where necessary to make the stricter gcc3 happy.

	* kwq/KWQPixmap.mm: (QPixmap::QPixmap): Explicitly initialize the underlying
	QPaintDevice.
	(QPixmap::size), (QPixmap::rect): Add type casts where necessary to make
	the stricter gcc3 happy.
	
	* kwq/KWQPtrDictImpl.mm: (KWQPtrDictImpl::KWQPtrDictPrivate::KWQPtrDictPrivate):
	Say std::bad_alloc instead of just bad_alloc.
	(invokeDeleteFuncOnValue), (KWQPtrDictImpl::clear): Pass a pointer to a function
	pointer rather than a function pointer to avoid a warning about turning function
	pointers into void *.

	* kwq/KWQRegion.mm: (QRegion::_initialize), (QRegion::~QRegion): Use new/delete
	rather than calloc/free so we don't get void * warnings.
	(QRegion::boundingRect): Add type casts.

	* kwq/KWQString.mm: (QString::fromStringWithEncoding): Add cast.
	(QString::setNum): use %ld and %lu rather than %D and %U.
	(QString::fill), (QString::convertToQCString): Add casts.

	* kwq/KWQTextStorage.mm: (-[KWQTextStorage _buildFragmentForString:]):
	Add a cast to make gcc3 happy.

	* kwq/KWQVariant.mm: Say "friend class" instead of "friend".

	* kwq/KWQVectorImpl.mm: (KWQVectorImpl::KWQVectorPrivate::KWQVectorPrivate):
	Say std::bad_alloc instead of just bad_alloc.
	(KWQVectorImpl::data): Replace the old autorelease trick with a new one that
	doesn't require mixing malloc with NSData.

	* kwq/KWQView.mm: (-[KWQHTMLView mouseUp:]), (-[KWQHTMLView mouseDown:]):
	Add casts to make gcc3 happy.

	* kwq/KWQWidget.mm: (QWidget::frameGeometry), (QWidget::mapToGlobal),
	(QWidget::minimumSizeHint): Add casts to make gcc3 happy. Also another
	workaround for Radar 2905835.

	* kwq/WCPlugin.mm: (-[WCPlugin load]): Add tons of type casts so we don't have
	to mix void * with function pointer types.

	* kwq/WCPluginWidget.h:
	* kwq/WCPluginWidget.mm: (WCIFPluginMakeFunction), (WCIFNullPluginMakeFunction):
	Change types so we don't have to mix void * with function pointer types.
	This caught a mistake where WCIFNullPluginMakeFunction was returning the wrong
	function pointer.

	* kwq/external.h: Add some missing interfaces that the pickier gcc3 needed to see.

	* kwq/kwqdebug.mm: Don't compile the file if xNDEBUG is set. Otherwise we get
	a warning in here.

	* kwq/npapi.h: Use function pointer types for function pointers and transition
	vectors so we don't have to mix void * with function pointer types.

	* kwq/npapi.mm: (NPN_GetURLNotify), (NPN_GetURL),
	(NPN_PostURLNotify), (NPN_PostURL), (NPN_NewStream), (NPN_Write),
	(NPN_DestroyStream), (NPN_Status), (NPN_GetValue), (NPN_SetValue),
	(NPN_InvalidateRect), (NPN_InvalidateRegion), (NPN_ForceRedraw):
	Use local variables to work around Radar 2905835.
	(functionPointerForTVector), (tVectorForFunctionPointer):
	Change types around so we don't have to mix void * with function pointer types.

2002-04-17  Darin Adler  <darin@apple.com>

	Fix some std:: things as a first step in compiling with gcc 3.
	These fixes are all needed to compile WebBrowser with gcc 3.

	* kwq/qt/qarray.h:
	* kwq/qt/qcstring.h:
	* kwq/qt/qlist.h:
	* kwq/qt/qmap.h:
	* kwq/qt/qpainter.h:
	* kwq/qt/qpoint.h:
	* kwq/qt/qrect.h:
	* kwq/qt/qsize.h:
	* kwq/qt/qvaluelist.h:
	Call it std::ostream instead of ostream.

2002-04-17  Darin Adler  <darin@apple.com>

	Fix build problem.

	* Makefile.am: Don't build this directory before subdirs, because
	we link at this level. Move the kentities.c build out of here,
	because it needs to be done before khtml/html.
	* khtml/html/Makefile.am: Move kentities.c build rules here.

	* kentities.gperf: Removed.
	* khtml/html/kentities.gperf: Added.

	* .cvsignore: Don't ignore kentities.c.
	* khtml/html/.cvsignore: Ignore kentities.c.

2002-04-17  Darin Adler  <darin@apple.com>

	* .cvsignore: Ignore new generated files at this level.

	* include/ *: Removed. We don't need this hack any more.
	* src/ *: Removed. Sources are now in their new locations.
	* src/libwebcore.exp: Removed. This is now in its new location.
	* src/libwebcoretests.exp: Removed. This is now in its new location.

	* Makefile.am: Build khtml and kwq subdirs, don't build src and include.
	Also add the rules that used to be in src about linking the library and
	the rules that used to be in src/kdelibs/kdecore about building the
	kentitices.c file.

	* dummy.mm: Moved here from src by hand.
	* kentities.gperf: Moved here from src/kdelibs/kdecore by hand.

	* khtml/html/Makefile.am: Add WebCore directory to includes so the
	include of "kentities.c" will work.

	* kwq/KWQKHTMLPart.mm:
	* kwq/KWQKJavaEmbed.mm:
	* kwq/KWQKloader.mm:
	Correct includes so we don't need a -I for each of the subdirectories.

	* kwq/khtml/java/javaembed.h: Removed. We use the one in the real
	khtml directory.

	* kwq/kwqdebug.h: Rolled over Chris's changes, which were done after
	the cvs surgery was done.

2002-04-17  Chris Blumenberg  <cblu@apple.com>

	Added a debug bit mask for plugins and downloads.

	* src/kwq/kwqdebug.h:

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

	* src/kdelibs/khtml/khtml_part.cpp: Added. Not used yet, but maybe we'll use
	part of it some time soon.

	* src/kdelibs/khtml/khtml_part.h: Reenabled this file, and made changes so it
	could be used instead of our own header.
	* src/kwq/KWQKHTMLPart.h: Removed.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::KHTMLPart): Add parameter to match KDE.
	(KHTMLPart::settings): Add const to match KDE.
	(KHTMLPart::scheduleRedirection): Add parameter to match KDE.
	(KHTMLPart::encoding): Add const to match KDE.
	(KHTMLPart::urlCursor): Update return value to match KDE.
	(KHTMLPart::urlSelected): Add parameter to match KDE.
	(KHTMLPart::requestObject): Put plugins array on private object.
	(KHTMLPart::frames): Remove const to match KDE.
	(KHTMLPart::documentSource): Add const to match KDE.
	(KHTMLPart::setTitle): Put dataSource on private object.
	(KHTMLPart::setDataSource): New, not inline any more.
	(KHTMLPart::getDataSource): New, not inline any more.

	* src/libwebcore.exp: Update for function name changes.

	* src/kwq/khtml/khtml_settings.h:
	* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::changeCursor): Add const.

	* src/kwq/KWQView.mm: (-[KWQHTMLView layout]): No need to check xmlDocImpl()
	and renderer() for NULL now, because KHTMLView::layout does.

	* src/kwq/KWQKloader.mm: (Loader::load): Use type instead of id.

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

	* src/kwq/kio/jobclasses.h:
	* src/kwq/KWQKjobclasses.mm: (TransferJob::setError): New.

	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidCancelLoading:]),
	(-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	Set an error code so that the load will abort intead of continuing.

	* src/kwq/KWQKHTMLPart.mm: Removed some unused code.

2002-04-16  Kenneth Kocienda  <kocienda@apple.com>

        Moved IFError class from WebKit to WebFoundation.
        Updated URL handle client interface to pass an IFError in
        an error callback rather than a plain int. These files were
        modified due to this change.

	* src/kwq/KWQKHTMLPart.mm: (WCSetIFWebDataSourceMakeFunc):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):

        Removed now unneeded file and function pointer symbol entry
        since WebCore code never needs to create an IFError now that 
        those objects are created at a lower level (in WebFoundation).
        
	* src/kwq/WCError.h: Removed.
	* src/libwebcore.exp:

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

	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
	Remove some minor gratuitous diffs vs. KDE.

2002-04-15  Richard Williamson  <rjw@apple.com>

        Updated to reflect changes in KDE.
        
	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):

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

	* src/kdelibs/khtml/css/css_valueimpl.cpp:
	(FontFamilyValueImpl::FontFamilyValueImpl): Fix comment.
	* src/kdelibs/khtml/css/cssstyleselector.cpp: Remove some gratuitous diffs vs. KDE.
	* src/kdelibs/khtml/html/html_objectimpl.cpp:
	(HTMLEmbedElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
	* src/kdelibs/khtml/html/html_tableimpl.cpp:
	(HTMLTableElementImpl::parseAttribute),
	(HTMLTablePartElementImpl::parseAttribute): Remove unneeded copy from KWQ's early days.
	* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken): Redo the
	APPLE_CHANGES ifdef here.
	* src/kdelibs/khtml/khtmlpart_p.h: Update to latest kde.
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView): Add ifdef APPLE_CHANGES.
	(KHTMLView::~KHTMLView): Add ifdef APPLE_CHANGES.
	(KHTMLView::print): Remove code left in here during merge process.
	* src/kwq/KWQKHTMLPart.mm: Remove unused setFontSizes(), fontSizes(), and
	resetFontSizes(). After the merge is landed, remove more.
	* src/libwebcore.exp: Export updateStyleSelector() for WebKit.

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

	Fix text to it displays at the right font size.

	* src/kdelibs/khtml/css/cssstyleselector.cpp:
	(CSSStyleSelector::computeFontSizes): Apply the same SCREEN_RESOLUTION hack here
	that we do elsewhere.
	* src/kdelibs/khtml/rendering/font.cpp: (Font::width): Use kMin instead of max (oops).
	(Font::update): Turn off font database chicanery.
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::zoomFactor): Use zoom factor 100, not 1.

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

	More fixes so text displays (still at wrong font size).

	* src/kdelibs/khtml/rendering/font.cpp: (max): New helper.
	(Font::drawText): Simplified implementation for now.
	(Font::width): Simplified implementation for now.
	* src/kwq/KWQColorGroup.mm: Reinstated QCOLOR_GROUP_SIZE.

	* src/kwq/qt/qfontmetrics.h: Removed charWidth and changed _width to take QChar *.
	* src/kwq/KWQFontMetrics.mm: Removed charWidth and changed _width to take QChar *.

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

	Merged changes from KDE 3.0 final. Other fixes to get things compiling.

	* src/kdelibs/khtml/css/css_valueimpl.cpp:
	(CSSStyleDeclarationImpl::setProperty): Fix unused variable.
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
	Fix unused variable.
	* src/kdelibs/khtml/rendering/font.cpp: (Font::drawText), (Font::width),
	(Font::update): Disable special "nsbp" logic for now. We can reenable it
	if necessary.
	* src/kdelibs/khtml/rendering/render_replaced.cpp: Fix mismerge.
	* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
	Fix unused variable.
	* src/kwq/KWQApplication.mm: (QDesktopWidget::width), (QApplication::desktop):
	Fix mismerge.
	* src/kwq/KWQColorGroup.mm: Fix QCOLOR_GROUP_SIZE.
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::lineSpacing): New.
	(QFontMetrics::width): Remove unused optimization.
	* src/kwq/qt/qfontmetrics.h: Add lineSpacing().

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

        Merged changes from previous merge pass.

        2002-03-25  Darin Adler  <darin@apple.com>

        Last bit of making stuff compile and link. Probably will drop the merge now
        and take it up again when it's time to merge in KDE 3.0 final.

	* src/kwq/KWQEvent.mm: (QFocusEvent::reason): New.
	* src/kwq/KWQPainter.mm: (QPainter::drawText): New overload.

        2002-03-25  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/rendering/font.cpp: (Font::width): Make it call _width so we
        don't lose the optimization.
        
	* src/kwq/KWQApplication.mm: (QDesktopWidget::screenNumber): New.
	(QDesktopWidget::screenGeometry): New.
        (QApplication::style): New.
	* src/kwq/KWQColorGroup.mm: (QColorGroup::highlight): New.
	(QColorGroup::highlightedText): New.
	* src/kwq/KWQFont.mm: (QFont::setPixelSize): New.
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::charWidth): New.
	* src/kwq/KWQKGlobal.mm: (KGlobal::locale): Implement.
        (KLocale::KLocale): New.
	(KLocale::languageList): New.
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::sheetUsed): New.
	(KHTMLPart::setSheetUsed): New.
        (KHTMLPart::zoomFactor): New.
	* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::mediumFontSize): New.
	* src/kwq/KWQScrollView.mm: (QScrollView::childX): New.
        (QScrollView::childY): New.
        
	* src/kwq/qt/qapplication.h: style() returns a QStyle &.
	* src/kwq/qt/qpalette.h: Add Highlight and HighlightedText.

        2002-03-24  Darin Adler  <darin@apple.com>

        More compiling. Still won't link.

	* src/kdelibs/khtml/khtmlview.cpp: Disable printing and drag and drop code.
	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
        Temporarily turn off our smarter underlining since it relies on access to the
        string, and TextSlave doesn't have that any more.
	(RenderText::nodeAtPoint): Get rid of a workaround we don't need any more for
        a bug that was fixed by KDE folks.
	* src/kwq/KWQApplication.mm: (QApplication::desktop): Make the desktop be a
        QDesktopWidget.
	* src/kwq/qt/qnamespace.h: Add MetaButton.
	* src/kwq/qt/qtooltip.h: Add a maybeTip virtual function member and a virtual
        destructor.

        2002-03-24  Darin Adler  <darin@apple.com>

        Some fixes to get more stuff to compile.

	* src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMDocument::getValueProperty):
        Don't try to look at the private m_bComplete to display "complete". Just do
        "loading" and "loaded".
        * src/kdelibs/khtml/khtmlpart_p.h: #ifdef this all out for APPLE_CHANGES.
	* src/kdelibs/khtml/rendering/font.cpp: (Font::update): Add an explicit cast to
        int to avoid float -> int warning.
	* src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcColMinMax):
        Add an explicit cast to int to avoid uint compared with int warning.
	* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyleSelector):
        Use sheetUsed() and setSheetUsed() functions on KHTMLPart intead of getting
        at private fields the way the real KDE code does.
        
        * src/kwq/KWQKHTMLPart.h: Declare zoomFactor(), sheetUsed(), and setSheetUsed().
	* src/kwq/KWQStyle.h: Add PM_DefaultFramWidth as another metric.
	* src/kwq/kdecore/klocale.h: Add languageList().
	* src/kwq/khtml/khtml_settings.h: Add mediumFontSize().
	* src/kwq/qt/qapplication.h: Add style() and QDesktopWidget.
	* src/kwq/qt/qevent.h: Add reason().
	* src/kwq/qt/qfont.h: Add setPixelSize(int).
	* src/kwq/qt/qfontmetrics.h: Add charWidth() and _charWidth() functions.
	* src/kwq/qt/qpainter.h: Add drawText() overload with position parameter.
	* src/kwq/qt/qpalette.h: Add highlight() and highlightedText().
	* src/kwq/qt/qscrollview.h: Add childX() and childY().
        
	* src/kwq/KWQApplication.mm: Change KWQDesktopWidget to QDesktopWidget.

2002-04-11  Chris Blumenberg  <set EMAIL_ADDRESS environment variable>

        Added a symbol for WCPluginDatabase.

	* src/libwebcore.exp:

2002-04-08  Maciej Stachowiak  <mjs@apple.com>

	Fix Radar 2896001 (crashes in KURL):

	* src/kwq/KWQKURL.mm: (KURL::KWQKURLPrivate::KWQKURLPrivate):
	Initialize refCount to 0 in the copy constructor.

2002-04-08  Chris Blumenberg  <cblu@apple.com>

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::requestObject):
	* src/kwq/WCPluginWidget.h:
	* src/kwq/WCPluginWidget.mm: (WCPluginWidget::WCPluginWidget):

        Support new stream requests from plug-ins that are relative URL's.

2002-04-05  Chris Blumenberg  <cblu@apple.com>

	* src/libwebcore.exp:

	Added symbol for IFNullPluginView

2002-04-05  Richard Williamson  <rjw@apple.com>

        Various scrolling, hit detection, and goto anchor fixes to account for frames being
        translated in scroll views.
        
	* src/kwq/KWQScrollView.mm: (QScrollView::setContentsPos),
	(QScrollView::viewportToContents):

2002-04-05  Chris Blumenberg  <cblu@apple.com>

	* src/kwq/WCPluginWidget.h:
	* src/kwq/WCPluginWidget.mm: (WCSetIFNullPluginMakeFunc),
	(WCPluginWidget::WCPluginWidget), (WCIFPluginMakeFunction),
	(WCIFNullPluginMakeFunction):

	An IFNullPluginView is now created when no plug-in for a requested
	mime type is found. IFNullPluginView displays a null plug-in icon
	and will eventually report this error to the WebController. 

2002-04-05  Richard Williamson  <rjw@apple.com>

        Hacks to support:
        
        1.  Not loading a document when a link is to an anchor on same page.
        2.  Correctly targeting frames.
        
        Our documentation is actually useable now.
        
	* src/kwq/KWQKHTMLPart.mm: (splitUrlTarget), (KHTMLPart::khtmlMouseReleaseEvent):
	* src/kwq/external.h:

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

	* src/kwq/KWQKloader.mm:
	(-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
	Use contentLengthReceived rather than getting the length of
	availableResourceData to determine how much data has arrived.

2002-04-05  Richard Williamson  <rjw@apple.com>

        More bulletproofing to deal with cleanup during deallocation.
        
	* src/kdelibs/khtml/html/htmlparser.cpp: (KHTMLParser::popOneBlock):
	* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::processToken):

2002-04-05  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/qt/qmap.h (QMapNode::~QMapNode): Cast left() and right()
	to the right type to fix a leak detected by the automated leak
	checking on Jersey.

2002-04-04  Richard Williamson  <rjw@apple.com>

        Extra bulletproofing to prevent script execution when in partially
        dealloced state.
        
	* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::scriptExecution):

2002-04-04  Chris Blumenberg  <cblu@apple.com>

	* src/kwq/WCPlugin.mm: (-[WCPlugin load]):
	* src/kwq/npapi.h:
	* src/kwq/npapi.mm: (NPN_GetJavaEnv), (NPN_GetJavaPeer):

	Added stubs for NPN_GetJavaEnv and NPN_GetJavaPeer. This fixes a flash crasher.

2002-04-04  Chris Blumenberg  <cblu@apple.com>

	* src/kdelibs/khtml/rendering/render_frames.cpp:
	(RenderPartObject::updateWidget):
	* src/kwq/WCPluginWidget.mm: (WCPluginWidget::WCPluginWidget):

	Moved the removal of __KHTML__ EMBED to attributes WCPluginWidget. One less APPLE_CHANGES.

2002-04-04  Darin Adler  <darin@apple.com>

	Redo clobbered fixes for problems that show up only when xNDEBUG is set

	* src/kwq/KWQApplication.mm: (QApplication::sendEvent):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]):
	Remove or ifdef otherwise-unused variables.

	* src/kwq/KWQFontMetrics.mm: (_rectForString):
	Add missing semicolons.

2002-04-04  Darin Adler  <darin@apple.com>

	* src/kwq/KWQString.mm: (QString::unicode), (QString::latin1),
	(QString::convertToQCString): Remove some excessive logging that
	was getting in the way of important log messages.

2002-04-03  Richard Williamson  <rjw@apple.com>

        Added support for finalURL in data source.
        
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandle:didRedirectToURL:]):
	* src/kwq/external.h:

2002-04-03  Darin Adler  <darin@apple.com>

	* src/Makefile.am: Concatenate libwebcore.exp and libwebcoretests.exp.
	* src/libwebcore.exp: Update with exports that are needed when inlining is
        turned off.
	* src/libwebcoretests.exp: Added. Exports that we need to run the test in the
        Tests directory.
        * .cvsignore: Ignore the concatenated file.

2002-04-03  Darin Adler  <darin@apple.com>

	* src/Makefile.am: Don't strip at all if STRIP_FLAGS are empty.
	* src/kwq/qt/qtextcodec.h: Remove stray undef.

2002-04-03  Kenneth Kocienda  <kocienda@apple.com>

        Updated debugging log messages to use new varargs macros.

	* src/kwq/KWQApplication.mm: (QApplication::sendEvent),
	(QApplication::_initialize):
	* src/kwq/KWQColor.mm: (QColor::setNamedColor):
	* src/kwq/KWQComboBox.mm: (QComboBox::setCurrentItem):
	* src/kwq/KWQFont.mm: (QFont::getFont):
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo _initializeCaches]),
	(_rectForString):
	* src/kwq/KWQKHTMLPart.mm: (recursive), (KHTMLPart::write), (KHTMLPart::end),
	(KHTMLPart::nodeActivated):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidCancelLoading:]), (-[URLLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]), (-[URLLoadClient
	IFURLHandle:didRedirectToURL:]), (Loader::servePendingRequests):
	* src/kwq/KWQObject.mm: (QObject::connect), (QObject::performAction):
	* src/kwq/KWQScrollView.mm: (QScrollView::addChild),
	(QScrollView::resizeContents), (QScrollView::updateContents),
	(QScrollView::repaintContents):
	* src/kwq/KWQString.mm: (QString::unicode), (QString::latin1):
	* src/kwq/KWQView.mm: (-[KWQHTMLView notificationReceived:]), (-[KWQHTMLView
	layout]), (-[KWQHTMLView drawRect:]), (-[KWQHTMLView resetView]), (-[KWQHTMLView
	mouseDragged:]):
	* src/kwq/KWQWidget.mm: (QWidget::resize), (QWidget::move):
	* src/kwq/WCPlugin.mm: (-[WCPlugin initializeWithPath:]), (-[WCPlugin load]):
	* src/kwq/WCPluginDatabase.mm: (findPlugins):
	* src/kwq/kwqdebug.h:
	* src/kwq/kwqdebug.mm: (timestamp), (KWQLog):

2002-04-03  Darin Adler  <darin@apple.com>

	Fix problems that show up only when xNDEBUG is set.

	* src/kwq/KWQApplication.mm: (QApplication::sendEvent):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]):
	* src/kwq/KWQView.mm: (-[KWQHTMLView layout]), (-[KWQHTMLView drawRect:]):
	Remove or ifdef otherwise-unused variables.

	* src/kwq/KWQFontMetrics.mm: (_rectForString):
	* src/kwq/KWQPainter.mm: (QPainter::setRasterOp), (QPainter::translate),
	(QPainter::scale):
	Add missing semicolons.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::begin):
	Fix an ifdef.

2002-04-03  Darin Adler  <darin@apple.com>

	* src/Makefile.am: Use nmedit and strip to remove the symbols
	we don't want to export.

	* src/libwebcore.exp: Added. List of symbols exported.

2002-04-03  Maciej Stachowiak  <mjs@apple.com>

	* src/Makefile.am: Pave the way for cutting down the exports
	list. Also, make the embed target when installing libwebcore.

2002-04-03  Maciej Stachowiak  <mjs@apple.com>

	Fixed Radar 2893361 (Two frames with same name cause memory
	trasher (likely double-free)) by implementing the mechanism KDE
	uses to guarantee unique frame names.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::frameExists): Actually
	implement this, so that the khtml code can guarantee unique frame
	names on each page.

	* src/kwq/external.h: Prototype IFWebDataSource's frameExists:
	method here.

2002-04-03  Maciej Stachowiak  <mjs@apple.com>

	Fixed Radar 2893298 (KURL rejects spaces and other illegal but
	unambiguous characters, leading to load failures).

	* src/kwq/KWQKURL.mm: (KURL::KWQKURLPrivate::makeRef,
	KURL::normalizeRelativeURLString): Escape forbidden characters
	(ones that are never legal in a URL), except '#' (since that can
	start a fragment identifier) and '%'
	(since that can be the start of a valid escape sequence).

	(KURL::KWQKURLPrivate::KWQKURLPrivate,
	KURL::KWQKURLPrivate::compose): out of paranoia, make sure urlRef
	is set to NULL if not a valid value.

2002-04-03  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/kwqdebug.mm: (KWQGetLogLevel): Allocate and release
	NSScanner instead of using an autoreleased one, to fix Jersey
	redness whereby the regression tests leak.

2002-04-02  Darin Adler  <darin@apple.com>

	* src/kwq/kwqdebug.h: Turn off logging when xNDEBUG is defined.
	Remove unused stuff. Add checking for printf parameters.
	* src/kwq/kwqdebug.mm: Remove unused variants.

	* src/kwq/KWQApplication.mm:
	* src/kwq/KWQKGlobal.mm:
	* src/kwq/KWQKloader.mm:
	* src/kwq/KWQObject.mm:
	* src/kwq/KWQString.mm:
	* src/kwq/KWQToolTip.mm:
	* src/kwq/KWQWidget.mm:
	* src/kwq/WCPlugin.mm:
	* src/kwq/WCPluginDatabase.mm:
	* src/kwq/npapi.mm:
	Fix types in log statements caught by the compiler.

2002-04-02  Richard Williamson  <rjw@apple.com>

        Fixed a fix, shoulda' been a #ifndef to exclude unnecessary code.
        
	* src/kdelibs/khtml/rendering/render_replaced.cpp: (RenderWidget::detach):

2002-04-02  Richard Williamson  <rjw@apple.com>

        More noisy bulletproofing.  Still need to find source of problem.
        
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::~KHTMLPart), (KHTMLPart::slotData),
	(KHTMLPart::write), (KHTMLPart::end):

2002-04-02  Darin Adler  <darin@apple.com>

        Fix some small storage leaks.

	* src/kwq/KWQWidget.mm: (QWidget::QWidget): Use a single shared default style
        instead of creating a new one for each widget.
        (QWidget::setFont): Since we store a QFont here, we don't have to delete the
        old font and we don't leak.
        (QWidget::setCursor): Since now store a QCursor here, we don't have to delete
        the old cursor.
        Also removed a lot of unused code in here.
        
	* src/kwq/KWQKURL.mm: Minor code cleanup.

2002-04-02  Richard Williamson  <rjw@apple.com>

        Added ref() of part from KHTMView.
        Added log to catch m_doc == 0 case.  Should never happen.
        
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView),
	(KHTMLView::~KHTMLView):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::write):

2002-04-02  Richard Williamson  <rjw@apple.com>

        Removed unnecessary and erroneous call to CGContextSetCharacterSpacing.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo _initializeCaches]):

2002-04-01  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQKHTMLPart.mm (KHTMLPartPrivate::~KHTMLPartPrivate):
	Delete the jScript interpreter if it exists, to avoid leaking
	it. Also, garbage collect in this case because when we destroy the
	interpreter a lot of objects will become garbage and this seems
	like a good time to clean it all up.

2002-04-01  Richard Williamson  <rjw@apple.com>

        Added log to catch more problems with NS/CFURL.
        
	* src/kwq/KWQKjobclasses.mm:

2002-04-01  Richard Williamson  <rjw@apple.com>

        Cleaned up lots of potentially stale references to controller.
        Added ref count to part.
        
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::init):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]):

2002-04-01  Richard Williamson  <rjw@apple.com>

        Changes to support correct behavior is i/frame margins and
        scroll views.
        
	* src/kdelibs/khtml/html/html_baseimpl.h:
	* src/kdelibs/khtml/rendering/render_body.cpp: (RenderBody::layout):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame):
	* src/kwq/external.h:

2002-04-01  Kenneth Kocienda  <kocienda@apple.com>

        The guts of the fix for this bug:

        Radar 2879234 (Redirected URLs not used for subsequent GETs)

        This change, though small, will fix most of the outstanding problems
        with URL redirects. Some little bits of work need to be done, but much
        of that is on the UI level.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::begin), (KHTMLPart::setBaseURL):

2002-04-01  Darin Adler  <darin@apple.com>

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::jScriptEnabled): Hook this up to the
        preference from WebKit.
        (KHTMLPart::jScript): Return 0 if JavaScript is disabled. This is exactly what
        the original KHTMLPart from KDE did.

2002-04-01  Darin Adler  <darin@apple.com>

	* src/kwq/KWQDef.h: Use KWQ_UNSIGNED_TYPES_DEFINED for compatibility with code
        in JavaScriptCore that has to do the same thing.

2002-04-01  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::restoreScrollBar): Disable code
        that checks if the scroll bar is visible, because it currently doesn't do us
        any good. We may want to turn it back on if we ever implement setVScrollBarMode.
	(KHTMLView::viewportWheelEvent): Disable this code for now since it requires
        access to the vertical scroll bar object.
	* src/kdelibs/khtml/rendering/render_form.cpp:
        (RenderTextArea::calcMinMaxWidth): Use our own verticalScrollBarWidth and
        horizontalScrollBarHeight rather than getting scroll bar widgets.
        
	* src/kwq/qt/qscrollview.h: Remove QScrollView::horizontalScrollBar() and
        QScrollView::verticalScrollBar(), since we don't have QWidgets to return for
        these two. We can re-add these later if we need to.
         
	* src/kwq/qt/qtextedit.h: Removed QMultiLineEdit, and QTextEdit() constructor.
	* src/kwq/kdeui/keditcl.h: Removed.
	* src/kwq/KWQTextEdit.mm: Remove unused functions.
	(QTextEdit::verticalScrollBarWidth), (QTextEdit::horizontalScrollBarHeight):
        Implement these two new ones.
	* src/kwq/KWQScrollView.mm: Remove unused functions.

	* src/kdelibs/khtml/rendering/render_form.cpp: Fixed spelling error.

2002-03-31  Maciej Stachowiak  <mjs@apple.com>

	Fix Radar 2890464 (abcnews.com renders as a blank blue page (probably a JavaScript
	problem).) It turns out not to be a JavaScript problem:
	
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]): Report that load
	is finished to KDE layers. Otherwise, the tokenizer will wait
	forever for a script load completion message that never comes.

2002-03-31  Darin Adler  <darin@apple.com>

	* src/kwq/KWQString.mm: (QString::toDouble): Fix to properly handle
        an empty string.

2002-03-30  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::setTitle):
	Call through to a new KHTMLPart::setTitle instead of the old
	setWindowCaption. We want to skip the special logic for using
	the URL if the title is blank, and for squeezing the title into
	a smaller string, because those are handled at a higher level.

	* src/kwq/KWQKHTMLPart.h: Add setTitle. Also clean up ifdefs.
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::setTitle): New. Calls
	[IFWebDataSource _setTitle].

	* src/kwq/kparts/part.h: Removed setWindowCaption.
	* src/kwq/KWQPart.mm: Removed setWindowCaption.

	* src/kwq/external.h: Add [IFWebDataSource _setTitle].

2002-03-30  Richard Williamson  <rjw@apple.com>

        Added support for scrolling to anchor points.
        Optimization:  we always load the page, even if the URL that contains
        the anchor is the current page.
        
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::end), (KHTMLPart::gotoBaseAnchor),
	(KHTMLPart::gotoAnchor), (KHTMLPart::setUserStyleSheet):
	* src/kwq/KWQScrollView.mm: (QScrollView::setContentsPos):

2002-03-30  Richard Williamson  <rjw@apple.com>

        Added log to note cases of NSURL (CFURL) being unable to
        correctly initialize from URLs.  This log will likely indicate
        bugs in CFURL.
        
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame):

2002-03-30  Richard Williamson  <rjw@apple.com>

        Twiddling with baselines.  kde 2.2 appears to not line up baselines correctly.
        Need to experiment with kde 3.
        
        Removed copy of function prototype, instead included the correct header.
 
	Fixed crasher in setFocusPolicy, I don't think we even need to use kde's focus policy.
        This was added during the kde 3 beta 2 merge.
       
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo
	drawString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	initWithFont:]), (-[KWQLayoutInfo _initializeCaches]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQWidget.mm: (QWidget::setFocusProxy):

2002-03-30  Darin Adler  <darin@apple.com>

	* src/kwq/KWQKURL.mm: (copyAndReplaceAll), (needToHideColons): New
        functions used in workaround for CFURL bug.
	(KURL::normalizeRelativeURLString): Add workaround for CFURL bug; hide colons
        that would confuse CFURL from the CFURL code.

	* src/kwq/KWQFont.mm: (QFont::getFont): Use lossyCString instead of cString for
        debugging messages.
        
2002-03-30  Maciej Stachowiak  <mjs@apple.com>

	* src/Makefile.am: Link against JavaScriptCore.framework instead
	of the defunct libJavaScriptCore.dylib.

2002-03-29  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/rendering/render_image.cpp: (RenderImage::updateFromElement):
        Make images with no src, or src="" be empty rather than being the page itself
        loaded as an image.

2002-03-29  Richard Williamson  <rjw@apple.com>

        More fixes for cancelling.  Fixed some code that appears to have been
        mis-merged after the KDE 3 beta 2 landing.
        
	* src/kwq/KWQKloader.mm: (-[URLLoadClient initWithLoader:dataSource:])

2002-03-29  Darin Adler  <darin@apple.com>

	* src/kwq/KWQKloader.mm: (Cache::getStatistics), (Cache::flushAll):
        Fix both of these to work when cache is not yet allocated.

2002-03-29  Richard Williamson  <rjw@apple.com>

        Hooked up redirect.
        
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandle:didRedirectToURL:]):
	* src/kwq/external.h:

2002-03-29  Kenneth Kocienda  <kocienda@apple.com>

        Workaround for Radar 2890624 (Double free of image data in QPixmap)
        This hack is necessary for the app to run on some Jaguar system. Otherwise
        images that the GIF library cannot decode will cause a crash.
        
	* src/kwq/KWQPixmap.mm: (QPixmap::QPixmap):

2002-03-28  Richard Williamson  <rjw@apple.com>

        Fixed basic font horkage caused by removal of KDE font matching code.  We
        now work correctly for the basic font families.
        
	* src/kwq/KWQFont.mm: (QFont::getFont):

2002-03-28  Darin Adler  <darin@apple.com>

	* src/kwq/KWQKloader.mm: (Cache::requestImage), (Cache::requestStyleSheet),
	(Cache::requestScript): Set flags so the objects get freed when they are done
        in cases where the cache is disabled.

2002-03-28  Maciej Stachowiak  <mjs@apple.com>

	Fix Radar 2890340 (JavaScript doesn't work)

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::executeScript): Implement
	the other overloaded version of this function. This is needed for
	JavaScript to work.

2002-03-28  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/misc/loader.h: Added API for looking at the contents of the
        cache, flushing the cache, and disabling the cache.
	* src/kwq/KWQKloader.mm: (Cache::requestImage): Don't cache if disabled.
        (Cache::requestStyleSheet): Don't cache if disabled.
	(Cache::requestScript): Don't cache if disabled.
        (Cache::flush): Simplify ifdefs.
        (Cache::getStatistics), (Cache::flushAll), (Cache::setCacheDisabled): New.

2002-03-28  Richard Williamson  <rjw@apple.com>

        Fixed crasher.  Removed unnecessary cleanup to widget that was called after the
        widget was already disposed.
        
	* src/kdelibs/khtml/rendering/render_replaced.cpp: (RenderWidget::detach):

2002-03-27  Richard Williamson  <rjw@apple.com>

        Removed problematic code.  Not sure why it was necessary.  For now
        it prevents crasher.
        
	* src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::addColInfo):

2002-03-27  Darin Adler  <darin@apple.com>

	* src/kwq/KWQListImpl.mm: (KWQListImpl::insert): Fix disastrous name
        collision which could lead to infinite loops.

2002-03-27  Darin Adler  <darin@apple.com>

	* src/kwq/KWQCString.mm: (QCString::isEmpty): The || should be &&.

2002-03-27  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/css/css_valueimpl.cpp:
	(FontFamilyValueImpl::FontFamilyValueImpl): Disable misguided font matching
        code in khtml.
        
	* src/kwq/KWQFont.mm: (QFont::getFont): Change the fallback so that it uses
        the default font family, but the other settings as requested, rather than
        using the default font.

2002-03-27  Kenneth Kocienda  <kocienda@apple.com>

        Changed loadProgress->bytesSoFar to use [sender contentLengthReceived]
        instead of the size of the chunk that was delivered in the callback.
        This makes the activity window data more correct than it was.
        
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]):

2002-03-27  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/ecma/Makefile.am: Get the create_hash_table tool
        from JavaScriptCore. We might need a better way to handle this later.

2002-03-26  Maciej Stachowiak  <mjs@apple.com>

	Removed kjs from here - it's now been moved to JavaScriptCore at
	the top level.

	* src/Makefile.am: Don't link libkjs.o.
	* src/kdelibs/Makefile.am: Remove kjs from subdirs.
	* src/kdelibs/kjs/.cvsignore: Removed.
	* src/kdelibs/kjs/Makefile.am: Removed.
	* src/kdelibs/kjs/array_object.cpp: Removed.
	* src/kdelibs/kjs/array_object.h: Removed.
	* src/kdelibs/kjs/bool_object.cpp: Removed.
	* src/kdelibs/kjs/bool_object.h: Removed.
	* src/kdelibs/kjs/collector.cpp: Removed.
	* src/kdelibs/kjs/collector.h: Removed.
	* src/kdelibs/kjs/create_hash_table: Removed.
	* src/kdelibs/kjs/date_object.cpp: Removed.
	* src/kdelibs/kjs/date_object.h: Removed.
	* src/kdelibs/kjs/debugger.cpp: Removed.
	* src/kdelibs/kjs/debugger.h: Removed.
	* src/kdelibs/kjs/error_object.cpp: Removed.
	* src/kdelibs/kjs/error_object.h: Removed.
	* src/kdelibs/kjs/function.cpp: Removed.
	* src/kdelibs/kjs/function.h: Removed.
	* src/kdelibs/kjs/function_object.cpp: Removed.
	* src/kdelibs/kjs/function_object.h: Removed.
	* src/kdelibs/kjs/grammar.y: Removed.
	* src/kdelibs/kjs/internal.cpp: Removed.
	* src/kdelibs/kjs/internal.h: Removed.
	* src/kdelibs/kjs/interpreter.cpp: Removed.
	* src/kdelibs/kjs/interpreter.h: Removed.
	* src/kdelibs/kjs/keywords.table: Removed.
	* src/kdelibs/kjs/kjs-test: Removed.
	* src/kdelibs/kjs/kjs-test.chk: Removed.
	* src/kdelibs/kjs/lexer.cpp: Removed.
	* src/kdelibs/kjs/lexer.h: Removed.
	* src/kdelibs/kjs/lookup.cpp: Removed.
	* src/kdelibs/kjs/lookup.h: Removed.
	* src/kdelibs/kjs/math_object.cpp: Removed.
	* src/kdelibs/kjs/math_object.h: Removed.
	* src/kdelibs/kjs/nodes.cpp: Removed.
	* src/kdelibs/kjs/nodes.h: Removed.
	* src/kdelibs/kjs/nodes2string.cpp: Removed.
	* src/kdelibs/kjs/number_object.cpp: Removed.
	* src/kdelibs/kjs/number_object.h: Removed.
	* src/kdelibs/kjs/object.cpp: Removed.
	* src/kdelibs/kjs/object.h: Removed.
	* src/kdelibs/kjs/object_object.cpp: Removed.
	* src/kdelibs/kjs/object_object.h: Removed.
	* src/kdelibs/kjs/operations.cpp: Removed.
	* src/kdelibs/kjs/operations.h: Removed.
	* src/kdelibs/kjs/property_map.cpp: Removed.
	* src/kdelibs/kjs/property_map.h: Removed.
	* src/kdelibs/kjs/regexp.cpp: Removed.
	* src/kdelibs/kjs/regexp.h: Removed.
	* src/kdelibs/kjs/regexp_object.cpp: Removed.
	* src/kdelibs/kjs/regexp_object.h: Removed.
	* src/kdelibs/kjs/string_object.cpp: Removed.
	* src/kdelibs/kjs/string_object.h: Removed.
	* src/kdelibs/kjs/test.js: Removed.
	* src/kdelibs/kjs/testkjs.cpp: Removed.
	* src/kdelibs/kjs/types.cpp: Removed.
	* src/kdelibs/kjs/types.h: Removed.
	* src/kdelibs/kjs/ustring.cpp: Removed.
	* src/kdelibs/kjs/ustring.h: Removed.
	* src/kdelibs/kjs/value.cpp: Removed.
	* src/kdelibs/kjs/value.h: Removed.

2002-03-26  Maciej Stachowiak  <mjs@apple.com>

	Removed all the borrowed Qt code.

	* src/kwq/KWQGlobal.mm: Renamed from qt/_qglobal.cpp to avoid
	confusion about the borrowedness status of this file.
	* src/kwq/Makefile.am: Removed references to kde and qt
	subdirectories.
	* src/kwq/kde/.cvsignore: Removed.
	* src/kwq/kde/Makefile.am: Removed.
	* src/kwq/kde/_kurl.cpp: Removed.
	* src/kwq/kde/_kurl.h: Removed.
	* src/kwq/qt/Makefile.am: Removed.
	* src/kwq/qt/_qarray.h: Removed.
	* src/kwq/qt/_qbuffer.cpp: Removed.
	* src/kwq/qt/_qbuffer.h: Removed.
	* src/kwq/qt/_qcollection.cpp: Removed.
	* src/kwq/qt/_qcollection.h: Removed.
	* src/kwq/qt/_qcolor.h: Removed.
	* src/kwq/qt/_qcstring.cpp: Removed.
	* src/kwq/qt/_qcstring.h: Removed.
	* src/kwq/qt/_qdatetime.cpp: Removed.
	* src/kwq/qt/_qdatetime.h: Removed.
	* src/kwq/qt/_qdict.h: Removed.
	* src/kwq/qt/_qdir.cpp: Removed.
	* src/kwq/qt/_qdir.h: Removed.
	* src/kwq/qt/_qdir_unix.cpp: Removed.
	* src/kwq/qt/_qfile.cpp: Removed.
	* src/kwq/qt/_qfile.h: Removed.
	* src/kwq/qt/_qfileinfo.cpp: Removed.
	* src/kwq/qt/_qfileinfo.h: Removed.
	* src/kwq/qt/_qfileinfo_unix.cpp: Removed.
	* src/kwq/qt/_qgarray.cpp: Removed.
	* src/kwq/qt/_qgarray.h: Removed.
	* src/kwq/qt/_qgdict.cpp: Removed.
	* src/kwq/qt/_qgdict.h: Removed.
	* src/kwq/qt/_qglist.cpp: Removed.
	* src/kwq/qt/_qglist.h: Removed.
	* src/kwq/qt/_qglobal.cpp: Removed.
	* src/kwq/qt/_qgvector.cpp: Removed.
	* src/kwq/qt/_qgvector.h: Removed.
	* src/kwq/qt/_qiodevice.cpp: Removed.
	* src/kwq/qt/_qiodevice.h: Removed.
	* src/kwq/qt/_qlist.h: Removed.
	* src/kwq/qt/_qmap.cpp: Removed.
	* src/kwq/qt/_qmap.h: Removed.
	* src/kwq/qt/_qpoint.cpp: Removed.
	* src/kwq/qt/_qpoint.h: Removed.
	* src/kwq/qt/_qptrdict.h: Removed.
	* src/kwq/qt/_qrect.cpp: Removed.
	* src/kwq/qt/_qrect.h: Removed.
	* src/kwq/qt/_qregexp.cpp: Removed.
	* src/kwq/qt/_qregexp.h: Removed.
	* src/kwq/qt/_qregion.cpp: Removed.
	* src/kwq/qt/_qregion.h: Removed.
	* src/kwq/qt/_qshared.h: Removed.
	* src/kwq/qt/_qsize.cpp: Removed.
	* src/kwq/qt/_qsize.h: Removed.
	* src/kwq/qt/_qsortedlist.h: Removed.
	* src/kwq/qt/_qstack.h: Removed.
	* src/kwq/qt/_qstring.cpp: Removed.
	* src/kwq/qt/_qstring.h: Removed.
	* src/kwq/qt/_qstringlist.cpp: Removed.
	* src/kwq/qt/_qstringlist.h: Removed.
	* src/kwq/qt/_qstrlist.h: Removed.
	* src/kwq/qt/_qtextcodec.h: Removed.
	* src/kwq/qt/_qtextstream.h: Removed.
	* src/kwq/qt/_qtl.h: Removed.
	* src/kwq/qt/_qurl.cpp: Removed.
	* src/kwq/qt/_qurl.h: Removed.
	* src/kwq/qt/_qvaluelist.h: Removed.
	* src/kwq/qt/_qvector.h: Removed.

2002-03-26  Kenneth Kocienda  <kocienda@apple.com>

	* src/Makefile.am:

2002-03-26  Darin Adler  <darin@apple.com>

	* src/kwq/KWQKjobclasses.mm: (TransferJobPrivate::TransferJobPrivate):
        Nil out the handle so we don't autorelease garbage.
        
	* src/kwq/KWQKloader.mm:
        (-[URLLoadClient IFURLHandleResourceDidCancelLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidFinishLoading:data:]),
        (-[URLLoadClient IFURLHandle:resourceDidFailLoadingWithResult:]):
        Delete the job instead of just autoreleasing the sender. Fixes a leak.

2002-03-26  Richard Williamson  <rjw@apple.com>

        Fixed leak of decoder.  This caused us to leak the entire
        document text for every load!
        
	* src/kwq/KWQKHTMLPart.mm:

2002-03-26  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/rendering/render_list.cpp: (RenderListItem::setStyle):
        Fix a leak (missing delete).

	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQFontMetrics.mm:
        (-[KWQLayoutInfo drawString:atPoint:withFont:color:]): Don't bother keeping things
        around that we only need to use once.
	(-[KWQLayoutInfo _initializeCaches]): Create them here instead.
        (-[KWQLayoutInfo dealloc]): Don't need to free them here.

2002-03-26  Darin Adler  <darin@apple.com>

	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo dealloc]): Free the
        style groups, styles, and glyph vectors.
       
	* src/kwq/KWQFont.mm: (QFont::getFont): Use default font if we can't
        find a font from the passed-in family. Before, we were raising an
        exception and quitting the application.

	* src/kwq/KWQCString.mm: (QCString::isEmpty): Faster version that
        doesn't call strlen.
         
2002-03-25  Richard Williamson  <rjw@apple.com>

        Removed conditional check that prevent layout of iframes.  I don't
        understand why the check was being done.
        
	* src/kdelibs/khtml/rendering/render_flow.cpp: (RenderFlow::layout):

2002-03-25  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::slotData): Use
	-[IFURLHandle characterSet] to get the character set, instead of
	parsing it out of the header by hand.

2002-03-25  Chris Blumenberg  <cblu@apple.com>

	* src/kwq/WCPlugin.mm: (-[WCPlugin load]):
	
	Temporary special case workaround for this Java plug-in bug:
	2885120

2002-03-25  Maciej Stachowiak  <mjs@apple.com>

	Improved KURL performance:

	* src/kwq/kdecore/kurl.h, src/kwq/KWQKURL.mm: 
	(KURL::normalizeURLString): New function to cache rewritten URL
	strings.
	(RelativeURLKeyRetainCallBack, RelativeURLKeyReleaseCallBack,
	RelativeURLKeyCopyDescriptionCallBack,
	RelativeURLKeyEqualCallBack, RelativeURLKeyHashCallBack,
	KURL::normalizeRelativeURLString): Cache results of relative URL
	resolution.
	(KURL::clearCaches): function to clear the caches so they don't
	grow forever.
	(KURL::KURL): Set nothing but the string at construction time.
	(KURL::isEmpty, KURL::isMalformed, KURL::hasPath, KURL::url,
	KURL::protocol, KURL::host, KURL::port, KURL::pass, KURL::user,
	KURL::ref, KURL::query, KURL::path, KURL::setProtocol,
	KURL::setHost, KURL::setPort, KURL::setRef, KURL::setQuery,
	KURL::setPath, KURL::prettyURL, KURL::copyOnWrite, KURL::parse,
	KURL::assemble): Parse into parts on demand instead.
	(KURL::swap, KURL::operator=): Handle KURL's new urlString field.
	
	* src/kwq/KWQKloader.mm: (Cache::requestImage, Cache::requestStyleSheet,
	Cache::requestScript): Don't redundantly check if KURL isMalformed.

	* src/kwq/KWQKHTMLPart.mm (KHTMLPart::end): Clear KURL caches at
	the end of each page load.

2002-03-24  Darin Adler  <darin@apple.com>

	* src/kwq/KWQListImpl.mm: (KWQListImpl::getFirst), (KWQListImpl::getLast):
        Apparently getLast needs to handle cases where the list is empty. Since
        getFirst didn't handle it either, I added a check in both cases.

2002-03-24  Darin Adler  <darin@apple.com>

        Add tail pointer to KWQListImpl, since that shows up on so many profiles.

	* src/kwq/KWQListImpl.mm: (KWQListImpl::KWQListPrivate::copyList): Return
        a tail pointer too.
	(KWQListImpl::KWQListPrivate::KWQListPrivate): Set up tail pointer.
        (KWQListImpl::clear): Clean tail pointer too.
	(KWQListImpl::at): Special case the tail so we don't walk the whole list
        when we ask for the last element.
        (KWQListImpl::insert): Update the tail node to when inserting. Also add
        a special case for adding at the end so we don't walk the whole list.
        (KWQListImpl::remove): Update the tail node. Also, use at() in the index-
        based remove so we don't ahve to replicate the logic about finding a
        node with the special case for the tail.
	(KWQListImpl::getLast): Trivial now.
        (KWQListImpl::last): Trivial now.
	(KWQListIteratorImpl::toLast): Trivial now.
        
	* src/kwq/KWQString.mm: (QString::operator=): Remove unneeded line of code.

2002-03-24  Richard Williamson  <rjw@apple.com>

        A number of fixes to support non-latin1 decoding 
        and font measurement/drawing.
        
	* src/kwq/KWQFontMetrics.mm: (_rectForString):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::slotData):
	* src/kwq/KWQMetrics.h:

2002-03-24  Richard Williamson  <rjw@apple.com>

        Cached available families from NSFontManager.  
        http://www.gamespy.com/gdc2002/okamoto went from 4.8 seconds
        to 0.7 seconds. [Do we need to worry about updating the cache if
        the available fonts change?]
        
	* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::availableFamilies):

2002-03-24  Richard Williamson  <rjw@apple.com>

        Fixed big leak in QString assignment operator.
        Updated comments.  Removed old fprintfs.
        Added some frame debugging logs.
        
	* src/kwq/KWQFontMetrics.mm: (_rectForString):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::openURL), (KHTMLPart::requestFrame):
	* src/kwq/KWQScrollView.mm: (QScrollView::addChild),
	(QScrollView::resizeContents), (QScrollView::updateContents),
	(QScrollView::repaintContents):
	* src/kwq/KWQString.mm: (QString::operator=):
	* src/kwq/kwqdebug.h:

2002-03-23  Darin Adler  <darin@apple.com>

        Fixed problem with extra empty items in menus.

	* src/kwq/KWQComboBox.mm: (QComboBox::insertItem): Add back logic that puts
        an item in a certain position. Even though this is called insertItem, the
        behavior is to replace an item at a certain position.
	* src/kwq/KWQKComboBox.mm: (KComboBox::setSize): No need to fill the
        array with empty strings; just a waste of time based on how we do things.

2002-03-22  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/java/Makefile.am:
	* src/kdelibs/khtml/java/tests/.cvsignore:
	* src/kdelibs/khtml/java/tests/Makefile.am:
	Remove empty test subdirectory.

	* src/kdelibs/kjs/.cvsignore: Ignore kjs-test output.

2002-03-22  Maciej Stachowiak  <mjs@apple.com>

	Fix some things that were making automake complain.

	* src/kdelibs/kjs/Makefile.am:
	* src/kwq/Makefile.am:

2002-03-22  Darin Adler  <darin@apple.com>

	* src/kdelibs/khtml/css/cssstyleselector.cpp: (khtml::applyRule):
	Fix boolean logic mistake from the original KDE sources.

2002-03-22  Darin Adler  <darin@apple.com>

        Finally giving up on the complete QString rewrite after doing it 3 times,
        Darin checks in some improvements for the old QString. This makes a QString
        be 8 bytes instead of 12, and improves a few other details. No dramatic
        speedups, but no slowdown either.

	* src/kwq/qt/qstring.h:
	* src/kwq/KWQString.mm:
	(QString::QString), (QString::~QString), (QString::operator=),
        (QString::unicode), (QString::latin1): Store the cache type inside the cache.
	(QString::copy): No need to deep copy here.
        (QString::simplifyWhiteSpace): Use CFStringInlineBuffer.
	(QString::insert): Fix single-character insertions so they don't create and
        destroy a mutable CFStringRef every time.
        (QString::operator+=): Call the appropriate insert function.
	(QString::flushCache): Store cache type inside cache.
        (QString::compareToLatin1): Use CFStringInlineBuffer.
	(operator==): Use CFStringInlineBuffer.
        (QConstString::QConstString): Store the cache type inside the cache.

2002-03-22  John Sullivan  <sullivan@apple.com>

	Made changing font sizes work immediately (other than an
	unrelated crash).

	* src/kwq/KWQKHTMLSettings.mm: 
	(KHTMLSettings::KHTMLSettings),
	(KHTMLSettings::fontSizes): Moved defaults-fetching code from
	constructor to accessor, so it doesn't get out of synch with
	preference changes.

	* src/kwq/khtml/khtml_settings.h: Added "mutable" keyword
	to declaration of m_fontSizes, so the other change would compile.

2002-03-22  Kenneth Kocienda  <kocienda@apple.com>

        Moved KWQKloader to the new thread-safe API for accessing handle attributes.

	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidCancelLoading:]), (-[URLLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):

2002-03-22  Richard Williamson  <rjw@apple.com>

        Fixed subtle measurement problems.  These were most evident of pages
        that had lots of rounding deviation.  My assumptions about being able to
        round glyph advances was incorrect.  We must pay the expense of a float addition,
        instead of integer addition.  This slows down our inner loop.  Oh well,
        we're still very fast.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo
	drawString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	_initializeCaches]), (_rectForString), (QFontMetrics::width),
	(QFontMetrics::size):
	* src/kwq/KWQMetrics.h:

2002-03-22  Maciej Stachowiak  <mjs@apple.com>

	Fixed the following post-merge crashers:

	2885602 - Alexander crashes when clicking on a particular link in Google groups
	2885564 - Alexander crashes on load failures
	
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::~KHTMLView): Fix
	Radar 2885602 by detaching the document from the view when the
	view is destroyed. This was making the document reference a
	destroyed view later.

	* src/kwq/KWQKHTMLPart.mm: 
	(KHTMLPart::~KHTMLPart): Fix Radar 2885564 by checking if m_doc is
	NULL, since it's now inititally set to NULL.
	(KHTMLPart::KHTMLPart, KHTMLPart::init): Formatting tweaks.
	
2002-03-20  Maciej Stachowiak  <mjs@apple.com>

	Merged the following changes from LABYRINTH_KDE_3_MERGE branch:

	2002-03-20  Maciej Stachowiak  <mjs@apple.com>

		* src/kdelibs/khtml/rendering/render_applet.cpp:
		(RenderApplet::RenderApplet): Handle Java parameters properly,
		with Chris's assistance.

	2002-03-20  Maciej Stachowiak  <mjs@apple.com>

		Merged accumlated changes from HEAD, up to
		MERGED_TO_KDE_3_MERGE_BRANCH tag.

	2002-03-19  Maciej Stachowiak  <mjs@apple.com>

		Fixed two more crashers. Tree now looks pretty stable.

		* src/kdelibs/khtml/html/html_objectimpl.cpp:
		(HTMLObjectElementImpl::detach): Don't send an unload event, that
		needs the view to be a live, which it won't be when the DOM is
		being destroyed.

		* src/kwq/KWQListImpl.mm: (KWQListImpl::getFirst): Return
		d->head->data, not d->head. Whoops!

	2002-03-19  Maciej Stachowiak  <mjs@apple.com>

		Fixed two crashers:

		* src/kdelibs/khtml/rendering/render_object.h: Don't attempt to
		schedule a relayout ever. We control layout timing. This was
		resulting in calls on destroyed/trashed objects before.

		* src/kdelibs/khtml/xml/dom_nodeimpl.cpp:
		(NodeImpl::dispatchEvent): Check if view()->part() is NULL (looks
		like a bug in the KDE code that this wasn't checked).

	2002-03-19  Maciej Stachowiak  <mjs@apple.com>

		Changes needed to get WebCore to link: implement all the missing functions.
	
		* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::end):
		* src/kdelibs/khtml/xml/xml_tokenizer.cpp: (XMLTokenizer::end):
		* src/kdelibs/khtml/xml/xml_tokenizer.h:
		* src/kwq/KWQApplication.mm: (QApplication::_initialize),
		(QApplication::focusWidget):
		* src/kwq/KWQColorGroup.mm: (QColorGroup::operator==):
		* src/kwq/KWQComboBox.mm: (QComboBox::currentItem):
		* src/kwq/KWQCursor.mm: (QCursor::operator=), (QCursor::handle):
		* src/kwq/KWQEvent.mm: (QMouseEvent::QMouseEvent), (QKeyEvent::isAutoRepeat),
		(QKeyEvent::text), (QKeyEvent::ascii), (QKeyEvent::count),
		(QKeyEvent::isAccepted), (QCustomEvent::QCustomEvent),
		(QContextMenuEvent::QContextMenuEvent), (QContextMenuEvent::globalPos),
		(QContextMenuEvent::reason), (QContextMenuEvent::state), (QContextMenuEvent::x),
		(QContextMenuEvent::y):
		* src/kwq/KWQFontMetrics.mm: (QFontMetrics::boundingRect):
		* src/kwq/KWQKCursor.mm: (KCursor::whatsThisCursor):
		* src/kwq/KWQKDebug.mm: (kdBacktrace):
		* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::metaRefreshEnabled),
		(KHTMLPart::executeScript), (KHTMLPart::requestObject),
		(KHTMLPart::setJSDefaultStatusBarText), (KHTMLPart::referrer),
		(KHTMLPart::lastModified):
		* src/kwq/KWQKMimeType.mm: (KMimeType::comment), (KMimeType::mimeType),
		(KMimeType::defaultMimeType):
		* src/kwq/KWQKPrinter.mm: (KPrinter::KPrinter):
		* src/kwq/KWQKProtocolManager.mm: (KProtocolManager::proxyFor):
		* src/kwq/KWQKstddirs.mm: (KStandardDirs::saveLocation):
		* src/kwq/KWQLineEdit.mm: (QLineEdit::edited), (QLineEdit::setEdited):
		* src/kwq/KWQListImpl.h:
		* src/kwq/KWQListImpl.mm: (KWQListImpl::getFirst), (KWQListImpl::take):
		* src/kwq/KWQMapImpl.h:
		* src/kwq/KWQMapImpl.mm: (KWQMapImpl::removeEqualInternal):
		* src/kwq/KWQNSTextField.h:
		* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField edited]), (-[KWQNSTextField
		setEdited:]), (-[KWQNSTextField textDidChange:]):
		* src/kwq/KWQObject.mm: (QObject::eventFilter):
		* src/kwq/KWQPainter.mm: (QPainter::drawConvexPolygon), (QPainter::drawText):
		* src/kwq/KWQPalette.mm: (QPalette::operator==):
		* src/kwq/KWQRadioButton.mm: (QRadioButton::isChecked):
		* src/kwq/KWQRect.mm: (QRect::isEmpty), (QRect::intersect), (QRect::unite):
		* src/kwq/KWQRegion.mm: (QRegion::translate), (QRegion::boundingRect):
		* src/kwq/KWQScrollView.mm: (QScrollView::updateContents):
		* src/kwq/KWQString.mm: (QString::endsWith):
		* src/kwq/KWQStyle.h:
		* src/kwq/KWQTextArea.h:
		* src/kwq/KWQTextArea.mm: (-[KWQTextArea paragraphs]), (RangeOfParagraph),
		(-[KWQTextArea paragraphLength:]), (-[KWQTextArea textForParagraph:]),
		(-[KWQTextArea lineOfCharAtIndex:inParagraph:]), (-[KWQTextArea
		getCursorPositionAsIndex:inParagraph:]), (-[KWQTextArea
		setCursorPositionToIndex:inParagraph:]):
		* src/kwq/KWQTextEdit.mm: (QMultiLineEdit::QMultiLineEdit), (KEdit::KEdit),
		(KEdit::~KEdit), (QTextEdit::QTextEdit), (QTextEdit::setText), (QTextEdit::text),
		(QTextEdit::paragraphs), (QTextEdit::paragraphLength), (QTextEdit::lineOfChar),
		(QTextEdit::getCursorPosition), (QTextEdit::setCursorPosition),
		(QTextEdit::wordWrap), (QTextEdit::setWordWrap), (QTextEdit::setTextFormat),
		(QTextEdit::isReadOnly), (QTextEdit::setReadOnly), (QTextEdit::selectAll):
		* src/kwq/KWQVectorImpl.mm: (KWQVectorImpl::at), (KWQVectorImpl::data):
		* src/kwq/KWQWidget.mm: (QWidget::frameGeometry), (QWidget::cursor),
		(QWidget::unsetCursor):
		* src/kwq/KWQbrowserextension.mm:
		* src/kwq/KWQtextstream.mm: (QTextStream::QTextStream),
		(QTextStream::operator<<), (endl):
		* src/kwq/KWQxml.mm: (QXmlAttributes::uri), (QXmlParseException::lineNumber):
		* src/kwq/Makefile.am:
		* src/kwq/kdecore/kstandarddirs.h:
		* src/kwq/kdecore/kstaticdeleter.h:
		* src/kwq/kdeui/keditcl.h:
		* src/kwq/kio/kmimetype.h:
		* src/kwq/qt/qarray.h:
		* src/kwq/qt/qevent.h:
		* src/kwq/qt/qlist.h:
		* src/kwq/qt/qmap.h:
		* src/kwq/qt/qpalette.h:
		* src/kwq/qt/qptrqueue.h:
		* src/kwq/qt/qscrollview.h:
		* src/kwq/qt/qstring.h:
		* src/kwq/qt/qtextedit.h:

	2002-03-18  Maciej Stachowiak  <mjs@apple.com>

		Changes needed to get kwq compiling (doesn't link yet, though).

		* src/kdelibs/khtml/misc/loader.h:
		* src/kdelibs/khtml/xml/dom_elementimpl.h:
		* src/kwq/KWQCollection.mm: (QPtrCollection::QPtrCollection),
		(QPtrCollection::operator=), (QPtrCollection::~QPtrCollection),
		(QPtrCollection::autoDelete), (QPtrCollection::setAutoDelete):
		* src/kwq/KWQEvent.mm: (QKeyEvent::QKeyEvent):
		* src/kwq/KWQIcon.h:
		* src/kwq/KWQKHTMLFactory.mm:
		* src/kwq/KWQKHTMLPart.h:
		* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::KHTMLPart), (KHTMLPart::slotData),
		(KHTMLPart::begin), (KHTMLPart::write), (KHTMLPart::checkCompleted),
		(KHTMLPart::settings), (KHTMLPart::completeURL), (KHTMLPart::encoding),
		(KHTMLPart::overURL), (KHTMLPart::urlSelected), (KHTMLPart::requestObject),
		(KHTMLPart::frames), (KHTMLPart::event):
		* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::KHTMLSettings),
		(KHTMLSettings::availableFamilies):
		* src/kwq/KWQKProcess.mm: (KProcess::args):
		* src/kwq/KWQKloader.mm: (CachedImage::CachedImage), (CachedImage::movieStatus),
		(DocLoader::DocLoader), (Loader::load), (Loader::servePendingRequests),
		(Loader::slotFinished), (Cache::requestScript):
		* src/kwq/KWQPainter.mm: (QPainter::save):
		* src/kwq/KWQPointArray.mm: (QPointArray::setPoint):
		* src/kwq/KWQValueListImpl.mm: (KWQValueListImpl::removeEqualNodes),
		(KWQValueListImpl::containsEqualNodes):
		* src/kwq/KWQView.mm: (-[KWQHTMLView layout]):
		* src/kwq/KWQsignals.mm: (khtml::Loader::requestDone),
		(khtml::Loader::requestFailed):
		* src/kwq/kdecore/kiconloader.h:
		* src/kwq/kparts/browserextension.h:
		* src/kwq/qt/qmovie.h:
		
	2002-03-16  Maciej Stachowiak  <mjs@apple.com>

		Updated to get khtml to compile. Changes included updating our
		headers for new classes, new methods, header name changes, etc, as
		well as occasionally commenting out or replacing portions of the
		khtml code with #if APPLE_CHANGES, and adding new files from the
		kde3 sources when appropriate. Also commit some kjs files that I
		forgot to cvs add before.

		* src/kdelibs/khtml/css/css_valueimpl.cpp:
		(CSSStyleDeclarationImpl::getPropertyCSSValue):
		* src/kdelibs/khtml/css/cssparser.cpp: (StyleBaseImpl::parseContent):
		* src/kdelibs/khtml/css/cssstyleselector.cpp:
		(CSSStyleSelector::CSSStyleSelector), (khtml::applyRule):
		* src/kdelibs/khtml/ecma/.cvsignore:
		* src/kdelibs/khtml/ecma/Makefile.am:
		* src/kdelibs/khtml/ecma/kjs_debugwin.h:
		* src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMNode::toString):
		* src/kdelibs/khtml/ecma/kjs_dom.h:
		* src/kdelibs/khtml/ecma/kjs_window.cpp:
		* src/kdelibs/khtml/html/html_documentimpl.cpp: (HTMLDocumentImpl::cookie),
		(HTMLDocumentImpl::setCookie):
		* src/kdelibs/khtml/html/html_formimpl.cpp:
		(HTMLKeygenElementImpl::HTMLKeygenElementImpl),
		(HTMLKeygenElementImpl::encoding):
		* src/kdelibs/khtml/java/kjavaprocess.cpp: (KJavaProcess::invokeJVM):
		* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::contentsContextMenuEvent):
		* src/kdelibs/khtml/misc/loader.h:
		* src/kdelibs/khtml/rendering/render_box.cpp: (RenderBox::calcReplacedWidth):
		* src/kdelibs/khtml/rendering/render_form.cpp: (RenderTextArea::calcMinMaxWidth):
		* src/kdelibs/khtml/rendering/render_image.cpp: (RenderImage::printObject):
		* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::nodeAtPoint):
		* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::close):
		* src/kdelibs/khtml/xml/dom_elementimpl.cpp:
		(ElementImpl::dispatchAttrRemovalEvent),
		(ElementImpl::dispatchAttrAdditionEvent):
		* src/kdelibs/kjs/interpreter.cpp: (Context::Context), (Context::operator=),
		(Context::~Context), (Context::isNull), (Context::imp), (Context::scopeChain),
		(Context::variableObject), (Context::thisValue), (Context::callingContext),
		(Interpreter::Interpreter), (Interpreter::~Interpreter),
		(Interpreter::globalObject), (Interpreter::globalExec),
		(Interpreter::checkSyntax), (Interpreter::evaluate), (Interpreter::imp),
		(Interpreter::builtinObject), (Interpreter::builtinFunction),
		(Interpreter::builtinArray), (Interpreter::builtinBoolean),
		(Interpreter::builtinString), (Interpreter::builtinNumber),
		(Interpreter::builtinDate), (Interpreter::builtinRegExp),
		(Interpreter::builtinError), (Interpreter::builtinObjectPrototype),
		(Interpreter::builtinFunctionPrototype), (Interpreter::builtinArrayPrototype),
		(Interpreter::builtinBooleanPrototype), (Interpreter::builtinStringPrototype),
		(Interpreter::builtinNumberPrototype), (Interpreter::builtinDatePrototype),
		(Interpreter::builtinRegExpPrototype), (Interpreter::builtinErrorPrototype),
		(Interpreter::builtinEvalError), (Interpreter::builtinRangeError),
		(Interpreter::builtinReferenceError), (Interpreter::builtinSyntaxError),
		(Interpreter::builtinTypeError), (Interpreter::builtinURIError),
		(Interpreter::builtinEvalErrorPrototype),
		(Interpreter::builtinRangeErrorPrototype),
		(Interpreter::builtinReferenceErrorPrototype),
		(Interpreter::builtinSyntaxErrorPrototype),
		(Interpreter::builtinTypeErrorPrototype),
		(Interpreter::builtinURIErrorPrototype), (Interpreter::setCompatMode),
		(Interpreter::compatMode), (Interpreter::finalCheck), (ExecState::~ExecState),
		(ExecState::interpreter), (ExecState::context), (ExecState::setException),
		(ExecState::clearException), (ExecState::exception), (ExecState::hadException),
		(ExecState::ExecState):
		* src/kdelibs/kjs/property_map.cpp: (PropertyMapNode::setLeft),
		(PropertyMapNode::setRight), (PropertyMapNode::setParent),
		(PropertyMapNode::findMax), (PropertyMapNode::findMin), (PropertyMapNode::next),
		(KJS::uscompare), (PropertyMap::PropertyMap), (PropertyMap::~PropertyMap),
		(PropertyMap::put), (PropertyMap::remove), (PropertyMap::get),
		(PropertyMap::clear), (PropertyMap::dump), (PropertyMap::checkTree),
		(PropertyMap::getNode), (PropertyMap::first), (PropertyMap::balance),
		(PropertyMap::updateHeight), (PropertyMap::rotateRR), (PropertyMap::rotateLL),
		(PropertyMap::rotateRL), (PropertyMap::rotateLR):
		* src/kdelibs/kjs/property_map.h:
		* src/kdelibs/kjs/value.cpp: (ValueImp::ValueImp), (ValueImp::~ValueImp),
		(ValueImp::mark), (ValueImp::marked), (ValueImp::setGcAllowed),
		(ValueImp::operator new), (ValueImp::operator delete), (ValueImp::toInteger),
		(ValueImp::toInt32), (ValueImp::toUInt32), (ValueImp::toUInt16),
		(ValueImp::getBase), (ValueImp::getPropertyName), (ValueImp::getValue),
		(ValueImp::putValue), (KJS::operator==), (KJS::operator!=), (Value::Value),
		(Value::~Value), (Value::operator=), (Value::isNull), (Value::imp),
		(Value::type), (Value::isA), (Value::toPrimitive), (Value::toBoolean),
		(Value::toNumber), (Value::toInteger), (Value::toInt32), (Value::toUInt32),
		(Value::toUInt16), (Value::toString), (Value::toObject), (Value::getBase),
		(Value::getPropertyName), (Value::getValue), (Value::putValue),
		(Undefined::Undefined), (Undefined::~Undefined), (Undefined::operator=),
		(Undefined::dynamicCast), (Null::Null), (Null::~Null), (Null::operator=),
		(Null::dynamicCast), (Boolean::Boolean), (Boolean::~Boolean),
		(Boolean::operator=), (Boolean::value), (Boolean::dynamicCast), (String::String),
		(String::~String), (String::operator=), (String::value), (String::dynamicCast),
		(Number::Number), (Number::~Number), (Number::operator=), (Number::dynamicCast),
		(Number::value), (Number::intValue), (Number::isNaN), (Number::isInf):
		* src/kwq/KWQDef.h:
		* src/kwq/KWQInputDialog.mm: (QInputDialog::getText):
		* src/kwq/KWQKConfigBase.mm: (KConfig::KConfig):
		* src/kwq/KWQKHTMLPart.h:
		* src/kwq/KWQListImpl.h:
		* src/kwq/KWQMapImpl.h:
		* src/kwq/KWQMapImpl.mm: (KWQMapImpl::removeEqualInternal):
		* src/kwq/KWQStrList.h:
		* src/kwq/KWQStyle.h:
		* src/kwq/KWQValueListImpl.h:
		* src/kwq/KWQVectorImpl.h:
		* src/kwq/kdecore/kapplication.h:
		* src/kwq/kdecore/kconfig.h:
		* src/kwq/kdecore/kdebug.h:
		* src/kwq/kdecore/kprocess.h:
		* src/kwq/kdecore/kstandarddirs.h:
		* src/kwq/kdecore/kstaticdeleter.h:
		* src/kwq/kdeui/kaction.h:
		* src/kwq/kdeui/kcursor.h:
		* src/kwq/khtml/khtml_factory.h:
		* src/kwq/khtml/khtml_settings.h:
		* src/kwq/kio/global.h:
		* src/kwq/kio/kmimetype.h:
		* src/kwq/kio/kprinter.h:
		* src/kwq/kio/kprotocolmanager.h:
		* src/kwq/kparts/browserextension.h:
		* src/kwq/qt/qapplication.h:
		* src/kwq/qt/qarray.h:
		* src/kwq/qt/qcollection.h:
		* src/kwq/qt/qcombobox.h:
		* src/kwq/qt/qcstring.h:
		* src/kwq/qt/qcursor.h:
		* src/kwq/qt/qdict.h:
		* src/kwq/qt/qevent.h:
		* src/kwq/qt/qfontmetrics.h:
		* src/kwq/qt/qinputdialog.h:
		* src/kwq/qt/qlineedit.h:
		* src/kwq/qt/qlist.h:
		* src/kwq/qt/qmap.h:
		* src/kwq/qt/qmemarray.h:
		* src/kwq/qt/qnamespace.h:
		* src/kwq/qt/qobject.h:
		* src/kwq/qt/qpainter.h:
		* src/kwq/qt/qpalette.h:
		* src/kwq/qt/qpoint.h:
		* src/kwq/qt/qpointarray.h:
		* src/kwq/qt/qprinter.h:
		* src/kwq/qt/qptrdict.h:
		* src/kwq/qt/qptrlist.h:
		* src/kwq/qt/qptrqueue.h:
		* src/kwq/qt/qptrstack.h:
		* src/kwq/qt/qptrvector.h:
		* src/kwq/qt/qradiobutton.h:
		* src/kwq/qt/qrect.h:
		* src/kwq/qt/qregion.h:
		* src/kwq/qt/qscrollview.h:
		* src/kwq/qt/qsortedlist.h:
		* src/kwq/qt/qstack.h:
		* src/kwq/qt/qstring.h:
		* src/kwq/qt/qstylesheet.h:
		* src/kwq/qt/qtextedit.h:
		* src/kwq/qt/qtextstream.h:
		* src/kwq/qt/qvaluelist.h:
		* src/kwq/qt/qvector.h:
		* src/kwq/qt/qwidget.h:
		* src/kwq/qt/qxml.h:
		
	2002-03-14  Maciej Stachowiak  <mjs@apple.com>

		Get kjs to compile and link by adding mssing files, setting up
		autogenerated files to autogenerate, and making a handful of minor
		tweaks. The test program passes. Yay!

		* src/kdelibs/kjs/Makefile.am:
		* src/kdelibs/kjs/create_hash_table:
		* src/kdelibs/kjs/global_object.cpp:
		* src/kdelibs/kjs/grammar.y:
		* src/kdelibs/kjs/interpreter.h:
		* src/kdelibs/kjs/keywords.table:
		* src/kdelibs/kjs/kjs.cpp:
		* src/kdelibs/kjs/kjs.h:
		* src/kdelibs/kjs/lexer.lut.h:
		* src/kdelibs/kjs/math_object.lut.h:
		* src/kdelibs/kjs/ustring.h:
		* src/kdelibs/kjs/value.h:
		* src/kdelibs/kjs/.cvsignore:
		
	2002-03-14  Maciej Stachowiak  <mjs@apple.com>

		Hand-merge KDE3 beta 2 changes into this frankenstein file.

		* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient setDataSource:]),
		(WCSetIFWebDataSourceMakeFunc), (WCSetIFErrorMakeFunc), (recursive),
		(encodingFromContentType), (splitUrlTarget), (KHTMLPart::KHTMLPart),
		(KHTMLPart::init), (KHTMLPart::~KHTMLPart), (KHTMLPart::browserExtension),
		(KHTMLPart::view), (KHTMLPart::setMetaRefreshEnabled), (KHTMLPart::jScript),
		(KHTMLPart::executeScript), (KHTMLPart::executeScheduledScript),
		(KHTMLPart::docImpl), (KHTMLPart::xmlDocImpl), (KHTMLPart::slotData),
		(KHTMLPart::begin), (KHTMLPart::write), (KHTMLPart::end),
		(KHTMLPart::checkCompleted), (KHTMLPart::settings), (KHTMLPart::completeURL),
		(KHTMLPart::scheduleRedirection), (KHTMLPart::setEncoding),
		(KHTMLPart::encoding), (KHTMLPart::gotoAnchor), (KHTMLPart::setFontSizes),
		(KHTMLPart::fontSizes), (KHTMLPart::onlyLocalReferences),
		(KHTMLPart::setOnlyLocalReferences), (KHTMLPart::findTextBegin),
		(KHTMLPart::findTextNext), (KHTMLPart::selectedText), (KHTMLPart::hasSelection),
		(KHTMLPart::selection), (KHTMLPart::setSelection), (KHTMLPart::overURL),
		(KHTMLPart::urlSelected), (KHTMLPart::requestFrame),
		(KHTMLPart::requestFrameName), (KHTMLPart::requestObject),
		(KHTMLPart::submitForm), (KHTMLPart::findFrame), (KHTMLPart::frameExists),
		(KHTMLPart::parentPart), (KHTMLPart::setJSStatusBarText),
		(KHTMLPart::setJSDefaultStatusBarText), (KHTMLPart::jsStatusBarText),
		(KHTMLPart::jsDefaultStatusBarText), (KHTMLPart::frames),
		(KHTMLPart::customEvent), (KHTMLPart::khtmlMousePressEvent):
		
	2002-03-13  Maciej Stachowiak  <mjs@apple.com>

		Merge KDE3 beta 2 changes into this frankenstein file.

		* src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
		(CachedCSSStyleSheet::ref), (CachedCSSStyleSheet::data),
		(CachedCSSStyleSheet::checkNotify), (CachedCSSStyleSheet::error),
		(CachedScript::CachedScript), (CachedScript::ref), (CachedScript::data),
		(CachedScript::checkNotify), (CachedScript::error), (CachedImage::CachedImage),
		(CachedImage::ref), (CachedImage::tiled_pixmap), (CachedImage::pixmap_size),
		(CachedImage::do_notify), (CachedImage::movieStatus), (CachedImage::movieResize),
		(CachedImage::setShowAnimations), (CachedImage::deleteMovie),
		(CachedImage::data), (Request::Request), (DocLoader::DocLoader),
		(DocLoader::requestImage), (DocLoader::requestStyleSheet),
		(DocLoader::requestScript), (DocLoader::setAutoloadImages),
		(DocLoader::setShowAnimations), (Loader::Loader), (Loader::~Loader),
		(Loader::load), (Loader::servePendingRequests), (Loader::slotFinished),
		(Loader::slotData), (Loader::numRequests), (Loader::cancelRequests),
		(Cache::init), (Cache::requestImage), (Cache::requestStyleSheet),
		(Cache::preloadStyleSheet), (Cache::requestScript), (Cache::preloadScript),
		(Cache::flush):

	2002-03-13  Maciej Stachowiak  <mjs@apple.com>

		Clean up this frankenstein file in preparation for merging KDE
		beta 2 changes.

		* src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
		(CachedScript::CachedScript), (CachedImage::CachedImage),
		(CachedImage::pixmap_size), (CachedImage::movieResize), (CachedImage::data),
		(DocLoader::DocLoader), (Loader::Loader), (Loader::~Loader), (Loader::load),
		(Loader::servePendingRequests), (Loader::slotFinished), (Loader::slotData),
		(Loader::numRequests), (Loader::cancelRequests), (Cache::requestImage),
		(Cache::requestStyleSheet), (Cache::requestScript), (Cache::flush):

	2002-03-13  Maciej Stachowiak  <mjs@apple.com>

		Remove files from build that are no longer in KDE 3 beta 2:

		* src/kdelibs/khtml/ecma/Makefile.am:
		* src/kdelibs/khtml/ecma/kjs_text.cpp:
		* src/kdelibs/khtml/ecma/kjs_text.h:
		* src/kdelibs/khtml/misc/Makefile.am:
		* src/kdelibs/khtml/misc/font.cpp:
		* src/kdelibs/khtml/misc/font.h:
		* src/kdelibs/khtml/rendering/Makefile.am:
		* src/kdelibs/khtml/rendering/render_hr.cpp:
		* src/kdelibs/khtml/rendering/render_hr.h:
		
	2002-03-08  Don Melton  <gramps@apple.com>

		Merged kdelibs from KDE 3 beta 2 into our 2.2.1-based sources.

		* src/kdelibs/kdecore/kentities.gperf:
		* src/kdelibs/khtml/css/css_ruleimpl.cpp: (CSSRuleImpl::CSSRuleImpl),
		(CSSRuleImpl::cssText), (CSSCharsetRuleImpl::CSSCharsetRuleImpl),
		(CSSImportRuleImpl::CSSImportRuleImpl), (CSSImportRuleImpl::~CSSImportRuleImpl),
		(CSSImportRuleImpl::setStyleSheet), (CSSImportRuleImpl::init),
		(CSSMediaRuleImpl::CSSMediaRuleImpl), (CSSMediaRuleImpl::~CSSMediaRuleImpl),
		(CSSMediaRuleImpl::cssRules), (CSSMediaRuleImpl::appendRule),
		(CSSMediaRuleImpl::insertRule), (CSSMediaRuleImpl::deleteRule),
		(CSSRuleListImpl::~CSSRuleListImpl), (CSSPageRuleImpl::selectorText),
		(CSSStyleRuleImpl::selectorText), (CSSStyleRuleImpl::setSelector),
		(CSSUnknownRuleImpl::~CSSUnknownRuleImpl), (CSSRuleListImpl::CSSRuleListImpl),
		(CSSRuleListImpl::length), (CSSRuleListImpl::item),
		(CSSRuleListImpl::deleteRule), (CSSRuleListImpl::insertRule):
		* src/kdelibs/khtml/css/css_ruleimpl.h:
		* src/kdelibs/khtml/css/css_stylesheetimpl.cpp: (StyleSheetImpl::setMedia),
		(CSSStyleSheetImpl::CSSStyleSheetImpl), (CSSStyleSheetImpl::parseString),
		(StyleSheetListImpl::~StyleSheetListImpl), (StyleSheetListImpl::length),
		(StyleSheetListImpl::item), (MediaListImpl::MediaListImpl),
		(MediaListImpl::contains), (MediaListImpl::item), (MediaListImpl::deleteMedium),
		(MediaListImpl::appendMedium), (MediaListImpl::setMediaText):
		* src/kdelibs/khtml/css/css_stylesheetimpl.h:
		* src/kdelibs/khtml/css/css_valueimpl.cpp:
		(CSSStyleDeclarationImpl::CSSStyleDeclarationImpl),
		(CSSStyleDeclarationImpl::getPropertyCSSValue),
		(CSSStyleDeclarationImpl::removeProperty),
		(CSSStyleDeclarationImpl::setProperty),
		(CSSStyleDeclarationImpl::setLengthProperty), (CSSStyleDeclarationImpl::item),
		(CSSValueListImpl::cssValueType), (CSSPrimitiveValueImpl::cssValueType),
		(CSSImageValueImpl::CSSImageValueImpl),
		(FontFamilyValueImpl::FontFamilyValueImpl):
		* src/kdelibs/khtml/css/css_valueimpl.h:
		* src/kdelibs/khtml/css/csshelper.cpp: (khtml::computeLengthFloat),
		(khtml::setFontSize):
		* src/kdelibs/khtml/css/csshelper.h:
		* src/kdelibs/khtml/css/cssparser.cpp: (StyleBaseImpl::baseURL),
		(StyleBaseImpl::parseAtRule), (StyleBaseImpl::parseSelector2),
		(StyleBaseImpl::parseSelector), (StyleBaseImpl::parseProperty),
		(StyleBaseImpl::parseProperties), (StyleBaseImpl::parseFont),
		(StyleBaseImpl::parseValue), (StyleBaseImpl::setParsedValue),
		(StyleBaseImpl::parseShortHand), (StyleBaseImpl::parseBackgroundPosition),
		(StyleBaseImpl::parseContent), (StyleBaseImpl::splitContent),
		(StyleBaseImpl::splitShorthandProperties), (StyleBaseImpl::parse2Values),
		(StyleBaseImpl::parse4Values), (StyleBaseImpl::parseUnit),
		(StyleBaseImpl::parseStyleRule), (StyleBaseImpl::preprocess),
		(CSSSelector::specificity):
		* src/kdelibs/khtml/css/cssparser.h:
		* src/kdelibs/khtml/css/cssproperties.in:
		* src/kdelibs/khtml/css/cssstyleselector.cpp:
		(CSSStyleSelector::CSSStyleSelector), (CSSStyleSelector::addSheet),
		(CSSStyleSelector::loadDefaultStyle), (CSSStyleSelector::clear),
		(CSSStyleSelector::styleForElement), (CSSStyleSelector::addInlineDeclarations),
		(CSSStyleSelector::checkSelector), (CSSStyleSelector::checkOneSelector),
		(CSSStyleSelector::buildLists), (CSSStyleSelectorList::CSSStyleSelectorList),
		(CSSStyleSelectorList::append), (CSSStyleSelectorList::collect),
		(CSSOrderedPropertyList::compareItems), (CSSOrderedPropertyList::append),
		(convertToLength), (khtml::applyRule):
		* src/kdelibs/khtml/css/cssstyleselector.h:
		* src/kdelibs/khtml/css/cssvalues.in:
		* src/kdelibs/khtml/css/html4.css:
		* src/kdelibs/khtml/css/makeprop:
		* src/kdelibs/khtml/css/makevalues:
		* src/kdelibs/khtml/dom/css_rule.cpp: (CSSRuleList::CSSRuleList):
		* src/kdelibs/khtml/dom/css_rule.h:
		* src/kdelibs/khtml/dom/css_stylesheet.cpp: (MediaList::length),
		(MediaList::item), (MediaList::deleteMedium), (MediaList::appendMedium):
		* src/kdelibs/khtml/dom/css_stylesheet.h:
		* src/kdelibs/khtml/dom/css_value.cpp: (CSSStyleDeclaration::getPropertyValue),
		(CSSStyleDeclaration::getPropertyCSSValue),
		(CSSStyleDeclaration::removeProperty),
		(CSSStyleDeclaration::getPropertyPriority), (CSSStyleDeclaration::setProperty),
		(CSSPrimitiveValue::setFloatValue):
		* src/kdelibs/khtml/dom/css_value.h:
		* src/kdelibs/khtml/dom/dom2_events.cpp: (Event::type), (Event::eventModuleName):
		* src/kdelibs/khtml/dom/dom2_events.h:
		* src/kdelibs/khtml/dom/dom2_range.cpp:
		* src/kdelibs/khtml/dom/dom2_range.h:
		* src/kdelibs/khtml/dom/dom2_traversal.cpp:
		* src/kdelibs/khtml/dom/dom2_traversal.h:
		* src/kdelibs/khtml/dom/dom2_views.cpp: (AbstractView::document),
		(AbstractView::getComputedStyle):
		* src/kdelibs/khtml/dom/dom2_views.h:
		* src/kdelibs/khtml/dom/dom_core.h:
		* src/kdelibs/khtml/dom/dom_doc.cpp: (DOMImplementation::hasFeature),
		(DOMImplementation::createDocumentType), (DOMImplementation::createDocument),
		(DOMImplementation::createHTMLDocument), (DOMImplementation::getInterface),
		(DOMImplementation::createCSSStyleSheet), (Document::Document),
		(Document::operator = ), (Document::createAttribute),
		(Document::createAttributeNS), (Document::getElementById),
		(Document::getElementsByTagName), (Document::getElementsByTagNameNS),
		(Document::importNode), (Document::isHTMLDocument), (Document::createRange),
		(Document::completeURL), (DocumentFragment::operator = ),
		(DocumentType::DocumentType), (DocumentType::operator = ), (DocumentType::name),
		(DocumentType::entities), (DocumentType::notations), (DocumentType::publicId),
		(DocumentType::systemId), (DocumentType::internalSubset):
		* src/kdelibs/khtml/dom/dom_doc.h:
		* src/kdelibs/khtml/dom/dom_element.cpp: (Attr::operator = ), (Attr::name),
		(Attr::ownerElement), (Attr::value), (Attr::setValue), (Element::operator = ),
		(Element::tagName), (Element::getAttribute), (Element::setAttribute),
		(Element::removeAttribute), (Element::getAttributeNode),
		(Element::setAttributeNode), (Element::removeAttributeNode),
		(Element::getElementsByTagName), (Element::getElementsByTagNameNS),
		(Element::getAttributeNS), (Element::setAttributeNS),
		(Element::removeAttributeNS), (Element::getAttributeNodeNS),
		(Element::setAttributeNodeNS), (Element::hasAttribute),
		(Element::hasAttributeNS), (Element::khtmlValidAttrName),
		(Element::khtmlValidPrefix), (Element::khtmlValidQualifiedName),
		(Element::khtmlMalformedQualifiedName), (Element::khtmlMalformedPrefix):
		* src/kdelibs/khtml/dom/dom_element.h:
		* src/kdelibs/khtml/dom/dom_exception.h:
		* src/kdelibs/khtml/dom/dom_html.h:
		* src/kdelibs/khtml/dom/dom_misc.cpp: (DomShared::deleteMe):
		* src/kdelibs/khtml/dom/dom_misc.h:
		* src/kdelibs/khtml/dom/dom_node.cpp: (NamedNodeMap::getNamedItem),
		(NamedNodeMap::setNamedItem), (NamedNodeMap::removeNamedItem),
		(NamedNodeMap::item), (NamedNodeMap::getNamedItemNS),
		(NamedNodeMap::setNamedItemNS), (NamedNodeMap::removeNamedItemNS),
		(NamedNodeMap::length), (throw), (Node::operator == ), (Node::operator != ),
		(Node::nodeValue), (Node::setNodeValue), (Node::nodeType), (Node::parentNode),
		(Node::childNodes), (Node::firstChild), (Node::lastChild),
		(Node::previousSibling), (Node::nextSibling), (Node::attributes),
		(Node::ownerDocument), (Node::insertBefore), (Node::replaceChild),
		(Node::removeChild), (Node::appendChild), (Node::hasAttributes),
		(Node::hasChildNodes), (Node::cloneNode), (Node::normalize), (Node::isSupported),
		(Node::namespaceURI), (Node::prefix), (Node::setPrefix), (Node::localName),
		(Node::addEventListener), (Node::removeEventListener), (Node::elementId),
		(Node::index), (Node::toHTML), (Node::applyChanges), (Node::getCursor),
		(Node::getRect), (NodeList::item), (NodeList::length):
		* src/kdelibs/khtml/dom/dom_node.h:
		* src/kdelibs/khtml/dom/dom_string.cpp: (DOMString::lower), (DOMString::upper),
		(DOM::operator==):
		* src/kdelibs/khtml/dom/dom_string.h:
		* src/kdelibs/khtml/dom/dom_text.cpp: (CharacterData::operator = ),
		(CharacterData::setData), (CharacterData::substringData),
		(CharacterData::appendData), (CharacterData::insertData),
		(CharacterData::deleteData), (CharacterData::replaceData), (Comment::operator =
		), (Text::operator = ), (Text::splitText):
		* src/kdelibs/khtml/dom/dom_text.h:
		* src/kdelibs/khtml/dom/dom_xml.cpp: (CDATASection::operator = ),
		(Entity::operator = ), (Entity::publicId), (Entity::systemId),
		(Entity::notationName), (EntityReference::operator = ), (Notation::operator = ),
		(Notation::publicId), (Notation::systemId), (ProcessingInstruction::operator = ),
		(ProcessingInstruction::target), (ProcessingInstruction::data),
		(ProcessingInstruction::setData):
		* src/kdelibs/khtml/dom/dom_xml.h:
		* src/kdelibs/khtml/dom/html_base.cpp: (HTMLFrameElement::setSrc),
		(HTMLFrameElement::contentDocument):
		* src/kdelibs/khtml/dom/html_base.h:
		* src/kdelibs/khtml/dom/html_block.cpp:
		* src/kdelibs/khtml/dom/html_block.h:
		* src/kdelibs/khtml/dom/html_document.cpp: (HTMLDocument::HTMLDocument),
		(HTMLDocument::operator = ), (HTMLDocument::title), (HTMLDocument::completeURL),
		(HTMLDocument::lastModified), (HTMLDocument::cookie), (HTMLDocument::setCookie),
		(HTMLDocument::getElementsByName):
		* src/kdelibs/khtml/dom/html_document.h:
		* src/kdelibs/khtml/dom/html_element.cpp: (HTMLElement::operator = ),
		(HTMLElement::removeCSSProperty), (HTMLElement::addCSSProperty),
		(HTMLElement::setInnerText), (HTMLElement::children):
		* src/kdelibs/khtml/dom/html_element.h:
		* src/kdelibs/khtml/dom/html_form.cpp: (HTMLInputElement::setDefaultChecked),
		(HTMLInputElement::name), (HTMLInputElement::setName), (HTMLInputElement::src),
		(HTMLInputElement::setType), (HTMLInputElement::blur), (HTMLInputElement::focus),
		(HTMLInputElement::select), (HTMLInputElement::click), (HTMLSelectElement::name),
		(HTMLSelectElement::setName), (HTMLSelectElement::blur),
		(HTMLSelectElement::focus), (HTMLTextAreaElement::name),
		(HTMLTextAreaElement::setName), (HTMLTextAreaElement::blur),
		(HTMLTextAreaElement::focus), (HTMLTextAreaElement::select),
		(HTMLOptionElement::value), (HTMLOptionElement::setValue):
		* src/kdelibs/khtml/dom/html_form.h:
		* src/kdelibs/khtml/dom/html_head.cpp:
		* src/kdelibs/khtml/dom/html_head.h:
		* src/kdelibs/khtml/dom/html_image.cpp: (HTMLImageElement::border),
		(HTMLImageElement::setBorder), (HTMLImageElement::height),
		(HTMLImageElement::setHeight), (HTMLImageElement::hspace),
		(HTMLImageElement::setHspace), (HTMLImageElement::src),
		(HTMLImageElement::vspace), (HTMLImageElement::setVspace),
		(HTMLImageElement::width), (HTMLImageElement::setWidth):
		* src/kdelibs/khtml/dom/html_image.h:
		* src/kdelibs/khtml/dom/html_inline.cpp: (HTMLAnchorElement::blur),
		(HTMLAnchorElement::focus), (HTMLIFrameElement::contentDocument),
		(HTMLModElement::HTMLModElement), (HTMLQuoteElement::HTMLQuoteElement):
		* src/kdelibs/khtml/dom/html_inline.h:
		* src/kdelibs/khtml/dom/html_list.cpp:
		* src/kdelibs/khtml/dom/html_list.h:
		* src/kdelibs/khtml/dom/html_misc.cpp: (HTMLCollection::base),
		(HTMLCollection::firstItem), (HTMLCollection::nextItem),
		(HTMLCollection::nextNamedItem):
		* src/kdelibs/khtml/dom/html_misc.h:
		* src/kdelibs/khtml/dom/html_object.cpp: (HTMLObjectElement::setWidth),
		(HTMLObjectElement::contentDocument):
		* src/kdelibs/khtml/dom/html_object.h:
		* src/kdelibs/khtml/dom/html_table.cpp:
		* src/kdelibs/khtml/dom/html_table.h:
		* src/kdelibs/khtml/ecma/kjs_binding.cpp: (DOMObject::get), (DOMObject::put),
		(DOMObject::toString), (DOMFunction::get), (DOMFunction::call),
		(ScriptInterpreter::~ScriptInterpreter), (ScriptInterpreter::forgetDOMObject),
		(ScriptInterpreter::mark), (ScriptInterpreter::isWindowOpenAllowed),
		(KJS::toNode), (KJS::getString), (KJS::ValueToVariant):
		* src/kdelibs/khtml/ecma/kjs_binding.h:
		* src/kdelibs/khtml/ecma/kjs_css.cpp:
		(DOMCSSStyleDeclaration::DOMCSSStyleDeclaration),
		(DOMCSSStyleDeclaration::~DOMCSSStyleDeclaration),
		(DOMCSSStyleDeclaration::hasProperty), (DOMCSSStyleDeclaration::tryGet),
		(DOMCSSStyleDeclaration::tryPut), (DOMCSSStyleDeclarationProtoFunc::tryCall),
		(KJS::getDOMCSSStyleDeclaration), (DOMStyleSheet::~DOMStyleSheet),
		(DOMStyleSheet::tryGet), (DOMStyleSheet::getValueProperty),
		(DOMStyleSheet::tryPut), (KJS::getDOMStyleSheet),
		(DOMStyleSheetList::~DOMStyleSheetList), (DOMStyleSheetList::tryGet),
		(KJS::getDOMStyleSheetList), (DOMStyleSheetListFunc::tryCall),
		(DOMMediaList::DOMMediaList), (DOMMediaList::~DOMMediaList),
		(DOMMediaList::tryGet), (DOMMediaList::tryPut), (KJS::getDOMMediaList),
		(KJS::DOMMediaListProtoFunc::tryCall), (DOMCSSStyleSheet::DOMCSSStyleSheet),
		(DOMCSSStyleSheet::tryGet), (DOMCSSStyleSheetProtoFunc::tryCall),
		(DOMCSSRuleList::~DOMCSSRuleList), (DOMCSSRuleList::tryGet),
		(DOMCSSRuleListFunc::tryCall), (KJS::getDOMCSSRuleList),
		(DOMCSSRule::~DOMCSSRule), (DOMCSSRule::classInfo), (DOMCSSRule::tryGet),
		(DOMCSSRule::getValueProperty), (DOMCSSRule::tryPut), (DOMCSSRule::putValue),
		(DOMCSSRuleFunc::tryCall), (KJS::getDOMCSSRule), (KJS::toCSSRule),
		(CSSRuleConstructor::tryGet), (CSSRuleConstructor::getValueProperty),
		(KJS::getCSSRuleConstructor), (DOMCSSValue::~DOMCSSValue), (DOMCSSValue::tryGet),
		(DOMCSSValue::tryPut), (KJS::getDOMCSSValue), (CSSValueConstructor::tryGet),
		(CSSValueConstructor::getValueProperty), (KJS::getCSSValueConstructor),
		(DOMCSSPrimitiveValue::DOMCSSPrimitiveValue), (DOMCSSPrimitiveValue::tryGet),
		(DOMCSSPrimitiveValueProtoFunc::tryCall), (CSSPrimitiveValueConstructor::tryGet),
		(CSSPrimitiveValueConstructor::getValueProperty),
		(KJS::getCSSPrimitiveValueConstructor), (DOMCSSValueList::DOMCSSValueList),
		(DOMCSSValueList::tryGet), (DOMCSSValueListFunc::tryCall), (DOMRGBColor::tryGet),
		(KJS::getDOMRGBColor), (DOMRect::~DOMRect), (DOMRect::tryGet), (KJS::getDOMRect),
		(DOMCounter::~DOMCounter), (DOMCounter::tryGet), (KJS::getDOMCounter):
		* src/kdelibs/khtml/ecma/kjs_css.h:
		* src/kdelibs/khtml/ecma/kjs_debugwin.cpp: (FakeModal::eventFilter),
		(FakeModal::enable), (FakeModal::disable), (StackFrame::toString),
		(SourceFragment::SourceFragment), (SourceFragment::~SourceFragment),
		(KJSDebugWin::KJSDebugWin), (KJSDebugWin::~KJSDebugWin),
		(KJSDebugWin::createInstance), (KJSDebugWin::destroyInstance),
		(KJSDebugWin::instance), (KJSDebugWin::next), (KJSDebugWin::step),
		(KJSDebugWin::cont), (KJSDebugWin::stop), (KJSDebugWin::showFrame),
		(KJSDebugWin::sourceSelected), (KJSDebugWin::eval), (KJSDebugWin::closeEvent),
		(KJSDebugWin::sourceParsed), (KJSDebugWin::sourceUnused), (KJSDebugWin::error),
		(KJSDebugWin::atLine), (KJSDebugWin::callEvent), (KJSDebugWin::returnEvent),
		(KJSDebugWin::setCode), (KJSDebugWin::highLight),
		(KJSDebugWin::setNextSourceInfo), (KJSDebugWin::setSourceFile),
		(KJSDebugWin::appendSourceFile), (KJSDebugWin::enterSession),
		(KJSDebugWin::leaveSession), (KJSDebugWin::updateFrameList),
		(KJSDebugWin::setBreakpoint), (KJSDebugWin::deleteBreakpoint),
		(KJSDebugWin::clearAllBreakpoints), (KJSDebugWin::breakpointLine),
		(KJSDebugWin::haveBreakpoint):
		* src/kdelibs/khtml/ecma/kjs_debugwin.h:
		* src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMNode::DOMNode), (DOMNode::~DOMNode),
		(DOMNode::toBoolean), (DOMNode::tryGet), (DOMNode::getValueProperty),
		(DOMNode::tryPut), (DOMNode::putValue), (DOMNode::toPrimitive),
		(DOMNode::toString), (DOMNode::setListener), (DOMNode::getListener),
		(DOMNode::eventHandlerScope), (DOMNodeProtoFunc::tryCall),
		(DOMNodeList::~DOMNodeList), (DOMNodeList::hasProperty), (DOMNodeList::tryGet),
		(DOMNodeList::call), (DOMNodeList::tryCall), (DOMNodeListFunc::DOMNodeListFunc),
		(DOMNodeListFunc::tryCall), (DOMAttr::tryGet), (DOMAttr::getValueProperty),
		(DOMAttr::tryPut), (DOMAttr::putValue), (DOMDocument::DOMDocument),
		(DOMDocument::tryGet), (DOMDocument::getValueProperty),
		(DOMDocumentProtoFunc::tryCall), (DOMElement::DOMElement), (DOMElement::tryGet),
		(DOMElementProtoFunc::tryCall), (DOMDOMImplementation::DOMDOMImplementation),
		(DOMDOMImplementation::~DOMDOMImplementation),
		(DOMDOMImplementationProtoFunc::tryCall), (DOMDocumentType::DOMDocumentType),
		(DOMDocumentType::tryGet), (DOMDocumentType::getValueProperty),
		(DOMNamedNodeMap::DOMNamedNodeMap), (DOMNamedNodeMap::~DOMNamedNodeMap),
		(DOMNamedNodeMap::hasProperty), (DOMNamedNodeMap::tryGet),
		(DOMNamedNodeMapProtoFunc::tryCall), (DOMProcessingInstruction::tryGet),
		(DOMProcessingInstruction::getValueProperty), (DOMProcessingInstruction::tryPut),
		(DOMNotation::tryGet), (DOMNotation::getValueProperty), (DOMEntity::tryGet),
		(DOMEntity::getValueProperty), (KJS::getDOMNode), (KJS::getDOMNamedNodeMap),
		(KJS::getDOMNodeList), (KJS::getDOMDOMImplementation), (NodeConstructor::tryGet),
		(NodeConstructor::getValueProperty), (KJS::getNodeConstructor),
		(DOMExceptionConstructor::tryGet), (DOMExceptionConstructor::getValueProperty),
		(KJS::getDOMExceptionConstructor),
		(DOMNamedNodesCollection::DOMNamedNodesCollection),
		(DOMNamedNodesCollection::tryGet), (DOMCharacterData::DOMCharacterData),
		(DOMCharacterData::tryGet), (DOMCharacterData::getValueProperty),
		(DOMCharacterData::tryPut), (DOMCharacterDataProtoFunc::tryCall),
		(DOMText::DOMText), (DOMText::tryGet), (DOMTextProtoFunc::tryCall):
		* src/kdelibs/khtml/ecma/kjs_dom.h:
		* src/kdelibs/khtml/ecma/kjs_events.cpp: (JSEventListener::JSEventListener),
		(JSEventListener::~JSEventListener), (JSEventListener::handleEvent),
		(KJS::getNodeEventListener), (EventConstructor::tryGet),
		(EventConstructor::getValueProperty), (KJS::getEventConstructor),
		(DOMEvent::DOMEvent), (DOMEvent::~DOMEvent), (DOMEvent::tryGet),
		(DOMEvent::getValueProperty), (DOMEventProtoFunc::tryCall), (KJS::getDOMEvent),
		(KJS::toEvent), (EventExceptionConstructor::tryGet),
		(EventExceptionConstructor::getValueProperty),
		(KJS::getEventExceptionConstructor), (DOMUIEvent::tryGet),
		(DOMUIEvent::getValueProperty), (DOMUIEventProtoFunc::tryCall),
		(DOMMouseEvent::tryGet), (DOMMouseEvent::getValueProperty),
		(DOMMouseEventProtoFunc::tryCall), (MutationEventConstructor::tryGet),
		(MutationEventConstructor::getValueProperty), (KJS::getMutationEventConstructor),
		(DOMMutationEvent::tryGet), (DOMMutationEvent::getValueProperty),
		(DOMMutationEventProtoFunc::tryCall):
		* src/kdelibs/khtml/ecma/kjs_events.h:
		* src/kdelibs/khtml/ecma/kjs_html.cpp: (KJS::HTMLDocFunction::tryCall),
		(KJS::HTMLDocument::hasProperty), (KJS::HTMLDocument::tryGet),
		(KJS::HTMLDocument::tryPut), (KJS::HTMLDocument::putValue),
		(KJS::HTMLElement::classInfo), (KJS::HTMLElement::tryGet),
		(KJS::HTMLElement::getValueProperty), (KJS::HTMLElement::hasProperty),
		(KJS::HTMLElement::toString), (KJS::HTMLElement::eventHandlerScope),
		(HTMLElementFunction::HTMLElementFunction), (KJS::HTMLElementFunction::tryCall),
		(KJS::HTMLElement::tryPut), (KJS::HTMLElement::putValue),
		(HTMLCollection::HTMLCollection), (HTMLCollection::~HTMLCollection),
		(KJS::HTMLCollection::hasProperty), (KJS::HTMLCollection::tryGet),
		(KJS::HTMLCollection::call), (KJS::HTMLCollection::tryCall),
		(KJS::HTMLCollection::getNamedItems), (KJS::HTMLCollectionProtoFunc::tryCall),
		(KJS::HTMLSelectCollection::tryGet), (KJS::HTMLSelectCollection::tryPut),
		(OptionConstructorImp::OptionConstructorImp),
		(OptionConstructorImp::implementsConstruct), (OptionConstructorImp::construct),
		(ImageConstructorImp::ImageConstructorImp),
		(ImageConstructorImp::implementsConstruct), (ImageConstructorImp::construct),
		(Image::tryGet), (Image::getValueProperty), (Image::tryPut),
		(KJS::getHTMLCollection), (KJS::getSelectHTMLCollection):
		* src/kdelibs/khtml/ecma/kjs_html.h:
		* src/kdelibs/khtml/ecma/kjs_navigator.cpp: (Navigator::Navigator),
		(Navigator::get), (Navigator::getValueProperty), (PluginBase::PluginBase),
		(Plugins::get), (MimeTypes::get), (Plugin::get), (MimeType::get),
		(PluginsFunc::tryCall), (NavigatorFunc::tryCall):
		* src/kdelibs/khtml/ecma/kjs_navigator.h:
		* src/kdelibs/khtml/ecma/kjs_proxy.cpp: (KJSProxyImpl::KJSProxyImpl),
		(KJSProxyImpl::~KJSProxyImpl), (KJSProxyImpl::evaluate), (KJSProxyImpl::clear),
		(KJSProxyImpl::createHTMLEventHandler), (KJSProxyImpl::finishedWithEvent),
		(KJSProxyImpl::interpreter), (KJSProxyImpl::setDebugEnabled),
		(KJSProxyImpl::paused), (KJSProxyImpl::setSourceFile),
		(KJSProxyImpl::appendSourceFile), (TestFunctionImp::call),
		(KJSProxyImpl::initScript), (KJSProxy::proxy), (kjs_html_init):
		* src/kdelibs/khtml/ecma/kjs_proxy.h:
		* src/kdelibs/khtml/ecma/kjs_range.cpp: (DOMRange::DOMRange),
		(DOMRange::~DOMRange), (DOMRange::tryGet), (DOMRange::getValueProperty),
		(DOMRangeProtoFunc::tryCall), (KJS::getDOMRange), (RangeConstructor::tryGet),
		(RangeConstructor::getValueProperty), (KJS::getRangeConstructor), (KJS::toRange):
		* src/kdelibs/khtml/ecma/kjs_range.h:
		* src/kdelibs/khtml/ecma/kjs_traversal.cpp: (DOMNodeIterator::DOMNodeIterator),
		(DOMNodeIterator::~DOMNodeIterator), (DOMNodeIterator::tryGet),
		(DOMNodeIterator::getValueProperty), (DOMNodeIteratorProtoFunc::tryCall),
		(KJS::getDOMNodeIterator), (NodeFilterConstructor::tryGet),
		(NodeFilterConstructor::getValueProperty), (KJS::getNodeFilterConstructor),
		(DOMNodeFilter::DOMNodeFilter), (DOMNodeFilter::~DOMNodeFilter),
		(DOMNodeFilterProtoFunc::tryCall), (KJS::getDOMNodeFilter),
		(DOMTreeWalker::DOMTreeWalker), (DOMTreeWalker::~DOMTreeWalker),
		(DOMTreeWalker::tryGet), (DOMTreeWalker::getValueProperty),
		(DOMTreeWalker::tryPut), (DOMTreeWalkerProtoFunc::tryCall),
		(KJS::getDOMTreeWalker), (KJS::toNodeFilter), (JSNodeFilter::JSNodeFilter),
		(JSNodeFilter::acceptNode):
		* src/kdelibs/khtml/ecma/kjs_traversal.h:
		* src/kdelibs/khtml/ecma/kjs_views.cpp: (DOMAbstractView::~DOMAbstractView),
		(DOMAbstractView::tryGet), (DOMAbstractViewFunc::tryCall),
		(KJS::getDOMAbstractView), (KJS::toAbstractView):
		* src/kdelibs/khtml/ecma/kjs_views.h:
		* src/kdelibs/khtml/ecma/kjs_window.cpp: (Screen::Screen), (Screen::get),
		(Screen::getValueProperty), (Window::Window), (Window::retrieveWindow),
		(Window::retrieveActive), (Window::retrieve), (Window::mark),
		(Window::hasProperty), (Window::toString), (Window::get), (Window::put),
		(Window::toBoolean), (Window::scheduleClose), (Window::isSafeScript),
		(Window::setListener), (Window::getListener), (Window::getJSEventListener),
		(Window::clear), (Window::setCurrentEvent), (WindowFunc::tryCall),
		(ScheduledAction::ScheduledAction), (ScheduledAction::execute),
		(ScheduledAction::~ScheduledAction), (WindowQObject::WindowQObject),
		(WindowQObject::~WindowQObject), (WindowQObject::parentDestroyed),
		(WindowQObject::installTimeout), (WindowQObject::clearTimeout),
		(WindowQObject::timerEvent), (WindowQObject::timeoutClose), (FrameArray::get),
		(Location::Location), (Location::~Location), (Location::get), (Location::put),
		(Location::toPrimitive), (Location::toString), (LocationFunc::tryCall),
		(History::get), (History::getValueProperty), (HistoryFunc::tryCall),
		(Konqueror::hasProperty), (Konqueror::get), (KonquerorFunc::tryCall),
		(Konqueror::toString):
		* src/kdelibs/khtml/ecma/kjs_window.h:
		* src/kdelibs/khtml/html/dtd.cpp: (DOM::checkChild), (DOM::addForbidden),
		(DOM::removeForbidden):
		* src/kdelibs/khtml/html/dtd.h:
		* src/kdelibs/khtml/html/html_baseimpl.cpp:
		(HTMLBodyElementImpl::HTMLBodyElementImpl), (HTMLBodyElementImpl::id),
		(HTMLBodyElementImpl::parseAttribute), (HTMLBodyElementImpl::init),
		(HTMLBodyElementImpl::attach), (HTMLFrameElementImpl::HTMLFrameElementImpl),
		(HTMLFrameElementImpl::id), (HTMLFrameElementImpl::parseAttribute),
		(HTMLFrameElementImpl::init), (HTMLFrameElementImpl::attach),
		(HTMLFrameElementImpl::detach), (HTMLFrameElementImpl::setLocation),
		(HTMLFrameElementImpl::setFocus), (HTMLFrameElementImpl::contentDocument),
		(HTMLFrameSetElementImpl::HTMLFrameSetElementImpl),
		(HTMLFrameSetElementImpl::~HTMLFrameSetElementImpl),
		(HTMLFrameSetElementImpl::id), (HTMLFrameSetElementImpl::parseAttribute),
		(HTMLFrameSetElementImpl::init), (HTMLFrameSetElementImpl::attach),
		(HTMLFrameSetElementImpl::defaultEventHandler),
		(HTMLFrameSetElementImpl::detach), (HTMLFrameSetElementImpl::recalcStyle),
		(HTMLHeadElementImpl::id), (HTMLHtmlElementImpl::attach),
		(HTMLHtmlElementImpl::id), (HTMLIFrameElementImpl::id),
		(HTMLIFrameElementImpl::parseAttribute), (HTMLIFrameElementImpl::attach),
		(HTMLIFrameElementImpl::recalcStyle):
		* src/kdelibs/khtml/html/html_baseimpl.h:
		* src/kdelibs/khtml/html/html_blockimpl.cpp: (HTMLBlockquoteElementImpl::id),
		(HTMLDivElementImpl::id), (HTMLDivElementImpl::parseAttribute),
		(HTMLHRElementImpl::id), (HTMLHRElementImpl::parseAttribute),
		(HTMLHRElementImpl::attach), (HTMLHeadingElementImpl::HTMLHeadingElementImpl),
		(HTMLParagraphElementImpl::id), (HTMLPreElementImpl::HTMLPreElementImpl),
		(HTMLLayerElementImpl::id), (HTMLLayerElementImpl::parseAttribute):
		* src/kdelibs/khtml/html/html_blockimpl.h:
		* src/kdelibs/khtml/html/html_documentimpl.cpp:
		(HTMLDocumentImpl::HTMLDocumentImpl), (HTMLDocumentImpl::~HTMLDocumentImpl),
		(HTMLDocumentImpl::referrer), (HTMLDocumentImpl::domain),
		(HTMLDocumentImpl::setDomain), (HTMLDocumentImpl::lastModified),
		(HTMLDocumentImpl::cookie), (HTMLDocumentImpl::setCookie),
		(HTMLDocumentImpl::setBody), (HTMLDocumentImpl::slotHistoryChanged),
		(isTransitional), (HTMLDocumentImpl::close),
		(HTMLDocumentImpl::determineParseMode):
		* src/kdelibs/khtml/html/html_documentimpl.h:
		* src/kdelibs/khtml/html/html_elementimpl.cpp:
		(HTMLElementImpl::HTMLElementImpl), (HTMLElementImpl::parseAttribute),
		(HTMLElementImpl::addCSSProperty), (HTMLElementImpl::addCSSLength),
		(HTMLElementImpl::removeCSSProperty), (HTMLElementImpl::innerText),
		(HTMLElementImpl::setInnerHTML), (HTMLElementImpl::namespaceURI):
		* src/kdelibs/khtml/html/html_elementimpl.h:
		* src/kdelibs/khtml/html/html_formimpl.cpp:
		(HTMLFormElementImpl::~HTMLFormElementImpl), (HTMLFormElementImpl::id),
		(HTMLFormElementImpl::length), (HTMLFormElementImpl::i18nData),
		(HTMLFormElementImpl::formData), (HTMLFormElementImpl::prepareSubmit),
		(HTMLFormElementImpl::submit), (HTMLFormElementImpl::reset),
		(HTMLFormElementImpl::parseAttribute), (HTMLFormElementImpl::radioClicked),
		(HTMLGenericFormElementImpl::HTMLGenericFormElementImpl),
		(HTMLGenericFormElementImpl::parseAttribute),
		(HTMLGenericFormElementImpl::attach), (HTMLGenericFormElementImpl::name),
		(HTMLGenericFormElementImpl::setName), (HTMLGenericFormElementImpl::onSelect),
		(HTMLGenericFormElementImpl::onChange),
		(HTMLGenericFormElementImpl::setDisabled),
		(HTMLGenericFormElementImpl::setParent),
		(HTMLGenericFormElementImpl::recalcStyle),
		(HTMLGenericFormElementImpl::isSelectable),
		(HTMLGenericFormElementImpl::defaultEventHandler),
		(HTMLGenericFormElementImpl::isEditable), (HTMLButtonElementImpl::id),
		(HTMLButtonElementImpl::parseAttribute), (HTMLButtonElementImpl::attach),
		(HTMLButtonElementImpl::defaultEventHandler), (HTMLButtonElementImpl::encoding),
		(HTMLFieldSetElementImpl::id), (HTMLInputElementImpl::HTMLInputElementImpl),
		(HTMLInputElementImpl::~HTMLInputElementImpl), (HTMLInputElementImpl::id),
		(HTMLInputElementImpl::setType), (HTMLInputElementImpl::state),
		(HTMLInputElementImpl::restoreState), (HTMLInputElementImpl::parseAttribute),
		(HTMLInputElementImpl::init), (HTMLInputElementImpl::attach),
		(HTMLInputElementImpl::altText), (HTMLInputElementImpl::encoding),
		(HTMLInputElementImpl::reset), (HTMLInputElementImpl::setChecked),
		(HTMLInputElementImpl::value), (HTMLInputElementImpl::setValue),
		(HTMLInputElementImpl::blur), (HTMLInputElementImpl::focus),
		(HTMLInputElementImpl::defaultEventHandler), (HTMLInputElementImpl::isEditable),
		(HTMLLabelElementImpl::id), (HTMLLabelElementImpl::parseAttribute),
		(HTMLLabelElementImpl::formElement), (HTMLLegendElementImpl::id),
		(HTMLSelectElementImpl::HTMLSelectElementImpl), (HTMLSelectElementImpl::id),
		(HTMLSelectElementImpl::add), (HTMLSelectElementImpl::blur),
		(HTMLSelectElementImpl::focus), (HTMLSelectElementImpl::value),
		(HTMLSelectElementImpl::setValue), (HTMLSelectElementImpl::state),
		(HTMLSelectElementImpl::restoreState), (HTMLSelectElementImpl::parseAttribute),
		(HTMLSelectElementImpl::init), (HTMLSelectElementImpl::attach),
		(HTMLSelectElementImpl::encoding), (HTMLSelectElementImpl::reset),
		(HTMLSelectElementImpl::notifyOptionSelected),
		(HTMLKeygenElementImpl::HTMLKeygenElementImpl), (HTMLKeygenElementImpl::id),
		(HTMLKeygenElementImpl::parseAttribute), (HTMLKeygenElementImpl::encoding),
		(HTMLOptGroupElementImpl::HTMLOptGroupElementImpl),
		(HTMLOptGroupElementImpl::id), (HTMLOptGroupElementImpl::parseAttribute),
		(HTMLOptionElementImpl::id), (HTMLOptionElementImpl::text),
		(HTMLOptionElementImpl::index), (HTMLOptionElementImpl::setIndex),
		(HTMLOptionElementImpl::parseAttribute), (HTMLOptionElementImpl::value),
		(HTMLOptionElementImpl::setValue), (HTMLOptionElementImpl::getSelect),
		(HTMLTextAreaElementImpl::HTMLTextAreaElementImpl),
		(HTMLTextAreaElementImpl::id), (HTMLTextAreaElementImpl::parseAttribute),
		(HTMLTextAreaElementImpl::init), (HTMLTextAreaElementImpl::attach),
		(HTMLTextAreaElementImpl::encoding), (HTMLTextAreaElementImpl::setDefaultValue),
		(HTMLTextAreaElementImpl::blur), (HTMLTextAreaElementImpl::focus),
		(HTMLTextAreaElementImpl::isEditable),
		(HTMLIsIndexElementImpl::HTMLIsIndexElementImpl), (HTMLIsIndexElementImpl::id),
		(HTMLIsIndexElementImpl::parseAttribute):
		* src/kdelibs/khtml/html/html_formimpl.h:
		* src/kdelibs/khtml/html/html_headimpl.cpp: (HTMLBaseElementImpl::id),
		(HTMLBaseElementImpl::parseAttribute),
		(HTMLBaseElementImpl::insertedIntoDocument),
		(HTMLBaseElementImpl::removedFromDocument), (HTMLBaseElementImpl::process),
		(HTMLLinkElementImpl::HTMLLinkElementImpl), (HTMLLinkElementImpl::id),
		(HTMLLinkElementImpl::parseAttribute), (HTMLLinkElementImpl::process),
		(HTMLLinkElementImpl::insertedIntoDocument),
		(HTMLLinkElementImpl::removedFromDocument), (HTMLLinkElementImpl::setStyleSheet),
		(HTMLLinkElementImpl::sheetLoaded), (HTMLMetaElementImpl::id),
		(HTMLMetaElementImpl::parseAttribute),
		(HTMLMetaElementImpl::insertedIntoDocument), (HTMLMetaElementImpl::process),
		(HTMLScriptElementImpl::id), (HTMLStyleElementImpl::id),
		(HTMLStyleElementImpl::parseAttribute),
		(HTMLStyleElementImpl::insertedIntoDocument),
		(HTMLStyleElementImpl::removedFromDocument),
		(HTMLStyleElementImpl::childrenChanged), (HTMLStyleElementImpl::isLoading),
		(HTMLStyleElementImpl::sheetLoaded), (HTMLTitleElementImpl::id),
		(HTMLTitleElementImpl::insertedIntoDocument),
		(HTMLTitleElementImpl::removedFromDocument),
		(HTMLTitleElementImpl::childrenChanged):
		* src/kdelibs/khtml/html/html_headimpl.h:
		* src/kdelibs/khtml/html/html_imageimpl.cpp: (HTMLImageElementImpl::id),
		(HTMLImageElementImpl::parseAttribute), (HTMLImageElementImpl::altText),
		(HTMLImageElementImpl::attach), (HTMLMapElementImpl::~HTMLMapElementImpl),
		(HTMLMapElementImpl::id), (HTMLMapElementImpl::mapMouseEvent),
		(HTMLMapElementImpl::parseAttribute), (HTMLAreaElementImpl::HTMLAreaElementImpl),
		(HTMLAreaElementImpl::~HTMLAreaElementImpl), (HTMLAreaElementImpl::id),
		(HTMLAreaElementImpl::parseAttribute), (HTMLAreaElementImpl::mapMouseEvent),
		(HTMLAreaElementImpl::getRect), (HTMLAreaElementImpl::getRegion):
		* src/kdelibs/khtml/html/html_imageimpl.h:
		* src/kdelibs/khtml/html/html_inlineimpl.cpp:
		(HTMLAnchorElementImpl::HTMLAnchorElementImpl),
		(HTMLAnchorElementImpl::~HTMLAnchorElementImpl), (HTMLAnchorElementImpl::id),
		(HTMLAnchorElementImpl::defaultEventHandler),
		(HTMLAnchorElementImpl::parseAttribute), (HTMLBRElementImpl::id),
		(HTMLBRElementImpl::parseAttribute), (HTMLBRElementImpl::attach),
		(HTMLFontElementImpl::id), (HTMLFontElementImpl::parseAttribute):
		* src/kdelibs/khtml/html/html_inlineimpl.h:
		* src/kdelibs/khtml/html/html_listimpl.cpp: (HTMLUListElementImpl::id),
		(HTMLUListElementImpl::parseAttribute), (HTMLDirectoryElementImpl::id),
		(HTMLMenuElementImpl::id), (HTMLOListElementImpl::id),
		(HTMLOListElementImpl::parseAttribute), (HTMLLIElementImpl::id),
		(HTMLLIElementImpl::parseAttribute), (HTMLLIElementImpl::attach),
		(HTMLDListElementImpl::id):
		* src/kdelibs/khtml/html/html_listimpl.h:
		* src/kdelibs/khtml/html/html_miscimpl.cpp:
		(HTMLBaseFontElementImpl::HTMLBaseFontElementImpl),
		(HTMLBaseFontElementImpl::id), (HTMLCollectionImpl::HTMLCollectionImpl),
		(HTMLCollectionImpl::calcLength), (HTMLCollectionImpl::getItem),
		(HTMLCollectionImpl::firstItem), (HTMLCollectionImpl::nextItem),
		(HTMLCollectionImpl::getNamedItem), (HTMLCollectionImpl::namedItem),
		(HTMLCollectionImpl::nextNamedItem), (HTMLCollectionImpl::nextNamedItemInternal),
		(HTMLFormCollectionImpl::calcLength), (HTMLFormCollectionImpl::getItem),
		(HTMLFormCollectionImpl::getNamedItem),
		(HTMLFormCollectionImpl::getNamedFormItem),
		(HTMLFormCollectionImpl::getNamedImgItem), (HTMLFormCollectionImpl::firstItem),
		(HTMLFormCollectionImpl::nextItem),
		(HTMLFormCollectionImpl::nextNamedItemInternal):
		* src/kdelibs/khtml/html/html_miscimpl.h:
		* src/kdelibs/khtml/html/html_objectimpl.cpp:
		(HTMLAppletElementImpl::HTMLAppletElementImpl),
		(HTMLAppletElementImpl::~HTMLAppletElementImpl), (HTMLAppletElementImpl::id),
		(HTMLAppletElementImpl::parseAttribute), (HTMLAppletElementImpl::attach),
		(HTMLEmbedElementImpl::id), (HTMLEmbedElementImpl::parseAttribute),
		(HTMLEmbedElementImpl::attach), (HTMLObjectElementImpl::id),
		(HTMLObjectElementImpl::parseAttribute),
		(HTMLObjectElementImpl::contentDocument), (HTMLObjectElementImpl::attach),
		(HTMLObjectElementImpl::detach), (HTMLObjectElementImpl::recalcStyle),
		(HTMLParamElementImpl::id), (HTMLParamElementImpl::parseAttribute):
		* src/kdelibs/khtml/html/html_objectimpl.h:
		* src/kdelibs/khtml/html/html_tableimpl.cpp:
		(HTMLTableElementImpl::HTMLTableElementImpl), (HTMLTableElementImpl::id),
		(HTMLTableElementImpl::setCaption), (HTMLTableElementImpl::setTHead),
		(HTMLTableElementImpl::setTFoot), (HTMLTableElementImpl::setTBody),
		(HTMLTableElementImpl::createTHead), (HTMLTableElementImpl::deleteTHead),
		(HTMLTableElementImpl::createTFoot), (HTMLTableElementImpl::deleteTFoot),
		(HTMLTableElementImpl::createCaption), (HTMLTableElementImpl::deleteCaption),
		(HTMLTableElementImpl::insertRow), (HTMLTableElementImpl::deleteRow),
		(HTMLTableElementImpl::addChild), (HTMLTableElementImpl::parseAttribute),
		(HTMLTableElementImpl::init), (HTMLTablePartElementImpl::parseAttribute),
		(HTMLTableSectionElementImpl::id), (HTMLTableSectionElementImpl::insertRow),
		(HTMLTableSectionElementImpl::deleteRow), (HTMLTableRowElementImpl::id),
		(HTMLTableRowElementImpl::insertCell), (HTMLTableRowElementImpl::deleteCell),
		(HTMLTableCellElementImpl::HTMLTableCellElementImpl),
		(HTMLTableCellElementImpl::parseAttribute), (HTMLTableCellElementImpl::init),
		(HTMLTableColElementImpl::HTMLTableColElementImpl),
		(HTMLTableColElementImpl::id), (HTMLTableColElementImpl::parseAttribute),
		(HTMLTableCaptionElementImpl::id), (HTMLTableCaptionElementImpl::parseAttribute):
		* src/kdelibs/khtml/html/html_tableimpl.h:
		* src/kdelibs/khtml/html/htmlparser.cpp: (KHTMLParser::parseToken),
		(KHTMLParser::insertNode), (KHTMLParser::getElement),
		(KHTMLParser::processCloseTag), (KHTMLParser::popOneBlock),
		(KHTMLParser::handleIsindex):
		* src/kdelibs/khtml/html/htmlparser.h:
		* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::HTMLTokenizer),
		(HTMLTokenizer::reset), (HTMLTokenizer::begin), (HTMLTokenizer::processListing),
		(HTMLTokenizer::parseSpecial), (HTMLTokenizer::scriptHandler),
		(HTMLTokenizer::scriptExecution), (HTMLTokenizer::parseComment),
		(HTMLTokenizer::parseServer), (HTMLTokenizer::parseTag), (HTMLTokenizer::write),
		(HTMLTokenizer::finish), (HTMLTokenizer::processToken),
		(HTMLTokenizer::notifyFinished), (HTMLTokenizer::addPendingSource),
		(HTMLTokenizer::setSrc):
		* src/kdelibs/khtml/html/htmltokenizer.h:
		* src/kdelibs/khtml/java/javaembed.h:
		* src/kdelibs/khtml/java/kjavaapplet.h:
		* src/kdelibs/khtml/java/kjavaappletcontext.cpp:
		* src/kdelibs/khtml/java/kjavaappletcontext.h:
		* src/kdelibs/khtml/java/kjavaappletserver.cpp: (KJavaAppletServer::setupJava):
		* src/kdelibs/khtml/java/kjavaappletserver.h:
		* src/kdelibs/khtml/java/kjavaappletwidget.h:
		* src/kdelibs/khtml/java/kjavaprocess.cpp: (KJavaProcess::invokeJVM):
		* src/kdelibs/khtml/khtml_events.cpp: (khtml::MouseEvent::MouseEvent),
		(khtml::MouseEvent::offset):
		* src/kdelibs/khtml/khtml_events.h:
		* src/kdelibs/khtml/khtml_ext.h:
		* src/kdelibs/khtml/khtml_factory.h:
		* src/kdelibs/khtml/khtml_part.h:
		* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::KHTMLView),
		(KHTMLView::~KHTMLView), (KHTMLView::init), (KHTMLView::clear),
		(KHTMLView::resizeEvent), (KHTMLView::drawContents), (KHTMLView::setMarginWidth),
		(KHTMLView::setMarginHeight), (KHTMLView::layout),
		(KHTMLView::viewportMousePressEvent), (KHTMLView::viewportMouseDoubleClickEvent),
		(KHTMLView::viewportMouseMoveEvent), (KHTMLView::resetCursor),
		(KHTMLView::viewportMouseReleaseEvent), (KHTMLView::keyPressEvent),
		(KHTMLView::keyReleaseEvent), (KHTMLView::contentsContextMenuEvent),
		(KHTMLView::focusNextPrevChild), (KHTMLView::scrollTo),
		(KHTMLView::focusNextPrevNode), (KHTMLView::setMediaType),
		(KHTMLView::mediaType), (KHTMLView::print), (KHTMLView::slotPaletteChanged),
		(KHTMLView::restoreScrollBar), (KHTMLView::addFormCompletionItem),
		(KHTMLView::dispatchMouseEvent), (KHTMLView::setIgnoreEvents),
		(KHTMLView::ignoreEvents), (KHTMLView::setIgnoreWheelEvents),
		(KHTMLView::viewportWheelEvent), (KHTMLView::slotScrollBarMoved),
		(KHTMLView::timerEvent), (KHTMLView::scheduleRelayout),
		(KHTMLView::scheduleRepaint), (KHTMLView::complete):
		* src/kdelibs/khtml/khtmlview.h:
		* src/kdelibs/khtml/misc/decoder.cpp:
		* src/kdelibs/khtml/misc/decoder.h:
		* src/kdelibs/khtml/misc/helper.cpp: (khtml::setNamedColor),
		(khtml::setPrintPainter):
		* src/kdelibs/khtml/misc/helper.h:
		* src/kdelibs/khtml/misc/htmlattrs.in:
		* src/kdelibs/khtml/misc/htmltags.in:
		* src/kdelibs/khtml/misc/khtmllayout.h:
		* src/kdelibs/khtml/misc/loader.h:
		* src/kdelibs/khtml/misc/loader_client.h:
		* src/kdelibs/khtml/misc/makeattrs:
		* src/kdelibs/khtml/misc/maketags:
		* src/kdelibs/khtml/misc/stringit.h:
		* src/kdelibs/khtml/rendering/bidi.cpp: (Bidinext), (first),
		(BidiIterator::BidiIterator), (BidiIterator::operator ++ ),
		(BidiIterator::atEnd), (BidiIterator::current), (BidiIterator::direction),
		(appendRun), (embed), (RenderFlow::bidiReorderLine),
		(RenderFlow::layoutInlineChildren):
		* src/kdelibs/khtml/rendering/bidi.h:
		* src/kdelibs/khtml/rendering/break_lines.cpp:
		* src/kdelibs/khtml/rendering/render_applet.cpp: (RenderApplet::RenderApplet),
		(RenderApplet::intrinsicWidth), (RenderApplet::intrinsicHeight),
		(RenderApplet::layout), (RenderEmptyApplet::RenderEmptyApplet),
		(RenderEmptyApplet::layout):
		* src/kdelibs/khtml/rendering/render_applet.h:
		* src/kdelibs/khtml/rendering/render_body.cpp: (RenderBody::RenderBody),
		(RenderBody::setStyle):
		* src/kdelibs/khtml/rendering/render_body.h:
		* src/kdelibs/khtml/rendering/render_box.cpp: (RenderBox::RenderBox),
		(RenderBox::setPos), (RenderBox::setPixmap), (RenderBox::printBackground),
		(RenderBox::calcClip), (RenderBox::close), (RenderBox::repaintRectangle),
		(RenderBox::calcWidth), (RenderBox::calcHorizontalMargins),
		(RenderBox::calcHeight), (RenderBox::calcReplacedWidth),
		(RenderBox::calcReplacedHeight), (RenderBox::calcVerticalMargins):
		* src/kdelibs/khtml/rendering/render_box.h:
		* src/kdelibs/khtml/rendering/render_br.cpp: (RenderBR::RenderBR):
		* src/kdelibs/khtml/rendering/render_br.h:
		* src/kdelibs/khtml/rendering/render_container.cpp:
		(RenderContainer::RenderContainer), (RenderContainer::addChild),
		(RenderContainer::removeChildNode), (RenderContainer::removeChild),
		(RenderContainer::insertPseudoChild), (RenderContainer::appendChildNode),
		(RenderContainer::insertChildNode), (RenderContainer::layout):
		* src/kdelibs/khtml/rendering/render_container.h:
		* src/kdelibs/khtml/rendering/render_flow.cpp: (RenderFlow::RenderFlow),
		(RenderFlow::setStyle), (RenderFlow::print), (RenderFlow::printObject),
		(RenderFlow::printSpecialObjects), (RenderFlow::layout),
		(RenderFlow::layoutSpecialObjects), (RenderFlow::layoutBlockChildren),
		(RenderFlow::insertSpecialObject), (RenderFlow::removeSpecialObject),
		(RenderFlow::positionNewFloats), (RenderFlow::leftOffset),
		(RenderFlow::leftRelOffset), (RenderFlow::rightOffset),
		(RenderFlow::rightRelOffset), (RenderFlow::lineWidth), (RenderFlow::floatBottom),
		(RenderFlow::lowestPosition), (RenderFlow::rightmostPosition),
		(RenderFlow::leftBottom), (RenderFlow::rightBottom), (RenderFlow::clearFloats),
		(RenderFlow::addOverHangingFloats), (next), (RenderFlow::calcMinMaxWidth),
		(RenderFlow::close), (RenderFlow::addChild), (RenderFlow::makeChildrenNonInline),
		(RenderFlow::nodeAtPoint), (RenderFlow::printTree), (RenderFlow::dump):
		* src/kdelibs/khtml/rendering/render_flow.h:
		* src/kdelibs/khtml/rendering/render_form.cpp:
		(RenderFormElement::RenderFormElement), (RenderFormElement::updateFromElement),
		(RenderFormElement::layout), (RenderFormElement::slotClicked),
		(RenderButton::RenderButton), (RenderCheckBox::RenderCheckBox),
		(RenderCheckBox::calcMinMaxWidth), (RenderCheckBox::updateFromElement),
		(RenderCheckBox::slotStateChanged), (RenderRadioButton::RenderRadioButton),
		(RenderRadioButton::updateFromElement), (RenderRadioButton::slotClicked),
		(RenderRadioButton::calcMinMaxWidth), (RenderSubmitButton::RenderSubmitButton),
		(RenderSubmitButton::calcMinMaxWidth), (RenderImageButton::RenderImageButton),
		(RenderResetButton::RenderResetButton), (RenderPushButton::RenderPushButton),
		(RenderLineEdit::RenderLineEdit), (RenderLineEdit::slotReturnPressed),
		(RenderLineEdit::handleFocusOut), (RenderLineEdit::calcMinMaxWidth),
		(RenderLineEdit::updateFromElement), (RenderLineEdit::slotTextChanged),
		(RenderFieldset::RenderFieldset), (RenderFileButton::RenderFileButton),
		(RenderFileButton::calcMinMaxWidth), (RenderFileButton::handleFocusOut),
		(RenderFileButton::slotClicked), (RenderFileButton::updateFromElement),
		(RenderFileButton::slotReturnPressed), (RenderFileButton::slotTextChanged),
		(RenderLabel::RenderLabel), (RenderLegend::RenderLegend),
		(RenderSelect::RenderSelect), (RenderSelect::updateFromElement),
		(RenderSelect::calcMinMaxWidth), (RenderSelect::layout), (RenderSelect::close),
		(RenderSelect::slotSelected), (RenderSelect::slotSelectionChanged),
		(RenderSelect::createListBox), (RenderSelect::createComboBox),
		(RenderSelect::updateSelection), (TextAreaWidget::TextAreaWidget),
		(TextAreaWidget::event), (RenderTextArea::RenderTextArea),
		(RenderTextArea::~RenderTextArea), (RenderTextArea::handleFocusOut),
		(RenderTextArea::calcMinMaxWidth), (RenderTextArea::updateFromElement),
		(RenderTextArea::close), (RenderTextArea::text),
		(RenderTextArea::slotTextChanged):
		* src/kdelibs/khtml/rendering/render_form.h:
		* src/kdelibs/khtml/rendering/render_frames.cpp:
		(RenderFrameSet::RenderFrameSet), (RenderFrameSet::~RenderFrameSet),
		(RenderFrameSet::nodeAtPoint), (RenderFrameSet::layout),
		(RenderFrameSet::positionFrames), (RenderFrameSet::userResize),
		(RenderFrameSet::setResizing), (RenderFrameSet::canResize),
		(RenderFrameSet::dump), (RenderPart::RenderPart), (RenderPart::setWidget),
		(RenderPart::partLoadingErrorNotify), (RenderFrame::RenderFrame),
		(RenderFrame::slotViewCleared), (RenderPartObject::RenderPartObject),
		(RenderPartObject::updateWidget), (RenderPartObject::close),
		(RenderPartObject::partLoadingErrorNotify),
		(RenderPartObject::slotPartLoadingErrorNotify),
		(RenderPartObject::calcReplacedWidth), (RenderPartObject::calcReplacedHeight),
		(RenderPartObject::layout), (RenderPartObject::slotViewCleared):
		* src/kdelibs/khtml/rendering/render_frames.h:
		* src/kdelibs/khtml/rendering/render_html.cpp: (RenderHtml::RenderHtml),
		(RenderHtml::printBoxDecorations):
		* src/kdelibs/khtml/rendering/render_html.h:
		* src/kdelibs/khtml/rendering/render_image.cpp: (RenderImage::RenderImage),
		(RenderImage::setStyle), (RenderImage::setPixmap), (RenderImage::printObject),
		(RenderImage::layout), (RenderImage::notifyFinished), (RenderImage::nodeAtPoint),
		(RenderImage::updateFromElement):
		* src/kdelibs/khtml/rendering/render_image.h:
		* src/kdelibs/khtml/rendering/render_list.cpp: (toLetter), (toHebrew),
		(RenderListItem::RenderListItem), (RenderListItem::setStyle),
		(RenderListItem::calcListValue), (RenderListItem::layout),
		(RenderListMarker::RenderListMarker), (RenderListMarker::~RenderListMarker),
		(RenderListMarker::setStyle), (RenderListMarker::printObject),
		(RenderListMarker::layout), (RenderListMarker::setPixmap),
		(RenderListMarker::calcMinMaxWidth):
		* src/kdelibs/khtml/rendering/render_list.h:
		* src/kdelibs/khtml/rendering/render_object.cpp: (RenderObject::createObject),
		(RenderObject::RenderObject), (RenderObject::~RenderObject),
		(RenderObject::addChild), (RenderObject::removeChildNode),
		(RenderObject::removeChild), (RenderObject::appendChildNode),
		(RenderObject::insertChildNode), (RenderObject::containingBlock),
		(RenderObject::drawBorder), (RenderObject::printBorder),
		(RenderObject::printOutline), (RenderObject::information),
		(RenderObject::printTree), (RenderObject::dump),
		(RenderObject::selectionStartEnd), (RenderObject::setStyle),
		(RenderObject::setOverhangingContents), (RenderObject::root),
		(RenderObject::invalidateLayout), (RenderObject::checkSelectionPoint),
		(RenderObject::nodeAtPoint), (RenderObject::getVerticalPosition),
		(RenderObject::lineHeight), (RenderObject::baselinePosition),
		(RenderObject::recalcMinMaxWidths), (RenderObject::scheduleRelayout):
		* src/kdelibs/khtml/rendering/render_object.h:
		* src/kdelibs/khtml/rendering/render_replaced.cpp:
		(RenderReplaced::RenderReplaced), (RenderReplaced::print),
		(RenderReplaced::calcMinMaxWidth), (RenderReplaced::lineHeight),
		(RenderWidget::RenderWidget), (RenderWidget::detach),
		(RenderWidget::~RenderWidget), (RenderWidget::setQWidget),
		(RenderWidget::layout), (RenderWidget::setStyle), (RenderWidget::printObject),
		(RenderWidget::eventFilter), (RenderWidget::handleDOMEvent),
		(RenderWidget::sendWidgetEvent):
		* src/kdelibs/khtml/rendering/render_replaced.h:
		* src/kdelibs/khtml/rendering/render_root.cpp: (RenderRoot::RenderRoot),
		(RenderRoot::calcMinMaxWidth), (RenderRoot::layout), (RenderRoot::printObject),
		(RenderRoot::repaintRectangle), (RenderRoot::repaint), (RenderRoot::close),
		(RenderRoot::setSelection), (RenderRoot::clearSelection),
		(RenderRoot::selectionStartEnd), (RenderRoot::docWidth):
		* src/kdelibs/khtml/rendering/render_root.h:
		* src/kdelibs/khtml/rendering/render_style.cpp: (RenderStyle::setBitDefaults),
		(RenderStyle::RenderStyle), (RenderStyle::inheritFrom),
		(RenderStyle::~RenderStyle), (RenderStyle::operator==),
		(RenderStyle::getPseudoStyle), (RenderStyle::addPseudoStyle),
		(RenderStyle::removePseudoStyle), (RenderStyle::inheritedNotEqual),
		(RenderStyle::diff), (RenderStyle::cleanup),
		(RenderPseudoElementStyle::RenderPseudoElementStyle),
		(RenderPseudoElementStyle::~RenderPseudoElementStyle),
		(RenderPseudoElementStyle::setContent), (RenderPseudoElementStyle::contentText),
		(RenderPseudoElementStyle::contentObject),
		(RenderPseudoElementStyle::clearContent):
		* src/kdelibs/khtml/rendering/render_style.h:
		* src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::RenderTable),
		(RenderTable::setStyle), (RenderTable::addChild), (RenderTable::addCell),
		(RenderTable::setCells), (RenderTable::recalcColInfo), (RenderTable::addColInfo),
		(RenderTable::calcSingleColMinMax), (RenderTable::calcFinalColMax),
		(RenderTable::calcColMinMax), (RenderTable::calcWidth),
		(RenderTable::calcColWidth), (RenderTable::distributeRest),
		(RenderTable::layout), (RenderTable::layoutRows), (RenderTable::setCellWidths),
		(RenderTable::print), (RenderTable::calcMinMaxWidth), (RenderTable::close),
		(RenderTable::recalcCells), (RenderTable::dump),
		(RenderTableSection::RenderTableSection),
		(RenderTableSection::~RenderTableSection), (RenderTableSection::addChild),
		(RenderTableSection::dump), (RenderTableRow::RenderTableRow),
		(RenderTableRow::addChild), (RenderTableRow::dump), (RenderTableRow::layout),
		(RenderTableCell::RenderTableCell), (RenderTableCell::updateFromElement),
		(RenderTableCell::calcMinMaxWidth), (RenderTableCell::setWidth),
		(RenderTableCell::close), (RenderTableCell::print),
		(RenderTableCell::printBoxDecorations), (RenderTableCell::dump),
		(RenderTableCol::RenderTableCol), (RenderTableCol::updateFromElement),
		(RenderTableCol::dump), (RenderTableCaption::RenderTableCaption):
		* src/kdelibs/khtml/rendering/render_table.h:
		* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::~TextSlave),
		(TextSlave::print), (TextSlave::printSelection), (TextSlave::printDecoration),
		(TextSlave::printBoxDecorations), (TextSlave::checkSelectionPoint),
		(TextSlaveArray::compareItems), (RenderText::RenderText), (RenderText::setStyle),
		(RenderText::~RenderText), (RenderText::deleteSlaves), (RenderText::nodeAtPoint),
		(RenderText::checkSelectionPoint), (RenderText::cursorPos),
		(RenderText::absolutePosition), (RenderText::rightmostPosition),
		(RenderText::printObject), (RenderText::print), (RenderText::calcMinMaxWidth),
		(RenderText::font), (RenderText::setText), (RenderText::height),
		(RenderText::lineHeight), (RenderText::baselinePosition), (RenderText::position),
		(RenderText::width), (RenderText::metrics), (RenderText::printTextOutline):
		* src/kdelibs/khtml/rendering/render_text.h:
		* src/kdelibs/khtml/xml/dom2_eventsimpl.cpp: (EventImpl::~EventImpl),
		(EventImpl::setTarget), (EventImpl::initEvent), (EventImpl::idToType),
		(UIEventImpl::UIEventImpl), (UIEventImpl::~UIEventImpl),
		(KeyEventImpl::KeyEventImpl), (KeyEventImpl::~KeyEventImpl),
		(KeyEventImpl::checkModifier), (KeyEventImpl::initKeyEvent),
		(KeyEventImpl::initModifier), (KeyEventImpl::inputGenerated),
		(KeyEventImpl::keyVal), (KeyEventImpl::numPad), (KeyEventImpl::outputString),
		(KeyEventImpl::virtKeyVal), (RegisteredEventListener::operator==):
		* src/kdelibs/khtml/xml/dom2_eventsimpl.h:
		* src/kdelibs/khtml/xml/dom2_rangeimpl.cpp: (RangeImpl::~RangeImpl),
		(RangeImpl::compareBoundaryPoints), (RangeImpl::processContents):
		* src/kdelibs/khtml/xml/dom2_rangeimpl.h:
		* src/kdelibs/khtml/xml/dom2_traversalimpl.cpp:
		(NodeIteratorImpl::NodeIteratorImpl), (TreeWalkerImpl::TreeWalkerImpl),
		(TreeWalkerImpl::operator = ), (TreeWalkerImpl::~TreeWalkerImpl),
		(TreeWalkerImpl::getCurrentNode), (TreeWalkerImpl::setWhatToShow),
		(TreeWalkerImpl::setFilter), (TreeWalkerImpl::setExpandEntityReferences),
		(TreeWalkerImpl::setCurrentNode), (TreeWalkerImpl::parentNode),
		(TreeWalkerImpl::firstChild), (TreeWalkerImpl::lastChild),
		(TreeWalkerImpl::previousSibling), (TreeWalkerImpl::nextSibling),
		(TreeWalkerImpl::previousNode), (TreeWalkerImpl::nextNode),
		(TreeWalkerImpl::isAccepted), (TreeWalkerImpl::getParentNode),
		(TreeWalkerImpl::getPreviousSibling), (TreeWalkerImpl::getNextSibling):
		* src/kdelibs/khtml/xml/dom2_traversalimpl.h:
		* src/kdelibs/khtml/xml/dom2_viewsimpl.cpp:
		* src/kdelibs/khtml/xml/dom2_viewsimpl.h:
		* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DOMImplementationImpl::hasFeature),
		(DOMImplementationImpl::createDocumentType),
		(DOMImplementationImpl::getInterface), (DOMImplementationImpl::createDocument),
		(DOMImplementationImpl::createCSSStyleSheet),
		(DOMImplementationImpl::createHTMLDocument), (DOMImplementationImpl::instance),
		(DocumentImpl::DocumentImpl), (DocumentImpl::~DocumentImpl),
		(DocumentImpl::doctype), (DocumentImpl::implementation),
		(DocumentImpl::createDocumentFragment), (DocumentImpl::createTextNode),
		(DocumentImpl::createComment), (DocumentImpl::createCDATASection),
		(DocumentImpl::createProcessingInstruction), (DocumentImpl::createAttribute),
		(DocumentImpl::createEntityReference), (DocumentImpl::importNode),
		(DocumentImpl::createElementNS), (DocumentImpl::getElementById),
		(DocumentImpl::setTitle), (DocumentImpl::nodeName), (DocumentImpl::nodeType),
		(DocumentImpl::createHTMLElement), (DocumentImpl::nextState),
		(DocumentImpl::docState), (DocumentImpl::createNodeIterator),
		(DocumentImpl::createTreeWalker), (DocumentImpl::setDocumentChanged),
		(DocumentImpl::recalcStyle), (DocumentImpl::updateRendering),
		(DocumentImpl::updateDocumentsRendering), (DocumentImpl::attach),
		(DocumentImpl::detach), (DocumentImpl::setVisuallyOrdered), (DocumentImpl::open),
		(DocumentImpl::close), (DocumentImpl::write), (DocumentImpl::setStyleSheet),
		(DocumentImpl::setUserStyleSheet), (DocumentImpl::elementSheet),
		(DocumentImpl::determineParseMode), (DocumentImpl::findElement),
		(DocumentImpl::nextFocusNode), (DocumentImpl::previousFocusNode),
		(DocumentImpl::nodeAbsIndex), (DocumentImpl::nodeWithAbsIndex),
		(DocumentImpl::processHttpEquiv), (DocumentImpl::prepareMouseEvent),
		(DocumentImpl::childAllowed), (DocumentImpl::cloneNode), (DocumentImpl::attrId),
		(DocumentImpl::attrName), (DocumentImpl::tagId), (DocumentImpl::tagName),
		(DocumentImpl::namespaceURI), (DocumentImpl::updateStyleSelector),
		(DocumentImpl::recalcStyleSelector), (DocumentImpl::setFocusNode),
		(DocumentImpl::notifyBeforeNodeRemoval), (DocumentImpl::defaultEventHandler),
		(DocumentImpl::setWindowEventListener), (DocumentImpl::getWindowEventListener),
		(DocumentImpl::removeWindowEventListener), (DocumentFragmentImpl::nodeName),
		(DocumentFragmentImpl::cloneNode), (DocumentTypeImpl::DocumentTypeImpl),
		(DocumentTypeImpl::~DocumentTypeImpl), (DocumentTypeImpl::copyFrom),
		(DocumentTypeImpl::nodeName), (DocumentTypeImpl::cloneNode):
		* src/kdelibs/khtml/xml/dom_docimpl.h:
		* src/kdelibs/khtml/xml/dom_elementimpl.cpp: (AttributeImpl::allocateImpl),
		(AttrImpl::AttrImpl), (AttrImpl::~AttrImpl), (AttrImpl::nodeName),
		(AttrImpl::prefix), (AttrImpl::setPrefix), (AttrImpl::nodeValue),
		(AttrImpl::setValue), (AttrImpl::setNodeValue), (AttrImpl::cloneNode),
		(ElementImpl::ElementImpl), (ElementImpl::~ElementImpl),
		(ElementImpl::removeAttribute), (ElementImpl::setAttribute),
		(ElementImpl::nodeType), (ElementImpl::getAttribute),
		(ElementImpl::setAttributeMap), (ElementImpl::cloneNode),
		(ElementImpl::nodeName), (ElementImpl::tagName), (ElementImpl::setPrefix),
		(ElementImpl::createAttributeMap), (ElementImpl::attach),
		(ElementImpl::recalcStyle), (ElementImpl::childAllowed),
		(ElementImpl::createDecl), (ElementImpl::dispatchAttrRemovalEvent),
		(ElementImpl::dispatchAttrAdditionEvent), (ElementImpl::dump),
		(XMLElementImpl::XMLElementImpl), (XMLElementImpl::~XMLElementImpl),
		(XMLElementImpl::localName), (XMLElementImpl::cloneNode),
		(NamedAttrMapImpl::NamedAttrMapImpl), (NamedAttrMapImpl::~NamedAttrMapImpl),
		(NamedAttrMapImpl::getNamedItem), (NamedAttrMapImpl::setNamedItem),
		(NamedAttrMapImpl::removeNamedItem), (NamedAttrMapImpl::item),
		(NamedAttrMapImpl::length), (NamedAttrMapImpl::getAttributeItem),
		(NamedAttrMapImpl::mapId), (NamedAttrMapImpl::clearAttributes),
		(NamedAttrMapImpl::detachFromElement), (NamedAttrMapImpl::operator=),
		(NamedAttrMapImpl::addAttribute), (NamedAttrMapImpl::removeAttribute):
		* src/kdelibs/khtml/xml/dom_elementimpl.h:
		* src/kdelibs/khtml/xml/dom_nodeimpl.cpp: (NodeImpl::NodeImpl),
		(NodeImpl::~NodeImpl), (NodeImpl::setNodeValue), (NodeImpl::nodeName),
		(NodeImpl::normalize), (NodeImpl::prefix), (NodeImpl::setPrefix),
		(NodeImpl::localName), (escapeHTML), (NodeImpl::recursive_toHTML),
		(NodeImpl::getRect), (NodeImpl::setChanged), (NodeImpl::isInline),
		(NodeImpl::nodeIndex), (NodeImpl::addEventListener),
		(NodeImpl::removeEventListener), (NodeImpl::removeHTMLEventListener),
		(NodeImpl::setHTMLEventListener), (NodeImpl::getHTMLEventListener),
		(NodeImpl::dispatchEvent), (NodeImpl::dispatchGenericEvent),
		(NodeImpl::dispatchHTMLEvent), (NodeImpl::dispatchWindowEvent),
		(NodeImpl::dispatchMouseEvent), (NodeImpl::dispatchUIEvent),
		(NodeImpl::dispatchSubtreeModifiedEvent), (NodeImpl::dispatchKeyEvent),
		(NodeImpl::handleLocalEvents), (NodeImpl::defaultEventHandler),
		(NodeImpl::traverseNextNode), (NodeImpl::traversePreviousNode),
		(NodeImpl::checkSetPrefix), (NodeImpl::checkAddChild), (NodeImpl::isAncestor),
		(NodeImpl::childAllowed), (NodeImpl::diff), (NodeImpl::dump),
		(NodeImpl::deleteMe), (NodeImpl::init), (NodeImpl::attach), (NodeImpl::detach),
		(NodeImpl::maintainsState), (NodeImpl::state), (NodeImpl::restoreState),
		(NodeImpl::insertedIntoDocument), (NodeImpl::removedFromDocument),
		(NodeImpl::childrenChanged), (NodeImpl::isReadOnly), (NodeImpl::nextRenderer),
		(NodeBaseImpl::NodeBaseImpl), (NodeBaseImpl::~NodeBaseImpl),
		(NodeBaseImpl::insertBefore), (NodeBaseImpl::replaceChild),
		(NodeBaseImpl::removeChild), (NodeBaseImpl::removeChildren),
		(NodeBaseImpl::appendChild), (NodeBaseImpl::checkSameDocument),
		(NodeBaseImpl::checkNoOwner), (NodeBaseImpl::addChild), (NodeBaseImpl::attach),
		(NodeBaseImpl::detach), (NodeBaseImpl::cloneChildNodes),
		(NodeBaseImpl::getElementsByTagNameNS), (NodeBaseImpl::getUpperLeftCorner),
		(NodeBaseImpl::getLowerRightCorner), (NodeBaseImpl::getRect),
		(NodeBaseImpl::setFocus), (NodeBaseImpl::setActive),
		(NodeBaseImpl::dispatchChildInsertedEvents),
		(NodeBaseImpl::dispatchChildRemovalEvents), (ChildNodeListImpl::nodeMatches),
		(TagNodeListImpl::TagNodeListImpl), (TagNodeListImpl::nodeMatches),
		(GenericRONamedNodeMapImpl::GenericRONamedNodeMapImpl),
		(GenericRONamedNodeMapImpl::getNamedItem),
		(GenericRONamedNodeMapImpl::setNamedItem),
		(GenericRONamedNodeMapImpl::removeNamedItem), (GenericRONamedNodeMapImpl::item),
		(GenericRONamedNodeMapImpl::length), (GenericRONamedNodeMapImpl::getNamedItemNS),
		(GenericRONamedNodeMapImpl::setNamedItemNS),
		(GenericRONamedNodeMapImpl::removeNamedItemNS),
		(GenericRONamedNodeMapImpl::addNode):
		* src/kdelibs/khtml/xml/dom_nodeimpl.h:
		* src/kdelibs/khtml/xml/dom_stringimpl.cpp: (DOMStringImpl::toLengthArray),
		(DOMStringImpl::lower), (DOMStringImpl::upper):
		* src/kdelibs/khtml/xml/dom_stringimpl.h:
		* src/kdelibs/khtml/xml/dom_textimpl.cpp: (CharacterDataImpl::CharacterDataImpl),
		(CharacterDataImpl::setData), (CharacterDataImpl::substringData),
		(CharacterDataImpl::appendData), (CharacterDataImpl::insertData),
		(CharacterDataImpl::deleteData), (CharacterDataImpl::replaceData),
		(CharacterDataImpl::nodeValue), (CharacterDataImpl::setNodeValue),
		(CharacterDataImpl::dispatchModifiedEvent),
		(CharacterDataImpl::checkCharDataOperation), (CharacterDataImpl::dump),
		(CommentImpl::nodeName), (CommentImpl::cloneNode), (CommentImpl::id),
		(TextImpl::splitText), (TextImpl::nodeName), (TextImpl::cloneNode),
		(TextImpl::attach), (TextImpl::id), (TextImpl::recalcStyle),
		(CDATASectionImpl::nodeName), (CDATASectionImpl::cloneNode):
		* src/kdelibs/khtml/xml/dom_textimpl.h:
		* src/kdelibs/khtml/xml/dom_xmlimpl.cpp: (EntityImpl::nodeName),
		(EntityImpl::nodeType), (EntityImpl::cloneNode), (EntityReferenceImpl::nodeName),
		(EntityReferenceImpl::cloneNode), (NotationImpl::publicId),
		(NotationImpl::systemId), (NotationImpl::nodeName), (NotationImpl::nodeType),
		(NotationImpl::cloneNode), (NotationImpl::childTypeAllowed),
		(ProcessingInstructionImpl::ProcessingInstructionImpl),
		(ProcessingInstructionImpl::target), (ProcessingInstructionImpl::data),
		(ProcessingInstructionImpl::setData), (ProcessingInstructionImpl::nodeName),
		(ProcessingInstructionImpl::setNodeValue),
		(ProcessingInstructionImpl::cloneNode), (ProcessingInstructionImpl::localHref),
		(ProcessingInstructionImpl::checkStyleSheet),
		(ProcessingInstructionImpl::setStyleSheet):
		* src/kdelibs/khtml/xml/dom_xmlimpl.h:
		* src/kdelibs/khtml/xml/xml_tokenizer.cpp: (XMLHandler::startDocument),
		(XMLHandler::startElement), (XMLHandler::endElement), (XMLHandler::startCDATA),
		(XMLHandler::characters), (XMLHandler::errorString), (XMLHandler::fatalError),
		(XMLHandler::enterText), (XMLHandler::exitText),
		(XMLHandler::internalEntityDecl), (XMLHandler::notationDecl),
		(XMLTokenizer::finish), (XMLTokenizer::addScripts),
		(XMLTokenizer::executeScripts), (XMLTokenizer::notifyFinished):
		* src/kdelibs/khtml/xml/xml_tokenizer.h:
		* src/kdelibs/kjs/array_object.cpp: (ArrayInstanceImp::ArrayInstanceImp),
		(ArrayInstanceImp::put), (ArrayInstanceImp::putDirect),
		(ArrayPrototypeImp::ArrayPrototypeImp), (ArrayPrototypeImp::get),
		(ArrayProtoFuncImp::ArrayProtoFuncImp), (ArrayProtoFuncImp::implementsCall),
		(ArrayProtoFuncImp::call), (ArrayObjectImp::ArrayObjectImp),
		(ArrayObjectImp::implementsConstruct), (ArrayObjectImp::construct),
		(ArrayObjectImp::implementsCall), (ArrayObjectImp::call):
		* src/kdelibs/kjs/array_object.h:
		* src/kdelibs/kjs/bool_object.cpp: (BooleanInstanceImp::BooleanInstanceImp),
		(BooleanPrototypeImp::BooleanPrototypeImp),
		(BooleanProtoFuncImp::BooleanProtoFuncImp),
		(BooleanProtoFuncImp::implementsCall), (BooleanProtoFuncImp::call),
		(BooleanObjectImp::BooleanObjectImp), (BooleanObjectImp::implementsConstruct),
		(BooleanObjectImp::construct), (BooleanObjectImp::implementsCall),
		(BooleanObjectImp::call):
		* src/kdelibs/kjs/bool_object.h:
		* src/kdelibs/kjs/collector.cpp: (Collector::allocate), (Collector::collect),
		(Collector::finalCheck):
		* src/kdelibs/kjs/collector.h:
		* src/kdelibs/kjs/date_object.cpp: (DateInstanceImp::DateInstanceImp),
		(DatePrototypeImp::DatePrototypeImp), (DatePrototypeImp::get),
		(DateProtoFuncImp::DateProtoFuncImp), (DateProtoFuncImp::implementsCall),
		(DateProtoFuncImp::call), (DateObjectImp::DateObjectImp),
		(DateObjectImp::implementsConstruct), (DateObjectImp::construct),
		(DateObjectImp::implementsCall), (DateObjectImp::call),
		(DateObjectFuncImp::DateObjectFuncImp), (DateObjectFuncImp::implementsCall),
		(DateObjectFuncImp::call), (KJS::parseDate), (ymdhms_to_seconds),
		(KJS::KRFCDate_parseDate), (KJS::timeClip):
		* src/kdelibs/kjs/date_object.h:
		* src/kdelibs/kjs/debugger.cpp: (Debugger::Debugger), (Debugger::~Debugger),
		(Debugger::attach), (Debugger::detach), (Debugger::sourceParsed),
		(Debugger::sourceUnused), (Debugger::exception), (Debugger::atStatement),
		(Debugger::callEvent), (Debugger::returnEvent):
		* src/kdelibs/kjs/debugger.h:
		* src/kdelibs/kjs/error_object.cpp: (ErrorPrototypeImp::ErrorPrototypeImp),
		(ErrorProtoFuncImp::ErrorProtoFuncImp), (ErrorProtoFuncImp::implementsCall),
		(ErrorProtoFuncImp::call), (ErrorObjectImp::ErrorObjectImp),
		(ErrorObjectImp::implementsConstruct), (ErrorObjectImp::construct),
		(ErrorObjectImp::implementsCall), (ErrorObjectImp::call),
		(NativeErrorPrototypeImp::NativeErrorPrototypeImp),
		(NativeErrorImp::NativeErrorImp), (NativeErrorImp::implementsConstruct),
		(NativeErrorImp::construct), (NativeErrorImp::implementsCall),
		(NativeErrorImp::call), (NativeErrorImp::mark):
		* src/kdelibs/kjs/error_object.h:
		* src/kdelibs/kjs/function.cpp: (FunctionImp::FunctionImp),
		(FunctionImp::~FunctionImp), (FunctionImp::mark), (FunctionImp::implementsCall),
		(FunctionImp::call), (FunctionImp::processParameters),
		(FunctionImp::processVarDecls), (FunctionImp::pushArgs), (FunctionImp::popArgs),
		(DeclaredFunctionImp::DeclaredFunctionImp),
		(DeclaredFunctionImp::~DeclaredFunctionImp),
		(DeclaredFunctionImp::implementsConstruct), (DeclaredFunctionImp::construct),
		(DeclaredFunctionImp::execute), (DeclaredFunctionImp::processVarDecls),
		(ArgumentsImp::ArgumentsImp), (ActivationImp::ActivationImp),
		(ActivationImp::~ActivationImp), (GlobalFuncImp::GlobalFuncImp),
		(GlobalFuncImp::codeType), (GlobalFuncImp::implementsCall),
		(GlobalFuncImp::call):
		* src/kdelibs/kjs/function.h:
		* src/kdelibs/kjs/function_object.cpp:
		(FunctionPrototypeImp::FunctionPrototypeImp),
		(FunctionPrototypeImp::~FunctionPrototypeImp),
		(FunctionPrototypeImp::implementsCall), (FunctionPrototypeImp::call),
		(FunctionProtoFuncImp::FunctionProtoFuncImp),
		(FunctionProtoFuncImp::implementsCall), (FunctionProtoFuncImp::call),
		(FunctionObjectImp::FunctionObjectImp), (FunctionObjectImp::~FunctionObjectImp),
		(FunctionObjectImp::implementsConstruct), (FunctionObjectImp::construct),
		(FunctionObjectImp::implementsCall), (FunctionObjectImp::call):
		* src/kdelibs/kjs/function_object.h:
		* src/kdelibs/kjs/grammar.y:
		* src/kdelibs/kjs/internal.cpp: (UndefinedImp::toPrimitive),
		(UndefinedImp::toBoolean), (UndefinedImp::toNumber), (UndefinedImp::toString),
		(UndefinedImp::toObject), (NullImp::toPrimitive), (NullImp::toBoolean),
		(NullImp::toNumber), (NullImp::toString), (NullImp::toObject),
		(BooleanImp::toPrimitive), (BooleanImp::toBoolean), (BooleanImp::toNumber),
		(BooleanImp::toString), (BooleanImp::toObject), (StringImp::StringImp),
		(StringImp::toPrimitive), (StringImp::toBoolean), (StringImp::toNumber),
		(StringImp::toString), (StringImp::toObject), (NumberImp::NumberImp),
		(NumberImp::toPrimitive), (NumberImp::toBoolean), (NumberImp::toNumber),
		(NumberImp::toString), (NumberImp::toObject), (ReferenceImp::ReferenceImp),
		(ReferenceImp::mark), (ReferenceImp::toPrimitive), (ReferenceImp::toBoolean),
		(ReferenceImp::toNumber), (ReferenceImp::toString), (ReferenceImp::toObject),
		(LabelStack::LabelStack), (LabelStack::operator=), (LabelStack::push),
		(LabelStack::contains), (LabelStack::pop), (LabelStack::~LabelStack),
		(LabelStack::clear), (CompletionImp::CompletionImp),
		(CompletionImp::~CompletionImp), (CompletionImp::mark),
		(CompletionImp::toPrimitive), (CompletionImp::toBoolean),
		(CompletionImp::toNumber), (CompletionImp::toString), (CompletionImp::toObject),
		(ListImp::toPrimitive), (ListImp::toBoolean), (ListImp::toNumber),
		(ListImp::toString), (ListImp::toObject), (ListImp::ListImp),
		(ListImp::~ListImp), (ListImp::mark), (ListImp::append), (ListImp::prepend),
		(ListImp::appendList), (ListImp::prependList), (ListImp::removeFirst),
		(ListImp::removeLast), (ListImp::remove), (ListImp::clear), (ListImp::copy),
		(ListImp::erase), (ListImp::isEmpty), (ListImp::size), (ListImp::at),
		(ListImp::empty), (ContextImp::ContextImp), (ContextImp::~ContextImp),
		(ContextImp::pushScope), (ContextImp::popScope), (Parser::parse),
		(InterpreterImp::globalInit), (InterpreterImp::globalClear),
		(InterpreterImp::InterpreterImp), (InterpreterImp::~InterpreterImp),
		(InterpreterImp::clear), (InterpreterImp::mark), (InterpreterImp::checkSyntax),
		(InterpreterImp::evaluate), (InterpreterImp::setDebugger),
		(InternalFunctionImp::InternalFunctionImp),
		(InternalFunctionImp::implementsHasInstance), (InternalFunctionImp::hasInstance),
		(KJS::roundValue), (KJS::printInfo):
		* src/kdelibs/kjs/internal.h:
		* src/kdelibs/kjs/lexer.cpp: (Lexer::Lexer), (Lexer::curr), (Lexer::setCode),
		(Lexer::lex), (Lexer::isLineTerminator), (Lexer::matchPunctuator),
		(Lexer::scanRegExp):
		* src/kdelibs/kjs/lexer.h:
		* src/kdelibs/kjs/lexer.lut.h:
		* src/kdelibs/kjs/lookup.cpp: (Lookup::findEntry), (Lookup::find):
		* src/kdelibs/kjs/lookup.h:
		* src/kdelibs/kjs/math_object.cpp: (MathObjectImp::MathObjectImp),
		(MathObjectImp::get), (MathObjectImp::getValueProperty),
		(MathFuncImp::MathFuncImp), (MathFuncImp::implementsCall), (MathFuncImp::call):
		* src/kdelibs/kjs/math_object.h:
		* src/kdelibs/kjs/math_object.lut.h:
		* src/kdelibs/kjs/nodes.cpp: (Node::Node), (Node::~Node), (Node::finalCheck),
		(Node::throwError), (StatementNode::StatementNode),
		(StatementNode::~StatementNode), (StatementNode::setLoc),
		(StatementNode::hitStatement), (StatementNode::abortStatement),
		(NullNode::evaluate), (BooleanNode::evaluate), (NumberNode::evaluate),
		(StringNode::evaluate), (RegExpNode::evaluate), (ThisNode::evaluate),
		(ResolveNode::evaluate), (GroupNode::~GroupNode), (GroupNode::ref),
		(GroupNode::deref), (GroupNode::evaluate), (ElisionNode::~ElisionNode),
		(ElisionNode::ref), (ElisionNode::deref), (ElisionNode::evaluate),
		(ElementNode::~ElementNode), (ElementNode::ref), (ElementNode::deref),
		(ElementNode::evaluate), (ArrayNode::~ArrayNode), (ArrayNode::ref),
		(ArrayNode::deref), (ArrayNode::evaluate),
		(ObjectLiteralNode::~ObjectLiteralNode), (ObjectLiteralNode::ref),
		(ObjectLiteralNode::deref), (ObjectLiteralNode::evaluate),
		(PropertyValueNode::~PropertyValueNode), (PropertyValueNode::ref),
		(PropertyValueNode::deref), (PropertyValueNode::evaluate),
		(PropertyNode::evaluate), (AccessorNode1::~AccessorNode1), (AccessorNode1::ref),
		(AccessorNode1::deref), (AccessorNode1::evaluate),
		(AccessorNode2::~AccessorNode2), (AccessorNode2::ref), (AccessorNode2::deref),
		(AccessorNode2::evaluate), (ArgumentListNode::ArgumentListNode),
		(ArgumentListNode::~ArgumentListNode), (ArgumentListNode::ref),
		(ArgumentListNode::deref), (ArgumentListNode::evaluate),
		(ArgumentListNode::evaluateList), (ArgumentsNode::ArgumentsNode),
		(ArgumentsNode::~ArgumentsNode), (ArgumentsNode::ref), (ArgumentsNode::deref),
		(ArgumentsNode::evaluate), (ArgumentsNode::evaluateList),
		(NewExprNode::~NewExprNode), (NewExprNode::ref), (NewExprNode::deref),
		(NewExprNode::evaluate), (FunctionCallNode::~FunctionCallNode),
		(FunctionCallNode::ref), (FunctionCallNode::deref), (FunctionCallNode::evaluate),
		(PostfixNode::~PostfixNode), (PostfixNode::ref), (PostfixNode::deref),
		(PostfixNode::evaluate), (DeleteNode::~DeleteNode), (DeleteNode::ref),
		(DeleteNode::deref), (DeleteNode::evaluate), (VoidNode::~VoidNode),
		(VoidNode::ref), (VoidNode::deref), (VoidNode::evaluate),
		(TypeOfNode::~TypeOfNode), (TypeOfNode::ref), (TypeOfNode::deref),
		(TypeOfNode::evaluate), (PrefixNode::~PrefixNode), (PrefixNode::ref),
		(PrefixNode::deref), (PrefixNode::evaluate), (UnaryPlusNode::~UnaryPlusNode),
		(UnaryPlusNode::ref), (UnaryPlusNode::deref), (UnaryPlusNode::evaluate),
		(NegateNode::~NegateNode), (NegateNode::ref), (NegateNode::deref),
		(NegateNode::evaluate), (BitwiseNotNode::~BitwiseNotNode), (BitwiseNotNode::ref),
		(BitwiseNotNode::deref), (BitwiseNotNode::evaluate),
		(LogicalNotNode::~LogicalNotNode), (LogicalNotNode::ref),
		(LogicalNotNode::deref), (LogicalNotNode::evaluate), (MultNode::~MultNode),
		(MultNode::ref), (MultNode::deref), (MultNode::evaluate), (AddNode::~AddNode),
		(AddNode::ref), (AddNode::deref), (AddNode::evaluate), (ShiftNode::~ShiftNode),
		(ShiftNode::ref), (ShiftNode::deref), (ShiftNode::evaluate),
		(RelationalNode::~RelationalNode), (RelationalNode::ref),
		(RelationalNode::deref), (RelationalNode::evaluate), (EqualNode::~EqualNode),
		(EqualNode::ref), (EqualNode::deref), (EqualNode::evaluate),
		(BitOperNode::~BitOperNode), (BitOperNode::ref), (BitOperNode::deref),
		(BitOperNode::evaluate), (BinaryLogicalNode::~BinaryLogicalNode),
		(BinaryLogicalNode::ref), (BinaryLogicalNode::deref),
		(BinaryLogicalNode::evaluate), (ConditionalNode::~ConditionalNode),
		(ConditionalNode::ref), (ConditionalNode::deref), (ConditionalNode::evaluate),
		(AssignNode::~AssignNode), (AssignNode::ref), (AssignNode::deref),
		(AssignNode::evaluate), (CommaNode::~CommaNode), (CommaNode::ref),
		(CommaNode::deref), (CommaNode::evaluate), (StatListNode::~StatListNode),
		(StatListNode::ref), (StatListNode::deref), (StatListNode::execute),
		(StatListNode::processVarDecls), (AssignExprNode::~AssignExprNode),
		(AssignExprNode::ref), (AssignExprNode::deref), (AssignExprNode::evaluate),
		(VarDeclNode::VarDeclNode), (VarDeclNode::~VarDeclNode), (VarDeclNode::ref),
		(VarDeclNode::deref), (VarDeclNode::evaluate), (VarDeclNode::processVarDecls),
		(VarDeclListNode::~VarDeclListNode), (VarDeclListNode::ref),
		(VarDeclListNode::deref), (VarDeclListNode::evaluate),
		(VarDeclListNode::processVarDecls), (VarStatementNode::~VarStatementNode),
		(VarStatementNode::ref), (VarStatementNode::deref), (VarStatementNode::execute),
		(VarStatementNode::processVarDecls), (BlockNode::~BlockNode), (BlockNode::ref),
		(BlockNode::deref), (BlockNode::execute), (BlockNode::processVarDecls),
		(EmptyStatementNode::execute), (ExprStatementNode::~ExprStatementNode),
		(ExprStatementNode::ref), (ExprStatementNode::deref),
		(ExprStatementNode::execute), (IfNode::~IfNode), (IfNode::ref), (IfNode::deref),
		(IfNode::execute), (IfNode::processVarDecls), (DoWhileNode::~DoWhileNode),
		(DoWhileNode::ref), (DoWhileNode::deref), (DoWhileNode::execute),
		(DoWhileNode::processVarDecls), (WhileNode::~WhileNode), (WhileNode::ref),
		(WhileNode::deref), (WhileNode::execute), (WhileNode::processVarDecls),
		(ForNode::~ForNode), (ForNode::ref), (ForNode::deref), (ForNode::execute),
		(ForNode::processVarDecls), (ForInNode::ForInNode), (ForInNode::~ForInNode),
		(ForInNode::ref), (ForInNode::deref), (ForInNode::execute),
		(ForInNode::processVarDecls), (ContinueNode::execute), (BreakNode::execute),
		(ReturnNode::~ReturnNode), (ReturnNode::ref), (ReturnNode::deref),
		(ReturnNode::execute), (WithNode::~WithNode), (WithNode::ref), (WithNode::deref),
		(WithNode::execute), (WithNode::processVarDecls),
		(CaseClauseNode::~CaseClauseNode), (CaseClauseNode::ref),
		(CaseClauseNode::deref), (CaseClauseNode::evaluate),
		(CaseClauseNode::evalStatements), (CaseClauseNode::processVarDecls),
		(ClauseListNode::~ClauseListNode), (ClauseListNode::ref),
		(ClauseListNode::deref), (ClauseListNode::evaluate),
		(ClauseListNode::processVarDecls), (CaseBlockNode::~CaseBlockNode),
		(CaseBlockNode::ref), (CaseBlockNode::deref), (CaseBlockNode::evaluate),
		(CaseBlockNode::evalBlock), (CaseBlockNode::processVarDecls),
		(SwitchNode::~SwitchNode), (SwitchNode::ref), (SwitchNode::deref),
		(SwitchNode::execute), (SwitchNode::processVarDecls), (LabelNode::~LabelNode),
		(LabelNode::ref), (LabelNode::deref), (LabelNode::execute),
		(LabelNode::processVarDecls), (ThrowNode::~ThrowNode), (ThrowNode::ref),
		(ThrowNode::deref), (ThrowNode::execute), (CatchNode::~CatchNode),
		(CatchNode::ref), (CatchNode::deref), (CatchNode::execute),
		(CatchNode::processVarDecls), (FinallyNode::~FinallyNode), (FinallyNode::ref),
		(FinallyNode::deref), (FinallyNode::execute), (FinallyNode::processVarDecls),
		(TryNode::~TryNode), (TryNode::ref), (TryNode::deref), (TryNode::execute),
		(TryNode::processVarDecls), (ParameterNode::~ParameterNode),
		(ParameterNode::ref), (ParameterNode::deref), (ParameterNode::append),
		(ParameterNode::evaluate), (FunctionBodyNode::FunctionBodyNode),
		(FunctionBodyNode::~FunctionBodyNode), (FunctionBodyNode::ref),
		(FunctionBodyNode::deref), (FunctionBodyNode::execute),
		(FunctionBodyNode::processFuncDecl), (FunctionBodyNode::processVarDecls),
		(FuncDeclNode::~FuncDeclNode), (FuncDeclNode::ref), (FuncDeclNode::deref),
		(FuncDeclNode::processFuncDecl), (FuncExprNode::~FuncExprNode),
		(FuncExprNode::ref), (FuncExprNode::deref), (FuncExprNode::evaluate),
		(SourceElementNode::~SourceElementNode), (SourceElementNode::ref),
		(SourceElementNode::deref), (SourceElementNode::execute),
		(SourceElementNode::processFuncDecl), (SourceElementNode::processVarDecls),
		(SourceElementsNode::~SourceElementsNode), (SourceElementsNode::ref),
		(SourceElementsNode::deref), (SourceElementsNode::execute),
		(SourceElementsNode::processFuncDecl), (SourceElementsNode::processVarDecls),
		(ProgramNode::ProgramNode), (ProgramNode::~ProgramNode):
		* src/kdelibs/kjs/nodes.h:
		* src/kdelibs/kjs/number_object.cpp: (NumberInstanceImp::NumberInstanceImp),
		(NumberPrototypeImp::NumberPrototypeImp),
		(NumberProtoFuncImp::NumberProtoFuncImp), (NumberProtoFuncImp::implementsCall),
		(NumberProtoFuncImp::call), (NumberObjectImp::NumberObjectImp),
		(NumberObjectImp::get), (NumberObjectImp::getValueProperty),
		(NumberObjectImp::implementsConstruct), (NumberObjectImp::construct),
		(NumberObjectImp::implementsCall), (NumberObjectImp::call):
		* src/kdelibs/kjs/number_object.h:
		* src/kdelibs/kjs/object.cpp: (Object::Object), (Object::~Object),
		(Object::operator=), (Object::classInfo), (Object::inherits),
		(Object::dynamicCast), (Object::prototype), (Object::className), (Object::get),
		(Object::put), (Object::canPut), (Object::hasProperty), (Object::deleteProperty),
		(Object::defaultValue), (Object::implementsConstruct), (Object::construct),
		(Object::implementsCall), (Object::call), (Object::implementsHasInstance),
		(Object::hasInstance), (Object::scope), (Object::setScope), (Object::propList),
		(Object::internalValue), (Object::setInternalValue), (ObjectImp::ObjectImp),
		(ObjectImp::~ObjectImp), (ObjectImp::mark), (ObjectImp::classInfo),
		(ObjectImp::inherits), (ObjectImp::type), (ObjectImp::prototype),
		(ObjectImp::setPrototype), (ObjectImp::className), (ObjectImp::get),
		(ObjectImp::getDirect), (ObjectImp::put), (ObjectImp::canPut),
		(ObjectImp::hasProperty), (ObjectImp::deleteProperty),
		(ObjectImp::deleteAllProperties), (ObjectImp::defaultValue),
		(ObjectImp::findPropertyHashEntry), (ObjectImp::implementsConstruct),
		(ObjectImp::construct), (ObjectImp::implementsCall), (ObjectImp::call),
		(ObjectImp::implementsHasInstance), (ObjectImp::hasInstance), (ObjectImp::scope),
		(ObjectImp::setScope), (ObjectImp::propList), (ObjectImp::internalValue),
		(ObjectImp::setInternalValue), (ObjectImp::toPrimitive), (ObjectImp::toBoolean),
		(ObjectImp::toNumber), (ObjectImp::toInteger), (ObjectImp::toInt32),
		(ObjectImp::toUInt32), (ObjectImp::toUInt16), (ObjectImp::toString),
		(ObjectImp::toObject), (Error::create):
		* src/kdelibs/kjs/object.h:
		* src/kdelibs/kjs/object_object.cpp: (ObjectPrototypeImp::ObjectPrototypeImp),
		(ObjectProtoFuncImp::ObjectProtoFuncImp), (ObjectProtoFuncImp::implementsCall),
		(ObjectProtoFuncImp::call), (ObjectObjectImp::ObjectObjectImp),
		(ObjectObjectImp::implementsConstruct), (ObjectObjectImp::construct),
		(ObjectObjectImp::implementsCall), (ObjectObjectImp::call):
		* src/kdelibs/kjs/object_object.h:
		* src/kdelibs/kjs/operations.cpp: (KJS::isPosInf), (KJS::isNegInf), (KJS::equal),
		(KJS::strictEqual), (KJS::relation), (KJS::maxInt), (KJS::minInt), (KJS::add),
		(KJS::mult):
		* src/kdelibs/kjs/operations.h:
		* src/kdelibs/kjs/regexp.cpp: (RegExp::RegExp), (RegExp::~RegExp),
		(RegExp::match), (RegExp::test):
		* src/kdelibs/kjs/regexp.h:
		* src/kdelibs/kjs/regexp_object.cpp: (RegExpPrototypeImp::RegExpPrototypeImp),
		(RegExpProtoFuncImp::RegExpProtoFuncImp), (RegExpProtoFuncImp::implementsCall),
		(RegExpProtoFuncImp::call), (RegExpImp::RegExpImp), (RegExpImp::~RegExpImp),
		(RegExpObjectImp::RegExpObjectImp), (RegExpObjectImp::~RegExpObjectImp),
		(RegExpObjectImp::registerRegexp), (RegExpObjectImp::arrayOfMatches),
		(RegExpObjectImp::get), (RegExpObjectImp::implementsConstruct),
		(RegExpObjectImp::construct), (RegExpObjectImp::implementsCall),
		(RegExpObjectImp::call):
		* src/kdelibs/kjs/regexp_object.h:
		* src/kdelibs/kjs/string_object.cpp: (StringInstanceImp::StringInstanceImp),
		(StringPrototypeImp::StringPrototypeImp), (StringPrototypeImp::get),
		(StringProtoFuncImp::StringProtoFuncImp), (StringProtoFuncImp::implementsCall),
		(StringProtoFuncImp::call), (StringObjectImp::StringObjectImp),
		(StringObjectImp::implementsConstruct), (StringObjectImp::construct),
		(StringObjectImp::implementsCall), (StringObjectImp::call),
		(StringObjectFuncImp::StringObjectFuncImp),
		(StringObjectFuncImp::implementsCall), (StringObjectFuncImp::call):
		* src/kdelibs/kjs/string_object.h:
		* src/kdelibs/kjs/testkjs.cpp: (TestFunctionImp::call), (main):
		* src/kdelibs/kjs/types.cpp: (Reference::Reference), (Reference::~Reference),
		(Reference::operator=), (Reference::dynamicCast), (ListIterator::ListIterator),
		(ListIterator::operator=), (ListIterator::~ListIterator),
		(ListIterator::operator->), (ListIterator::operator*),
		(ListIterator::operator++), (ListIterator::operator--),
		(ListIterator::operator==), (ListIterator::operator!=), (List::List),
		(List::~List), (List::operator=), (List::dynamicCast), (List::append),
		(List::prepend), (List::appendList), (List::prependList), (List::removeFirst),
		(List::removeLast), (List::remove), (List::clear), (List::copy), (List::begin),
		(List::end), (List::isEmpty), (List::size), (List::at), (List::operator[]),
		(List::empty), (Completion::Completion), (Completion::~Completion),
		(Completion::operator=), (Completion::dynamicCast), (Completion::complType),
		(Completion::value), (Completion::target), (Completion::isValueCompletion):
		* src/kdelibs/kjs/types.h:
		* src/kdelibs/kjs/ustring.cpp: (UChar::UChar), (UChar::toLower),
		(UChar::toUpper), (UString::from), (UString::ascii), (UString::operator=),
		(UString::is8Bit), (UString::toDouble), (KJS::operator==):
		* src/kdelibs/kjs/ustring.h:

2002-03-19  Richard Williamson  <rjw@apple.com>

        Fixed NSPopupButton performance bottleneck.
        
	* src/kdelibs/khtml/rendering/render_form.cpp: (RenderSelect::layout):
	* src/kwq/KWQComboBox.mm: (QComboBox::insertItem):
	* src/kwq/KWQKComboBox.mm: (KComboBox::~KComboBox), (KComboBox::doneLoading),
	(KComboBox::setSize):
	* src/kwq/kdeui/kcombobox.h:
	* src/kwq/qt/qcombobox.h:

2002-03-19  Richard Williamson  <rjw@apple.com>
    
        Changed float width cache to use shorts.

	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo _initializeCaches]),
	(_rectForString):
	* src/kwq/KWQMetrics.h:

2002-03-19  Richard Williamson  <rjw@apple.com>

        Improved cache-miss case for non-latin1 characters.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutInfo initWithFont:]), (-[KWQLayoutInfo
	layoutManager]), (-[KWQLayoutInfo textStorage]), (-[KWQLayoutInfo
	_initializeCaches]), (_rectForString), (-[KWQLayoutInfo setColor:]),
	(-[KWQLayoutInfo attributes]), (-[KWQLayoutInfo dealloc]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/kwqdebug.h:

2002-03-18  Darin Adler  <darin@apple.com>

	* src/kwq/KWQListImpl.mm: (KWQListImpl::sort): Use insertion sort for
	small lists. Also special case for lists of size 2 and under.

2002-03-18  Richard Williamson  <rjw@apple.com>

        Added comments about new layout scheme.  Cleaned up code.
        Improved core measurement routine.

	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::boundingRect):
	* src/kwq/kwqdebug.h:

2002-03-18  Darin Adler  <darin@apple.com>

	* src/kwq/KWQString.mm: (QString::latin1): Handle null case properly.
	We must return "", not 0.

2002-03-18  Darin Adler  <darin@apple.com>

        Redo inlining of QChar and QString and some other small speed improvements.
        Sadly, this doesn't seem to make things measurably faster, but I decided to
        commit my work rather than discarding it; it doesn't make things slower.

	* src/kwq/qt/qstring.h:
	* src/kwq/KWQChar.mm:
	* src/kwq/KWQString.mm:
        Do a lot more inlining. Also, the CFStringRef inside a QString is now never
        nil, so we can get rid of many checks for nil.

	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::width): Use _rectForString() a
        couple more places.

2002-03-18  Richard Williamson  <rjw@apple.com>

        Changed to use non direct _rectForString() function.   Avoids
        unnecessary NSString allocation.
        
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::boundingRect):

2002-03-18  Darin Adler  <darin@apple.com>

	* src/kwq/KWQFontMetrics.mm: (QFontMetricsPrivate::getInfo),
	(QFontMetrics::width), (QFontMetrics::_width), (QFontMetrics::boundingRect),
	(QFontMetrics::size): Don't make the info object right away, in case the
	metrics object is only used to compute ascent and descent.

2002-03-17  Richard Williamson  <rjw@apple.com>

        Implementation of replacement code for NSLayoutManager.  Huge
        performance gains.
        
	* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::calcMinMaxWidth),
	(RenderText::width):
	* src/kwq/KWQFontMetrics.mm: (ROUND_TO_INT), (__IFInitATSGlyphVector),
	(__IFResetATSGlyphVector), (__IFFillStyleWithAttributes), (-[KWQLayoutInfo
	drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
	drawString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (+[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	initWithFont:]), (-[KWQLayoutInfo _initializeCaches]), (_rectForString),
	(-[KWQLayoutInfo rectForString:]), (-[KWQLayoutInfo attributes]),
	(-[KWQLayoutInfo lineHeight]), (-[KWQLayoutInfo font]), (-[KWQLayoutInfo
	dealloc]), (QFontMetrics::_width):
	* src/kwq/KWQMetrics.h:
	* src/kwq/Makefile.am:
	* src/kwq/qt/qfontmetrics.h:

2002-03-16  Richard Williamson  <rjw@apple.com>

        Fixed error handling.  Removed ObjC code for url handle client from KHTMLPart.
        Need to sanitize KHTMLPart further.
        
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::openURL), (KHTMLPart::closeURL),
	(KHTMLPart::requestFrameName), (KHTMLPart::requestFrame), (KHTMLPart::overURL):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidCancelLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):
	* src/kwq/external.h:

2002-03-15  Richard Williamson  <rjw@apple.com>

        Fixed crasher initializing items in popup button.
        Increased fragment cache initial size.
        
	* src/kwq/KWQComboBox.mm: (QComboBox::init), (QComboBox::~QComboBox),
	(QComboBox::insertItem):
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage _buildFragmentForString:]):
	* src/kwq/qt/qcombobox.h:

2002-03-15  Richard Williamson  <rjw@apple.com>

        More string usage optimizations.  Got another 10% or so.
        
	* src/kdelibs/khtml/css/cssstyleselector.cpp: (checkPseudoState),
	(khtml::applyRule):
	* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::calcMinMaxWidth),
	(RenderText::width):

2002-03-15  Darin Adler  <darin@apple.com>

	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::descent): Oops, removed a - sign
	that I should have left in there.

2002-03-15  Darin Adler  <darin@apple.com>

	Some more optimizations. Carves another 6% or so off of NSView.html.

	* src/kwq/KWQChar.mm: (QChar::QChar): Handle characters > 0x7F correctly.
	(QChar::cell): Remove unnecessary & operation.
	(QChar::row): Remove unnecessary & operation.
	(QChar::latin1): Do a simpler check rather than calling row().
	(QChar::operator char): Do the same work as latin1 inline.
	(operator==) (operator!=), (operator>=), (operator>), (operator<=), (operator<):
	Handle characters > 0x7F correctly.

	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::ascent), (QFontMetrics::descent):
	Cache the ascent and descent rather than computing it each time we are called.

2002-03-15  Darin Adler  <darin@apple.com>

	Optimizations for creating empty QFont objects, measuring certain single
	characters, and copying QFontMetrics objects. Makes loading NSView.html about
	18% faster.

	* src/kwq/qt/qfontmetrics.h: Use a ref-counted pointer so QFontMetrics objects
	for the same QFont can share data.

	* src/kwq/KWQFont.mm: (loadDefaultFont): New, used to load the default
	font used for default-initialized QFont objects.
	(QFont::_initializeWithFont): Don't recompute the family name, point size, or
	traits.
	(QFont::setFamily), (QFont::setPixelSizeFloat), (QFont::setWeight),
	(QFont::setItalic): autorelease the font, as we do in the destructor, since
	someone could still be using the result of getFont.
	(QFont::operator==): Add a comment about a problem with this function.

	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::QFontMetrics): Add a refCount, and
	a cached width for space and lower-case "x", the two single characters that
	are often measured.
	(QFontMetrics::~QFontMetrics): Simplify.
	(QFontMetrics::operator=): Just copy the underlying data pointer rather than
	making our own KWQLayoutInfo object.
	(QFontMetrics::baselineOffset): Make const.
	(QFontMetrics::width): Add the caching for space and "x".

2002-03-15  Richard Williamson  <rjw@apple.com>

        Optimizations that remove unnecessary cfstring allocations of local scope
        strings.  QString::gstring_toQString and QString::gstring_toCFString were
        added to simplify the reuse of a static CFString as the backing store for
        local QStrings.  Hit the top two problem areas.  Many more gains to be had
        by using this technique.
        
	* src/kdelibs/khtml/css/cssstyleselector.cpp:
	(CSSStyleSelector::checkOneSelector):
	* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::calcMinMaxWidth):
	* src/kwq/KWQString.mm: (QString::gstring_toQString),
	(QString::gstring_toCFString):
	* src/kwq/qt/qstring.h:

2002-03-14  Richard Williamson  <rjw@apple.com>

        Fixed another problem in QString::find().
        Added dangerous but fast string allocation optimization to render_text.cpp.
        
	* src/kdelibs/khtml/rendering/render_text.cpp: (RenderText::calcMinMaxWidth):
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::_width):
	* src/kwq/KWQString.mm: (QString::find):
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage _buildFragmentForString:]),
	(-[KWQTextStorage setString:]):
	* src/kwq/qt/qfontmetrics.h:

2002-03-14  Richard Williamson  <rjw@apple.com>

        Fixed optimized find() implementation.  I had the sense of caseSensitive inverted.
        
	* src/kwq/KWQString.mm: (QString::find):

2002-03-14  Richard Williamson  <rjw@apple.com>

        Attempted implementation of space optimizations.  Disabled for now.
        
	* src/kwq/KWQFontMetrics.mm: (+[KWQLayoutInfo _dumpLayoutCache:]),
	(-[KWQLayoutInfo rectForString:]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQTextStorage.h:
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage _buildFragmentForString:]),
	(-[KWQTextStorage getFragmentForString:]), (-[KWQTextStorage
	initWithFontAttribute:]), (-[KWQTextStorage addLayoutManager:]):

2002-03-14  Richard Williamson  <rjw@apple.com>

        Implemented a progressively cache fragment.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQSmallLayoutFragment setGlyphRange:]),
	(-[KWQSmallLayoutFragment setBoundingRect:]), (-[KWQSmallLayoutFragment
	boundingRect]), (-[KWQLargeLayoutFragment glyphRange]), (-[KWQLargeLayoutFragment
	setGlyphRange:]), (-[KWQLargeLayoutFragment setBoundingRect:]),
	(-[KWQLargeLayoutFragment boundingRect]), (-[KWQLargeLayoutFragment compare:]),
	(+[KWQLayoutInfo drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (+[KWQLayoutInfo
	_dumpLayoutCache:]), (-[KWQLayoutInfo rectForString:]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQTextStorage.h:
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage getFragmentForString:]),
	(-[KWQTextStorage addFragmentForString:]):

2002-03-13  Richard Williamson  <rjw@apple.com>

        Added font cache.  Attempted to reduce size of fragment cache, but
        malloc forces a minimum of 30 bytes for our 14 byte objects.
        
	* src/kwq/KWQFont.mm: (-[IFFontCacheKey dealloc]), (-[IFFontCacheKey
	copyWithZone:]), (-[IFFontCacheKey hash]), (-[IFFontCacheKey string]),
	(-[IFFontCacheKey isEqual:]), (QFont::getFont):
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutFragment setGlyphRangeLength:]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage addFragmentForString:]):

2002-03-13  Richard Williamson  <rjw@apple.com>

        Re-worked fragment cache to minimize memory usage.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutFragment glyphRange]),
	(-[KWQLayoutFragment setGlyphRangeLength:]), (-[KWQLayoutFragment
	setBoundingRectSize:]), (-[KWQLayoutFragment boundingRect]), (+[KWQLayoutInfo
	drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]), (-[KWQLayoutInfo
	initWithFont:]), (-[KWQLayoutInfo layoutManager]), (-[KWQLayoutInfo
	textStorage]), (-[KWQLayoutInfo rectForString:]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQTextStorage.h:
	* src/kwq/KWQTextStorage.mm: (-[KWQTextStorage getFragmentForString:]),
	(-[KWQTextStorage addFragmentForString:]), (-[KWQTextStorage
	initWithFontAttribute:]), (-[KWQTextStorage dealloc]), (-[KWQTextStorage
	length]), (-[KWQTextStorage setAttributes:]), (-[KWQTextStorage setString:]),
	(-[KWQTextStorage string]):

2002-03-13  Kenneth Kocienda  <kocienda@apple.com>

	Updated for new didRedirectToURL callback. This is a partial fix for this bug:
	Radar 2879234 (Redirected URLs not used for subsequent GETs)

	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	IFURLHandle:didRedirectToURL:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandle:didRedirectToURL:]):

2002-03-12  Richard Williamson  <rjw@apple.com>

	* src/kwq/KWQString.mm: (QString::find), (QString::contains),
	(QString::compareToLatin1):

2002-03-11  Richard Williamson  <rjw@apple.com>

Re-implemented QPainter::drawTiledPixmap to use core graphics patterns.  Currently this depends
on SPI.  The performance boost is huge osx.macnn.com draws 40x faster now.

	* src/kwq/KWQPainter.mm: (QPainter::drawTiledPixmap):

2002-03-08  Richard Williamson  <rjw@apple.com>

Re-implemented KWQFont to lazily request font from NSFontManager instead of
user converFont:.  I did this after sampling loads of http://www.apple.com/retail/theater
and found that converting fonts was very expensive.

	* src/kwq/KWQFont.mm: (QFont::defaultNSFont), (QFont::_initializeWithFont),
	(QFont::QFont), (QFont::_free), (QFont::getFont), (QFont::pixelSize),
	(QFont::family), (QFont::setFamily), (QFont::setPixelSizeFloat),
	(QFont::setWeight), (QFont::weight), (QFont::setItalic), (QFont::italic),
	(QFont::bold), (QFont::operator!=):
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::QFontMetrics):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame):
	* src/kwq/KWQPainter.mm: (QPainter::drawText), (QPainter::drawUnderlineForText):
	* src/kwq/qt/qfont.h:

2002-03-08  Richard Williamson  <rjw@apple.com>

        Instrumentation of the text fragment metrics cache.
        Added _FAST_QSTRING_TO_NSSTRING.
        
	* src/kwq/KWQFontMetrics.mm: (-[KWQLayoutFragment initWithString:attributes:]),
	(-[KWQLayoutFragment boundingRect]), (-[KWQLayoutFragment compare:]),
	(+[KWQLayoutInfo _dumpLayoutCache:]), (+[KWQLayoutInfo _dumpAllLayoutCaches]),
	(-[KWQLayoutInfo rectForString:]), (QFontMetrics::width),
	(QFontMetrics::boundingRect), (QFontMetrics::size):
	* src/kwq/KWQMetrics.h:
	* src/kwq/qt/qstring.h:

2002-03-08  John Sullivan  <sullivan@apple.com>

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::openURL), (KHTMLPart::end):
	Changed openURL() and end() messages to use debug levels. You
	can see these by setting your WebKitLogLevel mask to include 
	0x00000008

2002-03-07  John Sullivan  <sullivan@apple.com>

	* src/kwq/kwqdebug.h: New debug level constants, kept in
	synch with WebKitDebug.h

	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	IFURLHandleResourceDidBeginLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidCancelLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidCancelLoading:]), (-[URLLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]), (Loader::load),
	(Loader::servePendingRequests):
	* src/kwq/KWQView.mm: (-[KWQHTMLView layout]), (-[KWQHTMLView drawRect:]):
	Changed numeric debug levels to symbolic ones.

2002-03-07  Don Melton  <gramps@apple.com>

	Removed unused file in kdelibs that I missed in previous commit.

	* src/kdelibs/khtml/test/layout.html:

2002-03-06  Don Melton  <gramps@apple.com>

	Removed unused files in kdelibs.

	* src/kdelibs/AUTHORS:
	* src/kdelibs/README:
	* src/kdelibs/khtml/CHANGES:
	* src/kdelibs/khtml/DESIGN.html:
	* src/kdelibs/khtml/README.HTMLWidget:
	* src/kdelibs/khtml/README.tags:
	* src/kdelibs/khtml/SECURITY:
	* src/kdelibs/khtml/TODO:
	* src/kdelibs/khtml/design.h:
	* src/kdelibs/khtml/domtreeview.cpp:
	* src/kdelibs/khtml/domtreeview.h:
	* src/kdelibs/khtml/ecma/AUTHORS:
	* src/kdelibs/khtml/ecma/README:
	* src/kdelibs/khtml/ecma/THANKS:
	* src/kdelibs/khtml/ecma/TODO:
	* src/kdelibs/khtml/ecma/jsk.html:
	* src/kdelibs/khtml/ecma/testecma.cpp:
	* src/kdelibs/khtml/html/dtd.dtd:
	* src/kdelibs/khtml/java/KJAS_GRAMMAR.txt:
	* src/kdelibs/khtml/java/README:
	* src/kdelibs/khtml/java/TODO:
	* src/kdelibs/khtml/java/build.xml:
	* src/kdelibs/khtml/java/javaembed.cpp:
	* src/kdelibs/khtml/java/kjava.jar:
	* src/kdelibs/khtml/java/kjava.policy.in:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASAppletClassLoader.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASAppletContext.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASAppletStub.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASConsole.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASProtocolHandler.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASSecurityManager.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/KJASSoundPlayer.java:
	* src/kdelibs/khtml/java/org/kde/kjas/server/Main.java:
	* src/kdelibs/khtml/java/tests/badapplets/BadApplet.jar:
	* src/kdelibs/khtml/java/tests/badapplets/BadApplet.java:
	* src/kdelibs/khtml/java/tests/badapplets/applet.html:
	* src/kdelibs/khtml/java/tests/good_sites:
	* src/kdelibs/khtml/java/tests/testkjavaappletserver.cpp:
	* src/kdelibs/khtml/khtml.desktop:
	* src/kdelibs/khtml/khtml.rc:
	* src/kdelibs/khtml/khtml_browser.rc:
	* src/kdelibs/khtml/khtml_ext.cpp:
	* src/kdelibs/khtml/khtml_factory.cpp:
	* src/kdelibs/khtml/khtml_find.cpp:
	* src/kdelibs/khtml/khtml_find.h:
	* src/kdelibs/khtml/khtml_pagecache.cpp:
	* src/kdelibs/khtml/khtml_pagecache.h:
	* src/kdelibs/khtml/khtml_part.cpp:
	* src/kdelibs/khtml/khtml_popupmenu.rc:
	* src/kdelibs/khtml/khtml_run.cpp:
	* src/kdelibs/khtml/khtml_run.h:
	* src/kdelibs/khtml/khtmldefaults.h:
	* src/kdelibs/khtml/khtmlimage.cpp:
	* src/kdelibs/khtml/khtmlimage.desktop:
	* src/kdelibs/khtml/khtmlimage.h:
	* src/kdelibs/khtml/pics/hi16-action-images_display.png:
	* src/kdelibs/khtml/pics/hi22-action-images_display.png:
	* src/kdelibs/khtml/pics/hi32-action-images_display.png:
	* src/kdelibs/khtml/test/README:
	* src/kdelibs/khtml/test/URL1.html:
	* src/kdelibs/khtml/test/URL2.html:
	* src/kdelibs/khtml/test/align.html:
	* src/kdelibs/khtml/test/align1.html:
	* src/kdelibs/khtml/test/align2.html:
	* src/kdelibs/khtml/test/anchor1.html:
	* src/kdelibs/khtml/test/anchor2.html:
	* src/kdelibs/khtml/test/badpages.html:
	* src/kdelibs/khtml/test/buggy.html:
	* src/kdelibs/khtml/test/button.html:
	* src/kdelibs/khtml/test/color.html:
	* src/kdelibs/khtml/test/fixed-background.html:
	* src/kdelibs/khtml/test/image.gif:
	* src/kdelibs/khtml/test/image_map.html:
	* src/kdelibs/khtml/test/index.html:
	* src/kdelibs/khtml/test/java.html:
	* src/kdelibs/khtml/test/javascript.html:
	* src/kdelibs/khtml/test/jsplugins.html:
	* src/kdelibs/khtml/test/konqi.gif:
	* src/kdelibs/khtml/test/lake.class:
	* src/kdelibs/khtml/test/listing.html:
	* src/kdelibs/khtml/test/lists.html:
	* src/kdelibs/khtml/test/nav_bar.gif:
	* src/kdelibs/khtml/test/nbsp.html:
	* src/kdelibs/khtml/test/notitle.html:
	* src/kdelibs/khtml/test/object.html:
	* src/kdelibs/khtml/test/pseudo.html:
	* src/kdelibs/khtml/test/renders.html:
	* src/kdelibs/khtml/test/supsub.html:
	* src/kdelibs/khtml/test/testpages.html:
	* src/kdelibs/khtml/test/textarea.html:
	* src/kdelibs/khtml/test/title.html:
	* src/kdelibs/khtml/testcss.cpp:
	* src/kdelibs/khtml/testkhtml.cpp:
	* src/kdelibs/khtml/testkhtml.h:
	* src/kdelibs/khtml/testrender.cpp:
	* src/kdelibs/khtml/testrender.h:
	* src/kdelibs/kjs/README:
	* src/kdelibs/kjs/THANKS:
	* src/kdelibs/kjs/create_hash_table:
	* src/kdelibs/kjs/keywords.table:

2002-03-06  Don Melton  <gramps@apple.com>

	Cleaned up all our changes to kdelibs, removed bitrot, and replaced use
	of _KWQ_ with new APPLE_CHANGES define.

	* src/kdelibs/khtml/css/csshelper.cpp: (khtml::computeLengthFloat),
	(khtml::setFontSize):
	* src/kdelibs/khtml/css/cssstyleselector.cpp:
	(CSSStyleSelector::CSSStyleSelector), (khtml::applyRule):
	* src/kdelibs/khtml/dom/dom_misc.cpp:
	* src/kdelibs/khtml/dom/dom_misc.h:
	* src/kdelibs/khtml/dom/html_document.cpp: (HTMLDocument::cookie),
	(HTMLDocument::setCookie):
	* src/kdelibs/khtml/dom/html_element.cpp:
	* src/kdelibs/khtml/ecma/kjs_binding.h:
	* src/kdelibs/khtml/ecma/kjs_css.cpp: (DOMCSSStyleDeclarationFunc::tryExecute),
	(DOMStyleSheetListFunc::tryExecute), (DOMMediaListFunc::tryExecute),
	(DOMCSSStyleSheetFunc::tryExecute), (DOMCSSRuleListFunc::tryExecute),
	(DOMCSSRuleFunc::tryExecute), (DOMCSSPrimitiveValueFunc::tryExecute),
	(DOMCSSValueListFunc::tryExecute):
	* src/kdelibs/khtml/ecma/kjs_css.h:
	* src/kdelibs/khtml/ecma/kjs_dom.cpp: (DOMNodeFunc::tryExecute),
	(DOMNodeListFunc::tryExecute), (DOMDocFunction::DOMDocFunction),
	(DOMDocFunction::tryExecute), (DOMElementFunction::DOMElementFunction),
	(DOMElementFunction::tryExecute),
	(DOMDOMImplementationFunction::DOMDOMImplementationFunction),
	(DOMDOMImplementationFunction::tryExecute),
	(DOMNamedNodeMapFunction::DOMNamedNodeMapFunction),
	(DOMNamedNodeMapFunction::tryExecute):
	* src/kdelibs/khtml/ecma/kjs_dom.h:
	* src/kdelibs/khtml/ecma/kjs_window.cpp: (Window::isSafeScript):
	* src/kdelibs/khtml/html/html_formimpl.cpp: (HTMLFormElementImpl::formData),
	(HTMLSelectElementImpl::state), (HTMLSelectElementImpl::restoreState):
	* src/kdelibs/khtml/html/html_headimpl.cpp: (HTMLLinkElementImpl::detach),
	(HTMLStyleElementImpl::detach), (HTMLTitleElementImpl::setTitle):
	* src/kdelibs/khtml/html/html_objectimpl.cpp:
	(HTMLEmbedElementImpl::parseAttribute):
	* src/kdelibs/khtml/html/html_tableimpl.cpp:
	(HTMLTableElementImpl::parseAttribute),
	(HTMLTablePartElementImpl::parseAttribute):
	* src/kdelibs/khtml/html/htmlparser.cpp: (KHTMLParser::parseToken),
	(KHTMLParser::insertNode), (KHTMLParser::getElement),
	(KHTMLParser::processCloseTag), (KHTMLParser::popBlock),
	(KHTMLParser::popOneBlock):
	* src/kdelibs/khtml/html/htmltokenizer.cpp: (HTMLTokenizer::parseSpecial),
	(HTMLTokenizer::scriptHandler), (HTMLTokenizer::parseComment),
	(HTMLTokenizer::parseTag), (HTMLTokenizer::processToken):
	* src/kdelibs/khtml/html/htmltokenizer.h:
	* src/kdelibs/khtml/java/kjavaprocess.h:
	* src/kdelibs/khtml/khtml_part.h:
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::~KHTMLView), (KHTMLView::init),
	(printRenderTree), (KHTMLView::drawContents), (KHTMLView::layout),
	(KHTMLView::viewportMousePressEvent), (KHTMLView::viewportMouseDoubleClickEvent),
	(KHTMLView::viewportMouseMoveEvent), (KHTMLView::viewportMouseReleaseEvent),
	(KHTMLView::addFormCompletionItem):
	* src/kdelibs/khtml/khtmlview.h:
	* src/kdelibs/khtml/misc/decoder.cpp: (Decoder::setEncoding), (Decoder::decode):
	* src/kdelibs/khtml/misc/helper.cpp: (khtml::setNamedColor):
	* src/kdelibs/khtml/misc/loader.h:
	* src/kdelibs/khtml/rendering/bidi.cpp: (RenderFlow::layoutInlineChildren):
	* src/kdelibs/khtml/rendering/render_applet.cpp: (RenderApplet::RenderApplet):
	* src/kdelibs/khtml/rendering/render_body.cpp: (RenderBody::layout):
	* src/kdelibs/khtml/rendering/render_box.cpp: (RenderBox::printBackground):
	* src/kdelibs/khtml/rendering/render_flow.cpp: (RenderFlow::print):
	* src/kdelibs/khtml/rendering/render_form.cpp:
	(RenderFormElement::baselinePosition), (RenderFormElement::slotClicked),
	(RenderCheckBox::RenderCheckBox), (RenderCheckBox::performAction),
	(RenderRadioButton::RenderRadioButton), (RenderRadioButton::slotClicked),
	(RenderSubmitButton::RenderSubmitButton), (RenderSubmitButton::baselinePosition),
	(RenderLineEdit::RenderLineEdit), (RenderLineEdit::calcMinMaxWidth),
	(RenderLineEdit::performAction), (RenderFileButton::RenderFileButton),
	(RenderSelect::RenderSelect), (RenderSelect::layout),
	(RenderSelect::createListBox), (RenderSelect::createComboBox),
	(RenderTextArea::RenderTextArea), (RenderTextArea::calcMinMaxWidth),
	(RenderTextArea::layout):
	* src/kdelibs/khtml/rendering/render_form.h:
	* src/kdelibs/khtml/rendering/render_frames.cpp:
	(RenderPartObject::updateWidget):
	* src/kdelibs/khtml/rendering/render_hr.cpp: (RenderHR::print):
	* src/kdelibs/khtml/rendering/render_image.cpp: (RenderImage::printObject):
	* src/kdelibs/khtml/rendering/render_list.cpp: (RenderListMarker::printObject):
	* src/kdelibs/khtml/rendering/render_style.h:
	* src/kdelibs/khtml/rendering/render_table.cpp: (RenderTable::calcFinalColMax),
	(RenderTable::layoutRows):
	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration),
	(TextSlaveArray::findFirstMatching), (RenderText::print):
	* src/kdelibs/khtml/xml/dom_docimpl.cpp: (DocumentImpl::recalcStyle):
	* src/kdelibs/khtml/xml/dom_nodeimpl.cpp: (NodeImpl::renderer):
	* src/kdelibs/khtml/xml/dom_nodeimpl.h:
	* src/kdelibs/khtml/xml/dom_stringimpl.cpp: (DOMStringImpl::toLengthList):

2002-03-06  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQKURL.mm: (KURL::KURL): If resolving a relative URL
	fails, assume it's absolute and possibly malformed, rather than
	appending it to the path of the previous URL. This fixes a
	CPU-spinning hang that John and Richard found.

2002-03-05  Richard Williamson  <rjw@apple.com>

        Pass errors correctly to browser.
        Removed old notification code.
        Added support for IFError.
        Lots of little cleanups.
        
	* src/kwq/KWQComboBox.mm: (QComboBox::setCurrentItem):
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	IFURLHandleResourceDidBeginLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidCancelLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]), (KHTMLPart::openURL),
	(KHTMLPart::closeURL):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):
	* src/kwq/WCError.h:
	* src/kwq/WCWebDataSource.h:
	* src/kwq/external.h:

2002-03-05  Richard Williamson  <rjw@apple.com>

        With fonts now being correctly specified we're exercising some new code paths.  This introduced a new
        class of weird string bugs.  Turns out that CFString is doing some mojo that I suspect is a performance
        optimization.  Constants strings appears to be uniqued and hard-wired to have a -1 retain count.  It
        looks like strings created by preferences are uniqued in this manner.  This plays havoc with our
        copy-on-write QString implementation.  The following GDB exercise illustrates the problem:
        
        (gdb) po (id)[(id)[NSUserDefaults standardUserDefaults] objectForKey:(id)[NSString stringWithCString: "WebKitFixedFont"]]
        Andale Mono
        (gdb) p (int)[(id)[(id)[NSUserDefaults standardUserDefaults] objectForKey:(id)[NSString stringWithCString: "WebKitFixedFont"]] retainCount]
        $28 = -1
        (gdb) p (id)[(id)[NSUserDefaults standardUserDefaults] objectForKey:(id)[NSString stringWithCString: "WebKitFixedFont"]]
        $27 = (objc_object *) 0x40172a4
        (gdb) p (void)[$27 retain]
        $29 = void
        (gdb) p (int)[$27 retainCount]
        $30 = -1
        (gdb) p (void)[$27 release]
        $33 = void
        (gdb) p (int)[$27 retainCount]
        $32 = -1
        
        So, it appears that these strings are permanently allocated.  It'd be interesting to find out what is in the uniqued string cache, and how big it is.
        
        I've fixed the problem by special casing our copy-on-write trigger to also check for -1.

	* src/kwq/KWQString.mm: (QString::_copyIfNeededInternalString):

2002-03-04  Richard Williamson  <rjw@apple.com>
 
        Changes to support 'provisional' data sources.
        API changes to IFBaseWebController, removed redundant methods.
 
	* src/kwq/KWQKHTMLPart.mm: (WCSetIFWebDataSourceMakeFunc), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidBeginLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidCancelLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]),
	(KHTMLPart::khtmlMouseReleaseEvent), (KHTMLPart::submitForm),
	(KHTMLPart::requestFrame):
	* src/kwq/external.h:

2002-02-28  Richard Williamson  <rjw@apple.com>

        Finished up progress notification for main document.  
        Made the IFLoadProgress allocator accessible to KHTMLPart.mm.
        
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[KHTMLPartLoadClient
	setDataSource:]), (KHTMLPart::openURL):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]):
	* src/kwq/WCLoadProgress.h:

2002-02-27  Kenneth Kocienda  <kocienda@apple.com>

	I have changed the way that WebCore is glued to WebFoundation and WebKit. 
	If you used or relied upon any code in the following files, you should 
	now use the IF* equivalents straight up. 

	- Labyrinth/WebCore/include/WCBackForwardList.h
	- Labyrinth/WebCore/include/WCURICache.h
	- Labyrinth/WebCore/include/WCURICacheData.h
	- Labyrinth/WebCore/include/WCURIEntry.h
	- Labyrinth/WebCore/include/WCURIEntry.h

	All changes in this commit are related to making dependant code work with the new convention.

	* include/WCBackForwardList.h:
	* include/WCURICache.h:
	* include/WCURICacheData.h:
	* include/WCURIEntry.h:
	* include/WCURLHandle.h:
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	IFURLHandleResourceDidBeginLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidCancelLoading:]), (-[KHTMLPartLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[KHTMLPartLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]), (KHTMLPart::slotData),
	(KHTMLPart::openURL):
	* src/kwq/KWQKjobclasses.mm:
	* src/kwq/KWQKloader.mm: (-[URLLoadClient IFURLHandleResourceDidBeginLoading:]),
	(-[URLLoadClient IFURLHandleResourceDidCancelLoading:]), (-[URLLoadClient
	IFURLHandleResourceDidFinishLoading:data:]), (-[URLLoadClient
	IFURLHandle:resourceDataDidBecomeAvailable:]), (-[URLLoadClient
	IFURLHandle:resourceDidFailLoadingWithResult:]):
	* src/kwq/Makefile.am:
	* src/kwq/kio/jobclasses.h:

2002-02-27  Maciej Stachowiak  <mjs@apple.com>

	Replace QDir and QFile with clean-room implementations. Add glob
	support ot QRegExp reimplementation.

	* src/kwq/KWQDir.mm: (QDir::KWQDirPrivate::KWQDirPrivate),
	(QDir::KWQDirPrivate::~KWQDirPrivate), (QDir::QDir), (QDir::~QDir),
	(QDir::absPath), (QDir::absFilePath), (QDir::cdUp), (QDir::exists),
	(QDir::entryList), (QDir::operator=), (QDir::swap):
	* src/kwq/KWQFile.mm: (QFile::KWQFilePrivate::KWQFilePrivate),
	(QFile::KWQFilePrivate::~KWQFilePrivate), (QFile::QFile), (QFile::~QFile),
	(QFile::exists), (QFile::open), (QFile::close), (QFile::readBlock),
	(QFile::size):
	* src/kwq/KWQRegExp.mm: (QRegExp::KWQRegExpPrivate::KWQRegExpPrivate),
	(RegExpFromGlob), (QRegExp::KWQRegExpPrivate::compile), (QRegExp::QRegExp):
	* src/kwq/KWQStrList.h:
	* src/kwq/Makefile.am:
	* src/kwq/qt/_qdir.h:
	* src/kwq/qt/_qfile.h:
	* src/kwq/qt/_qfileinfo.h:
	* src/kwq/qt/qdir.h:
	* src/kwq/qt/qfile.h:
	* src/kwq/qt/qiodevice.h:
	* src/kwq/qt/qregexp.h:

2002-02-25  Maciej Stachowiak  <mjs@apple.com>

	Fix two significant memory leaks in QList found by our automated
	leak-checking code.

	* src/kwq/KWQListImpl.mm: (KWQListNode::~KWQListNode),
	(KWQListImpl::KWQListPrivate::copyList),
	(KWQListImpl::KWQListPrivate::~KWQListPrivate), (KWQListImpl::sort):

	Fix a tiny bug tweaked by the new regexp code - we need to flush
	the cache after calling out to QRegExp::match because it might
	make calls on the string which create a cache. Caught by the
	regression tests.
	
	* src/kwq/KWQString.mm: (QString::replace): 
	
2002-02-24  Maciej Stachowiak  <mjs@apple.com>

	Reimplemented QRegExp in terms of POSIX regexp facilities. This
	will only support Latin1, however, it won't support all languages.
	
	* src/kwq/qt/qregexp.h:
	* src/kwq/KWQRegExp.mm: (QRegExp::KWQRegExpPrivate::KWQRegExpPrivate),
	(QRegExp::KWQRegExpPrivate::compile),
	(QRegExp::KWQRegExpPrivate::~KWQRegExpPrivate), (QRegExp::QRegExp),
	(QRegExp::~QRegExp), (QRegExp::operator=), (QRegExp::pattern), (QRegExp::match):

	Reimplement QValueList as a doubly-linked list, using a generic
	implementation class and a templatized facade.
	
	* src/kwq/qt/qvaluelist.h:
	* src/kwq/KWQValueListImpl.h:
	* src/kwq/KWQValueListImpl.mm: (KWQValueListNodeImpl::KWQValueListNodeImpl),
	(KWQValueListNodeImpl::~KWQValueListNodeImpl),
	(KWQValueListIteratorImpl::KWQValueListIteratorImpl),
	(KWQValueListIteratorImpl::~KWQValueListIteratorImpl),
	(KWQValueListIteratorImpl::operator=), (KWQValueListIteratorImpl::operator==),
	(KWQValueListIteratorImpl::operator!=), (KWQValueListIteratorImpl::node),
	(KWQValueListIteratorImpl::operator++), (KWQValueListIteratorImpl::operator--),
	(KWQValueListImpl::KWQValueListPrivate::KWQValueListPrivate),
	(KWQValueListImpl::KWQValueListPrivate::~KWQValueListPrivate),
	(KWQValueListImpl::KWQValueListPrivate::copyList),
	(KWQValueListImpl::KWQValueListPrivate::deleteList),
	(KWQValueListImpl::KWQValueListImpl), (KWQValueListImpl::~KWQValueListImpl),
	(KWQValueListImpl::clear), (KWQValueListImpl::count),
	(KWQValueListImpl::isEmpty), (KWQValueListImpl::appendNode),
	(KWQValueListImpl::prependNode), (KWQValueListImpl::removeEqualNodes),
	(KWQValueListImpl::containsEqualNodes), (KWQValueListImpl::removeIterator),
	(KWQValueListImpl::fromLast), (KWQValueListImpl::firstNode),
	(KWQValueListImpl::lastNode), (KWQValueListImpl::begin), (KWQValueListImpl::end),
	(KWQValueListImpl::nodeAt), (KWQValueListImpl::operator=),
	(KWQValueListImpl::copyOnWrite):
	* src/kwq/Makefile.am:

	* src/kwq/kio/netaccess.h: Don't declare private copy constructor
	- this class needs to be copyable to be stored in a QValueList!

	Hack these scripts a bit so the large tables they generate are
	constant data.
	
	* src/kwq/make-charset-table.pl:
	* src/kdelibs/khtml/css/makeprop:
	* src/kdelibs/khtml/css/makevalues:
	* src/kdelibs/khtml/misc/makeattrs:
	* src/kdelibs/khtml/misc/maketags:

2002-02-23  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/WCLoadProgress.h: Add the forgotten WCLoadProgress.h.

2002-02-22  Maciej Stachowiak  <mjs@apple.com>

	Fix prebinding:

	* src/Makefile.am: Enable prebinding, set first segment address to
	0x2200000 to avoid colliding with apps or our other
	frameworks. Change other link flags to support prebinding.

	Set up some hacks to avoid link-time dependency on
	WebKit. Prebinding is incompatible with - undefined suppress, so
	we can't have WebCore depend on symbols provided by WebKit any
	more:
	
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKloader.mm: (WCSetIFLoadProgressMakeFunc), (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:data:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]):
	* src/kwq/WCPluginWidget.h:
	* src/kwq/WCPluginWidget.mm: (WCSetIFPluginMakeFunc),
	(WCPluginWidget::WCPluginWidget):

2002-02-22  Richard Williamson  <rjw@apple.com>

        Added data: to IFURLHandleResourceDidFinishLoading:
        
	* include/WCURLHandle.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	WCURLHandleResourceDidFinishLoading:data:userData:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:data:userData:]):

2002-02-22  Kenneth Kocienda  <kocienda@apple.com>

	Sent handle an autorelease message.

	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]):

2002-02-21  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQString.mm: (QString::fill): Fix a bug that was
	triggering assertion failures in CF.
	
	* src/kdelibs/kjs/kjs-test: Turn off some environment variables to
	make the tests pass.

2002-02-21  Richard Williamson  <rjw@apple.com>

    Stop mostly working.
    
	* src/kwq/KWQKjobclasses.mm:
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]),
	(Loader::servePendingRequests):
	* src/kwq/kio/jobclasses.h:

2002-02-21  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQString.mm: (QString::fromCFString): Don't pass a
	length to CFStringCreateMutableCopy, since that makes the string
	fixed-length, which makes assertions fail when in debugging mode.

2002-02-20  Richard Williamson  <rjw@apple.com>

    Some groundwork to bring WebFoundation callbacks up to 
    WebKit.
    
	* src/kdelibs/khtml/misc/loader.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	WCURLHandleResourceDidBeginLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[KHTMLPartLoadClient
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (KHTMLPart::openURL),
	(KHTMLPart::closeURL), (KHTMLPart::write), (KHTMLPart::checkCompleted):
	* src/kwq/KWQKloader.mm: (CachedCSSStyleSheet::CachedCSSStyleSheet),
	(CachedScript::CachedScript), (CachedImage::CachedImage), (-[URLLoadClient
	initWithLoader:dataSource:]), (-[URLLoadClient
	WCURLHandleResourceDidBeginLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]), (Loader::load),
	(Loader::servePendingRequests), (Cache::requestImage),
	(Cache::requestStyleSheet), (Cache::requestScript):
	* src/kwq/kio/jobclasses.h:

2002-02-20  Maciej Stachowiak  <mjs@apple.com>

	* src/kdelibs/kjs/kjs-test:
	* src/kwq/KWQKURL.mm: (KURL::setQuery):

2002-02-18  Kenneth Kocienda  <kocienda@apple.com>

	* src/Makefile.am:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseMoveEvent):
	* src/kwq/KWQView.mm: (-[KWQHTMLView mouseUp:]), (-[KWQHTMLView mouseDown:]):
	* src/kwq/kde/_kurl.cpp: (KURL::htmlRef):

2002-02-18  Richard Williamson  <rjw@apple.com>

        Fixed the prefences won't stay in front problem after John found 
        and correctly diagnosed the problem.
        
	* src/kwq/KWQWidget.mm: (QWidget::show), (QWidget::hide):

2002-02-18  Richard Williamson  <rjw@apple.com>

        Performance measurement.
        
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::begin), (KHTMLPart::write):

2002-02-16  Maciej Stachowiak  <mjs@apple.com>

	Reimplement KURL in terms of CFURL (many workarounds needed to
	account for differing semantics).

	* src/kwq/kdecore/kurl.h:
	* src/kwq/KWQKURL.mm: (KURL::KWQKURLPrivate::KWQKURLPrivate),
	(KURL::KWQKURLPrivate::~KWQKURLPrivate), (KURL::KWQKURLPrivate::init),
	(KURL::KWQKURLPrivate::makeRef), (CFStringToQString), (escapeQString),
	(pathEndsWithSlash), (KWQCFURLCopyEscapedPath),
	(KURL::KWQKURLPrivate::decompose), (KURL::KWQKURLPrivate::compose), (KURL::KURL),
	(KURL::~KURL), (KURL::isEmpty), (KURL::isMalformed), (KURL::hasPath),
	(KURL::url), (KURL::protocol), (KURL::host), (KURL::port), (KURL::pass),
	(KURL::user), (KURL::ref), (KURL::query), (KURL::path), (KURL::setProtocol),
	(KURL::setHost), (KURL::setPort), (KURL::setRef), (KURL::setQuery),
	(KURL::setPath), (KURL::prettyURL), (KURL::operator=), (KURL::decode_string),
	(KURL::copyOnWrite):
	* src/kwq/Makefile.am: Add new file to build.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::begin,
	KHTMLPart::submitForm): Don't 

	Minor tweaks to make it all build:

	* src/kwq/kde/_kurl.cpp:
	* src/kwq/qt/_qurl.cpp:
	* src/kwq/qt/_qurl.h:

2002-02-16  Richard Williamson  <rjw@apple.com>

        Fixed problem with default text not showing up in text area.
        Fixed problem with scroll widgets not showing up in select list.
        
	* src/kdelibs/khtml/rendering/render_form.cpp: (RenderSelect::layout):
	* src/kwq/KWQListBox.mm: (QListBox::QListBox):
	* src/kwq/KWQTextArea.mm: (-[KWQTextArea _createTextView]), (-[KWQTextArea
	initWithFrame:widget:]), (-[KWQTextArea setFrame:]):

2002-02-15  Richard Williamson  <rjw@apple.com>
    
    Lots of changes to support forms.

	* src/kdelibs/khtml/rendering/render_form.cpp: (RenderFormElement::slotClicked),
	(RenderCheckBox::performAction), (RenderRadioButton::slotClicked),
	(RenderSelect::RenderSelect), (RenderSelect::layout),
	(RenderSelect::performAction), (RenderTextArea::layout), (RenderTextArea::text),
	(RenderTextArea::performAction):
	* src/kdelibs/khtml/rendering/render_form.h:
	* src/kwq/KWQCheckBox.mm: (QCheckBox::QCheckBox), (QCheckBox::isChecked):
	* src/kwq/KWQComboBox.mm: (QComboBox::indexOfCurrentItem):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::requestFrame):
	* src/kwq/KWQListBox.h:
	* src/kwq/KWQListBox.mm: (-[KWQBrowserDelegate initWithListBox:]),
	(-[KWQBrowserDelegate browser:numberOfRowsInColumn:]), (-[KWQBrowserDelegate
	browser:willDisplayCell:atRow:column:]), (-[KWQBrowserDelegate
	browserSingleClick:]), (-[KWQBrowserDelegate browserDoubleClick:]),
	(QListBox::QListBox), (QListBox::~QListBox), (QListBox::count),
	(QListBox::scrollBarWidth), (QListBox::clear), (QListBox::setSelectionMode),
	(QListBox::currentItem), (QListBox::insertItem), (QListBox::setSelected),
	(QListBox::isSelected), (QListBoxItem::QListBoxItem),
	(QListBoxItem::~QListBoxItem), (QListBoxItem::setSelectable),
	(QListBoxItem::width), (QListBoxItem::height):
	* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField action:]), (-[KWQNSTextField
	controlTextDidEndEditing:]):
	* src/kwq/KWQScrollView.mm: (QScrollView::addChild):
	* src/kwq/KWQTextArea.mm: (-[KWQTextArea initWithFrame:]), (-[KWQTextArea
	_createTextView]), (-[KWQTextArea initWithFrame:widget:]), (-[KWQTextArea
	textDidEndEditing:]), (-[KWQTextArea setFrame:]):
	* src/kwq/KWQTextEdit.mm: (QMultiLineEdit::setCursorPosition),
	(QMultiLineEdit::getCursorPosition):
	* src/kwq/KWQView.mm: (-[KWQNSButton stateChanged:]), (-[KWQNSComboBox
	initWithFrame:widget:]), (-[KWQNSComboBox action:]):
	* src/kwq/KWQWidget.mm: (QWidget::endEditing):
	* src/kwq/qt/qcheckbox.h:
	* src/kwq/qt/qcombobox.h:
	* src/kwq/qt/qobject.h:

2002-02-13  Richard Williamson  <rjw@apple.com>
    
    Use NSSwitchButtons for check boxes.

	* src/kwq/KWQCheckBox.mm: (QCheckBox::QCheckBox):

2002-02-13  Richard Williamson  <rjw@apple.com>

    Removed dead code from setView.
    
	* src/kwq/KWQWidget.mm: (QWidget::setView):

2002-02-12  Richard Williamson  <rjw@apple.com>

    Made basic forms work.

	* src/kdelibs/khtml/rendering/render_form.cpp:
	(RenderFormElement::performAction), (RenderLineEdit::RenderLineEdit),
	(RenderLineEdit::performAction):
	* src/kdelibs/khtml/rendering/render_form.h:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::submitForm):
	* src/kwq/KWQLineEdit.mm: (QLineEdit::text):
	* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField initWithFrame:widget:]),
	(-[KWQNSTextField action:]), (-[KWQNSTextField controlTextDidEndEditing:]),
	(-[KWQNSTextField setMaximumLength:]), (-[KWQNSTextField maximumLength]):
	* src/kwq/KWQObject.mm: (QObject::emitAction), (QObject::performAction):
	* src/kwq/KWQWidget.mm: (QWidget::setView), (QWidget::endEditing):
	* src/kwq/kwqdebug.mm: (KWQGetLogLevel):
	* src/kwq/qt/qlineedit.h:
	* src/kwq/qt/qobject.h:
	* src/kwq/qt/qwidget.h:

2002-02-12  Maciej Stachowiak  <mjs@apple.com>

	Make some tweaks to glue together KDE's and CF's concepts of URLs
	a bit better. In particular, CF thinks "file:/some/path" is an
	invalid URL, while KDE thinks this is the canonical form for a
	file URL.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::openURL), (KHTMLPart::closeURL),
	(KHTMLPart::checkCompleted):
	* src/kwq/KWQKjobclasses.mm:

2002-02-12  Maciej Stachowiak  <mjs@apple.com>

	Reimplemented QList, QVector and QCollection from
	scratch. Implemented copy-on-write optimization for QMap.

	Minimally reimplement QCollection.

	* src/kwq/qt/qcollection.h:
	* src/kwq/KWQCollection.mm: (QCollection::QCollection), (QCollection::operator=),
	(QCollection::~QCollection), (QCollection::autoDelete),
	(QCollection::setAutoDelete):

	* src/kwq/qt/qdict.h, src/kwq/qt/qptrdict.h: Include
	qcollection.h, not _qcollection.h

	Reimplement QList as a doubly-linked list.
	
	* src/kwq/qt/qlist.h:
	* src/kwq/KWQListImpl.h:
	* src/kwq/KWQListImpl.mm: (KWQListImpl::KWQListPrivate::copyList),
	(KWQListImpl::KWQListPrivate::KWQListPrivate),
	(KWQListImpl::KWQListPrivate::~KWQListPrivate),
	(KWQListIteratorImpl::KWQListIteratorPrivate::KWQListIteratorPrivate),
	(KWQListImpl::KWQListImpl), (KWQListImpl::~KWQListImpl), (KWQListImpl::isEmpty),
	(KWQListImpl::count), (KWQListImpl::clear), (KWQListImpl::sort),
	(KWQListImpl::at), (KWQListImpl::insert), (KWQListImpl::remove),
	(KWQListImpl::removeFirst), (KWQListImpl::removeLast), (KWQListImpl::removeRef),
	(KWQListImpl::getLast), (KWQListImpl::current), (KWQListImpl::first),
	(KWQListImpl::last), (KWQListImpl::next), (KWQListImpl::prev),
	(KWQListImpl::take), (KWQListImpl::append), (KWQListImpl::prepend),
	(KWQListImpl::containsRef), (KWQListImpl::assign), (KWQListImpl::addIterator),
	(KWQListImpl::removeIterator), (KWQListIteratorImpl::KWQListIteratorImpl),
	(KWQListIteratorImpl::~KWQListIteratorImpl), (KWQListIteratorImpl::count),
	(KWQListIteratorImpl::toFirst), (KWQListIteratorImpl::toLast),
	(KWQListIteratorImpl::current), (KWQListIteratorImpl::operator--),
	(KWQListIteratorImpl::operator++), (KWQListIteratorImpl::operator=):

	Reimplement QVector in terms of CFArray.
	
	* src/kwq/qt/qvector.h:
	* src/kwq/KWQVectorImpl.h:
	* src/kwq/KWQVectorImpl.mm: (KWQVectorImpl::KWQVectorPrivate::KWQVectorPrivate),
	(KWQVectorImpl::KWQVectorPrivate::~KWQVectorPrivate),
	(KWQVectorImpl::KWQVectorImpl), (KWQVectorImpl::~KWQVectorImpl),
	(KWQVectorImpl::clear), (KWQVectorImpl::isEmpty), (KWQVectorImpl::count),
	(KWQVectorImpl::size), (KWQVectorImpl::remove), (KWQVectorImpl::resize),
	(KWQVectorImpl::insert), (KWQVectorImpl::at), (KWQVectorImpl::assign),
	(KWQVectorImpl::KWQVectorImpl::swap):

	Implemented copy-on-write optimization for QMap. This had the
	pleasant side effect of improving the separation between pointer
	manipulation and key/value manipulation.

	* src/kwq/qt/qmap.h:
	* src/kwq/KWQMapImpl.h:
	* src/kwq/KWQMapImpl.mm: (KWQMapImpl::KWQMapPrivate::KWQMapPrivate),
	(KWQMapImpl::KWQMapPrivate::~KWQMapPrivate), (KWQMapImpl::KWQMapImpl),
	(KWQMapImpl::~KWQMapImpl), (KWQMapImpl::copyOnWrite), (KWQMapImpl::copyTree),
	(KWQMapImpl::rebalanceAfterInsert), (KWQMapImpl::rebalanceAfterRemove),
	(KWQMapImpl::findInternal), (KWQMapImpl::insertInternal),
	(KWQMapImpl::removeInternal), (KWQMapImpl::swap), (KWQMapImpl::countInternal),
	(KWQMapImpl::clearInternal), (KWQMapImpl::beginInternal),
	(KWQMapImpl::endInternal):

	* src/kwq/Makefile.am: Add new files to build.

	* src/kdelibs/khtml/rendering/render_text.cpp
	(TextSlaveArray::findFirstMatching): Fix two places where the KDE
	code was depending on implementation details of QVector.

2002-02-07  Richard Williamson  <rjw@apple.com>

    More changes to IFLocationChangeHandler API.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent):

2002-02-07  Richard Williamson  <rjw@apple.com>

    Factored URL loading code out and moved to IFBaseWebController.
    
	* ChangeLog:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::requestFrame):

2002-02-06  Richard Williamson  <rjw@apple.com>

    Fixed allocation problems.
    
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::requestFrame):

2002-02-05  Richard Williamson  <rjw@apple.com>

    Updated part to use 'official' controller APIs.
    
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::~KHTMLPart),
	(KHTMLPart::khtmlMouseReleaseEvent), (KHTMLPart::requestFrame),
	(KHTMLPart::checkCompleted):

2002-02-05  Richard Williamson  <rjw@apple.com>

    Changes to support dynamic scroll bars in frames/iframes.

	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent):
	* src/kwq/KWQScrollView.mm: (QScrollView::addChild),
	(QScrollView::resizeContents), (QScrollView::updateContents),
	(QScrollView::repaintContents):
	* src/kwq/KWQWidget.mm: (QWidget::resize), (QWidget::move),
	(QWidget::internalSetGeometry):

2002-02-05  Kenneth Kocienda  <kocienda@apple.com>

	Changes to move these last bits of code to the new cache API.

	* src/kwq/KWQKjobclasses.mm:
	* src/kwq/WKPluginView.h:
	* src/kwq/WKPluginView.mm: (-[WKPluginView drawRect:]), (-[WKPluginView
	WCURLHandleResourceDidBeginLoading:userData:]), (-[WKPluginView
	WCURLHandleResourceDidCancelLoading:userData:]), (-[WKPluginView
	WCURLHandleResourceDidFinishLoading:userData:]), (-[WKPluginView
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]), (-[WKPluginView
	WCURLHandle:resourceDidFailLoadingWithResult:userData:]):

2002-02-04  Maciej Stachowiak  <mjs@apple.com>

	Fix everything for WK --> IF rename.

	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::requestFrame), (KHTMLPart::checkCompleted):

2002-02-01  Kenneth Kocienda  <kocienda@apple.com>

	More cleanups to the no-copy NSData API.
	This time the callback from the cache/loader has been
	simplified from:
	- (void)WKURLHandle:(WKURLHandle *)sender resourceDataDidBecomeAvailable:(UInt8 *)bytes offset:(unsigned)offset length:(unsigned)length;
	to:
	- (void)WKURLHandle:(WKURLHandle *)sender resourceDataDidBecomeAvailable:(NSData *)data;
	This was made possible by some rearrangement in the private API.

	* include/WCURLHandle.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:userData:]):

2002-02-01  Richard Williamson  <rjw@apple.com>

    Added support for dynamic scrolling frames.  Also added first callback for
    WKLocationChangeHandler.
    
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::end), (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::checkCompleted):

2002-02-01  Kenneth Kocienda  <kocienda@apple.com>

        Made some cleanups to the no-copy NSData API, and those changes
        make the use of the no-copy functionality in this client code
        much cleaner.
        
	* include/WCURLHandle.h:
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:offset:length:userData:]):

2002-01-31  Richard Williamson  <rjw@apple.com>

    Added QString constructor, fixed javascript at head of document bug.
    
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::openURL), (KHTMLPart::closeURL),
	(KHTMLPart::write):
	* src/kwq/KWQString.mm: (QString::QString):
	* src/kwq/qt/qstring.h:

2002-01-31  Richard Williamson  <rjw@apple.com>

	* src/kdelibs/khtml/html/html_headimpl.cpp: (HTMLStyleElementImpl::detach):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::write):

2002-01-31  Kenneth Kocienda  <kocienda@apple.com>

        Changes to incorporate use of the no-copy NSData object.

	* include/WCURLHandle.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:offset:length:userData:]):
	* src/kwq/KWQKloader.mm: (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:offset:length:userData:]):

2002-01-30  Richard Williamson  <rjw@apple.com>
    
    Cleaned up frame code a bit.  Fixed duplicate content problem.

	* src/kdelibs/khtml/html/html_headimpl.cpp: (HTMLLinkElementImpl::detach):
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::layout):
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::~KHTMLPart), (KHTMLPart::openURL),
	(KHTMLPart::requestFrame):

2002-01-30  Kenneth Kocienda  <kocienda@apple.com>

        Added *.lo, *.la, and .libs to .cvsignore files
        
	* .cvsignore:
	* src/.cvsignore:
	* src/kdelibs/khtml/css/.cvsignore:
	* src/kdelibs/khtml/misc/.cvsignore:
	* src/kdelibs/kjs/.cvsignore:

2002-01-29  Richard Williamson  <rjw@apple.com>

    Fixed QConstString to make a copy on initial chars.
    
	* ChangeLog:
	* src/kwq/KWQString.mm: (QString::_copyIfNeededInternalString),
	(QString::insert), (QString::remove), (QString::replace), (QString::truncate),
	(QConstString::QConstString):
	* src/kwq/qt/qstring.h:

2002-01-29  Richard Williamson  <rjw@apple.com>

	* src/kwq/KWQString.mm: (QString::_copyIfNeededInternalString),
	(QString::insert), (QString::remove), (QString::replace), (QString::truncate),
	(QConstString::QConstString):
	* src/kwq/qt/qstring.h:

2002-01-29  Kenneth Kocienda  <kocienda@apple.com>

        - Added in a dummy protocol to clean up a warning that results
        from calling a method on an id.
        - Cleaned up handle variable in KWQKHTMLPart. This can now be freed
        once we get a proper notification that a load is done.
        - Support for reading text encoding from HTTP headers added back in.
        
	* include/WCURLHandle.h:
	* src/kwq/KWQKHTMLPart.mm: (encodingFromContentType), (KHTMLPart::slotData),
	(KHTMLPart::openURL), (KHTMLPart::closeURL):

2002-01-29  Richard Williamson  <rjw@apple.com>

    First pass as frame code.  Still needs cleanup.
    
	* src/kdelibs/khtml/dom/dom_misc.cpp: (DomShared::ref), (DomShared::deref):
	* src/kdelibs/khtml/dom/dom_misc.h:
	* src/kdelibs/khtml/khtmlview.cpp: (KHTMLView::~KHTMLView):
	* src/kwq/KWQComboBox.mm: (QComboBox::setCurrentItem):
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::~KHTMLPart), (KHTMLPart::begin),
	(KHTMLPart::end), (KHTMLPart::xmlDocImpl), (KHTMLPart::khtmlMouseReleaseEvent),
	(KHTMLPart::requestFrameName), (KHTMLPart::requestFrame),
	(KHTMLPart::requestObject), (KHTMLPart::checkCompleted):

2002-01-29  Kenneth Kocienda  <kocienda@apple.com>

        Checked in the missing file
        
	* include/WCURLHandle.h:

2002-01-29  Kenneth Kocienda  <kocienda@apple.com>

        Changed over to the new cache loader in WebFoundation
        
	* src/kwq/KWQKHTMLPart.h:
	* src/kwq/KWQKHTMLPart.mm: (-[KHTMLPartLoadClient init]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidBeginLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[KHTMLPartLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:offset:length:userData:]),
	(-[KHTMLPartLoadClient WCURLHandle:resourceDidFailLoadingWithResult:userData:]),
	(-[KHTMLPartLoadClient dealloc]), (KHTMLPart::slotData), (KHTMLPart::openURL):
	* src/kwq/KWQKjobclasses.mm:
	* src/kwq/KWQKloader.mm: (-[URLLoadClient initWithLoader:]), (-[URLLoadClient
	WCURLHandleResourceDidBeginLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidCancelLoading:userData:]), (-[URLLoadClient
	WCURLHandleResourceDidFinishLoading:userData:]), (-[URLLoadClient
	WCURLHandle:resourceDataDidBecomeAvailable:offset:length:userData:]),
	(-[URLLoadClient WCURLHandle:resourceDidFailLoadingWithResult:userData:]),
	(-[URLLoadClient dealloc]):
	* src/kwq/kio/jobclasses.h:

2002-01-29  Maciej Stachowiak  <mjs@apple.com>

	Reimplement QDict, QMap, QPtrDict and QSortedList.

	Reimplement QDict in terms of CFDictionary:
	
	* src/kwq/qt/qdict.h:
	* src/kwq/KWQDictImpl.h:
	* src/kwq/KWQDictImpl.mm: (KWQDictImpl::KWQDictImpl), (KWQDictImpl::insert),
	(KWQDictImpl::remove), (KWQDictImpl::find),
	(KWQDictIteratorImpl::KWQDictIteratorImpl),
	(KWQDictIteratorImpl::currentStringKey):

	Reimplement QMap as a right-threaded red-black tree, splitting
	the work between template classes that manipulate keys and values
	and non-template base classes that handle all the pointer
	manipulation:
	
	* src/kwq/qt/qmap.h:
	* src/kwq/KWQMapImpl.h:
	* src/kwq/KWQMapImpl.mm: (KWQMapNodeImpl::KWQMapNodeImpl),
	(KWQMapNodeImpl::left), (KWQMapNodeImpl::right), (KWQMapNodeImpl::predecessor),
	(KWQMapNodeImpl::successor), (KWQMapIteratorImpl::KWQMapIteratorImpl),
	(KWQMapIteratorImpl::incrementInternal), (KWQMapImpl::KWQMapImpl),
	(KWQMapImpl::rotateRight), (KWQMapImpl::rotateLeft),
	(KWQMapImpl::rebalanceAfterInsert), (KWQMapImpl::rebalanceAfterRemove),
	(KWQMapImpl::findInternal), (KWQMapImpl::insertInternal),
	(KWQMapImpl::removeInternal), (KWQMapImpl::swap), (KWQMapImpl::countInternal),
	(KWQMapImpl::clearInternal), (KWQMapImpl::beginInternal),
	(KWQMapImpl::endInternal):

	Reimplement QPtrDict in terms of CFDictionary:

	* src/kwq/qt/qptrdict.h:
	* src/kwq/KWQPtrDictImpl.h:
	* src/kwq/KWQPtrDictImpl.mm:
	(KWQPtrDictImpl::KWQPtrDictPrivate::KWQPtrDictPrivate),
	(KWQPtrDictImpl::KWQPtrDictPrivate::~KWQPtrDictPrivate),
	(KWQPtrDictImpl::KWQPtrDictImpl), (KWQPtrDictImpl::~KWQPtrDictImpl),
	(invokeDeleteFuncOnValue), (KWQPtrDictImpl::clear), (KWQPtrDictImpl::count),
	(KWQPtrDictImpl::insert), (KWQPtrDictImpl::remove), (KWQPtrDictImpl::find),
	(KWQPtrDictImpl::swap), (KWQPtrDictImpl::assign), (KWQPtrDictImpl::take),
	(KWQPtrDictIteratorImpl::KWQPtrDictIteratorPrivate::KWQPtrDictIteratorPrivate),
	(KWQPtrDictIteratorImpl::KWQPtrDictIteratorPrivate::~KWQPtrDictIteratorPrivate),
	(KWQPtrDictIteratorImpl::KWQPtrDictIteratorImpl),
	(KWQPtrDictIteratorImpl::~KWQPtrDictIteratorImpl),
	(KWQPtrDictIteratorImpl::count), (KWQPtrDictIteratorImpl::current),
	(KWQPtrDictIteratorImpl::currentKey), (KWQPtrDictIteratorImpl::toFirst),
	(KWQPtrDictIteratorImpl::operator++):

	Reimplement QSortedList:
	
	* src/kwq/qt/qsortedlist.h:

	* src/kwq/KWQArrayImpl.mm: Remove stray include.

	* src/kwq/Makefile.am: Add new files to build.

	* src/kwq/qt/_qdict.h, src/kwq/qt/_qgdict.h,
	src/kwq/qt/_qptrdict.h: Avoid causing problems when the relevant
	defines are not defined.

2002-01-22  Richard Williamson  <rjw@apple.com>

    Implemented KWQDesktopWidget to represent main screen.  Used by javascript.
    
	* src/kwq/KWQApplication.mm: (KWQDesktopWidget::width),
	(KWQDesktopWidget::height), (QApplication::desktop):

2002-01-21  Maciej Stachowiak  <mjs@apple.com>

	Reimplemented QArray, QBuffer, QStack and QStringList; also fixed
	some files for borrowed switchability, and fixed some bugs found
	by my new test cases.

	# Reimplement QArray:

	* src/kwq/qt/qarray.h:
	* src/kwq/KWQArrayImpl.h:
	* src/kwq/KWQArrayImpl.mm: (KWQArrayImpl::KWQArrayPrivate::KWQArrayPrivate),
	(KWQArrayImpl::KWQArrayPrivate::~KWQArrayPrivate), (KWQArrayImpl::KWQArrayImpl),
	(KWQArrayImpl::~KWQArrayImpl), (KWQArrayImpl::operator=), (KWQArrayImpl::at),
	(KWQArrayImpl::data), (KWQArrayImpl::size), (KWQArrayImpl::resize),
	(KWQArrayImpl::duplicate), (KWQArrayImpl::fill), (KWQArrayImpl::operator==):

	# Reimplement QBuffer:

	* src/kwq/qt/qbuffer.h:
	* src/kwq/KWQBuffer.mm: (QBuffer::QBuffer), (QBuffer::~QBuffer),
	(QBuffer::buffer), (QBuffer::size), (QBuffer::isOpen), (QBuffer::open),
	(QBuffer::close), (QBuffer::writeBlock):
	* src/kwq/qt/qiodevice.h:

	# Reimplement QStringList:

	* src/kwq/KWQStringList.mm: (QStringToCFString), (QStringList::split),
	(QStringList::QStringList), (QStringList::~QStringList), (QStringList::join),
	(QStringList::operator=):

	# Reimplement QStack:
	* src/kwq/qt/qstack.h:

	* src/kwq/Makefile.am: Add new files to build.

	* src/kwq/KWQString.mm: (QString::find): Fix bug which returned
	the very first occurence in the string even when the optional
	starting point was passed in. Some of my new regression tests
	picked this up.

	# Temporarily work around uses of non-kwq APIs:
	
	* src/kwq/WKPluginWidget.h:
	* src/kwq/qt/_qfile.cpp
	* src/kwq/qt/_qbuffer.cpp
	
	# Guard contents of all these with the appropriate USING ifdef:
	
	* src/kwq/KWQStrList.h:
	* src/kwq/qt/_qarray.h:
	* src/kwq/qt/_qgarray.h:
	* src/kwq/qt/_qstrlist.h:
	
2002-01-19  Maciej Stachowiak  <mjs@apple.com>

	* src/kdelibs/kjs/Makefile.am: Fix testkjs build.

	Fix a couple more static initialization problems:
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::urlCursor):
	* src/kwq/KWQRegion.mm: (QRegion::QRegion), (QRegion::operator=):

	* src/.cvsignore, src/kdelibs/.cvsignore,
	src/kdelibs/khtml/css/.cvsignore,
	src/kdelibs/khtml/misc/.cvsignore, src/kdelibs/kjs/.cvsignore:
	Ignore stamp files.

2002-01-18  Richard Williamson  <rjw@apple.com>

    First pass at new view/datasource/controller API.

	* src/kwq/KWQApplication.mm: (QApplication::QApplication),
	(QApplication::setMainWidget), (QApplication::exec):
	* src/kwq/KWQRegion.mm: (QRegion::QRegion), (QRegion::~QRegion),
	(QRegion::contains), (QRegion::isNull):
	* src/kwq/Makefile.am:
	* src/kwq/_KWQOwner.h:
	* src/kwq/_KWQOwner.m:
	* src/kwq/qt/qnamespace.h:

2002-01-18  Maciej Stachowiak  <mjs@apple.com>

	Avoid static initialization of objects as much as possible. Order
	of static initializers is unpredictable and we had some
	cross-dependencies, so avoid this practice as much as possible to
	fix various startup crashes.

	* src/kwq/KWQApplication.mm: (QApplication::palette),
	(QApplication::globalStrut):
	* src/kwq/KWQChar.mm:
	* src/kwq/KWQColor.mm:
	* src/kwq/KWQCursor.mm: (QCursor::QCursor), (QCursor::~QCursor):
	* src/kwq/KWQEvent.mm:
	* src/kwq/KWQKConfigBase.mm: (KConfigBase::readEntry),
	(KConfigBase::readColorEntry), (KConfigBase::readListEntry):
	* src/kwq/KWQKHTMLSettings.mm: (KHTMLSettings::encoding):
	* src/kwq/KWQKJavaEmbed.mm: (KJavaEmbed::sizeHint),
	(KJavaEmbed::minimumSizeHint):
	* src/kwq/KWQKLocale.mm: (KLocale::language):
	* src/kwq/KWQKMimeType.mm: (KMimeType::findByURL), (KMimeType::name):
	* src/kwq/KWQKPrinter.mm: (KPrinter::margins):
	* src/kwq/KWQKProtocolManager.mm: (KProtocolManager::httpProxy):
	* src/kwq/KWQKWinModule.mm: (KWinModule::workArea):
	* src/kwq/KWQKjobclasses.mm:
	* src/kwq/KWQKnetaccess.mm:
	* src/kwq/KWQPart.mm: (KParts::Part::widget), (KParts::ReadOnlyPart::url):
	* src/kwq/KWQPixmap.mm: (QPixmap::mask):
	* src/kwq/KWQToolTip.mm: (QToolTip::palette):
	* src/kwq/kde/_kurl.cpp:
	* src/kwq/kdecore/kurl.h:

2002-01-17  Maciej Stachowiak  <mjs@apple.com>

	Fix a couple of problems that kept `make -j3' from working from a
	clean start (use stamp files to serialize build a bit more where
	needed)

	* src/Makefile.am:
	* src/kdelibs/khtml/css/Makefile.am:
	* src/kdelibs/khtml/misc/Makefile.am:
	* src/kdelibs/kjs/Makefile.am:

2002-01-17  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/Makefile.am: Fix another bonehead mistake.

2002-01-17  Maciej Stachowiak  <mjs@apple.com>

	Fix bonehead mistakes in last checkin which were killing Jersey.

	* src/kdelibs/khtml/ecma/Makefile.am:
	* src/kdelibs/khtml/html/Makefile.am:
	* src/kdelibs/khtml/rendering/Makefile.am:
	* src/kwq/kde/Makefile.am:

2002-01-17  Maciej Stachowiak  <mjs@apple.com>

	More build system speedups; instead of building static libraries
	in each directory, build relocatble object files, using the magic
	of incremental linking.

	* src/Makefile.am:
	* src/kdelibs/khtml/Makefile.am:
	* src/kdelibs/khtml/css/Makefile.am:
	* src/kdelibs/khtml/dom/Makefile.am:
	* src/kdelibs/khtml/ecma/Makefile.am:
	* src/kdelibs/khtml/html/Makefile.am:
	* src/kdelibs/khtml/java/Makefile.am:
	* src/kdelibs/khtml/misc/Makefile.am:
	* src/kdelibs/khtml/rendering/Makefile.am:
	* src/kdelibs/khtml/xml/Makefile.am:
	* src/kdelibs/kjs/Makefile.am:
	* src/kwq/Makefile.am:
	* src/kwq/kde/Makefile.am:
	* src/kwq/qt/Makefile.am:

2002-01-17  Maciej Stachowiak  <mjs@apple.com>

	Build speedups: Don't use libtool, and don't link static libraries
	into each other.
	
	* src/Makefile.am
	* src/kdelibs/khtml/Makefile.am:
	* src/kdelibs/khtml/css/Makefile.am:
	* src/kdelibs/khtml/dom/Makefile.am:
	* src/kdelibs/khtml/ecma/Makefile.am:
	* src/kdelibs/khtml/html/Makefile.am:
	* src/kdelibs/khtml/java/Makefile.am:
	* src/kdelibs/khtml/misc/Makefile.am:
	* src/kdelibs/khtml/rendering/Makefile.am:
	* src/kdelibs/khtml/xml/Makefile.am:
	* src/kdelibs/kjs/Makefile.am:
	* src/kwq/Makefile.am:
	* src/kwq/kde/Makefile.am:
	* src/kwq/qt/Makefile.am:

2002-01-16  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/qt/_qpoint.h, src/kwq/qt/_qrect.h, src/kwq/qt/_qsize.h,
	src/kwq/qt/qpoint.h, src/kwq/qt/qrect.h, src/kwq/qt/qsize.h: Make
	QPoint, QRect and QSize easily turn-off-able again.

2002-01-15  Maciej Stachowiak  <mjs@apple.com>

	* src/kdelibs/kjs/Makefile.am: Add missing files to BUILT_SOURCES
	and build rules to fix `make -j3'

2002-01-14  Maciej Stachowiak  <mjs@apple.com>

	* .cvsignore:
	* Makefile.am:
	* Makefile.in:
	* include/.cvsignore:
	* include/Makefile.am:
	* include/private/.cvsignore:
	* include/private/Makefile.am:
	* lib/.cvsignore:
	* lib/Makefile.in:
	* src/.cvsignore:
	* src/Makefile.am:
	* src/kdelibs/.cvsignore:
	* src/kdelibs/Makefile.am:
	* src/kdelibs/kdecore/.cvsignore:
	* src/kdelibs/kdecore/Makefile.am:
	* src/kdelibs/kdecore/Makefile.in:
	* src/kdelibs/khtml/.cvsignore:
	* src/kdelibs/khtml/Makefile.am:
	* src/kdelibs/khtml/Makefile.in:
	* src/kdelibs/khtml/css/.cvsignore:
	* src/kdelibs/khtml/css/Makefile.am:
	* src/kdelibs/khtml/css/Makefile.in:
	* src/kdelibs/khtml/dom/.cvsignore:
	* src/kdelibs/khtml/dom/Makefile.am:
	* src/kdelibs/khtml/dom/Makefile.in:
	* src/kdelibs/khtml/ecma/.cvsignore:
	* src/kdelibs/khtml/ecma/Makefile.am:
	* src/kdelibs/khtml/ecma/Makefile.in:
	* src/kdelibs/khtml/html/.cvsignore:
	* src/kdelibs/khtml/html/Makefile.am:
	* src/kdelibs/khtml/html/Makefile.in:
	* src/kdelibs/khtml/java/.cvsignore:
	* src/kdelibs/khtml/java/ChangeLog:
	* src/kdelibs/khtml/java/Makefile.am:
	* src/kdelibs/khtml/java/Makefile.in:
	* src/kdelibs/khtml/java/tests/Makefile.am:
	* src/kdelibs/khtml/misc/.cvsignore:
	* src/kdelibs/khtml/misc/Makefile.am:
	* src/kdelibs/khtml/misc/Makefile.in:
	* src/kdelibs/khtml/pics/Makefile.am:
	* src/kdelibs/khtml/rendering/.cvsignore:
	* src/kdelibs/khtml/rendering/Makefile.am:
	* src/kdelibs/khtml/rendering/Makefile.in:
	* src/kdelibs/khtml/xml/.cvsignore:
	* src/kdelibs/khtml/xml/Makefile.am:
	* src/kdelibs/khtml/xml/Makefile.in:
	* src/kdelibs/kjs/.cvsignore:
	* src/kdelibs/kjs/ChangeLog:
	* src/kdelibs/kjs/Makefile.am:
	* src/kdelibs/kjs/Makefile.in:
	* src/kdelibs/kjs/kjs-test:
	* src/kdelibs/kjs/kjs-test.chk:
	* src/kwq/.cvsignore:
	* src/kwq/Makefile.am:
	* src/kwq/Makefile.in:
	* src/kwq/_KWQOwner.m: (-[_KWQOwner backForwardUriDone:]):
	* src/kwq/kde/.cvsignore:
	* src/kwq/kde/Makefile.am:
	* src/kwq/kde/Makefile.in:
	* src/kwq/kdecore/.cvsignore:
	* src/kwq/kdecore/Makefile.in:
	* src/kwq/khtml/khtml_factory.h:
	* src/kwq/qt/.cvsignore:
	* src/kwq/qt/Makefile.am:
	* src/kwq/qt/Makefile.in:

2002-01-09  Richard Williamson  <rjw@apple.com>

        Re-implemented underlining.  Now it REALLY works, honest.
        
	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
	* src/kwq/KWQFontMetrics.mm: (+[KWQLayoutInfo
	drawUnderlineForString:atPoint:withFont:color:]):
	* src/kwq/KWQMetrics.h:
	* src/kwq/KWQPainter.mm: (QPainter::drawUnderlineForText):
	* src/kwq/qt/qpainter.h:

2001-12-20  Richard Williamson  <rjw@apple.com>
        
        More tweaks to text layout and underlining.

	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
	* src/kwq/KWQFontMetrics.mm: (QFontMetrics::baselineOffset),
	(QFontMetrics::ascent), (QFontMetrics::descent), (QFontMetrics::height),
	(QFontMetrics::width):
	* src/kwq/KWQPainter.mm: (QPainter::drawText):
	* src/kwq/qt/qfontmetrics.h:

2001-12-18  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/KWQCString.mm: (QCString::QCString),
	(QCString::isEmpty), (QCString::isNull), (QCString::length): Fix
	some bugs found by the test suite in the emptiness/null semantics.

	Reimplement QPoint, QSize and QRect:

	* src/kwq/qt/qpoint.h, src/kwq/qt/qrect.h, src/kwq/qt/qsize.h:
	Update.
	* src/kwq/KWQPoint.mm: (QPoint::QPoint), (QPoint::x), (QPoint::y),
	(QPoint::manhattanLength), (operator+), (operator-), (operator<<):
	Fresh implementations.
	* src/kwq/KWQRect.mm: (QRect::QRect), (QRect::isNull), (QRect::isValid),
	(QRect::x), (QRect::y), (QRect::left), (QRect::top), (QRect::right),
	(QRect::bottom), (QRect::width), (QRect::height), (QRect::topLeft),
	(QRect::size), (QRect::setWidth), (QRect::setHeight), (QRect::intersect),
	(QRect::intersects), (QRect::operator&), (operator==), (operator!=),
	(operator<<): Likewise.
	* src/kwq/KWQSize.mm: (QSize::QSize), (QSize::isValid), (QSize::width),
	(QSize::height), (QSize::setWidth), (QSize::setHeight), (QSize::expandedTo),
	(operator+), (operator==), (operator!=), (operator<<): Likewise.
	* src/kwq/qt/_qpoint.cpp, src/kwq/qt/_qrect.cpp,
	src/kwq/qt/_qsize.cpp: Disable the whole file contents when
	building.
	* src/kwq/Makefile.in: Add new files to build.
	
	Start moving away from QShared so we can remove it:

	* src/kwq/qt/qbrush.h, src/kwq/KWQBrush.mm: (QBrush::QBrush),
	(QBrush::color),
	(QBrush::setColor), (QBrush::style), (QBrush::setStyle),
	(QBrush::operator==), (QBrush::operator!=): Don't use shared data
	for this simple value object, the optimization value is
	quastionable anyway.
	* src/kwq/qt/qpen.h, src/kwq/KWQPen.mm: (QPen::QPen),
	(QPen::color), (QPen::width), (QPen::style),
	(QPen::setColor), (QPen::setWidth), (QPen::setStyle),
	(QPen::operator==): Likewise.
	* src/kwq/KWQPainter.mm: (QPainter::setPen), (QPainter::setBrush):
	Update for changes to pen.
	* src/kwq/KWQRefPtr.h: New reference-counted pointer template.
	* src/kwq/qt/qguardedptr.h, src/kwq/KWQGuardedPtr.mm:
	(QGuardedPtrPrivate::QGuardedPtrPrivate): Use KWQRefPtr instead of
	QShared.
	* src/kwq/qt/qvariant.h, src/kwq/KWQVariant.mm:
	(QVariant::QVariant), (QVariant::~QVariant),
	(QVariant::operator=): Use KWQRefPtr instead of
	QShared.
	* src/kwq/qt/qnamespace.h: Remove private constructor and
	destructor since people want to subclass this.

	* src/kwq/_KWQOwner.h: Add include guards and standard license.

	* src/kdelibs/khtml/ecma/kjs_binding.h: Add include of qvariant.h,
	how could stuff ever compile without this?

2001-12-18  Richard Williamson  <rjw@apple.com>

        Finally fixed underlining.
        
	* src/kdelibs/khtml/rendering/render_text.cpp: (TextSlave::printDecoration):
	* src/kwq/KWQFontMetrics.mm:

2001-12-18  Maciej Stachowiak  <mjs@apple.com>

	* src/kwq/Makefile.in: Re-apply my changes, which accidentally got
	clobbered.

2001-12-13  Maciej Stachowiak  <mjs@apple.com>

	Changes for international character set support. Still needs work,
	but no worse than before. amazon.co.jp renders almost correctly.
	
	* src/kwq/KWQCharsets.h, src/kwq/KWQCharsets.mm:
	(KWQCFStringEncodingFromIANACharsetName,
	KWQCFStringEncodingFromMIB, KWQCFStringEncodingToIANACharsetName,
	KWQCFStringEncodingToMIB): New functions that translate between
	the Qt concept of charaxcter sets and the
	(buildDictionaries): static helper function for the above.
	* src/kwq/KWQtextcodec.mm: (codecForCFStringEncoding,
	QTextCodec::codecForMib), QTextCodec::codecForName,
	QTextCodec::codecForLocale, QTextCodec::name,QTextCodec::mibEnum):
	Implement for real.
	* src/kwq/KWQKCharsets.mm: (KCharsets::codecForName,
	KCharsets::charsetForEncoding, KCharsets::charsetForEncoding):
	Implement for real.
	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::slotData): Get encoding
	from headers if present.
	(encodingFromContentType): Helper function for the above. 
	(KHTMLPart::begin): Reinitialize decoder for every page.
	(KHTMLPart::write): Minor bug fix.
	(KHTMLPart::setEncoding): Implement.
	(KHTMLPart::khtmlMouseMoveEvent,
	KHTMLPart::khtmlMouseReleaseEvent, KHTMLPart::checkCompleted):
	Simplify ifdefs to make prepare-ChangeLog happy.
	* src/kwq/qt/qstring.h, src/kwq/KWQString.mm:
	(QString::fromCFString): New convenience method to create a
	QString from an immutable CFString by copying,
	* src/kwq/character-sets.txt: IANA document describing character
	sets.
	* src/kwq/make-charset-table.pl, src/kwq/make-mac-encodings.c:
	Helper programs to construct charset tables from IANA document.
	* src/kwq/Makefile.in: Update to handle the autogenerated code.
	* src/kwq/.cvsignore: Ignore new autogenerated files.
	
	* src/kdelibs/khtml/misc/decoder.cpp: (Decoder::decode): Fix
	decoding when the encoding is specified in the http headers (which
	seems like it could never have worked in KDE).

	* include/WCBackForwardList.h, include/WCURICache.h,
	include/WCURICacheData.h, include/WCURIEntry.h: Fix prototypes of
	C functions with no arguments to use (void), not (), to avoid
	warnings in WebKit.

2001-12-11  Chris Blumenberg  <cblu@apple.com>

	* ChangeLog:
	* src/kwq/KWQKHTMLPart.mm:

2001-12-11  Chris Blumenberg  <cblu@apple.com>

	* src/kwq/KWQKHTMLPart.mm:

2001-12-10  Kenneth Kocienda  <kocienda@apple.com>

        Went back and did a better job of cleaning up the warnings
        that resulted from comparing signed and unsigned numbers.

	* src/kwq/KWQString.mm: (QString::insert), (QString::remove),
	(QString::truncate):

2001-12-07  Richard Williamson  <richwill@richwill.com>

        Fixed bug that was highlighted when we turned on warnings.
        
	* src/kwq/KWQFontMetrics.mm:
	* src/kwq/KWQMetrics.h:

2001-12-07  Kenneth Kocienda  <kocienda@apple.com>

        Fixed small bug in a comparison that was making -Wall complain

	* src/kwq/KWQString.mm:

