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:

