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

List:       kde-commits
Subject:    kdepim/kmail
From:       Till Adam <adam () kde ! org>
Date:       2004-02-01 11:16:04
Message-ID: 20040201111604.239C59961 () office ! kde ! org
[Download RAW message or body]

CVS commit by tilladam: 

Fix memory usage problems with "view source" by:

o not leaking the text highlighter
o checking the mail size and going to Qt::LogText mode for mails > 500kb
  because the rich text mode is very inefficient and uses about 15 bytes
  per character. This loses the boldification of headers before the : for
  large mails, but I guess that's preferrable to using massive amounts of
  memory.

Thanks to tronical for Qt consulting. :)

CCMAIL: 73692-done@bugs.kde.org


  M +26 -19    mailsourceviewer.cpp   1.6
  M +15 -0     mailsourceviewer.h   1.5


--- kdepim/kmail/mailsourceviewer.cpp  #1.5:1.6
@@ -41,15 +41,8 @@
 #include <qregexp.h>
 #include <qaccel.h>
-#include <qsyntaxhighlighter.h>
 
 namespace KMail {
 
-class MailSourceHighlighter : public QSyntaxHighlighter
-{
-public:
-  MailSourceHighlighter( QTextEdit* edit )
-    : QSyntaxHighlighter( edit )
-  {}
-  int highlightParagraph( const QString& text, int ) {
+int MailSourceHighlighter::highlightParagraph( const QString& text, int ) {
     QRegExp regexp( "^([\\w-]+:\\s)" );
     if( regexp.search( text ) != -1 ) {
@@ -59,18 +52,32 @@ public:
     }
     return 0;
-  }
-};
+}
 
 MailSourceViewer::MailSourceViewer( QWidget *parent, const char *name )
-  : KTextBrowser( parent, name )
+  : KTextBrowser( parent, name ), mSourceHighLighter( 0 )
 {
   setWFlags( WDestructiveClose );
   QAccel *accel = new QAccel( this, "browser close-accel" );
   accel->connectItem( accel->insertItem( Qt::Key_Escape ), this , SLOT( close() ));
-  setTextFormat( Qt::PlainText );
   setWordWrap( KTextBrowser::NoWrap );
-  new MailSourceHighlighter( this );
   KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon());
 }
 
+MailSourceViewer::~MailSourceViewer()
+{
+   if ( mSourceHighLighter != 0 )
+      delete mSourceHighLighter;
+}
+
+void MailSourceViewer::setText( const QString& text )
+{
+   if ( text.length() > 500000 ) {
+     setTextFormat( Qt::LogText );
+   } else {
+     setTextFormat( Qt::PlainText );
+     mSourceHighLighter = new MailSourceHighlighter( this );
+   }
+   KTextBrowser::setText( text );
+}
+
 }

--- kdepim/kmail/mailsourceviewer.h  #1.4:1.5
@@ -34,4 +34,5 @@
 
 #include <ktextbrowser.h>
+#include <qsyntaxhighlighter.h>
 
 
@@ -46,8 +47,22 @@
 namespace KMail {
 
+class MailSourceHighlighter : public QSyntaxHighlighter
+{
+public:
+  MailSourceHighlighter( QTextEdit* edit )
+    : QSyntaxHighlighter( edit )
+  {}
+  int highlightParagraph( const QString& text, int ); 
+};
+
+
 class MailSourceViewer : public KTextBrowser
 {
 public:
   MailSourceViewer( QWidget *parent = 0, const char *name = 0 );
+  ~MailSourceViewer();
+  void setText( const QString& text );
+private:
+  MailSourceHighlighter *mSourceHighLighter;
 };
 


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

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