SVN commit 638141 by toma: A disconnect was commented out and one was wrong, resulting in to multiple redraws of the message, when switching 10 times between two messages, you would actually start to notice the delay. Fixed that. Also fixed the ugly, ugly, ugly draw error on the first few messages!!! M +4 -8 messagedata.cpp M +81 -76 messageview.cpp --- trunk/playground/pim/mailody/src/messagedata.cpp #638140:638141 @@ -89,8 +89,6 @@ void MessageData::initialise_rest() { - //kdDebug() << k_funcinfo << endl; - m_initialized_all = true; if (m_headers.isEmpty()) @@ -163,16 +161,14 @@ void MessageData::slotBodyReady(const QString& mb, int uid, const QString& body) { + disconnect(m_datamanager, + SIGNAL(message(const QString&, int, const QString&)), + this, SLOT(slotBodyReady(const QString&, int, const QString&))); + if (m_mb != mb || uid != m_uid) return; m_attachments.clear(); - - /* - Imap* t = Imap::instance(); - disconnect(t, SIGNAL(bodyAvailable(const QString&, int)), - this, SLOT(slotBodyReady(const QString&, int))); -*/ m_datamanager->addFlag(m_mb, m_uid, "\\Seen"); Message* m = new Message(); --- trunk/playground/pim/mailody/src/messageview.cpp #638140:638141 @@ -155,6 +155,7 @@ : QScrollView( parent ), m_currentMessage(0) { + hide(); QHBox* big_box = new QHBox(viewport()); addChild(big_box); @@ -163,7 +164,6 @@ setHScrollBarMode(QScrollView::AlwaysOff); m_label = new AddressLabel(big_box); m_foto = new KActiveLabel(big_box); - clearView(); connect(m_label, SIGNAL(leftClicked(const QString&)), SLOT(slotLeftMouseClick(const QString&))); @@ -184,15 +184,8 @@ m_currentMessage = msg; setContentsPos(0,0); - if (msg) - { + if (msg && isHidden()) show(); // can be hidden by favorite website / middle click. - m_label->setDefaultWidth(viewport()->width()); - m_label->setText("" - "
 
