diff --git a/kmmainwidget.cpp b/kmmainwidget.cpp index ae79d84e6..5b49739ff 100644 --- a/kmmainwidget.cpp +++ b/kmmainwidget.cpp @@ -1280,6 +1280,7 @@ void KMMainWidget::slotModifyFolder( KMMainWidget::PropsPage whichPage ) if ( whichPage != KMMainWidget::PropsGeneral ) props.setPage( whichPage ); props.exec(); + updateFolderMenu(); } diff --git a/messagelistview/core/model.cpp b/messagelistview/core/model.cpp index 720583bfb..66f057ece 100644 --- a/messagelistview/core/model.cpp +++ b/messagelistview/core/model.cpp @@ -473,7 +473,7 @@ QVariant Model::headerData(int section, Qt::Orientation, int role) const if ( mStorageModel && column->isSenderOrReceiver() ) { - if ( mStorageModel->containsOutboundMessages() ) + if ( mStorageModelContainsOutboundMessages ) return QVariant( i18n( "Receiver" ) ); return QVariant( i18n( "Sender" ) ); } @@ -649,6 +649,7 @@ void Model::setStorageModel( StorageModel *storageModel, PreSelectionMode preSel mPreSelectionMode = preSelectionMode; mUniqueIdOfLastSelectedMessageInFolder = Manager::instance()->preSelectedMessageForStorageModel( mStorageModel ); + mStorageModelContainsOutboundMessages = mStorageModel->containsOutboundMessages(); connect( mStorageModel, SIGNAL( rowsInserted( const QModelIndex &, int, int ) ), this, SLOT( slotStorageModelRowsInserted( const QModelIndex &, int, int ) ) ); @@ -2695,7 +2696,7 @@ Model::ViewItemJobResult Model::viewItemJobStepInternalForJobPass1Fill( ViewItem int elapsed; // Should we use the receiver or the sender field for sorting ? - bool bUseReceiver = ( mStorageModel->containsOutboundMessages() ); + bool bUseReceiver = mStorageModelContainsOutboundMessages; // The begin storage index of our work int curIndex = job->currentIndex(); diff --git a/messagelistview/core/model.h b/messagelistview/core/model.h index 23204ff70..2b0c3511b 100644 --- a/messagelistview/core/model.h +++ b/messagelistview/core/model.h @@ -346,6 +346,13 @@ private: */ Model * mModelForItemFunctions; + /** + * The cached result of StorageModel::containsOutboundMessages(). + * We access this property at each incoming message and StorageModel::containsOutboundMessages() is + * virtual (so it's always an indirect function call). Caching makes sense. + */ + bool mStorageModelContainsOutboundMessages; + public: /** diff --git a/messagelistview/storagemodel.cpp b/messagelistview/storagemodel.cpp index a26ea107a..9ce73eb17 100644 --- a/messagelistview/storagemodel.cpp +++ b/messagelistview/storagemodel.cpp @@ -87,6 +87,9 @@ StorageModel::StorageModel( KMFolder * folder, QObject * parent ) connect( mFolder, SIGNAL( msgHeaderChanged( KMFolder * , int ) ), SLOT( slotMessageHeaderChanged( KMFolder *, int ) ) ); + connect( mFolder, SIGNAL( viewConfigChanged() ), + SLOT( slotViewConfigChanged() ) ); + #if 0 // FIXME: Do we need to handle these remaining signals ? @@ -109,8 +112,6 @@ StorageModel::StorageModel( KMFolder * folder, QObject * parent ) /** Emitted when a folder was removed */ void removed(KMFolder*, bool); - /** Emitted when the variables for the config of the view have changed */ - void viewConfigChanged(); #endif mMessageCount = mFolder->count(); @@ -179,6 +180,12 @@ StorageModel::~StorageModel() this, SLOT( slotMessageHeaderChanged( KMFolder *, int ) ) ); + disconnect( + mFolder, SIGNAL( viewConfigChanged() ), + this, SLOT( slotViewConfigChanged() ) + ); + + //mFolder->markNewAsUnread(); <-- do we REALLY need to do this ?.. couldn't we use a timed-expire instead ? if ( mFolder->dirty() ) mFolder->writeIndex(); // this is straight from KMHeaders... @@ -596,6 +603,11 @@ void StorageModel::slotFolderCleared() reset(); } +void StorageModel::slotViewConfigChanged() +{ + reset(); +} + void StorageModel::slotFolderExpunged() { slotFolderClosed(); diff --git a/messagelistview/storagemodel.h b/messagelistview/storagemodel.h index 6b0d98a01..410bfe9d1 100644 --- a/messagelistview/storagemodel.h +++ b/messagelistview/storagemodel.h @@ -224,6 +224,11 @@ private slots: */ void slotFolderNameChanged(); + /** + * Internal handler of KMFolder signal. + */ + void slotViewConfigChanged(); + /** * Internal handler of KMFolder signal. */