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 };