"); - - } - } } @@ -391,6 +384,7 @@ m_label->setDefaultWidth(viewport()->width()-60); // find out the height + m_label->adjustSize(); // this call is crucial to get the correct height int h = m_label->height()+1; if (h > 100) h = 100; @@ -560,12 +554,23 @@ { if (msg != m_currentMessage) { + // disconnect to prevent multiple connections! + if (m_currentMessage) + { + disconnect(m_currentMessage, SIGNAL(messageData(const MessageData*)), + this, SLOT(slotShowMsg(const MessageData*))); + disconnect(m_currentMessage, SIGNAL(addContent(const MessageData*, + const QString&, const QString&)), + this, SLOT(slotAddContent(const MessageData*, const QString&, + const QString&))); + } + m_currentMessage = msg; + connect(m_currentMessage, SIGNAL(messageData(const MessageData*)), this, SLOT(slotShowMsg(const MessageData*))); - connect(m_currentMessage, - SIGNAL(addContent(const MessageData*, const QString&, - const QString&)), + connect(m_currentMessage, SIGNAL(addContent(const MessageData*, + const QString&, const QString&)), this, SLOT(slotAddContent(const MessageData*, const QString&, const QString&))); @@ -681,79 +686,79 @@ void MessageView::slotPopupMenu(const QString& url, const QPoint& point) { - QPopupMenu* p = new QPopupMenu(0); + QPopupMenu* p = new QPopupMenu(0); - int add = -2; - int copy = -2; - int newmsg = -2; - int newurl = -2; - int newtab = -2; + int add = -2; + int copy = -2; + int newmsg = -2; + int newurl = -2; + int newtab = -2; - if (url.startsWith("mailto:")) - { - newmsg = p->insertItem(KGlobal::iconLoader()->loadIcon( - "email",KIcon::Small), - i18n("New Message to") + "..."); - add = p->insertItem(KGlobal::iconLoader()->loadIcon( - "kaddressbook",KIcon::Small), - i18n("Add to KDE Addressbook") + "..."); - } - else if (!url.isNull()) - { - newurl = p->insertItem(i18n("Open")); - newtab = p->insertItem(i18n("Open in New Tab")); - } + if (url.startsWith("mailto:")) + { + newmsg = p->insertItem(KGlobal::iconLoader()->loadIcon( + "email",KIcon::Small), + i18n("New Message to") + "..."); + add = p->insertItem(KGlobal::iconLoader()->loadIcon( + "kaddressbook",KIcon::Small), + i18n("Add to KDE Addressbook") + "..."); + } + else if (!url.isNull()) + { + newurl = p->insertItem(i18n("Open")); + newtab = p->insertItem(i18n("Open in New Tab")); + } + p->insertSeparator(); + + if ( hasSelection() || !url.isNull() ) + { + copy = p->insertItem(KGlobal::iconLoader()->loadIcon( + "editcopy",KIcon::Small), i18n("Copy")); p->insertSeparator(); + } + int zoomin = p->insertItem(KGlobal::iconLoader()->loadIcon( + "viewmag+",KIcon::Small),i18n("Zoom in")); + int zoomout = p->insertItem(KGlobal::iconLoader()->loadIcon( + "viewmag-",KIcon::Small),i18n("Zoom out")); + int choice = p->exec(point); - if ( hasSelection() || !url.isNull() ) - { - copy = p->insertItem(KGlobal::iconLoader()->loadIcon( - "editcopy",KIcon::Small), i18n("Copy")); - p->insertSeparator(); - } - int zoomin = p->insertItem(KGlobal::iconLoader()->loadIcon( - "viewmag+",KIcon::Small),i18n("Zoom in")); - int zoomout = p->insertItem(KGlobal::iconLoader()->loadIcon( - "viewmag-",KIcon::Small),i18n("Zoom out")); - int choice = p->exec(point); + if (choice == copy) + { + QClipboard *cb = QApplication::clipboard(); - if (choice == copy) + if (hasSelection()) { - QClipboard *cb = QApplication::clipboard(); - - if (hasSelection()) - { - cb->setText(selectedText(), QClipboard::Clipboard); - } - else if (url.startsWith("mailto:")) - cb->setText(url.mid(7), QClipboard::Clipboard); - else - cb->setText(url, QClipboard::Clipboard); + cb->setText(selectedText(), QClipboard::Clipboard); } - else if (choice == newmsg) - { - QString box; - if (m_currentMessage) - box = m_currentMessage->mb(); - else - box = "INBOX"; - emit openComposer(url.mid(7), box); - } - else if (choice == newurl) - kapp->invokeBrowser(url); - else if (choice == add) - { - Addressbook::instance()->add(url.mid(7)); - } - else if (choice == newtab) - emit openInTab(url); - else if (choice == zoomin) - setZoomFactor(zoomFactor()+10); - else if (choice == zoomout) - setZoomFactor(zoomFactor()-10); + else if (url.startsWith("mailto:")) + cb->setText(url.mid(7), QClipboard::Clipboard); + else + cb->setText(url, QClipboard::Clipboard); + } + else if (choice == newmsg) + { + QString box; + if (m_currentMessage) + box = m_currentMessage->mb(); + else + box = "INBOX"; + emit openComposer(url.mid(7), box); + } + else if (choice == newurl) + kapp->invokeBrowser(url); + else if (choice == add) + { + Addressbook::instance()->add(url.mid(7)); + } + else if (choice == newtab) + emit openInTab(url); + else if (choice == zoomin) + setZoomFactor(zoomFactor()+10); + else if (choice == zoomout) + setZoomFactor(zoomFactor()-10); - delete p; + delete p; } void MessageView::clearView()