[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kfm-devel
Subject:    progress patch
From:       Dirk Mueller <mueller () kde ! org>
Date:       2001-07-26 17:05:04
[Download RAW message or body]

Hi, 

this is a prelimiary version of working progress information. It has a few 
defiencies currently (one of them is that it is not well tested). Namely 
there are: 

- speed information is broken, see the FIXME in the patch. I'm not sure if I 
should accumulate the speed info of all jobs running, or just of the main
 HTML page. if the latter, a slot that converts the unsigned long to 
 an int should suffice. or ?

- it does now no longer only count images, but instead all referenced 
objects. I did not yet adapt the i18n-strings to reflect that, anyway
  as images are the majority of objects this should be not a big issue

- accumulating information over subframes is not yet implemented. I don't 
know how to find out if I'm the "toplevel" frameset and how I can find a 
paretn khtmlpart if I'm a FRAME. Simon ?


Besides that, the patch has also some other minor fixes and changes, as

- fixing the broken baseurl handling we had all over the place. fixes
  the referrer string.

- cleaning the related signatures up. 

- implementing attribute width for <select>. its CSS2 min-width, but as we 
don't have a support for that yet I added a hack. 


Please comment. 


Dirk

["progress.patch" (text/plain)]

? 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<DOM::ElementImpl *>( 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<CSSStyleSheetImpl*>(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 <kdebug.h>
@@ -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<DocumentImpl*>(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:        // <border-width> | inherit
     case CSS_PROP_BORDER_TOP_WIDTH:     //// <border-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 = "<!--";
     const QChar *startP;
-    int count = 0;
 
     curP = parseSpace( curP, endP );
 
@@ -2555,23 +2552,23 @@ const QString StyleBaseImpl::preprocess(
   float orgLength = str.length();
   kdDebug(6080) << "Length: " << orgLength << endl;
 #endif
-  
+
   if (!(justOneRule)) {
-    /* Remove start of SGML Comment which hides CSS from 3.0 Browsers */      
+    /* Remove start of SGML Comment which hides CSS from 3.0 Browsers */
     while((ch < last) && (ch->isSpace())) { ++ch; }
-    if ((*ch == '<') && ((ch+4) < last) && 
+    if ((*ch == '<') && ((ch+4) < last) &&
 	(*(ch+1) == '!') && (*(ch+2) == '-') && (*(ch+3) == '-')) {
       ch = ch+4; //skip '<!--'
     }
-  
-    /* Remove end of SGML Comment which hides CSS from 3.0 Browsers */      
+
+    /* Remove end of SGML Comment which hides CSS from 3.0 Browsers */
     while ((last > ch) && ((last-1)->isSpace())) { --last; }
-    if ((*(last-1) == '>') && ((last-3) > ch) && 
+    if ((*(last-1) == '>') && ((last-3) > ch) &&
 	(*(last-2) == '-') && (*(last-3) == '-')) {
       last = last-3; //skip '-->'
     }
   }
- 
+
   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 '<!--'
Index: css/cssparser.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/css/cssparser.h,v
retrieving revision 1.38
diff -u -3 -d -p -r1.38 cssparser.h
--- css/cssparser.h	2001/07/21 10:53:29	1.38
+++ css/cssparser.h	2001/07/26 16:55:11
@@ -102,7 +102,7 @@ public:
 	virtual bool deleteMe();
 
 	// returns the url of the style sheet this object belongs to
-	DOMString baseUrl();
+	DOMString baseURL();
 
 	StyleBaseImpl *parent() { return m_parent; }
 
Index: css/cssstyleselector.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/css/cssstyleselector.cpp,v
retrieving revision 1.165
diff -u -3 -d -p -r1.165 cssstyleselector.cpp
--- css/cssstyleselector.cpp	2001/07/25 01:49:50	1.165
+++ css/cssstyleselector.cpp	2001/07/26 16:55:11
@@ -96,7 +96,7 @@ CSSStyleSelector::CSSStyleSelector(Docum
     //kdDebug( 6080 ) << "number of style sheets in document " << \
                authorStyleSheets.count() << endl;
     //kdDebug( 6080 ) << "CSSStyleSelector: author style has " << \
authorStyle->count() << " elements"<< endl;  
-    KURL u = doc->baseURL().string();
+    KURL u = doc->view()->part()->baseURL();
     u.setQuery( QString::null );
     u.setRef( QString::null );
     encodedurl.file = u.url();
@@ -887,7 +887,7 @@ void khtml::applyRule(khtml::RenderStyle
 	    break;
 	case CSS_VAL_REPEAT_X:
 	    style->setBackgroundRepeat( REPEAT_X );
-	    break;	 
+	    break;
 	case CSS_VAL_REPEAT_Y:
 	    style->setBackgroundRepeat( REPEAT_Y );
 	    break;
@@ -1239,7 +1239,7 @@ void khtml::applyRule(khtml::RenderStyle
         style->setOverflow(o);
         return;
     }
-    break;        
+    break;
     case CSS_PROP_PAGE:
     case CSS_PROP_PAGE_BREAK_AFTER:
     case CSS_PROP_PAGE_BREAK_BEFORE:
@@ -1511,7 +1511,7 @@ void khtml::applyRule(khtml::RenderStyle
             break;
         case CSS_PROP_SCROLLBAR_TRACK_COLOR:
             style->setPaletteColor(QPalette::Active, QColorGroup::Base, col);
-            style->setPaletteColor(QPalette::Inactive, QColorGroup::Base, col);      \
 +            style->setPaletteColor(QPalette::Inactive, QColorGroup::Base, col);
             style->setPaletteColor(QPalette::Active, QColorGroup::Mid, col);
             style->setPaletteColor(QPalette::Inactive, QColorGroup::Mid, col);
             style->setPaletteColor(QPalette::Active, QColorGroup::Background, col);
Index: ecma/kjs_html.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/ecma/kjs_html.cpp,v
retrieving revision 1.104
diff -u -3 -d -p -r1.104 kjs_html.cpp
--- ecma/kjs_html.cpp	2001/07/18 10:37:57	1.104
+++ ecma/kjs_html.cpp	2001/07/26 16:55:12
@@ -1826,8 +1826,7 @@ void Image::tryPut(const UString &p, con
     String str = v.toString();
     src = str.value();
     if ( img ) img->deref(this);
-    img = static_cast<DOM::DocumentImpl*>( doc.handle() \
                )->docLoader()->requestImage( src.string(),
-                                     doc.view()->part()->baseURL().url());
+    img = static_cast<DOM::DocumentImpl*>( doc.handle() \
)->docLoader()->requestImage( src.string() );  if ( img ) img->ref(this);
   } else {
     DOMObject::tryPut(p, v);
Index: html/html_baseimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_baseimpl.cpp,v
retrieving revision 1.124
diff -u -3 -d -p -r1.124 html_baseimpl.cpp
--- html/html_baseimpl.cpp	2001/07/19 19:54:23	1.124
+++ html/html_baseimpl.cpp	2001/07/26 16:55:12
@@ -77,9 +77,10 @@ void HTMLBodyElementImpl::parseAttribute
 
     case ATTR_BACKGROUND:
     {
-        KURL u = khtml::Cache::completeURL(attr->value(), \
                static_cast<HTMLDocumentImpl *>(ownerDocument())->baseURL());
-        bgImage = u.url();
-        addCSSProperty(CSS_PROP_BACKGROUND_IMAGE, "url('"+u.url()+"')" );
+        QString url = khtml::parseURL( attr->value() ).string();
+        if ( ownerDocument() && ownerDocument()->view() )
+            url = ownerDocument()->view()->part()->completeURL( url ).url();
+        addCSSProperty(CSS_PROP_BACKGROUND_IMAGE, "url('"+url+"')" );
         break;
     }
     case ATTR_MARGINWIDTH:
@@ -95,7 +96,6 @@ void HTMLBodyElementImpl::parseAttribute
         addCSSLength(CSS_PROP_MARGIN_TOP, attr->value());
         break;
     case ATTR_BGCOLOR:
-        bgColor = attr->value();
         addCSSProperty(CSS_PROP_BACKGROUND_COLOR, attr->value());
         break;
     case ATTR_TEXT:
Index: html/html_baseimpl.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_baseimpl.h,v
retrieving revision 1.60
diff -u -3 -d -p -r1.60 html_baseimpl.h
--- html/html_baseimpl.h	2001/07/15 23:52:21	1.60
+++ html/html_baseimpl.h	2001/07/26 16:55:13
@@ -64,8 +64,6 @@ public:
     
 protected:
     CSSStyleSheetImpl *m_styleSheet;
-    DOMString bgImage;
-    DOMString bgColor;
 };
 
 // -------------------------------------------------------------------------
Index: html/html_formimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_formimpl.cpp,v
retrieving revision 1.192
diff -u -3 -d -p -r1.192 html_formimpl.cpp
--- html/html_formimpl.cpp	2001/07/22 08:52:28	1.192
+++ html/html_formimpl.cpp	2001/07/26 16:55:13
@@ -1065,9 +1065,7 @@ void HTMLInputElementImpl::attach()
 
     if (m_render && m_type == IMAGE) {
         static_cast<RenderImageButton*>
-            (m_render)->setImageUrl(m_src,
-                                    static_cast<HTMLDocumentImpl \
                *>(ownerDocument())->baseURL(),
-                                    static_cast<HTMLDocumentImpl \
*>(ownerDocument())->docLoader()); +            \
(m_render)->setImageUrl(m_src,static_cast<HTMLDocumentImpl \
*>(ownerDocument())->docLoader());  
     }
 }
@@ -1382,6 +1380,7 @@ HTMLSelectElementImpl::HTMLSelectElement
     view = 0;
     // 0 means invalid (i.e. not set)
     m_size = 0;
+    m_minwidth = 0;
 }
 
 HTMLSelectElementImpl::HTMLSelectElementImpl(DocumentPtr *doc, HTMLFormElementImpl \
*f) @@ -1391,6 +1390,7 @@ HTMLSelectElementImpl::HTMLSelectElement
     view = 0;
     // 0 means invalid (i.e. not set)
     m_size = 0;
+    m_minwidth = 0;
 }
 
 ushort HTMLSelectElementImpl::id() const
@@ -1562,6 +1562,9 @@ void HTMLSelectElementImpl::parseAttribu
     {
     case ATTR_SIZE:
         m_size = QMAX( attr->val()->toInt(), 1 );
+        break;
+    case ATTR_WIDTH:
+        m_minwidth = QMAX( attr->val()->toInt(), 0 );
         break;
     case ATTR_MULTIPLE:
         m_multiple = (attr->val() != 0);
Index: html/html_formimpl.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_formimpl.h,v
retrieving revision 1.86
diff -u -3 -d -p -r1.86 html_formimpl.h
--- html/html_formimpl.h	2001/07/19 23:32:23	1.86
+++ html/html_formimpl.h	2001/07/26 16:55:13
@@ -370,6 +370,8 @@ public:
 
     long length() const;
 
+    long minWidth() const { return m_minwidth; }
+            
     long size() const { return m_size; }
 
     bool multiple() const { return m_multiple; }
@@ -404,6 +406,7 @@ public:
 
 protected:
     QArray<HTMLGenericFormElementImpl*> m_listItems;
+    short m_minwidth;
     short m_size : 15;
     bool m_multiple : 1;
 };
Index: html/html_headimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_headimpl.cpp,v
retrieving revision 1.69
diff -u -3 -d -p -r1.69 html_headimpl.cpp
--- html/html_headimpl.cpp	2001/07/21 17:29:59	1.69
+++ html/html_headimpl.cpp	2001/07/26 16:55:14
@@ -137,7 +137,7 @@ void HTMLLinkElementImpl::attach()
             HTMLDocumentImpl *doc = static_cast<HTMLDocumentImpl \
*>(ownerDocument());  // we must have a doc->docLoader() !
             QString chset = getAttribute( ATTR_CHARSET ).string();
-            m_cachedSheet = doc->docLoader()->requestStyleSheet(m_url, \
doc->baseURL(), chset); +            m_cachedSheet = \
doc->docLoader()->requestStyleSheet(m_url, chset);  if(m_cachedSheet) \
m_cachedSheet->ref(this);  }
     }
Index: html/html_imageimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/html_imageimpl.cpp,v
retrieving revision 1.102
diff -u -3 -d -p -r1.102 html_imageimpl.cpp
--- html/html_imageimpl.cpp	2001/07/18 16:46:29	1.102
+++ html/html_imageimpl.cpp	2001/07/26 16:55:14
@@ -25,6 +25,7 @@
 
 #include "htmlhashes.h"
 #include "khtmlview.h"
+#include "khtml_part.h"
 
 #include <kdebug.h>
 
@@ -148,14 +149,15 @@ void HTMLImageElementImpl::parseAttribut
         break;
     case ATTR_USEMAP:
         if ( attr->value()[0] == '#' )
-        {
             usemap = attr->value();
-        }
-        else
-        {
-            // ### we remove the part before the anchor and hope the map is on the \
                same html page....
-            KURL u( static_cast<HTMLDocumentImpl \
                *>(ownerDocument())->baseURL().string(), attr->value().string() );
-            usemap = khtml::parseURL(u.url());
+        else {
+            QString url = khtml::parseURL( attr->value() ).string();
+            if ( ownerDocument() && ownerDocument()->view() )
+                url = ownerDocument()->view()->part()->completeURL( url ).url();
+
+            // ### we remove the part before the anchor and hope
+            // the map is on the same html page....
+            usemap = url;
         }
     case ATTR_ISMAP:
         ismap = true;
@@ -192,7 +194,7 @@ void HTMLImageElementImpl::attach()
         renderImage->setAlt(alt);
         m_render = renderImage;
         if(m_render) r->addChild(m_render, nextRenderer());
-        renderImage->setImageUrl(imageURL, static_cast<HTMLDocumentImpl \
*>(ownerDocument())->baseURL(), +        renderImage->setImageUrl(imageURL,
                                  static_cast<HTMLDocumentImpl \
*>(ownerDocument())->docLoader());  
     }
@@ -210,7 +212,7 @@ void HTMLImageElementImpl::applyChanges(
     // a script has executed
     if (m_render)
         static_cast<RenderImage *>(m_render)
-            ->setImageUrl(imageURL, static_cast<HTMLDocumentImpl \
*>(ownerDocument())->baseURL(), +            ->setImageUrl(imageURL,
                           static_cast<HTMLDocumentImpl \
*>(ownerDocument())->docLoader());  setChanged(false);
 }
Index: html/htmltokenizer.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/html/htmltokenizer.cpp,v
retrieving revision 1.187
diff -u -3 -d -p -r1.187 htmltokenizer.cpp
--- html/htmltokenizer.cpp	2001/07/25 13:48:55	1.187
+++ html/htmltokenizer.cpp	2001/07/26 16:55:14
@@ -26,7 +26,7 @@
 //----------------------------------------------------------------------------
 //
 // KDE HTML Widget - Tokenizers
-// $Id: htmltokenizer.cpp,v 1.187 2001/07/25 13:48:55 mueller Exp $
+// $Id: htmltokenizer.cpp,v 1.186 2001/07/25 10:25:44 mueller Exp $
 
 //#define TOKEN_DEBUG 1
 //#define TOKEN_DEBUG 2
@@ -299,7 +299,7 @@ void HTMLTokenizer::parseListing( DOMStr
             if (script) {
                 if (!scriptSrc.isEmpty()) {
                     // forget what we just got; load from src url instead
-                    cachedScript = \
parser->doc()->docLoader()->requestScript(scriptSrc, parser->doc()->baseURL(), \
scriptSrcCharset); +                    cachedScript = \
parser->doc()->docLoader()->requestScript(scriptSrc, scriptSrcCharset);  \
scriptSrc="";  }
                 else {
Index: misc/loader.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/misc/loader.cpp,v
retrieving revision 1.85
diff -u -3 -d -p -r1.85 loader.cpp
--- misc/loader.cpp	2001/07/07 07:46:59	1.85
+++ misc/loader.cpp	2001/07/26 16:55:15
@@ -98,13 +98,13 @@ void CachedObject::setRequest(Request *_
 
 // -------------------------------------------------------------------------------------------
  
-CachedCSSStyleSheet::CachedCSSStyleSheet(const DOMString &url, const DOMString \
&baseURL, bool reload, int _expireDate, const QString& charset) \
+CachedCSSStyleSheet::CachedCSSStyleSheet(DocLoader* dl, const DOMString &url, bool \
reload, int _expireDate, const QString& charset)  : CachedObject(url, CSSStyleSheet, \
reload, _expireDate)  {
     // It's css we want.
     setAccept( QString::fromLatin1("text/css") );
     // load the file
-    Cache::loader()->load(this, baseURL, false);
+    Cache::loader()->load(dl, this, false);
     loading = true;
     bool b;
     m_codec = KGlobal::charsets()->codecForName(charset, b);
@@ -164,13 +164,13 @@ void CachedCSSStyleSheet::error( int /*e
 
 // -------------------------------------------------------------------------------------------
  
-CachedScript::CachedScript(const DOMString &url, const DOMString &baseURL, bool \
reload, int _expireDate, const QString& charset) \
+CachedScript::CachedScript(DocLoader* dl, const DOMString &url, bool reload, int \
_expireDate, const QString& charset)  : CachedObject(url, Script, reload, \
_expireDate)  {
     // It's javascript we want.
     setAccept( QString::fromLatin1("application/x-javascript") );
     // load the file
-    Cache::loader()->load(this, baseURL, false);
+    Cache::loader()->load(dl, this, false);
     loading = true;
     bool b;
     m_codec = KGlobal::charsets()->codecForName(charset, b);
@@ -378,7 +378,7 @@ static QString buildAcceptHeader()
 
 // -------------------------------------------------------------------------------------
  
-CachedImage::CachedImage(const DOMString &url, const DOMString &baseURL, bool \
reload, int _expireDate) +CachedImage::CachedImage(DocLoader* dl, const DOMString \
&url, bool reload, int _expireDate)  : QObject(), CachedObject(url, Image, reload, \
_expireDate)  {
     static const QString &acceptHeader = KGlobal::staticQString( buildAcceptHeader() \
); @@ -394,7 +394,6 @@ CachedImage::CachedImage(const DOMString
     m_status = Unknown;
     m_size = 0;
     imgSource = 0;
-    m_baseURL = baseURL;
     setAccept( acceptHeader );
 }
 
@@ -724,12 +723,12 @@ void CachedImage::error( int /*err*/, co
 
 // ------------------------------------------------------------------------------------------
  
-Request::Request(CachedObject *_object, const DOM::DOMString &baseURL, bool \
_incremental) +Request::Request(DocLoader* dl, CachedObject *_object, bool \
_incremental)  {
     object = _object;
     object->setRequest(this);
     incremental = _incremental;
-    m_baseURL = baseURL;
+    m_docLoader = dl;
 }
 
 Request::~Request()
@@ -760,9 +759,9 @@ void DocLoader::setExpireDate(int _expir
     m_expireDate = _expireDate;
 }
 
-CachedImage *DocLoader::requestImage( const DOM::DOMString &url, const \
DOM::DOMString &baseUrl) +CachedImage *DocLoader::requestImage( const DOM::DOMString \
&url)  {
-    KURL fullURL = Cache::completeURL( url, baseUrl );
+    KURL fullURL = m_part->completeURL( url.string() );
     if ( m_part && m_part->onlyLocalReferences() && fullURL.protocol() != "file") \
return 0;  
     if (m_reloading) {
@@ -771,18 +770,19 @@ CachedImage *DocLoader::requestImage( co
             if (existing)
                 Cache::removeCacheEntry(existing);
             m_reloadedURLs.append(fullURL.url());
-            return Cache::requestImage(this, url,baseUrl,true,m_expireDate);
+            return Cache::requestImage(this, url, true, m_expireDate);
         }
     }
 
-    CachedImage* ci = Cache::requestImage(this, url,baseUrl,false, m_expireDate);
+    CachedImage* ci = Cache::requestImage(this, url, false, m_expireDate);
 
     return ci;
 }
 
-CachedCSSStyleSheet *DocLoader::requestStyleSheet( const DOM::DOMString &url, const \
DOM::DOMString &baseUrl, const QString& charset) +CachedCSSStyleSheet \
*DocLoader::requestStyleSheet( const DOM::DOMString &url, const QString& charset)  {
-    KURL fullURL = Cache::completeURL( url, baseUrl );
+    KURL fullURL = url.string();
+
     if ( m_part && m_part->onlyLocalReferences() && fullURL.protocol() != "file") \
return 0;  
     if (m_reloading) {
@@ -791,16 +791,16 @@ CachedCSSStyleSheet *DocLoader::requestS
             if (existing)
                 Cache::removeCacheEntry(existing);
             m_reloadedURLs.append(fullURL.url());
-            return Cache::requestStyleSheet(this, url,baseUrl,true,m_expireDate, \
charset); +            return Cache::requestStyleSheet(this, url, true,m_expireDate, \
charset);  }
     }
 
-    return Cache::requestStyleSheet(this, url,baseUrl,false,m_expireDate, charset);
+    return Cache::requestStyleSheet(this, url, false,m_expireDate, charset);
 }
 
-CachedScript *DocLoader::requestScript( const DOM::DOMString &url, const \
DOM::DOMString &baseUrl, const QString& charset) +CachedScript \
*DocLoader::requestScript( const DOM::DOMString &url, const QString& charset)  {
-    KURL fullURL = Cache::completeURL( url, baseUrl );
+    KURL fullURL = url.string();
     if ( m_part && m_part->onlyLocalReferences() && fullURL.protocol() != "file") \
return 0;  
     if (m_reloading) {
@@ -809,11 +809,11 @@ CachedScript *DocLoader::requestScript( 
             if (existing)
                 Cache::removeCacheEntry(existing);
             m_reloadedURLs.append(fullURL.url());
-            return Cache::requestScript(this, url,baseUrl,true,m_expireDate, \
charset); +            return Cache::requestScript(this, url, true,m_expireDate, \
charset);  }
     }
 
-    return Cache::requestScript(this, url,baseUrl,false,m_expireDate, charset);
+    return Cache::requestScript(this, url, false,m_expireDate, charset);
 }
 
 void DocLoader::setAutoloadImages( bool enable )
@@ -837,7 +837,7 @@ void DocLoader::setAutoloadImages( bool 
                  status == CachedObject::Pending )
                 continue;
 
-            Cache::loader()->load(img, img->baseURL(), true);
+            Cache::loader()->load(this, img, true);
         }
 }
 
@@ -877,11 +877,13 @@ Loader::~Loader()
 {
 }
 
-void Loader::load(CachedObject *object, const DOMString &baseURL, bool incremental)
+void Loader::load(DocLoader* dl, CachedObject *object, bool incremental)
 {
-    Request *req = new Request(object, baseURL, incremental);
+    Request *req = new Request(dl, object, incremental);
     m_requestsPending.append(req);
 
+    emit requestStarted( req->m_docLoader, req->object );
+
     servePendingRequests();
 }
 
@@ -900,14 +902,16 @@ void Loader::servePendingRequests()
   KIO::TransferJob* job = KIO::get( req->object->url().string(), \
req->object->reload(), false /*no GUI*/);  
   if (!req->object->accept().isEmpty())
-     job->addMetaData("accept", req->object->accept());
-  job->addMetaData("referrer", req->m_baseURL.string());
+      job->addMetaData("accept", req->object->accept());
+  if ( req->m_docLoader )
+      job->addMetaData("referrer", req->m_docLoader->part()->url().url());
 
   connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotFinished( KIO::Job * \
) ) );  connect( job, SIGNAL( data( KIO::Job*, const QByteArray &)),
            SLOT( slotData( KIO::Job*, const QByteArray &)));
 
-  KIO::Scheduler::scheduleJob( job );
+  if ( req->object->schedule() )
+      KIO::Scheduler::scheduleJob( job );
 
   m_requestsLoading.insert(job, req);
 }
@@ -923,12 +927,12 @@ void Loader::slotFinished( KIO::Job* job
   if (j->error() || j->isErrorPage())
   {
       r->object->error( job->error(), job->errorText().ascii() );
-      emit requestFailed( r->m_baseURL, r->object );
+      emit requestFailed( r->m_docLoader, r->object );
   }
   else
   {
       r->object->data(r->m_buffer, true);
-      emit requestDone( r->m_baseURL, r->object );
+      emit requestDone( r->m_docLoader, r->object );
   }
 
   r->object->finish();
@@ -958,27 +962,30 @@ void Loader::slotData( KIO::Job*job, con
         r->object->data( r->m_buffer, false );
 }
 
-int Loader::numRequests( const DOMString &baseURL ) const
+int Loader::numRequests( DocLoader* dl ) const
 {
     int res = 0;
 
     QListIterator<Request> pIt( m_requestsPending );
     for (; pIt.current(); ++pIt )
-        if ( pIt.current()->m_baseURL == baseURL )
+        if ( pIt.current()->m_docLoader == dl )
             res++;
 
     QPtrDictIterator<Request> lIt( m_requestsLoading );
     for (; lIt.current(); ++lIt )
-        if ( lIt.current()->m_baseURL == baseURL )
+        if ( lIt.current()->m_docLoader == dl )
             res++;
 
     return res;
 }
 
+#if 0
 int Loader::numRequests( const DOMString &baseURL, CachedObject::Type type ) const
 {
     int res = 0;
 
+#warning FIXME
+#if 0
     QListIterator<Request> pIt( m_requestsPending );
     for (; pIt.current(); ++pIt )
         if ( pIt.current()->m_baseURL == baseURL && pIt.current()->object->type() == \
type ) @@ -989,17 +996,21 @@ int Loader::numRequests( const DOMString
         if ( lIt.current()->m_baseURL == baseURL && pIt.current()->object->type() == \
type )  res++;
 
+#endif
     return res;
 }
+#endif
 
-void Loader::cancelRequests( const DOMString &baseURL )
+void Loader::cancelRequests( DocLoader* dl )
 {
+    qDebug( "Loader::cancelRequests!" );
+
     //kdDebug( 6060 ) << "void Loader::cancelRequests( " << baseURL.string() << " )" \
                << endl;
     //kdDebug( 6060 ) << "got " << m_requestsPending.count() << " pending requests" \
<< endl;  QListIterator<Request> pIt( m_requestsPending );
     while ( pIt.current() )
     {
-        if ( pIt.current()->m_baseURL == baseURL )
+        if ( pIt.current()->m_docLoader == dl )
         {
             //kdDebug( 6060 ) << "cancelling pending request for " << \
pIt.current()->object->url().string() << endl;  Cache::removeCacheEntry( \
pIt.current()->object ); @@ -1014,7 +1025,7 @@ void Loader::cancelRequests( const \
DOMSt  QPtrDictIterator<Request> lIt( m_requestsLoading );
     while ( lIt.current() )
     {
-        if ( lIt.current()->m_baseURL == baseURL )
+        if ( lIt.current()->m_docLoader == dl )
         {
             //kdDebug( 6060 ) << "cancelling loading request for " << \
lIt.current()->object->url().string() << endl;  KIO::Job *job = static_cast<KIO::Job \
*>( lIt.currentKey() ); @@ -1093,10 +1104,15 @@ void Cache::clear()
     delete docloader; docloader = 0;
 }
 
-CachedImage *Cache::requestImage( const DocLoader* dl, const DOMString & url, const \
DOMString &baseUrl, bool reload, int _expireDate ) +CachedImage *Cache::requestImage( \
DocLoader* dl, const DOMString & url, bool reload, int _expireDate )  {
     // this brings the _url to a standard form...
-    KURL kurl = completeURL( url, baseUrl );
+    KURL kurl;
+    if ( dl )
+        kurl = dl->m_part->completeURL( url.string() );
+    else
+        kurl = url.string();
+
     if( kurl.isMalformed() )
     {
 #ifdef CACHE_DEBUG
@@ -1113,8 +1129,8 @@ CachedImage *Cache::requestImage( const 
 #ifdef CACHE_DEBUG
         kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
 #endif
-        CachedImage *im = new CachedImage(kurl.url(), baseUrl, reload, _expireDate);
-        if ( dl && dl->autoloadImages() ) Cache::loader()->load(im, im->baseURL(), \
true); +        CachedImage *im = new CachedImage(dl, kurl.url(), reload, \
_expireDate); +        if ( dl && dl->autoloadImages() ) Cache::loader()->load(dl, \
im, true);  cache->insert( kurl.url(), im );
         lru->append( kurl.url() );
         flush();
@@ -1146,10 +1162,15 @@ CachedImage *Cache::requestImage( const 
     return static_cast<CachedImage *>(o);
 }
 
-CachedCSSStyleSheet *Cache::requestStyleSheet( const DocLoader* dl, const DOMString \
& url, const DOMString &baseUrl, bool reload, int _expireDate, const QString& \
charset) +CachedCSSStyleSheet *Cache::requestStyleSheet( DocLoader* dl, const \
DOMString & url, bool reload, int _expireDate, const QString& charset)  {
     // this brings the _url to a standard form...
-    KURL kurl = completeURL( url, baseUrl );
+    KURL kurl;
+    if ( dl )
+        kurl = dl->m_part->completeURL( url.string() );
+    else
+        kurl = url.string();
+
     if( kurl.isMalformed() )
     {
       kdDebug( 6060 ) << "Cache: Malformed url: " << kurl.url() << endl;
@@ -1162,7 +1183,7 @@ CachedCSSStyleSheet *Cache::requestStyle
 #ifdef CACHE_DEBUG
         kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
 #endif
-        CachedCSSStyleSheet *sheet = new CachedCSSStyleSheet(kurl.url(), baseUrl, \
reload, _expireDate, charset); +        CachedCSSStyleSheet *sheet = new \
CachedCSSStyleSheet(dl, kurl.url(), reload, _expireDate, charset);  cache->insert( \
kurl.url(), sheet );  lru->append( kurl.url() );
         flush();
@@ -1194,10 +1215,15 @@ CachedCSSStyleSheet *Cache::requestStyle
     return static_cast<CachedCSSStyleSheet *>(o);
 }
 
-CachedScript *Cache::requestScript( const DocLoader* dl, const DOM::DOMString &url, \
const DOM::DOMString &baseUrl, bool reload, int _expireDate, const QString& charset) \
+CachedScript *Cache::requestScript( DocLoader* dl, const DOM::DOMString &url, bool \
reload, int _expireDate, const QString& charset)  {
     // this brings the _url to a standard form...
-    KURL kurl = completeURL( url, baseUrl );
+    KURL kurl;
+    if ( dl )
+        kurl = dl->part()->completeURL( url.string() );
+    else
+        kurl = url.string();
+
     if( kurl.isMalformed() )
     {
       kdDebug( 6060 ) << "Cache: Malformed url: " << kurl.url() << endl;
@@ -1210,7 +1236,7 @@ CachedScript *Cache::requestScript( cons
 #ifdef CACHE_DEBUG
         kdDebug( 6060 ) << "Cache: new: " << kurl.url() << endl;
 #endif
-        CachedScript *script = new CachedScript(kurl.url(), baseUrl, reload, \
_expireDate, charset); +        CachedScript *script = new CachedScript(dl, \
kurl.url(), reload, _expireDate, charset);  cache->insert( kurl.url(), script );
         lru->append( kurl.url() );
         flush();
@@ -1335,15 +1361,6 @@ void Cache::statistics()
     kdDebug( 6060 ) << "pixmaps:   allocated space approx. " << size << " kB" << \
                endl;
     kdDebug( 6060 ) << "movies :   allocated space approx. " << msize/1024 << " kB" \
                << endl;
     kdDebug( 6060 ) << \
                "--------------------------------------------------------------------" \
                << endl;
-}
-
-KURL Cache::completeURL( const DOMString &_url, const DOMString &_baseUrl )
-{
-    QString url = _url.string();
-    QString baseUrl = _baseUrl.string();
-    KURL orig(baseUrl);
-    KURL u( orig, url );
-    return u;
 }
 
 void Cache::removeCacheEntry( CachedObject *object )
Index: misc/loader.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/misc/loader.h,v
retrieving revision 1.32
diff -u -3 -d -p -r1.32 loader.h
--- misc/loader.h	2001/05/11 23:07:18	1.32
+++ misc/loader.h	2001/07/26 16:55:15
@@ -66,6 +66,7 @@ namespace khtml
 {
     class CachedObject;
     class Request;
+    class DocLoader;
 
     /**
      * @internal
@@ -149,6 +150,8 @@ namespace khtml
 
 	void setExpireDate(int _expireDate);
 
+        virtual bool schedule() const { return false; }
+
         /*
          * List of acceptable mimetypes seperated by ",". A mimetype may contain a \
                wildcard.
          */
@@ -178,7 +181,7 @@ namespace khtml
     class CachedCSSStyleSheet : public CachedObject
     {
     public:
-	CachedCSSStyleSheet(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool \
reload, int _expireDate, const QString& charset); +	CachedCSSStyleSheet(DocLoader* \
dl, const DOM::DOMString &url, bool reload, int _expireDate, const QString& charset); \
virtual ~CachedCSSStyleSheet();  
 	const DOM::DOMString &sheet() const { return m_sheet; }
@@ -189,6 +192,8 @@ namespace khtml
 	virtual void data( QBuffer &buffer, bool eof );
 	virtual void error( int err, const char *text );
 
+        virtual bool schedule() const { return true; }
+
 	void checkNotify();
 
     protected:
@@ -203,7 +208,7 @@ namespace khtml
     class CachedScript : public CachedObject
     {
     public:
-	CachedScript(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, \
int _expireDate, const QString& charset); +	CachedScript(DocLoader* dl, const \
DOM::DOMString &url, bool reload, int _expireDate, const QString& charset);  virtual \
~CachedScript();  
 	const DOM::DOMString &script() const { return m_script; }
@@ -214,6 +219,8 @@ namespace khtml
 	virtual void data( QBuffer &buffer, bool eof );
 	virtual void error( int err, const char *text );
 
+        virtual bool schedule() const { return false; }
+
 	void checkNotify();
 
     protected:
@@ -231,7 +238,7 @@ namespace khtml
     {
 	Q_OBJECT
     public:
-	CachedImage(const DOM::DOMString &url, const DOM::DOMString &baseURL, bool reload, \
int _expireDate); +	CachedImage(DocLoader* dl, const DOM::DOMString &url, bool \
reload, int _expireDate);  virtual ~CachedImage();
 
 	const QPixmap &pixmap() const;
@@ -246,12 +253,12 @@ namespace khtml
 	virtual void data( QBuffer &buffer, bool eof );
 	virtual void error( int err, const char *text );
 
-        const DOM::DOMString& baseURL() const { return m_baseURL; }
-
         bool isTransparent() const { return isFullyTransparent; }
         bool isErrorImage() const { return errorOccured; }
 
         void setShowAnimations( bool );
+        
+        virtual bool schedule() const { return true; }
 
     protected:
 	void clear();
@@ -267,7 +274,6 @@ namespace khtml
     private:
         void do_notify(const QPixmap& p, const QRect& r);
 
-        DOM::DOMString m_baseURL;
         QColor bgColor;
 	QMovie* m;
         QPixmap* p;
@@ -293,26 +299,27 @@ namespace khtml
      *
      * Manages the loading of scripts/images/stylesheets for a particular document
      */
-    class DocLoader
+    class DocLoader 
     {
     public:
  	DocLoader(KHTMLPart*);
  	~DocLoader();
 
-	CachedImage *requestImage( const DOM::DOMString &url, const DOM::DOMString \
                &baseUrl);
-	CachedCSSStyleSheet *requestStyleSheet( const DOM::DOMString &url, const \
                DOM::DOMString &baseUrl, const QString& charset);
-        CachedScript *requestScript( const DOM::DOMString &url, const DOM::DOMString \
&baseUrl, const QString& charset); +	CachedImage *requestImage( const DOM::DOMString \
&url); +	CachedCSSStyleSheet *requestStyleSheet( const DOM::DOMString &url, const \
QString& charset); +        CachedScript *requestScript( const DOM::DOMString &url, \
const QString& charset);  
 	bool autoloadImages() const { return m_bautoloadImages; }
         bool reloading() const { return m_reloading; }
         int expireDate() const { return m_expireDate; }
+        KHTMLPart* part() const { return m_part; }
 
         void setExpireDate( int );
         void setAutoloadImages( bool );
         void setReloading( bool );
         void setShowAnimations( bool );
         void removeCachedObject( CachedObject*) const;
-
+        
     private:
         friend class Cache;
         friend class DOM::DocumentImpl;
@@ -332,12 +339,12 @@ namespace khtml
     class Request
     {
     public:
-	Request(CachedObject *_object, const DOM::DOMString &baseURL, bool _incremental);
+	Request(DocLoader* dl, CachedObject *_object, bool _incremental);
 	~Request();
 	bool incremental;
 	QBuffer m_buffer;
 	CachedObject *object;
-	DOM::DOMString m_baseURL;
+        DocLoader* m_docLoader;
     };
 
     /**
@@ -351,19 +358,18 @@ namespace khtml
 	Loader();
 	~Loader();
         
-	void load(CachedObject *object, const DOM::DOMString &baseURL, bool incremental = \
                true);
-
-        int numRequests( const DOM::DOMString &baseURL ) const;
-        int numRequests( const DOM::DOMString &baseURL, CachedObject::Type type ) \
const; +	void load(DocLoader* dl, CachedObject *object, bool incremental = true);
 
-        void cancelRequests( const DOM::DOMString &baseURL );
+        int numRequests( DocLoader* dl ) const;
+        void cancelRequests( DocLoader* dl );
 
         // may return 0L
         KIO::Job *jobForRequest( const DOM::DOMString &url ) const;
 
     signals:
-	void requestDone( const DOM::DOMString &baseURL, khtml::CachedObject *obj );
-	void requestFailed( const DOM::DOMString &baseURL, khtml::CachedObject *obj );
+        void requestStarted( khtml::DocLoader* dl, khtml::CachedObject* obj );
+	void requestDone( khtml::DocLoader* dl, khtml::CachedObject *obj );
+	void requestFailed( khtml::DocLoader* dl, khtml::CachedObject *obj );
 
     protected slots:
 	void slotFinished( KIO::Job * );
@@ -398,20 +404,22 @@ namespace khtml
 	/**
 	 * Ask the cache for some url. Will return a cachedObject, and
 	 * load the requested data in case it's not cahced
+         * if the DocLoader is zero, the url must be full-qualified.
+         * Otherwise, it is automatically base-url expanded
 	 */
-	static CachedImage *requestImage( const DocLoader* l, const DOM::DOMString &url, \
const DOM::DOMString &baseUrl, bool reload=false, int _expireDate=0); +	static \
CachedImage *requestImage( DocLoader* l, const DOM::DOMString &url, bool \
reload=false, int _expireDate=0);  
 	/**
 	 * Ask the cache for some url. Will return a cachedObject, and
 	 * load the requested data in case it's not cahced
 	 */
-	static CachedCSSStyleSheet *requestStyleSheet( const DocLoader* l, const \
DOM::DOMString &url, const DOM::DOMString &baseUrl, bool reload=false, int \
_expireDate=0, const QString& charset = QString::null); +	static CachedCSSStyleSheet \
*requestStyleSheet( DocLoader* l, const DOM::DOMString &url, bool reload=false, int \
_expireDate=0, const QString& charset = QString::null);  
 	/**
 	 * Ask the cache for some url. Will return a cachedObject, and
 	 * load the requested data in case it's not cahced
 	 */
-	static CachedScript *requestScript( const DocLoader* l, const DOM::DOMString &url, \
const DOM::DOMString &baseUrl, bool reload=false, int _expireDate=0, const QString& \
charset=QString::null); +	static CachedScript *requestScript( DocLoader* l, const \
DOM::DOMString &url, bool reload=false, int _expireDate=0, const QString& \
charset=QString::null);  
 	/**
 	 * sets the size of the cache. This will only hod approximately, since the size \
some @@ -435,8 +443,6 @@ namespace khtml
 	static void clear();
 
 	static Loader *loader() { return m_loader; }
-
-	static KURL completeURL(const DOM::DOMString &url, const DOM::DOMString &baseUrl);
 
     	static QPixmap *nullPixmap;
         static QPixmap *brokenPixmap;
Index: rendering/render_form.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/rendering/render_form.cpp,v
retrieving revision 1.126
diff -u -3 -d -p -r1.126 render_form.cpp
--- rendering/render_form.cpp	2001/07/19 23:32:22	1.126
+++ rendering/render_form.cpp	2001/07/26 16:55:16
@@ -913,7 +913,7 @@ void RenderSelect::layout( )
         KListBox* w = static_cast<KListBox*>(m_widget);
 
         QListBoxItem* p = w->firstItem();
-        int width = 0;
+        int width = f->minWidth();
         int height = 0;
         while(p) {
             width = QMAX(width, p->width(p->listBox()));
Index: rendering/render_image.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/rendering/render_image.cpp,v
retrieving revision 1.69
diff -u -3 -d -p -r1.69 render_image.cpp
--- rendering/render_image.cpp	2001/07/16 11:22:55	1.69
+++ rendering/render_image.cpp	2001/07/26 16:55:16
@@ -281,9 +281,9 @@ void RenderImage::layout()
         setLayouted();
 }
 
-void RenderImage::setImageUrl(DOMString url, DOMString baseUrl, DocLoader \
*docLoader) +void RenderImage::setImageUrl(DOMString url, DocLoader *docLoader)
 {
-    CachedImage *new_image = docLoader->requestImage(url, baseUrl);
+    CachedImage *new_image = docLoader->requestImage(url);
     if(new_image && new_image != image) {
         if(image) image->deref(this);
         image = new_image;
Index: rendering/render_image.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/rendering/render_image.h,v
retrieving revision 1.25
diff -u -3 -d -p -r1.25 render_image.h
--- rendering/render_image.h	2001/07/07 07:46:59	1.25
+++ rendering/render_image.h	2001/07/26 16:55:16
@@ -58,7 +58,7 @@ public:
 
     QPixmap pixmap() const { return pix; }
 
-    void setImageUrl(DOM::DOMString url, DOM::DOMString baseUrl, DocLoader \
*docLoader); +    void setImageUrl(DOM::DOMString url, DocLoader *docLoader);
     void setAlt(DOM::DOMString text);
 
     virtual short intrinsicWidth() const;
Index: xml/dom_docimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/xml/dom_docimpl.cpp,v
retrieving revision 1.101
diff -u -3 -d -p -r1.101 dom_docimpl.cpp
--- xml/dom_docimpl.cpp	2001/07/22 09:00:12	1.101
+++ xml/dom_docimpl.cpp	2001/07/26 16:55:17
@@ -816,12 +816,6 @@ ElementImpl *DocumentImpl::getElementByI
     return 0;
 }
 
-DOMString DocumentImpl::baseURL() const
-{
-    if(view() && !view()->part()->baseURL().isEmpty()) return \
                view()->part()->baseURL().url();
-    return url;
-}
-
 void DocumentImpl::setStyleSheet(const DOM::DOMString &url, const DOM::DOMString \
&sheet)  {
     kdDebug( 6030 ) << "HTMLDocument::setStyleSheet()" << endl;
@@ -836,7 +830,11 @@ void DocumentImpl::setStyleSheet(const D
 CSSStyleSheetImpl* DocumentImpl::elementSheet()
 {
     if (!m_elemSheet) {
-        m_elemSheet = new CSSStyleSheetImpl(this, baseURL());
+        if ( view() && !view()->part()->baseURL().isEmpty() )
+            m_elemSheet = new CSSStyleSheetImpl(this, \
view()->part()->baseURL().url()); +        else
+            m_elemSheet = new CSSStyleSheetImpl(this, url );
+
         m_elemSheet->ref();
     }
     return m_elemSheet;
Index: xml/dom_docimpl.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/xml/dom_docimpl.h,v
retrieving revision 1.57
diff -u -3 -d -p -r1.57 dom_docimpl.h
--- xml/dom_docimpl.h	2001/07/15 19:37:59	1.57
+++ xml/dom_docimpl.h	2001/07/26 16:55:17
@@ -178,8 +178,6 @@ public:
     DOMString URL() const { return url; }
     void setURL(DOMString _url) { url = _url; }
 
-    DOMString baseURL() const;
-
     // from cachedObjectClient
     virtual void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString \
&sheetStr);  
Index: xml/dom_xmlimpl.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/xml/dom_xmlimpl.cpp,v
retrieving revision 1.10
diff -u -3 -d -p -r1.10 dom_xmlimpl.cpp
--- xml/dom_xmlimpl.cpp	2001/06/15 10:19:17	1.10
+++ xml/dom_xmlimpl.cpp	2001/07/26 16:55:17
@@ -347,7 +347,7 @@ void ProcessingInstructionImpl::checkSty
 	    // ### FIXME charset
 	    if (m_cachedSheet)
 		m_cachedSheet->deref(this);
-	    m_cachedSheet = ownerDocument()->docLoader()->requestStyleSheet(href, \
ownerDocument()->baseURL(), QString::null); +	    m_cachedSheet = \
ownerDocument()->docLoader()->requestStyleSheet(href, QString::null);  \
m_cachedSheet->ref( this );  //        }
 
Index: xml/xml_tokenizer.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/xml/xml_tokenizer.cpp,v
retrieving revision 1.19
diff -u -3 -d -p -r1.19 xml_tokenizer.cpp
--- xml/xml_tokenizer.cpp	2001/06/15 10:19:17	1.19
+++ xml/xml_tokenizer.cpp	2001/07/26 16:55:17
@@ -397,7 +397,7 @@ void XMLTokenizer::executeScripts()
         DOMString scriptSrc = m_scriptsIt->current()->getAttribute("src");
         QString charset = m_scriptsIt->current()->getAttribute( "charset" \
).string();  if (scriptSrc != "") {
-            m_cachedScript = \
m_doc->document()->docLoader()->requestScript(scriptSrc, \
m_doc->document()->baseURL(), charset); +            m_cachedScript = \
m_doc->document()->docLoader()->requestScript(scriptSrc, charset);  ++(*m_scriptsIt);
             m_cachedScript->ref(this); // will call executeScripts() again if \
already cached  return;



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic