diff --git a/folderIface.cpp b/folderIface.cpp index f1689ca2b..6b00a3f51 100644 --- a/folderIface.cpp +++ b/folderIface.cpp @@ -32,24 +32,47 @@ #endif #include "folderIface.h" + +#include "kmkernel.h" +#include "kmmainwin.h" +#include "kmmainwidget.h" +#include "kmfoldertree.h" #include "kmfoldermgr.h" #include "kmfolder.h" -#include - +#include #include +#include +#include + +#include + namespace KMail { FolderIface::FolderIface( const QString& vpath ) : DCOPObject( "FolderIface" ), mPath( vpath ) { - //kdDebug(5006)<<"FolderIface folder = "<< mPath <folderMgr()->getFolderByURL( mPath ); - if ( !mFolder ) - mFolder = kmkernel->imapFolderMgr()->getFolderByURL( mPath ); - if ( !mFolder ) - mFolder = kmkernel->dimapFolderMgr()->getFolderByURL( mPath ); + kdDebug(5006)<<"FolderIface folder = "<< mPath <folderMgr()->getFolderByURL( mPath ); + if ( !mFolder ) + mFolder = kmkernel->imapFolderMgr()->getFolderByURL( mPath ); + if ( !mFolder ) + mFolder = kmkernel->dimapFolderMgr()->getFolderByURL( mPath ); + 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 @@ -94,6 +117,33 @@ 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( 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 /* QValueList FolderIface::messageRefs() diff --git a/folderIface.h b/folderIface.h index f0d03cf69..542b82067 100644 --- a/folderIface.h +++ b/folderIface.h @@ -35,6 +35,7 @@ #include class KMFolder; +class KMMainWidget; namespace KMail { @@ -48,6 +49,7 @@ namespace KMail { FolderIface( const QString& vpath ); k_dcop: + virtual void select(); virtual QString path() const; virtual bool usesCustomIcons() const; virtual QString normalIconPath() const; @@ -58,7 +60,8 @@ namespace KMail { //not yet //virtual QValueList messageRefs(); - + protected: + KMMainWidget *getKMMainWidget(); protected: KMFolder* mFolder; QString mPath;