File indexing completed on 2024-05-12 05:20:43

0001 /*
0002   This file is part of KMail, the KDE mail client.
0003   SPDX-FileCopyrightText: 2002 Don Sanders <sanders@kde.org>
0004 
0005   Based on the work of Stefan Taferner <taferner@kde.org>
0006 
0007   SPDX-License-Identifier: GPL-2.0-only
0008 */
0009 
0010 #pragma once
0011 
0012 #include "kmail_export.h"
0013 #include "kmkernel.h" // for access to config
0014 #include "kmreaderwin.h" //for inline actions
0015 
0016 #include <MailCommon/FolderTreeWidget>
0017 
0018 #include "messageactions.h"
0019 #include <Akonadi/StandardMailActionManager>
0020 #include <Akonadi/Tag>
0021 #include <KActionCollection>
0022 #include <KXMLGUIClient>
0023 #include <MailCommon/FolderSettings>
0024 #include <MessageList/View>
0025 #include <QPointer>
0026 #include <QTimer>
0027 
0028 #ifdef WITH_KUSERFEEDBACK
0029 namespace KUserFeedback
0030 {
0031 class NotificationPopup;
0032 }
0033 #endif
0034 
0035 namespace MailTransport
0036 {
0037 class Transport;
0038 }
0039 namespace Akonadi
0040 {
0041 class Tag;
0042 }
0043 
0044 namespace KMime
0045 {
0046 class Message;
0047 }
0048 class QUrl;
0049 class QVBoxLayout;
0050 class QSplitter;
0051 class KMLaunchExternalComponent;
0052 class DisplayMessageFormatActionMenu;
0053 class QAction;
0054 class KActionMenu;
0055 class KToggleAction;
0056 class KMMetaFilterActionCommand;
0057 class CollectionPane;
0058 class KMCommand;
0059 class KMMoveCommand;
0060 class KMTrashMsgCommand;
0061 class KRecentFilesMenu;
0062 class ManageShowCollectionProperties;
0063 class KActionMenuTransport;
0064 class KActionMenuAccount;
0065 class ZoomLabelWidget;
0066 class HistoryClosedReaderMenu;
0067 
0068 namespace KIO
0069 {
0070 class Job;
0071 }
0072 
0073 namespace KMail
0074 {
0075 class SearchWindow;
0076 class VacationScriptIndicatorWidget;
0077 class TagActionManager;
0078 class FolderShortcutActionManager;
0079 }
0080 
0081 namespace KSieveCore
0082 {
0083 class SieveImapPasswordProvider;
0084 }
0085 
0086 namespace KSieveUi
0087 {
0088 class ManageSieveScriptsDialog;
0089 class VacationManager;
0090 }
0091 namespace MailCommon
0092 {
0093 class FolderSelectionDialog;
0094 class FavoriteCollectionWidget;
0095 class MailFilter;
0096 }
0097 class QStatusBar;
0098 class KMailPluginCheckBeforeDeletingManagerInterface;
0099 class CollectionSwitcherTreeViewManager;
0100 class KMAIL_EXPORT KMMainWidget : public QWidget
0101 {
0102     Q_OBJECT
0103 
0104 public:
0105     KMMainWidget(QWidget *parent,
0106                  KXMLGUIClient *aGUIClient,
0107                  KActionCollection *actionCollection,
0108                  const KSharedConfig::Ptr &config = KMKernel::self()->config());
0109     ~KMMainWidget() override;
0110     void destruct();
0111 
0112     /** Read configuration options before widgets are created. */
0113     void readPreConfig();
0114 
0115     /** Read configuration for current folder. */
0116     void readFolderConfig();
0117 
0118     /** Write configuration for current folder. */
0119     void writeFolderConfig();
0120 
0121     /** Read configuration options after widgets are created. */
0122     void readConfig();
0123 
0124     /** Write configuration options. */
0125     void writeConfig(bool force = true);
0126 
0127     void writeReaderConfig();
0128 
0129     /** Easy access to main components of the window. */
0130     [[nodiscard]] KMReaderWin *messageView() const;
0131     /** Access to the header list pane. */
0132     CollectionPane *messageListPane() const;
0133 
0134     [[nodiscard]] Akonadi::Collection currentCollection() const;
0135     [[nodiscard]] QSharedPointer<MailCommon::FolderSettings> currentFolder() const;
0136 
0137     static void cleanup();
0138     QAction *action(const QString &name);
0139 
0140     QAction *sendQueuedAction() const;
0141 
0142     KActionMenuTransport *sendQueueViaMenu() const;
0143 
0144     /**
0145       Returns a list of all KMMainWidgets. Warning, the list itself can be 0.
0146       @return the list of all main widgets, or 0 if it is not yet initialized
0147     */
0148     static const KMMainWidget *mainWidgetList();
0149 
0150     QWidget *vacationScriptIndicator() const;
0151     [[nodiscard]] QWidget *dkimWidgetInfo() const;
0152     MailCommon::FolderTreeView *folderTreeView() const;
0153 
0154     /** Returns the XML GUI client. */
0155     KXMLGUIClient *guiClient() const;
0156 
0157     KMail::TagActionManager *tagActionManager() const;
0158 
0159     KMail::FolderShortcutActionManager *folderShortcutActionManager() const;
0160     void savePaneSelection();
0161 
0162     void updatePaneTagComboBox();
0163 
0164     void addRecentFile(const QUrl &mUrl);
0165     void updateQuickSearchLineText();
0166 
0167     void populateMessageListStatusFilterCombo();
0168     void initializePluginActions();
0169 
0170     [[nodiscard]] Akonadi::Item::List currentSelection() const;
0171 
0172     [[nodiscard]] QString fullCollectionPath() const;
0173 
0174     void initializeFilterActions(bool clearFilter);
0175     /** Clear and create actions for marked filters */
0176     void clearFilterActions();
0177     /**
0178      * Convenience function to get the action collection in a list.
0179      *
0180      * @return a list of action collections. The list only has one item, and
0181      *         that is the action collection of this main widget as returned
0182      *         by actionCollection().
0183      */
0184     [[nodiscard]] QList<KActionCollection *> actionCollections() const;
0185     void refreshMessageListSelection();
0186     Akonadi::StandardMailActionManager *standardMailActionManager() const;
0187     QAction *akonadiStandardAction(Akonadi::StandardActionManager::Type type);
0188     QAction *akonadiStandardAction(Akonadi::StandardMailActionManager::Type type);
0189     [[nodiscard]] QWidget *zoomLabelIndicator() const;
0190 
0191     void clearPluginActions();
0192 
0193     void replyMessageTo(const Akonadi::Item &item, bool replyToAll);
0194 public Q_SLOTS:
0195 
0196     /**
0197       Open a separate viewer window containing the specified message.
0198     */
0199     void slotMessageActivated(const Akonadi::Item &);
0200 
0201     /**
0202       Opens mail in the internal viewer.
0203     */
0204     void slotMessageSelected(const Akonadi::Item &);
0205 
0206     void slotItemsFetchedForActivation(KMCommand *command);
0207     void slotMessageStatusChangeRequest(const Akonadi::Item &, const Akonadi::MessageStatus &, const Akonadi::MessageStatus &);
0208 
0209     /** Adds if not existing/removes if existing the tag identified by @p aLabel
0210         in all selected messages */
0211     void slotUpdateMessageTagList(const Akonadi::Tag &tag);
0212 
0213     void slotSelectCollectionFolder(const Akonadi::Collection &col);
0214 
0215     void slotUpdateConfig();
0216 Q_SIGNALS:
0217     void captionChangeRequest(const QString &caption);
0218     void recreateGui();
0219 
0220 protected:
0221     void showEvent(QShowEvent *event) override;
0222 
0223 private:
0224     void assignLoadExternalReference();
0225     KMail::MessageActions *messageActions() const;
0226 
0227     KActionMenu *filterMenu() const;
0228 
0229     KActionMenu *mailingListActionMenu() const;
0230 
0231     // Moving messages around
0232     /**
0233      * This will ask for a destination folder and move the currently selected
0234      * messages (in MessageListView) into it.
0235      */
0236     void slotMoveSelectedMessageToFolder();
0237 
0238     // Copying messages around
0239 
0240     /**
0241      * This will ask for a destination folder and copy the currently selected
0242      * messages (in MessageListView) into it.
0243      */
0244     void slotCopySelectedMessagesToFolder();
0245     /**
0246      * Implements the "move to trash" action
0247      */
0248     void slotTrashSelectedMessages();
0249 
0250     void slotCheckMail();
0251     void slotCheckMailOnStartup();
0252 
0253     /** Trigger the dialog for editing out-of-office scripts.  */
0254     void slotEditVacation(const QString &serverName);
0255 
0256     void slotStartCheckMail();
0257     void slotEndCheckMail();
0258     void restoreCollectionFolderViewConfig();
0259     /** Update message actions */
0260     void updateMessageActions(bool fast = false);
0261     void updateMessageActionsDelayed();
0262     /**
0263       Update message menu
0264     */
0265     void updateMessageMenu();
0266 
0267     void slotRemoveDuplicates();
0268 
0269     /**
0270       Start a timer to update message actions
0271     */
0272     void startUpdateMessageActionsTimer();
0273     void slotSelectMoreMessageTagList();
0274     void setupActions();
0275     void createWidgets();
0276     void deleteWidgets();
0277     void layoutSplitters();
0278     void newFromTemplate(const Akonadi::Item &);
0279     void moveSelectedMessagesToFolder(const Akonadi::Collection &dest);
0280     void copySelectedMessagesToFolder(const Akonadi::Collection &dest);
0281     KActionCollection *actionCollection() const;
0282     /**
0283       @return the correct config dialog depending on whether the parent of
0284       the mainWidget is a KPart or a KMMainWindow.
0285       When dealing with geometries, use this pointer
0286     */
0287     [[nodiscard]] KSharedConfig::Ptr config();
0288 
0289     void checkAkonadiServerManagerState();
0290     void updateHtmlMenuEntry();
0291 
0292     void updateMoveAction(const Akonadi::CollectionStatistics &statistic);
0293     void updateMoveAction(bool hasUnreadMails);
0294 
0295     void updateAllToTrashAction(qint64 statistics);
0296 
0297     /** Get override character encoding. */
0298     [[nodiscard]] QString overrideEncoding() const;
0299 
0300     void moveMessageSelected(MessageList::Core::MessageItemSetReference ref, const Akonadi::Collection &dest, bool confirmOnDeletion = true);
0301 
0302     void copyMessageSelected(const Akonadi::Item::List &selectMsg, const Akonadi::Collection &dest);
0303 
0304     /**
0305      * Move the messages referenced by the specified set to trash.
0306      * The set parameter must not be null and the ownership is passed
0307      * to this function.
0308      */
0309     void trashMessageSelected(MessageList::Core::MessageItemSetReference ref);
0310     /**
0311      * Set the status of the messages referenced by the specified set, eventually toggling it.
0312      * The set parameter must not be null and the ownership is passed to this function.
0313      */
0314     void setMessageSetStatus(const Akonadi::Item::List &select, Akonadi::MessageStatus status, bool toggle);
0315     /**
0316      * Toggles a tag for the messages referenced by the specified set.
0317      * The set parameter must not be null and the ownership is passed to this function.
0318      */
0319     void toggleMessageSetTag(const Akonadi::Item::List &select, const Akonadi::Tag &tag);
0320     /**
0321      * This applies setMessageSetStatus() on the current thread.
0322      */
0323     void setCurrentThreadStatus(Akonadi::MessageStatus status, bool toggle);
0324 
0325     void applyFilters(const Akonadi::Item::List &selectedMessages);
0326     void applyFilters(const Akonadi::Collection::List &selectedCols);
0327     void applyFilter(const Akonadi::Collection::List &selectedCols, const QString &filter);
0328 
0329     /**
0330      * Internal helper that creates the folder selection dialog used for the
0331      * move and copy to folder actions on demand. Only folders where items can
0332      * be added are listed.
0333      */
0334     MailCommon::FolderSelectionDialog *moveOrCopyToDialog();
0335 
0336     /**
0337      * Internal helper that creates the folder selection dialog used for
0338      * jumping to folders, or adding them as favourites. All folders are listed.
0339      */
0340     MailCommon::FolderSelectionDialog *selectFromAllFoldersDialog();
0341 
0342     /**
0343      * Internal helper that applies the current settings so the
0344      * favorite folder view.
0345      */
0346     void refreshFavoriteFoldersViewProperties();
0347 
0348     void openFilterDialog(const QByteArray &field, const QString &value);
0349 
0350     void showMessagePopup(const Akonadi::Item &msg,
0351                           const QUrl &aUrl,
0352                           const QUrl &imageUrl,
0353                           const QPoint &aPoint,
0354                           bool contactAlreadyExists,
0355                           bool uniqueContactFound,
0356                           const WebEngineViewer::WebHitTestResult &result);
0357 
0358     void setZoomChanged(qreal zoomFactor);
0359 
0360 private Q_SLOTS:
0361     void updateFileMenu();
0362     void slotFilter();
0363     void slotManageSieveScripts();
0364     void slotCompose();
0365     void slotPostToML();
0366     void slotExpireFolder();
0367     void slotExpireAll();
0368     void slotArchiveFolder();
0369     void slotRemoveFolder();
0370     void slotEmptyFolder();
0371     void slotClearCurrentFolder();
0372     void slotAddFavoriteFolder();
0373     void slotShowSelectedFolderInPane();
0374     void slotOverrideHtmlLoadExt();
0375     void slotUseTemplate();
0376     void slotTrashThread();
0377     void slotDeleteThread(bool confirmDelete); // completely delete thread
0378     void slotUndo();
0379     void slotReadOn();
0380     void slotSaveMsg();
0381     void slotOpenMsg();
0382     void slotSaveAttachments();
0383     void slotDeleteAttachments();
0384     void slotJumpToFolder();
0385     void slotCheckVacation();
0386     void slotDebugSieve();
0387     void slotApplyFilters();
0388     void slotApplyFiltersOnFolder(bool recursive);
0389     void slotApplyFilterOnFolder(bool recursive);
0390     void slotExpandThread();
0391     void slotExpandAllThreads();
0392     void slotCollapseThread();
0393     void slotCollapseAllThreads();
0394     void slotSetThreadStatusUnread();
0395     void slotSetThreadStatusRead();
0396     void slotSetThreadStatusImportant();
0397     void slotSetThreadStatusToAct();
0398     void slotSetThreadStatusWatched();
0399     void slotSetThreadStatusIgnored();
0400     void slotSendQueued();
0401     void slotSendQueuedVia(MailTransport::Transport *transport);
0402     void slotOnlineStatus();
0403     void slotUpdateOnlineStatus(KMailSettings::EnumNetworkState::type);
0404     void slotMessagePopup(const Akonadi::Item &aMsg, const WebEngineViewer::WebHitTestResult &result, QPoint aPoint);
0405     void slotContactSearchJobForMessagePopupDone(KJob *job);
0406     void slotSelectAllMessages();
0407     void slotFocusQuickSearch();
0408 
0409     void slotIntro();
0410     void slotShowStartupFolder();
0411     void slotCopyDecryptedTo(QAction *action);
0412 
0413     /** Message navigation */
0414     void slotSelectNextMessage();
0415     void slotExtendSelectionToNextMessage();
0416     void slotSelectNextUnreadMessage();
0417     void slotSelectPreviousMessage();
0418     void slotExtendSelectionToPreviousMessage();
0419     void slotSelectPreviousUnreadMessage();
0420     void slotFocusOnNextMessage();
0421     void slotFocusOnPrevMessage();
0422     void slotSelectFirstMessage();
0423     void slotSelectLastMessage();
0424     void slotSelectFocusedMessage();
0425 
0426     void slotNextUnreadFolder();
0427     void slotPrevUnreadFolder();
0428 
0429     /** etc. */
0430     void slotDisplayCurrentMessage();
0431 
0432     void slotShowNewFromTemplate();
0433     void slotDelayedShowNewFromTemplate(KJob *);
0434     void slotNewFromTemplate(QAction *);
0435 
0436     /** Update the undo action */
0437     void slotUpdateUndo();
0438 
0439     /** Update html and threaded messages preferences in Folder menu. */
0440     void updateFolderMenu();
0441 
0442     /** Settings menu */
0443 
0444     /** XML-GUI stuff */
0445     void slotEditNotifications();
0446 
0447     /** Slot to reply to a message */
0448     void slotCustomReplyToMsg(const QString &tmpl);
0449     void slotCustomReplyAllToMsg(const QString &tmpl);
0450     void slotForwardInlineMsg();
0451     void slotForwardAttachedMessage();
0452     void slotRedirectMessage();
0453     void slotNewMessageToRecipients();
0454     void slotCustomForwardMsg(const QString &tmpl);
0455     void slotSubjectFilter();
0456     void slotFromFilter();
0457     void slotToFilter();
0458 
0459     void slotConfigChanged();
0460 
0461     /** Show a splash screen for the longer-lasting operation */
0462     void slotShowBusySplash();
0463 
0464     /**
0465       Show a message screen explaining that we are currently offline, when
0466       an online folder is selected.
0467     */
0468     void showOfflinePage();
0469     void showResourceOfflinePage();
0470     void updateVacationScriptStatus(bool active, const QString &serverName = QString());
0471 
0472     void slotItemAdded(const Akonadi::Item &, const Akonadi::Collection &col);
0473     void slotItemRemoved(const Akonadi::Item &);
0474     void slotItemMoved(const Akonadi::Item &item, const Akonadi::Collection &from, const Akonadi::Collection &to);
0475     void slotCollectionStatisticsChanged(Akonadi::Collection::Id, const Akonadi::CollectionStatistics &);
0476 
0477     void slotAkonadiStandardActionUpdated();
0478     void slotCollectionChanged(const Akonadi::Collection &, const QSet<QByteArray> &);
0479     void slotCreateNewTab(bool);
0480     void slotUpdateActionsAfterMailChecking();
0481     void slotCreateAddressBookContact();
0482     void slotOpenRecentMessage(const QUrl &url);
0483 
0484     void slotMoveMessageToTrash();
0485     /**
0486      * Called when a "move to trash" operation is completed
0487      */
0488     void slotTrashMessagesCompleted(KMTrashMsgCommand *command);
0489 
0490     /**
0491      * Called when a "move" operation is completed
0492      */
0493     void slotMoveMessagesCompleted(KMMoveCommand *command);
0494 
0495     /**
0496      * Called when a "copy" operation is completed
0497      */
0498     void slotCopyMessagesCompleted(KMCommand *command);
0499 
0500     void slotRequestFullSearchFromQuickSearch();
0501     void slotFolderChanged(const Akonadi::Collection &);
0502     void slotCollectionFetched(int collectionId);
0503 
0504     void itemsReceived(const Akonadi::Item::List &list);
0505     void itemsFetchDone(KJob *job);
0506 
0507     void slotServerSideSubscription();
0508     void slotServerStateChanged(Akonadi::ServerManager::State state);
0509     void slotArchiveMails();
0510     void slotChangeDisplayMessageFormat(MessageViewer::Viewer::DisplayFormatMessage format);
0511 
0512     void slotCollectionRemoved(const Akonadi::Collection &col);
0513     void slotCcFilter();
0514     void slotDeleteMessages();
0515 
0516     void slotMarkAllMessageAsReadInCurrentFolderAndSubfolder();
0517     void slotRemoveDuplicateRecursive();
0518     void slotRedirectCurrentMessage();
0519     void slotEditCurrentVacation();
0520     void slotReplyMessageTo(const KMime::Message::Ptr &message, bool replyToAll);
0521 
0522 private:
0523     void slotSetFocusToViewer();
0524     void deleteSelectedMessages(bool confirmDelete); // completely delete message
0525     [[nodiscard]] bool showSearchDialog();
0526     void clearCurrentFolder();
0527     void setCurrentCollection(const Akonadi::Collection &col);
0528     void showMessageActivities(const QString &str);
0529     void slotPageIsScrolledToBottom(bool isAtBottom);
0530     void setupUnifiedMailboxChecker();
0531     QAction *filterToAction(MailCommon::MailFilter *filter);
0532     [[nodiscard]] Akonadi::Collection::List applyFilterOnCollection(bool recursive);
0533     void setShowStatusBarMessage(const QString &msg);
0534     void slotRestartAccount();
0535     void slotAccountSettings();
0536     void updateDisplayFormatMessage();
0537     void slotHistorySwitchFolder(const Akonadi::Collection &collection);
0538     void redoSwitchFolder();
0539     void undoSwitchFolder();
0540     void updateMoveAllToTrash();
0541     void slotClearFolder();
0542     void slotClearCacheDone();
0543     void slotClearFolderAndSubFolders();
0544     void slotRestoreClosedMessage(Akonadi::Item::Id id);
0545     void slotHistoryClosedReaderChanged();
0546 
0547     // Message actions
0548     QAction *mDeleteAction = nullptr;
0549     QAction *mTrashThreadAction = nullptr;
0550     QAction *mDeleteThreadAction = nullptr;
0551     QAction *mSaveAsAction = nullptr;
0552     QAction *mApplyAllFiltersAction = nullptr;
0553     QAction *mSaveAttachmentsAction = nullptr;
0554     QAction *mDeleteAttachmentsAction = nullptr;
0555     QAction *mOpenAction = nullptr;
0556     QAction *mMoveMsgToFolderAction = nullptr;
0557     QAction *mCollectionProperties = nullptr;
0558     QAction *mSendQueued = nullptr;
0559     QAction *mArchiveAction = nullptr;
0560     QAction *mSelectAllMessages = nullptr;
0561     KActionMenuTransport *mSendActionMenu = nullptr;
0562     QAction *mRestartAccountSettings = nullptr;
0563     // Filter actions
0564     KActionMenu *mFilterMenu = nullptr;
0565     QAction *mExpireConfigAction = nullptr;
0566     KActionMenu *mApplyFilterFolderActionsMenu = nullptr;
0567     KActionMenu *mApplyFilterFolderRecursiveActionsMenu = nullptr;
0568     QAction *mApplyAllFiltersFolderAction = nullptr;
0569     QAction *mApplyAllFiltersFolderRecursiveAction = nullptr;
0570     // Custom template actions menu
0571     KActionMenu *mTemplateMenu = nullptr;
0572 
0573     KActionMenu *mThreadStatusMenu = nullptr;
0574     KActionMenu *mApplyFilterActionsMenu = nullptr;
0575     QAction *mCopyActionMenu = nullptr;
0576     QAction *mMoveActionMenu = nullptr;
0577     QAction *mCopyDecryptedActionMenu = nullptr;
0578     QAction *mMarkThreadAsReadAction = nullptr;
0579     QAction *mMarkThreadAsUnreadAction = nullptr;
0580     KToggleAction *mToggleThreadImportantAction = nullptr;
0581     KToggleAction *mToggleThreadToActAction = nullptr;
0582 
0583     KToggleAction *mWatchThreadAction = nullptr;
0584     KToggleAction *mIgnoreThreadAction = nullptr;
0585 
0586     MailCommon::FavoriteCollectionWidget *mFavoriteCollectionsView = nullptr;
0587     Akonadi::FavoriteCollectionsModel *mFavoritesModel = nullptr;
0588     KMReaderWin *mMsgView = nullptr;
0589     QSplitter *mSplitter1 = nullptr;
0590     QSplitter *mSplitter2 = nullptr;
0591     QSplitter *mFolderViewSplitter = nullptr;
0592     Akonadi::Collection mTemplateFolder;
0593     bool mLongFolderList = false;
0594     bool mStartupDone = false;
0595     bool mWasEverShown = false;
0596     bool mHtmlGlobalSetting = false;
0597     bool mHtmlLoadExtGlobalSetting = false;
0598     bool mFolderHtmlLoadExtPreference = false;
0599     bool mReaderWindowActive = true;
0600     bool mReaderWindowBelow = true;
0601     bool mEnableFavoriteFolderView = false;
0602     bool mEnableFolderQuickSearch = false;
0603 
0604     QPointer<KMail::SearchWindow> mSearchWin;
0605 
0606     QAction *mExpireFolderAction = nullptr;
0607     QAction *mFolderMailingListPropertiesAction = nullptr;
0608     QAction *mShowFolderShortcutDialogAction = nullptr;
0609     QAction *mArchiveFolderAction = nullptr;
0610     QAction *mMessageNewList = nullptr;
0611     KToggleAction *mPreferHtmlLoadExtAction = nullptr;
0612 
0613     QTimer *menutimer = nullptr;
0614     QTimer *mShowBusySplashTimer = nullptr;
0615 
0616     KSieveUi::VacationManager *mVacationManager = nullptr;
0617     KActionCollection *mActionCollection = nullptr;
0618     QAction *const mToolbarActionSeparator;
0619     QVBoxLayout *mTopLayout = nullptr;
0620     bool mDestructed = false;
0621     QList<QAction *> mFilterMenuActions;
0622     QList<QAction *> mFilterFolderMenuActions;
0623     QList<QAction *> mFilterFolderMenuRecursiveActions;
0624     QList<QAction *> mFilterTBarActions;
0625     QList<KMMetaFilterActionCommand *> mFilterCommands;
0626 
0627     KMail::TagActionManager *mTagActionManager = nullptr;
0628     KMail::FolderShortcutActionManager *mFolderShortcutActionManager = nullptr;
0629     KSharedConfig::Ptr mConfig;
0630     KXMLGUIClient *mGUIClient = nullptr;
0631 
0632     KMail::MessageActions *mMsgActions = nullptr;
0633     Akonadi::StandardMailActionManager *mAkonadiStandardActionManager = nullptr;
0634     CollectionPane *mMessagePane = nullptr;
0635     QSharedPointer<MailCommon::FolderSettings> mCurrentFolderSettings;
0636 
0637     MailCommon::FolderTreeWidget *mFolderTreeWidget = nullptr;
0638 
0639     KMail::VacationScriptIndicatorWidget *mVacationScriptIndicator = nullptr;
0640     bool mVacationIndicatorActive = false;
0641     bool mGoToFirstUnreadMessageInSelectedFolder = false;
0642     MessageList::Core::PreSelectionMode mPreSelectionMode;
0643 
0644     QTimer mCheckMailTimer;
0645 
0646     KSieveCore::SieveImapPasswordProvider *const mSievePasswordProvider;
0647     QPointer<MailCommon::FolderSelectionDialog> mMoveOrCopyToDialog;
0648     QPointer<MailCommon::FolderSelectionDialog> mSelectFromAllFoldersDialog;
0649     QAction *mServerSideSubscription = nullptr;
0650     QAction *mAccountSettings = nullptr;
0651     KRecentFilesMenu *mOpenRecentMenu = nullptr;
0652     QPointer<KSieveUi::ManageSieveScriptsDialog> mManageSieveDialog;
0653     QAction *mQuickSearchAction = nullptr;
0654     DisplayMessageFormatActionMenu *mDisplayMessageFormatMenu = nullptr;
0655     MessageViewer::Viewer::DisplayFormatMessage mFolderDisplayFormatPreference = MessageViewer::Viewer::UseGlobalSetting;
0656     QAction *mSearchMessages = nullptr;
0657     KMLaunchExternalComponent *const mLaunchExternalComponent;
0658     ManageShowCollectionProperties *const mManageShowCollectionProperties;
0659     QAction *mShowIntroductionAction = nullptr;
0660     QAction *mMarkAllMessageAsReadAndInAllSubFolder = nullptr;
0661     KActionMenuAccount *mAccountActionMenu = nullptr;
0662     QAction *mRemoveDuplicateRecursiveAction = nullptr;
0663     Akonadi::Collection mCurrentCollection;
0664     QStatusBar *mCurrentStatusBar = nullptr;
0665     ZoomLabelWidget *mZoomLabelIndicator = nullptr;
0666 #ifdef WITH_KUSERFEEDBACK
0667     KUserFeedback::NotificationPopup *mUserFeedBackNotificationPopup = nullptr;
0668 #endif
0669     KMailPluginCheckBeforeDeletingManagerInterface *mPluginCheckBeforeDeletingManagerInterface = nullptr;
0670     CollectionSwitcherTreeViewManager *const mCollectionSwitcherTreeViewManager;
0671     QAction *mClearFolderCacheAction = nullptr;
0672     HistoryClosedReaderMenu *mRestoreClosedMessageMenu = nullptr;
0673 };