diff --git a/folderIface.cpp b/folderIface.cpp index 6b00a3f51..6e0650597 100644 --- a/folderIface.cpp +++ b/folderIface.cpp @@ -43,9 +43,6 @@ #include #include -#include -#include - #include namespace KMail { @@ -53,7 +50,7 @@ namespace KMail { FolderIface::FolderIface( const QString& vpath ) : DCOPObject( "FolderIface" ), mPath( vpath ) { - kdDebug(5006)<<"FolderIface folder = "<< mPath <first()) { - KMMainWidget* kmmw = dynamic_cast( 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 diff --git a/folderIface.h b/folderIface.h index 542b82067..73978ac4d 100644 --- a/folderIface.h +++ b/folderIface.h @@ -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 messageRefs(); - protected: - KMMainWidget *getKMMainWidget(); protected: KMFolder* mFolder; QString mPath; diff --git a/kmailIface.h b/kmailIface.h index fdb6b633b..6fd364266 100644 --- a/kmailIface.h +++ b/kmailIface.h @@ -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(); diff --git a/kmkernel.cpp b/kmkernel.cpp index d2bb39a8a..8f8fc00d3 100644 --- a/kmkernel.cpp +++ b/kmkernel.cpp @@ -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 #include #include +#include #include #include @@ -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( fld->storage() ); if (cfld == 0) { // Folder doesn't exist yet - cfld = static_cast(the_dimapFolderMgr->createFolder(QString::number(acct->id()), + cfld = static_cast(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 "<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( l2->first() ); + Q_ASSERT( kmmw ); + delete l2; + delete l; + return kmmw; + } + delete l2; + } + delete l; + return 0; +} #include "kmkernel.moc" diff --git a/kmkernel.h b/kmkernel.h index b9b8c0071..13024bb0b 100644 --- a/kmkernel.h +++ b/kmkernel.h @@ -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;