And the moral of the story is that if train A goes at 60mph from new york

then if it goes right through my kitchen then it totally messes up my hairdo.
When i wrote folderiface i wanted to make sure there's no gui code in it. now
i added it myself which implies i'd have to flame myself and give myself
an f in "software design 101" if not the fact that i fix it in this commit -
switching to using dcop signals.

svn path=/trunk/kdepim/; revision=295370
wilder-work
Zack Rusin 22 years ago
parent 0eab7ed540
commit 8bb8df4011
  1. 42
      folderIface.cpp
  2. 3
      folderIface.h
  3. 1
      kmailIface.h
  4. 52
      kmkernel.cpp
  5. 4
      kmkernel.h

@ -43,9 +43,6 @@
#include <kapplication.h>
#include <kdebug.h>
#include <qwidgetlist.h>
#include <qobjectlist.h>
#include <stdlib.h>
namespace KMail {
@ -53,7 +50,7 @@ namespace KMail {
FolderIface::FolderIface( const QString& vpath )
: DCOPObject( "FolderIface" ), mPath( vpath )
{
kdDebug(5006)<<"FolderIface folder = "<< mPath <<endl;
//kdDebug(5006)<<"FolderIface folder = "<< mPath <<endl;
mFolder = kmkernel->folderMgr()->getFolderByURL( mPath );
if ( !mFolder )
mFolder = kmkernel->imapFolderMgr()->getFolderByURL( mPath );
@ -62,19 +59,6 @@ FolderIface::FolderIface( const QString& vpath )
Q_ASSERT( mFolder );
}
void
FolderIface::select()
{
KMMainWidget *widget = getKMMainWidget();
Q_ASSERT( widget );
if ( !widget )
return;
KMFolderTree *tree = widget->folderTree();
tree->doFolderSelected( tree->indexOfFolder( mFolder ) );
tree->ensureItemVisible( tree->indexOfFolder( mFolder ) );
}
QString
FolderIface::path() const
{
@ -117,30 +101,6 @@ FolderIface::unreadRecursiveMessages()
return mFolder->countUnreadRecursive();
}
KMMainWidget*
FolderIface::getKMMainWidget()
{
//This could definitely use a speadup
QWidgetList *l = kapp->topLevelWidgets();
QWidgetListIt it( *l );
QWidget *wid;
while ( ( wid = it.current() ) != 0 ) {
++it;
QObjectList *l2 = wid->topLevelWidget()->queryList( "KMMainWidget" );
if (l2 && l2->first()) {
KMMainWidget* kmmw = dynamic_cast<KMMainWidget *>( l2->first() );
Q_ASSERT( kmmw );
delete l2;
delete l;
return kmmw;
}
delete l2;
}
delete l;
return 0;
}
//The reason why this function is disabled is that we loose
//the message as soon as we get it (after we switch folders,
//it's being unget. We need a reference count on message to make it work

@ -49,7 +49,6 @@ namespace KMail {
FolderIface( const QString& vpath );
k_dcop:
virtual void select();
virtual QString path() const;
virtual bool usesCustomIcons() const;
virtual QString normalIconPath() const;
@ -60,8 +59,6 @@ namespace KMail {
//not yet
//virtual QValueList<DCOPRef> messageRefs();
protected:
KMMainWidget *getKMMainWidget();
protected:
KMFolder* mFolder;
QString mPath;

@ -83,6 +83,7 @@ k_dcop:
virtual QStringList folderList() const =0;
virtual DCOPRef getFolder( const QString& vpath ) =0;
virtual void selectFolder( QString folder ) =0;
k_dcop_signals:
void unreadCountChanged();

@ -26,6 +26,7 @@
#include "kmversion.h"
#include "kmreaderwin.h"
#include "kmmainwidget.h"
#include "kmfoldertree.h"
#include "recentaddresses.h"
using KRecentAddress::RecentAddresses;
#include "kmmsgdict.h"
@ -60,6 +61,7 @@ using KMail::FolderIface;
#include <qutf7codec.h>
#include <qvbox.h>
#include <qdir.h>
#include <qwidgetlist.h>
#include <qobjectlist.h>
#include <sys/types.h>
@ -143,6 +145,9 @@ KMKernel::KMKernel (QObject *parent, const char *name) :
netCodec = QTextCodec::codecForLocale();
}
mMailService = new MailServiceImpl();
connectDCOPSignal( 0, 0, "kmailSelectFolder(QString)",
"selectFolder(QString)", false );
}
KMKernel::~KMKernel ()
@ -970,7 +975,7 @@ void KMKernel::cleanupImapFolders()
cfld = static_cast<KMFolderCachedImap*>( fld->storage() );
if (cfld == 0) {
// Folder doesn't exist yet
cfld = static_cast<KMFolderCachedImap*>(the_dimapFolderMgr->createFolder(QString::number(acct->id()),
cfld = static_cast<KMFolderCachedImap*>(the_dimapFolderMgr->createFolder(QString::number(acct->id()),
false, KMFolderTypeCachedImap)->storage());
if (!cfld) {
KMessageBox::error(0,(i18n("Cannot create file `%1' in %2.\nKMail cannot start without it.").arg(acct->name()).arg(the_dimapFolderMgr->basePath())));
@ -1736,5 +1741,50 @@ KMailICalIfaceImpl& KMKernel::iCalIface()
return *mICalIface;
}
void KMKernel::selectFolder( QString folderPath )
{
kdDebug()<<"Selecting a folder "<<folderPath<<endl;
const QString localPrefix = i18n( "/Local" );
KMFolder *folder = kmkernel->folderMgr()->getFolderByURL( folderPath );
if ( !folder && folderPath.startsWith( localPrefix ) )
folder = the_folderMgr->getFolderByURL( folderPath.mid( localPrefix.length() ) );
if ( !folder )
folder = kmkernel->imapFolderMgr()->getFolderByURL( folderPath );
if ( !folder )
folder = kmkernel->dimapFolderMgr()->getFolderByURL( folderPath );
Q_ASSERT( folder );
KMMainWidget *widget = getKMMainWidget();
Q_ASSERT( widget );
if ( !widget )
return;
KMFolderTree *tree = widget->folderTree();
tree->doFolderSelected( tree->indexOfFolder( folder ) );
tree->ensureItemVisible( tree->indexOfFolder( folder ) );
}
KMMainWidget *KMKernel::getKMMainWidget()
{
//This could definitely use a speadup
QWidgetList *l = kapp->topLevelWidgets();
QWidgetListIt it( *l );
QWidget *wid;
while ( ( wid = it.current() ) != 0 ) {
++it;
QObjectList *l2 = wid->topLevelWidget()->queryList( "KMMainWidget" );
if (l2 && l2->first()) {
KMMainWidget* kmmw = dynamic_cast<KMMainWidget *>( l2->first() );
Q_ASSERT( kmmw );
delete l2;
delete l;
return kmmw;
}
delete l2;
}
delete l;
return 0;
}
#include "kmkernel.moc"

@ -50,6 +50,7 @@ class KMGroupware;
class KMailICalIfaceImpl;
class KMReaderWin;
class KSystemTray;
class KMMainWidget;
class KMKernel : public QObject, virtual public KMailIface
{
@ -109,6 +110,7 @@ public:
int dcopAddMessage(const QString & foldername, const KURL & messageFile);
QStringList folderList() const;
DCOPRef getFolder( const QString& vpath );
void selectFolder( QString folder );
virtual bool showMail( Q_UINT32 serialNumber, QString messageId );
/** normal control stuff */
@ -212,6 +214,7 @@ public:
bool contextMenuShown() const { return mContextMenuShown; }
public slots:
//Save contents of all open composer widnows to ~/dead.letter
void dumpDeadLetters();
@ -255,6 +258,7 @@ signals:
private:
void openReader( bool onlyCheck );
KMMainWidget *getKMMainWidget();
KMFolder *the_inboxFolder;
KMFolder *the_outboxFolder;

Loading…
Cancel
Save