? l ? html/htmltokenizer.loT Index: khtml_part.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/khtml_part.cpp,v retrieving revision 1.525 diff -u -3 -d -p -r1.525 khtml_part.cpp --- khtml_part.cpp 2001/07/24 18:10:50 1.525 +++ khtml_part.cpp 2001/07/26 16:55:08 @@ -157,8 +157,9 @@ public: m_startOffset = m_endOffset = 0; m_startBeforeEnd = true; m_linkCursor = KCursor::handCursor(); - m_loadedImages = 0; - m_totalImageCount = 0; + m_loadedObjects = 0; + m_totalObjectCount = 0; + m_jobPercent = 0; m_haveEncoding = false; m_activeFrame = 0L; m_findDialog = 0; @@ -354,8 +355,9 @@ public: QCursor m_linkCursor; QTimer m_scrollTimer; - unsigned long m_loadedImages; - unsigned long m_totalImageCount; + unsigned long m_loadedObjects; + unsigned long m_totalObjectCount; + unsigned int m_jobPercent; KHTMLFind *m_findDialog; @@ -384,8 +386,7 @@ namespace khtml { { m_part = part; m_priv = priv; - // the "foo" is needed, so that the docloader for the empty document doesn't cancel this request. - m_cachedSheet = Cache::requestStyleSheet(0, url, DOMString("foo") ); + m_cachedSheet = Cache::requestStyleSheet(0, url ); if (m_cachedSheet) m_cachedSheet->ref( this ); } @@ -524,10 +525,12 @@ void KHTMLPart::init( KHTMLView *view, G d->m_popupMenuXML = KXMLGUIFactory::readConfigFile( locate( "data", "khtml/khtml_popupmenu.rc", KHTMLFactory::instance() ) ); - connect( khtml::Cache::loader(), SIGNAL( requestDone( const DOM::DOMString &, khtml::CachedObject *) ), - this, SLOT( slotLoaderRequestDone( const DOM::DOMString &, khtml::CachedObject *) ) ); - connect( khtml::Cache::loader(), SIGNAL( requestFailed( const DOM::DOMString &, khtml::CachedObject *) ), - this, SLOT( slotLoaderRequestDone( const DOM::DOMString &, khtml::CachedObject *) ) ); + connect( khtml::Cache::loader(), SIGNAL( requestStarted( khtml::DocLoader*, khtml::CachedObject* ) ), + this, SLOT( slotLoaderRequestStarted( khtml::DocLoader*, khtml::CachedObject* ) ) ); + connect( khtml::Cache::loader(), SIGNAL( requestDone( khtml::DocLoader*, khtml::CachedObject *) ), + this, SLOT( slotLoaderRequestDone( khtml::DocLoader*, khtml::CachedObject *) ) ); + connect( khtml::Cache::loader(), SIGNAL( requestFailed( khtml::DocLoader*, khtml::CachedObject *) ), + this, SLOT( slotLoaderRequestDone( khtml::DocLoader*, khtml::CachedObject *) ) ); findTextBegin(); //reset find variables @@ -557,12 +560,15 @@ KHTMLPart::~KHTMLPart() if ( d->m_job ) d->m_job->kill(); - khtml::Cache::loader()->cancelRequests( m_url.url() ); + if ( d->m_doc && d->m_doc->docLoader() ) + khtml::Cache::loader()->cancelRequests( d->m_doc->docLoader() ); - disconnect( khtml::Cache::loader(), SIGNAL( requestDone( const DOM::DOMString &, khtml::CachedObject * ) ), - this, SLOT( slotLoaderRequestDone( const DOM::DOMString &, khtml::CachedObject * ) ) ); - disconnect( khtml::Cache::loader(), SIGNAL( requestFailed( const DOM::DOMString &, khtml::CachedObject * ) ), - this, SLOT( slotLoaderRequestDone( const DOM::DOMString &, khtml::CachedObject * ) ) ); + disconnect( khtml::Cache::loader(), SIGNAL( requestStarted( khtml::DocLoader*, khtml::CachedObject* ) ), + this, SLOT( slotLoaderRequestStarted( khtml::DocLoader*, khtml::CachedObject* ) ) ); + disconnect( khtml::Cache::loader(), SIGNAL( requestDone( khtml::DocLoader*, khtml::CachedObject *) ), + this, SLOT( slotLoaderRequestDone( khtml::DocLoader, khtml::CachedObject *) ) ); + disconnect( khtml::Cache::loader(), SIGNAL( requestFailed( khtml::DocLoader*, khtml::CachedObject *) ), + this, SLOT( slotLoaderRequestDone( khtml::DocLoader*, khtml::CachedObject *) ) ); clear(); @@ -704,8 +710,15 @@ bool KHTMLPart::openURL( const KURL &url kdDebug( 6050 ) << "KHTMLPart::openURL now (before started) m_url = " << m_url.url() << endl; - emit started( d->m_job ); +#warning FIXME +// connect( d->m_job, SIGNAL( speed( KIO::Job*, unsigned long ) ), +// d->m_extension, SLOT( speedProgress( int ) ) ); + connect( d->m_job, SIGNAL( percent( KIO::Job*, unsigned long ) ), + this, SLOT( slotJobPercent( KIO::Job*, unsigned long ) ) ); + + emit started( 0L ); + return true; } @@ -739,7 +752,8 @@ bool KHTMLPart::closeURL() d->m_workingURL = KURL(); - khtml::Cache::loader()->cancelRequests( m_url.url() ); + if ( d->m_doc && d->m_doc->docLoader() ) + khtml::Cache::loader()->cancelRequests( d->m_doc->docLoader() ); // Stop any started redirections as well!! (DA) if ( d && d->m_redirectionTimer.isActive() ) @@ -1136,8 +1150,9 @@ void KHTMLPart::clear() d->m_startOffset = 0; d->m_endOffset = 0; - d->m_totalImageCount = 0; - d->m_loadedImages = 0; + d->m_totalObjectCount = 0; + d->m_loadedObjects = 0; + d->m_jobPercent = 0; if ( !d->m_haveEncoding ) d->m_encoding = QString::null; @@ -1493,55 +1508,58 @@ void KHTMLPart::slotFinishedParsing() if ( !m_url.encodedHtmlRef().isEmpty() ) gotoAnchor( m_url.encodedHtmlRef() ); -#if 0 - HTMLCollectionImpl imgColl( d->m_doc, HTMLCollectionImpl::DOC_IMAGES ); + checkCompleted(); +} - d->m_totalImageCount = 0; - KURL::List imageURLs; - unsigned long i = 0; - unsigned long len = imgColl.length(); - for (; i < len; i++ ) +void KHTMLPart::slotLoaderRequestStarted( khtml::DocLoader* dl, khtml::CachedObject *obj ) +{ + if ( obj && obj->type() == khtml::CachedObject::Image ) { - NodeImpl *node = imgColl.item( i ); - if ( node->id() != ID_IMG ) - continue; - - QString imgURL = static_cast( node )->getAttribute( ATTR_SRC ).string(); - KURL url; - - if ( KURL::isRelativeURL( imgURL ) ) - url = completeURL( imgURL ); - else - url = KURL( imgURL ); - - if ( !imageURLs.contains( url ) ) - { - d->m_totalImageCount++; - imageURLs.append( url ); + d->m_totalObjectCount++; + if ( d->m_loadedObjects <= d->m_totalObjectCount ) { + emit d->m_extension->infoMessage( i18n( "%1 of 1 Image loaded", "%1 of %n Images loaded", d->m_totalObjectCount ).arg( d->m_loadedObjects ) ); + QTimer::singleShot( 0, this, SLOT( slotProgressUpdate() ) ); } } -#endif - - checkCompleted(); } -void KHTMLPart::slotLoaderRequestDone( const DOM::DOMString &/*baseURL*/, khtml::CachedObject *obj ) +void KHTMLPart::slotLoaderRequestDone( khtml::DocLoader* dl, khtml::CachedObject *obj ) { - if ( obj && obj->type() == khtml::CachedObject::Image ) { - d->m_loadedImages++; + d->m_loadedObjects++; // in case we have more images than we originally found, then they are most likely loaded by some // javascript code. as we can't find out the exact number anyway we skip displaying any further image // loading info message :P - if ( d->m_loadedImages <= d->m_totalImageCount && autoloadImages()) - emit d->m_extension->infoMessage( i18n( "%1 of 1 Image loaded", "%1 of %n Images loaded", d->m_totalImageCount ).arg( d->m_loadedImages ) ); + if ( d->m_loadedObjects <= d->m_totalObjectCount ) { + emit d->m_extension->infoMessage( i18n( "%1 of 1 Image loaded", "%1 of %n Images loaded", d->m_totalObjectCount ).arg( d->m_loadedObjects ) ); + QTimer::singleShot( 0, this, SLOT( slotProgressUpdate() ) ); + } } + checkCompleted(); } +void KHTMLPart::slotProgressUpdate() +{ + int percent; + if ( d->m_loadedObjects < d->m_totalObjectCount ) + percent = d->m_jobPercent / 4 + ( d->m_loadedObjects*300 ) / ( 4*d->m_totalObjectCount ); + else + percent = d->m_jobPercent; + + emit d->m_extension->loadingProgress( percent ); +} + +void KHTMLPart::slotJobPercent( KIO::Job* job, unsigned long percent ) +{ + d->m_jobPercent = percent; + + QTimer::singleShot( 0, this, SLOT( slotProgressUpdate() ) ); +} + void KHTMLPart::checkCompleted() { //kdDebug( 6050 ) << "KHTMLPart::checkCompleted() parsing: " << d->m_bParsing << endl; @@ -1569,7 +1587,6 @@ void KHTMLPart::checkCompleted() d->m_focusNodeRestored = true; } - int requests = 0; // Any frame that hasn't completed yet ? ConstFrameIt it = d->m_frames.begin(); @@ -1583,8 +1600,11 @@ void KHTMLPart::checkCompleted() return; // Still waiting for images/scripts from the loader ? - requests = khtml::Cache::loader()->numRequests( m_url.url() ); - //kdDebug( 6060 ) << "number of loader requests: " << requests << endl; + int requests = 0; + if ( d->m_doc->docLoader() ) + requests = khtml::Cache::loader()->numRequests( d->m_doc->docLoader() ); + + kdDebug( 6060 ) << "number of loader requests: " << requests << endl; if ( requests > 0 ) return; @@ -3846,7 +3866,6 @@ void KHTMLPart::khtmlMouseMoveEvent( kht void KHTMLPart::khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event ) { - QMouseEvent *_mouse = event->qmouseEvent(); DOM::Node innerNode = event->innerNode(); d->m_mousePressNode = DOM::Node(); @@ -3858,6 +3877,7 @@ void KHTMLPart::khtmlMouseReleaseEvent( d->m_bMousePressed = false; #ifndef QT_NO_CLIPBOARD + QMouseEvent *_mouse = event->qmouseEvent(); if ((_mouse->button() == MidButton) && (event->url() == 0)) { QClipboard *cb = QApplication::clipboard(); Index: khtml_part.h =================================================================== RCS file: /home/kde/kdelibs/khtml/khtml_part.h,v retrieving revision 1.146 diff -u -3 -d -p -r1.146 khtml_part.h --- khtml_part.h 2001/07/22 18:57:35 1.146 +++ khtml_part.h 2001/07/26 16:55:08 @@ -58,6 +58,7 @@ namespace DOM namespace khtml { + class DocLoader; class RenderPart; class RenderPartObject; struct ChildFrame; @@ -933,9 +934,7 @@ private slots: void slotLoadImages(); /** - * We try to submit the form again - * if someone tries to submit a form - * while parsing + * @internal */ void submitFormAgain(); @@ -964,7 +963,8 @@ private slots: */ void slotChildURLRequest( const KURL &url, const KParts::URLArgs &args ); - void slotLoaderRequestDone( const DOM::DOMString &baseURL, khtml::CachedObject *obj ); + void slotLoaderRequestStarted( khtml::DocLoader*, khtml::CachedObject* obj); + void slotLoaderRequestDone( khtml::DocLoader*, khtml::CachedObject *obj ); void checkCompleted(); /** @@ -981,9 +981,21 @@ private slots: void slotSelectAll(); + /** + * @internal + */ + void slotProgressUpdate(); + + /** + * @internal + */ + void slotJobPercent(KIO::Job*, unsigned long); + protected: - // @internal - void emitSelectionChanged(); // ### KDE 3.0: make private + /** + * @internal + */ + void emitSelectionChanged(); // ### KDE 3.0: make private private: void urlSelected( const QString &url, int button, int state, Index: khtmlview.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/khtmlview.cpp,v retrieving revision 1.395 diff -u -3 -d -p -r1.395 khtmlview.cpp --- khtmlview.cpp 2001/07/21 22:43:06 1.395 +++ khtmlview.cpp 2001/07/26 16:55:09 @@ -941,6 +941,7 @@ void KHTMLView::print() m_part->xmlDocImpl()->applyChanges(); QApplication::restoreOverrideCursor(); } + delete printer; } Index: css/css_ruleimpl.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/css/css_ruleimpl.cpp,v retrieving revision 1.15 diff -u -3 -d -p -r1.15 css_ruleimpl.cpp --- css/css_ruleimpl.cpp 2001/06/05 11:54:51 1.15 +++ css/css_ruleimpl.cpp 2001/07/26 16:55:09 @@ -117,7 +117,7 @@ CSSImportRuleImpl::CSSImportRuleImpl(Sty m_lstMedia = media; m_strHref = href; m_styleSheet = 0; - kdDebug( 6080 ) << "CSSImportRule: requesting sheet " << href.string() << " " << baseUrl().string() << endl; + kdDebug( 6080 ) << "CSSImportRule: requesting sheet " << href.string() << endl; khtml::DocLoader *docLoader = 0; StyleBaseImpl *root = this; @@ -128,7 +128,7 @@ CSSImportRuleImpl::CSSImportRuleImpl(Sty // we must have a docLoader ! // ### pass correct charset here!! - m_cachedSheet = docLoader->requestStyleSheet(href, baseUrl(), QString::null); + m_cachedSheet = docLoader->requestStyleSheet(href, QString::null); m_cachedSheet->ref(this); m_loading = true; Index: css/css_valueimpl.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/css/css_valueimpl.cpp,v retrieving revision 1.48 diff -u -3 -d -p -r1.48 css_valueimpl.cpp --- css/css_valueimpl.cpp 2001/07/19 21:37:56 1.48 +++ css/css_valueimpl.cpp 2001/07/26 16:55:09 @@ -112,9 +112,9 @@ bool CSSStyleDeclarationImpl::removeProp m_node->setChanged(true); } return true; -} - +} + DOMString CSSStyleDeclarationImpl::removeProperty( const DOMString &propertyName ) { int id = getPropertyID(propertyName.string().lower().ascii(), propertyName.length()); @@ -679,7 +679,7 @@ RectImpl::~RectImpl() // ----------------------------------------------------------------- -CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, const DOMString &baseurl, StyleBaseImpl *style) +CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, StyleBaseImpl *style) : CSSPrimitiveValueImpl(url, CSSPrimitiveValue::CSS_URI) { khtml::DocLoader *docLoader = 0; @@ -690,9 +690,9 @@ CSSImageValueImpl::CSSImageValueImpl(con docLoader = static_cast(root)->docLoader(); if (docLoader) - m_image = docLoader->requestImage(url, baseurl); + m_image = docLoader->requestImage(url); else - m_image = khtml::Cache::requestImage(0, url, baseurl); + m_image = khtml::Cache::requestImage(0, url); if(m_image) m_image->ref(this); } Index: css/css_valueimpl.h =================================================================== RCS file: /home/kde/kdelibs/khtml/css/css_valueimpl.h,v retrieving revision 1.23 diff -u -3 -d -p -r1.23 css_valueimpl.h --- css/css_valueimpl.h 2001/07/19 20:25:43 1.23 +++ css/css_valueimpl.h 2001/07/26 16:55:09 @@ -222,7 +222,7 @@ protected: class CSSImageValueImpl : public CSSPrimitiveValueImpl, public khtml::CachedObjectClient { public: - CSSImageValueImpl(const DOMString &url, const DOMString &baseurl, StyleBaseImpl *style); + CSSImageValueImpl(const DOMString &url, StyleBaseImpl *style); CSSImageValueImpl(); virtual ~CSSImageValueImpl(); Index: css/cssparser.cpp =================================================================== RCS file: /home/kde/kdelibs/khtml/css/cssparser.cpp,v retrieving revision 1.152 diff -u -3 -d -p -r1.152 cssparser.cpp --- css/cssparser.cpp 2001/07/21 10:53:29 1.152 +++ css/cssparser.cpp 2001/07/26 16:55:10 @@ -39,6 +39,9 @@ #include "xml/dom_nodeimpl.h" #include "html/html_documentimpl.h" #include "dom_exception.h" +#include "khtml_part.h" +#include "khtmlview.h" + using namespace DOM; #include @@ -80,7 +83,7 @@ void StyleBaseImpl::checkLoaded() if(m_parent) m_parent->checkLoaded(); } -DOMString StyleBaseImpl::baseUrl() +DOMString StyleBaseImpl::baseURL() { // try to find the style sheet. If found look for it's url. // If it has none, look for the parentsheet, or the parentNode and @@ -96,13 +99,13 @@ DOMString StyleBaseImpl::baseUrl() return sheet->href(); // find parent - if(sheet->parent()) return sheet->parent()->baseUrl(); + if(sheet->parent()) return sheet->parent()->baseURL(); if(!sheet->ownerNode()) return DOMString(); DocumentImpl *doc = static_cast(sheet->ownerNode()->nodeType() == Node::DOCUMENT_NODE ? sheet->ownerNode() : sheet->ownerNode()->ownerDocument()); - return doc->baseURL(); + return doc->view()->part()->baseURL().url(); } /* @@ -1499,18 +1502,14 @@ bool StyleBaseImpl::parseValue( const QC kdDebug( 6080 ) << "empty image " << endl; #endif } else { - const QString str(value.stripWhiteSpace()); // ### Optimize - if (str.left(4).lower() == "url(") { - DOMString value(curP, endP - curP); - value = khtml::parseURL(value); - parsedValue = new CSSImageValueImpl(value, baseUrl(), this); + value = khtml::parseURL(value).string(); + parsedValue = new CSSImageValueImpl(KURL( baseURL().string(), value ).url(), this); #ifdef CSS_DEBUG - kdDebug( 6080 ) << "image, url=" << value.string() << " base=" << baseUrl().string() << endl; + kdDebug( 6080 ) << "image, url=" << value.string() << endl; #endif - } } - break; } + break; case CSS_PROP_OUTLINE_WIDTH: // | inherit case CSS_PROP_BORDER_TOP_WIDTH: //// | inherit case CSS_PROP_BORDER_RIGHT_WIDTH: // Which is defined as @@ -2480,9 +2479,7 @@ StyleBaseImpl::parseStyleRule(const QCha CSSRuleImpl * StyleBaseImpl::parseRule(const QChar *&curP, const QChar *endP) { - const char *comment = "' } } - + while(ch < last) { if( !comment && !sq && *ch == '"' ) { dq = !dq; @@ -2626,7 +2623,7 @@ const QString StyleBaseImpl::preprocess( } firstChar = false; } else if ( *ch == '/' ) { - firstChar = true; // Slash added only if next is not '*' + firstChar = true; // Slash added only if next is not '*' } else if ((*ch == '<') && ((ch+3) < last) /* SGML Comment */ && (*(ch+1) == '!') && (*(ch+2) == '-') && (*(ch+3) == '-')) { ch = ch+3; // skip '