diff --git a/kmmainwidget.cpp b/kmmainwidget.cpp index 0559c7a9a..1e7408f45 100644 --- a/kmmainwidget.cpp +++ b/kmmainwidget.cpp @@ -3034,12 +3034,14 @@ void KMMainWidget::folderSelected( KMFolder* aFolder, bool forceJumpToUnread, bo imap->getAndCheckFolder(); - // FIXME: Handle this issue in MainFolderView instead ? - // Set the folder, but mark it as "load in progress" in some way - // This will avoid showing "Empty" for a while... - mFolder = 0; // will make us ignore the "folderChanged" signal from KMail::MessageListView (prevent circular loops) - mMessageListView->setCurrentFolder( 0, preferNewTabForOpening ); + mMessageListView->setCurrentFolder( + 0, + preferNewTabForOpening, + KMail::MessageListView::Core::PreSelectNone, + i18nc( "tab title when loading an IMAP folder", "Loading..." ) + ); + mFolder = aFolder; // re-enable the signals from KMail::MessageListView updateFolderMenu(); diff --git a/messagelistview/pane.cpp b/messagelistview/pane.cpp index 516d9fb37..06fac6523 100644 --- a/messagelistview/pane.cpp +++ b/messagelistview/pane.cpp @@ -157,11 +157,8 @@ bool Pane::isFolderOpen( KMFolder * fld ) const return messageListViewWidgetWithFolder( fld ) != 0; } -void Pane::setCurrentFolder( KMFolder *fld, bool preferEmptyTab, Core::PreSelectionMode preSelectionMode ) +void Pane::setCurrentFolder( KMFolder *fld, bool preferEmptyTab, Core::PreSelectionMode preSelectionMode, const QString &overrideLabel ) { - if ( mCurrentFolder == fld ) - return; - Widget * w = messageListViewWidgetWithFolder( fld ); if ( w ) @@ -169,7 +166,9 @@ void Pane::setCurrentFolder( KMFolder *fld, bool preferEmptyTab, Core::PreSelect // Already open, just activate it if ( w != mCurrentWidget ) setCurrentWidget( w ); // will call internalSetCurrentWidget -> internalSetCurrentFolder - w->view()->applyMessagePreSelection( preSelectionMode ); + if ( !overrideLabel.isEmpty() ) + setTabText( indexOf( w ), overrideLabel ); + //w->view()->applyMessagePreSelection( preSelectionMode ); return; } @@ -199,12 +198,16 @@ void Pane::setCurrentFolder( KMFolder *fld, bool preferEmptyTab, Core::PreSelect { w = addNewWidget(); w->setFolder( fld, icon, preSelectionMode ); - if ( fld ) + if ( !overrideLabel.isEmpty() ) + setTabText( indexOf( w ), overrideLabel ); + else if ( fld ) setTabText( indexOf( w ), fld->label() ); setCurrentWidget( w ); // will call internalSetCurrentWidget -> internalSetCurrentFolder } else { w->setFolder( fld, icon, preSelectionMode ); - if ( fld ) + if ( !overrideLabel.isEmpty() ) + setTabText( indexOf( w ), overrideLabel ); + else if ( fld ) setTabText( indexOf( w ), fld->label() ); else setTabText( indexOf( w ), i18nc( "@title:tab Empty messagelist", "Empty" ) ); diff --git a/messagelistview/pane.h b/messagelistview/pane.h index 7c3307d79..83eaa2085 100644 --- a/messagelistview/pane.h +++ b/messagelistview/pane.h @@ -246,17 +246,23 @@ public: * then that tab is made current (and no reloading happens). * If the specified folder is not open yet then behaviour * depends on the preferEmptyTab value as follows. + * * If preferEmptyTab is set to false then the (new) folder is loaded * in the current tab. If preferEmptyTab is set to true then the (new) folder is * loaded in the first empty tab (or a new one if there are no empty ones). * * Pre-selection is the action of automatically selecting a message just after the folder * has finished loading. See Model::setStorageModel() for more information. + * + * If overrideLabel is not empty then it's used as the tab text for the + * specified folder. This is useful to signal a particular folder state + * like "loading..." */ void setCurrentFolder( KMFolder *fld, bool preferEmptyTab = false, - Core::PreSelectionMode preSelectionMode = Core::PreSelectLastSelected + Core::PreSelectionMode preSelectionMode = Core::PreSelectLastSelected, + const QString &overrideLabel = QString() ); /**