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

List:       kfm-devel
Subject:    [PATCH] PNG images not shown correctly
From:       Waldo Bastian <bastian () kde ! org>
Date:       2002-04-06 4:26:43
[Download RAW message or body]

Qt seems to identify PNG images as MNG sometimes and does not show them 
correctly as a result.

The following patch lets khtml use the mimetype emitted by the slave to 
determine when an image is png and will not treat it as a movie in that case.

The problem can be seen on http://www.kde.org with the 
http://www.kde.org/img/patent_button.png image.

Please comment.

Cheers,
Waldo
-- 
bastian@kde.org  |   SuSE Labs KDE Developer  |  bastian@suse.com

["khtml_img.diff" (text/x-diff)]

? cvs.diff
? loader.loT
Index: loader.cpp
===================================================================
RCS file: /home/kde/kdelibs/khtml/misc/loader.cpp,v
retrieving revision 1.111
diff -u -p -r1.111 loader.cpp
--- loader.cpp	2002/04/03 00:41:05	1.111
+++ loader.cpp	2002/04/06 04:22:11
@@ -810,6 +810,16 @@ void CachedImage::data ( QBuffer &_buffe
     }
 }
 
+void CachedImage::mimetype(const QString &mime)
+{
+   if (mime.lower().endsWith("png"))
+   {
+      kdDebug( 6060 ) << "Image is PNG!" << endl;
+      typeChecked = true;
+      formatType = false;
+   }
+}
+
 void CachedImage::error( int /*err*/, const char */*text*/ )
 {
 #ifdef CACHE_DEBUG
@@ -1020,6 +1030,8 @@ void Loader::servePendingRequests()
   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 &)));
+  connect( job, SIGNAL( mimetype( KIO::Job*, const QString &)),
+           SLOT( slotMimetype( KIO::Job*, const QString &)));
 
   if ( req->object->schedule() )
       KIO::Scheduler::scheduleJob( job );
@@ -1075,6 +1087,16 @@ void Loader::slotData( KIO::Job*job, con
 
     if(r->incremental)
         r->object->data( r->m_buffer, false );
+}
+
+void Loader::slotMimetype( KIO::Job*job, const QString &mime )
+{
+    Request *r = m_requestsLoading[job];
+    if(!r) {
+        kdDebug( 6060 ) << "got mimetype for unknown request!" << endl;
+        return;
+    }
+    r->object->mimetype(mime);   
 }
 
 int Loader::numRequests( DocLoader* dl ) const
Index: loader.h
===================================================================
RCS file: /home/kde/kdelibs/khtml/misc/loader.h,v
retrieving revision 1.43
diff -u -p -r1.43 loader.h
--- loader.h	2002/04/03 00:41:05	1.43
+++ loader.h	2002/04/06 04:22:11
@@ -119,6 +119,7 @@ namespace khtml
 
 	virtual void data( QBuffer &buffer, bool eof) = 0;
 	virtual void error( int err, const char *text ) = 0;
+	virtual void mimetype(const QString &) { };
 
 	const DOM::DOMString &url() const { return m_url; }
 	Type type() const { return m_type; }
@@ -263,6 +264,7 @@ namespace khtml
 
 	virtual void data( QBuffer &buffer, bool eof );
 	virtual void error( int err, const char *text );
+	virtual void mimetype(const QString &mime);
 
         bool isTransparent() const { return isFullyTransparent; }
         bool isErrorImage() const { return errorOccured; }
@@ -393,6 +395,7 @@ namespace khtml
     protected slots:
 	void slotFinished( KIO::Job * );
 	void slotData( KIO::Job *, const QByteArray & );
+	void slotMimetype( KIO::Job *, const QString & );
 
     private:
 	void servePendingRequests();


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

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