24 #include "standardmailactionmanager.h"
26 #include "emptytrashcommand_p.h"
27 #include "markascommand_p.h"
28 #include "movetotrashcommand_p.h"
29 #include "removeduplicatescommand_p.h"
30 #include "specialmailcollections.h"
32 #include "akonadi/agentfilterproxymodel.h"
33 #include "akonadi/agentinstance.h"
34 #include "akonadi/agentinstancecreatejob.h"
35 #include "akonadi/agentmanager.h"
36 #include "akonadi/agenttypedialog.h"
37 #include "akonadi/collectionstatistics.h"
38 #include "akonadi/entitytreemodel.h"
39 #include "akonadi/kmime/messagestatus.h"
40 #include "akonadi/mimetypechecker.h"
41 #include "akonadi/subscriptiondialog_p.h"
44 #include <kactioncollection.h>
46 #include <kmessagebox.h>
47 #include <kmime/kmime_message.h>
49 #include <QtCore/QPointer>
50 #include <QtGui/QItemSelectionModel>
52 using namespace Akonadi;
54 class StandardMailActionManager::Private
58 : mActionCollection( actionCollection ),
59 mParentWidget( parentWidget ),
60 mCollectionSelectionModel( 0 ),
61 mItemSelectionModel( 0 ),
64 mGenericManager =
new StandardActionManager( actionCollection, parentWidget );
69 mGenericManager->createAllActions();
71 mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setText(
72 i18n(
"Add Folder..." ) );
73 mGenericManager->action( Akonadi::StandardActionManager::CreateCollection )->setWhatsThis(
74 i18n(
"Add a new folder to the currently selected account." ) );
76 mGenericManager->setActionText( Akonadi::StandardActionManager::CopyCollections,
77 ki18np(
"Copy Folder",
"Copy %1 Folders" ) );
78 mGenericManager->action( Akonadi::StandardActionManager::CopyCollections )->setWhatsThis(
79 i18n(
"Copy the selected folders to the clipboard." ) );
81 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteCollections,
82 ki18np(
"Delete Folder",
"Delete %1 Folders" ) );
83 mGenericManager->action( Akonadi::StandardActionManager::DeleteCollections )->setWhatsThis(
84 i18n(
"Delete the selected folders from the account." ) );
86 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollections,
87 ki18np(
"Update Folder",
"Update Folders" ) );
89 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollections )->setWhatsThis(
90 i18n(
"Update the content of the selected folders." ) );
92 mGenericManager->setActionText( Akonadi::StandardActionManager::CutCollections,
93 ki18np(
"Cut Folder",
"Cut %1 Folders" ) );
94 mGenericManager->action( Akonadi::StandardActionManager::CutCollections )->setWhatsThis(
95 i18n(
"Cut the selected folders from the account." ) );
97 mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties )->setText(
98 i18n(
"Folder Properties..." ) );
99 mGenericManager->action( Akonadi::StandardActionManager::CollectionProperties)->setWhatsThis(
100 i18n(
"Open a dialog to edit the properties of the selected folder." ) );
102 mGenericManager->setActionText( Akonadi::StandardActionManager::CopyItems,
103 ki18np(
"Copy Email",
"Copy %1 Emails" ) );
104 mGenericManager->action( Akonadi::StandardActionManager::CopyItems )->setWhatsThis(
105 i18n(
"Copy the selected emails to the clipboard." ) );
107 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteItems,
108 ki18np(
"Delete Email",
"Delete %1 Emails" ) );
109 mGenericManager->action( Akonadi::StandardActionManager::DeleteItems )->setWhatsThis(
110 i18n(
"Delete the selected emails from the folder." ) );
112 mGenericManager->setActionText( Akonadi::StandardActionManager::CutItems,
113 ki18np(
"Cut Email",
"Cut %1 Emails" ) );
114 mGenericManager->action( Akonadi::StandardActionManager::CutItems )->setWhatsThis(
115 i18n(
"Cut the selected emails from the folder." ) );
117 mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setText(
118 i18n(
"Add &Account..." ) );
119 mGenericManager->action( Akonadi::StandardActionManager::CreateResource )->setWhatsThis(
120 i18n(
"Add a new account<p>"
121 "You will be presented with a dialog where you can select "
122 "the type of the account that shall be added.</p>" ) );
124 mGenericManager->setActionText( Akonadi::StandardActionManager::DeleteResources,
125 ki18np(
"&Delete Account",
"&Delete %1 Accounts" ) );
126 mGenericManager->action( Akonadi::StandardActionManager::DeleteResources )->setWhatsThis(
127 i18n(
"Delete the selected accounts<p>"
128 "The currently selected accounts will be deleted, "
129 "along with all the emails they contain.</p>" ) );
131 mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setText(
132 i18n(
"Account Properties..." ) );
133 mGenericManager->action( Akonadi::StandardActionManager::ResourceProperties )->setWhatsThis(
134 i18n(
"Open a dialog to edit properties of the selected account." ) );
136 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeResources,
137 ki18np(
"Update Account",
"Update %1 Accounts" ) );
138 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeResources )->setWhatsThis(
139 i18n(
"Updates the content of all folders of the selected accounts." ) );
141 mGenericManager->setActionText( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive,
142 ki18np(
"Update folder and its subfolders",
"Update folders and their subfolders" ) );
144 mGenericManager->action( Akonadi::StandardActionManager::SynchronizeCollectionsRecursive )->setWhatsThis(
145 i18n(
"Update the content of the selected folders and their subfolders." ) );
147 mGenericManager->setContextText(
148 StandardActionManager::CreateCollection, StandardActionManager::DialogTitle,
149 i18nc(
"@title:window",
"New Folder" ) );
151 mGenericManager->setContextText(
152 StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageText,
153 ki18n(
"Could not create folder: %1" ) );
155 mGenericManager->setContextText(
156 StandardActionManager::CreateCollection, StandardActionManager::ErrorMessageTitle,
157 i18n(
"Folder creation failed" ) );
159 mGenericManager->setContextText(
160 StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxText,
161 ki18np(
"Do you really want to delete this folder and all its sub-folders?",
162 "Do you really want to delete %1 folders and all their sub-folders?" ) );
164 mGenericManager->setContextText(
165 StandardActionManager::DeleteCollections, StandardActionManager::MessageBoxTitle,
166 ki18ncp(
"@title:window",
"Delete folder?",
"Delete folders?" ) );
168 mGenericManager->setContextText(
169 StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageText,
170 ki18n(
"Could not delete folder: %1" ) );
172 mGenericManager->setContextText(
173 StandardActionManager::DeleteCollections, StandardActionManager::ErrorMessageTitle,
174 i18n(
"Folder deletion failed" ) );
176 mGenericManager->setContextText(
177 StandardActionManager::CollectionProperties, StandardActionManager::DialogTitle,
178 ki18nc(
"@title:window",
"Properties of Folder %1" ) );
180 mGenericManager->setContextText(
181 StandardActionManager::DeleteItems, StandardActionManager::MessageBoxText,
182 ki18np(
"Do you really want to delete the selected email?",
183 "Do you really want to delete %1 emails?" ) );
185 mGenericManager->setContextText(
186 StandardActionManager::DeleteItems, StandardActionManager::MessageBoxTitle,
187 ki18ncp(
"@title:window",
"Delete Email?",
"Delete Emails?" ) );
189 mGenericManager->setContextText(
190 StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageText,
191 ki18n(
"Could not delete email: %1" ) );
193 mGenericManager->setContextText(
194 StandardActionManager::DeleteItems, StandardActionManager::ErrorMessageTitle,
195 i18n(
"Email deletion failed" ) );
197 mGenericManager->setContextText(
198 StandardActionManager::CreateResource, StandardActionManager::DialogTitle,
199 i18nc(
"@title:window",
"Add Account" ) );
201 mGenericManager->setContextText(
202 StandardActionManager::CreateResource, StandardActionManager::ErrorMessageText,
203 ki18n(
"Could not create account: %1" ) );
205 mGenericManager->setContextText(
206 StandardActionManager::CreateResource, StandardActionManager::ErrorMessageTitle,
207 i18n(
"Account creation failed" ) );
209 mGenericManager->setContextText(
210 StandardActionManager::DeleteResources, StandardActionManager::MessageBoxText,
211 ki18np(
"Do you really want to delete this account?",
212 "Do you really want to delete %1 accounts?" ) );
214 mGenericManager->setContextText(
215 StandardActionManager::DeleteResources, StandardActionManager::MessageBoxTitle,
216 ki18ncp(
"@title:window",
"Delete Account?",
"Delete Accounts?" ) );
218 mGenericManager->setContextText(
219 StandardActionManager::Paste, StandardActionManager::ErrorMessageText,
220 ki18n(
"Could not paste email: %1" ) );
222 mGenericManager->setContextText(
223 StandardActionManager::Paste, StandardActionManager::ErrorMessageTitle,
224 i18n(
"Paste failed" ) );
226 mGenericManager->setMimeTypeFilter( QStringList() << KMime::Message::mimeType() );
227 mGenericManager->setCapabilityFilter( QStringList() << QLatin1String(
"Resource" ) );
232 delete mGenericManager;
237 const Akonadi::Item::List
selectedItems = mGenericManager->selectedItems();
238 const Akonadi::Collection::List
selectedCollections = mGenericManager->selectedCollections();
240 bool itemIsSelected = !selectedItems.isEmpty();
241 bool collectionIsSelected = !selectedCollections.isEmpty();
243 if ( itemIsSelected ) {
244 bool allMarkedAsImportant =
true;
245 bool allMarkedAsRead =
true;
246 bool allMarkedAsUnread =
true;
247 bool allMarkedAsActionItem =
true;
249 foreach (
const Akonadi::Item &item, selectedItems ) {
253 allMarkedAsImportant =
false;
255 allMarkedAsRead=
false;
257 allMarkedAsUnread =
false;
259 allMarkedAsActionItem =
false;
264 updateMarkAction( action, allMarkedAsRead );
265 if ( allMarkedAsRead )
266 action->setEnabled(
false);
268 action->setEnabled(
true );
273 updateMarkAction( action, allMarkedAsUnread );
274 if ( allMarkedAsUnread )
275 action->setEnabled(
false);
277 action->setEnabled(
true );
282 updateMarkAction( action, allMarkedAsImportant );
283 if ( allMarkedAsImportant )
284 action->setText( i18n(
"Remove Important Mark" ) );
286 action->setText( i18n(
"&Mark Mail as Important" ) );
287 action->setEnabled(
true );
292 updateMarkAction( action, allMarkedAsActionItem );
293 if ( allMarkedAsActionItem )
294 action->setText( i18n(
"Remove Action Item Mark" ) );
296 action->setText( i18n(
"&Mark Mail as Action Item" ) );
297 action->setEnabled(
true );
302 action->setEnabled(
false );
306 action->setEnabled(
false );
310 action->setEnabled(
false );
313 bool enableMarkAllAsRead =
false;
314 bool enableMarkAllAsUnread =
false;
315 bool canDeleteItem =
true;
316 bool isSystemFolder =
false;
317 if ( collectionIsSelected ) {
318 foreach(
const Collection &collection, selectedCollections )
320 if ( collection.isValid() ) {
321 const Akonadi::CollectionStatistics stats = collection.statistics();
322 if ( !enableMarkAllAsRead )
323 enableMarkAllAsRead = (stats.unreadCount() > 0);
324 if ( !enableMarkAllAsUnread )
325 enableMarkAllAsUnread = (stats.count() != stats.unreadCount());
327 canDeleteItem = collection.rights() & Akonadi::Collection::CanDeleteItem;
328 if ( !isSystemFolder ) {
337 if ( enableMarkAllAsRead && enableMarkAllAsUnread && !canDeleteItem && isSystemFolder )
342 if ( isSystemFolder ) {
343 if ( mGenericManager->action( StandardActionManager::DeleteCollections ) ) {
344 mGenericManager->action( StandardActionManager::DeleteCollections )->setEnabled(
false );
355 action->setEnabled( enableMarkAllAsRead );
360 action->setEnabled( enableMarkAllAsUnread );
363 emit mParent->actionStateUpdated();
366 void updateMarkAction( QAction* action,
bool allMarked )
368 QByteArray data = action->data().toByteArray();
370 if ( !data.startsWith(
'!' ) )
373 if ( data.startsWith(
'!' ) )
374 data = data.mid( 1 );
376 action->setData( data );
381 const QAction *action = qobject_cast<QAction*>( mParent->sender() );
384 const Akonadi::Item::List items = mGenericManager->selectedItems();
385 if ( items.isEmpty() )
388 QByteArray typeStr = action->data().toByteArray();
389 kDebug() <<
"Mark mail as: " << typeStr;
392 if ( typeStr.startsWith(
'!' ) ) {
394 typeStr = typeStr.mid( 1 );
401 if ( typeStr ==
"U" ) {
405 }
else if ( typeStr ==
"K" )
407 else if ( typeStr ==
"G" )
410 if ( mInterceptedActions.contains( type ) )
413 MarkAsCommand *command =
new MarkAsCommand( targetStatus, items, invert, mParent );
419 const QAction *action = qobject_cast<QAction*>( mParent->sender() );
422 QByteArray typeStr = action->data().toByteArray();
423 kDebug() <<
"Mark all as: " << typeStr;
425 const Akonadi::Collection::List collections = mGenericManager->selectedCollections();
426 if ( collections.isEmpty() )
433 if ( typeStr.startsWith(
'!' ) ) {
435 typeStr = typeStr.mid( 1 );
439 if ( typeStr ==
"U" ) {
443 }
else if ( typeStr ==
"K" )
445 else if ( typeStr ==
"G" )
448 if ( mInterceptedActions.contains( type ) )
451 MarkAsCommand *command =
new MarkAsCommand( targetStatus, collections, invert, mParent );
455 void slotMoveToTrash()
460 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
463 const Item::List items = mGenericManager->selectedItems();
464 if ( items.isEmpty() )
467 MoveToTrashCommand *command =
new MoveToTrashCommand( mCollectionSelectionModel->model(), items, mParent );
471 void slotMoveAllToTrash()
476 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
479 const Collection::List collections = mGenericManager->selectedCollections();
480 if ( collections.isEmpty() )
483 MoveToTrashCommand *command =
new MoveToTrashCommand( mCollectionSelectionModel->model(), collections, mParent );
487 void slotRemoveDuplicates()
492 const Collection::List collections = mGenericManager->selectedCollections();
493 if ( collections.isEmpty() )
496 RemoveDuplicatesCommand *command =
new RemoveDuplicatesCommand( mCollectionSelectionModel->model(), collections, mParent );
500 void slotEmptyAllTrash()
505 EmptyTrashCommand *command =
new EmptyTrashCommand( const_cast<QAbstractItemModel*>( mCollectionSelectionModel->model() ), mParent );
509 void slotEmptyTrash()
514 if ( mCollectionSelectionModel->selection().indexes().isEmpty() )
517 const Collection::List collections = mGenericManager->selectedCollections();
518 if ( collections.count() != 1 )
521 EmptyTrashCommand *command =
new EmptyTrashCommand( collections.first(), mParent );
525 KActionCollection *mActionCollection;
526 QWidget *mParentWidget;
527 StandardActionManager *mGenericManager;
528 QItemSelectionModel *mCollectionSelectionModel;
529 QItemSelectionModel *mItemSelectionModel;
530 QHash<StandardMailActionManager::Type, KAction*> mActions;
531 QSet<StandardMailActionManager::Type> mInterceptedActions;
537 : QObject( parent ), d( new Private( actionCollection, parent, this ) )
548 d->mCollectionSelectionModel = selectionModel;
549 d->mGenericManager->setCollectionSelectionModel( selectionModel );
551 connect( selectionModel->model(), SIGNAL(rowsInserted(QModelIndex,
int,
int)),
552 SLOT(updateActions()) );
553 connect( selectionModel->model(), SIGNAL(rowsRemoved(QModelIndex,
int,
int)),
554 SLOT(updateActions()) );
555 connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
556 SLOT(updateActions()) );
563 d->mItemSelectionModel = selectionModel;
564 d->mGenericManager->setItemSelectionModel( selectionModel );
566 connect( selectionModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
567 SLOT(updateActions()) );
570 connect( selectionModel->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
571 SLOT(updateActions()) );
578 if ( d->mActions.contains( type ) )
579 return d->mActions.value( type );
585 action =
new KAction( d->mParentWidget );
586 action->setIcon( KIcon( QLatin1String(
"mail-mark-read" ) ) );
587 action->setText( i18n(
"&Mark Mail as Read" ) );
588 action->setIconText( i18n(
"Mark as Read" ) );
589 action->setWhatsThis( i18n(
"Mark selected messages as read" ) );
591 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_as_read" ), action );
592 action->setData( QByteArray(
"R" ) );
593 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAs()) );
596 action =
new KAction( d->mParentWidget );
597 action->setText( i18n(
"&Mark Mail as Unread" ) );
598 action->setIconText( i18n(
"Mark as Unread" ) );
599 action->setIcon( KIcon( QLatin1String(
"mail-mark-unread" ) ) );
601 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_as_unread" ), action );
602 action->setShortcut( Qt::CTRL+Qt::Key_U );
603 action->setData( QByteArray(
"U" ) );
604 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAs()) );
607 action =
new KAction( d->mParentWidget );
608 action->setIcon( KIcon( QLatin1String(
"mail-mark-important" ) ) );
609 action->setText( i18n(
"&Mark Mail as Important" ) );
610 action->setIconText( i18n(
"Mark as Important" ) );
612 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_as_important" ), action );
613 action->setData( QByteArray(
"G" ) );
614 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAs()) );
617 action =
new KAction( d->mParentWidget );
618 action->setText( i18n(
"&Mark Mail as Action Item" ) );
619 action->setIconText( i18n(
"Mark as Action Item" ) );
620 action->setIcon( KIcon( QLatin1String(
"mail-mark-task" ) ) );
622 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_as_action_item" ), action );
623 action->setData( QByteArray(
"K" ) );
624 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAs()) );
627 action =
new KAction( d->mParentWidget );
628 action->setIcon( KIcon( QLatin1String(
"mail-mark-read" ) ) );
629 action->setText( i18n(
"Mark &All Mails as Read" ) );
630 action->setIconText( i18n(
"Mark All as Read" ) );
632 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_all_as_read" ), action );
633 action->setData( QByteArray(
"R" ) );
634 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAllAs()) );
637 action =
new KAction( d->mParentWidget );
638 action->setText( i18n(
"Mark &All Mails as Unread" ) );
639 action->setIconText( i18n(
"Mark All as Unread" ) );
640 action->setIcon( KIcon( QLatin1String(
"mail-mark-unread" ) ) );
642 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_all_as_unread" ), action );
643 action->setData( QByteArray(
"U" ) );
644 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAllAs()) );
647 action =
new KAction( d->mParentWidget );
648 action->setText( i18n(
"Mark &All Mails as Important" ) );
649 action->setIconText( i18n(
"Mark All as Important" ) );
650 action->setIcon( KIcon( QLatin1String(
"mail-mark-important" ) ) );
652 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_all_as_important" ), action );
653 action->setData( QByteArray(
"G" ) );
654 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAllAs()) );
657 action =
new KAction( d->mParentWidget );
658 action->setText( i18n(
"Mark &All Mails as Action Item" ) );
659 action->setIconText( i18n(
"Mark All as Action Item" ) );
660 action->setIcon( KIcon( QLatin1String(
"mail-mark-task" ) ) );
662 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_mark_all_as_action_item" ), action );
663 action->setData( QByteArray(
"K") );
664 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMarkAllAs()) );
667 action =
new KAction( d->mParentWidget );
668 action->setIcon( KIcon( QLatin1String(
"user-trash" ) ) );
669 action->setText( i18n(
"Move to &Trash" ) );
670 action->setShortcut( QKeySequence( Qt::Key_Delete ) );
671 action->setWhatsThis( i18n(
"Move message to trashcan" ) );
673 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_move_to_trash" ), action );
674 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMoveToTrash()) );
677 action =
new KAction( d->mParentWidget );
678 action->setIcon( KIcon( QLatin1String(
"user-trash" ) ) );
679 action->setText( i18n(
"Move All to &Trash" ) );
681 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_move_all_to_trash" ), action );
682 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotMoveAllToTrash()) );
685 action =
new KAction( d->mParentWidget );
686 action->setText( i18n(
"Remove &Duplicate Mails" ) );
687 action->setShortcut( QKeySequence( Qt::CTRL + Qt::Key_Asterisk ) );
689 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_remove_duplicates" ), action );
690 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotRemoveDuplicates()) );
693 action =
new KAction( d->mParentWidget );
694 action->setText( i18n(
"Empty All &Trash Folders" ) );
696 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_empty_all_trash" ), action );
697 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotEmptyAllTrash()) );
700 action =
new KAction( d->mParentWidget );
701 action->setText( i18n(
"E&mpty Trash" ) );
703 d->mActionCollection->addAction( QString::fromLatin1(
"akonadi_empty_trash" ), action );
704 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(slotEmptyTrash()) );
716 return d->mGenericManager->createAction( type );
735 d->mGenericManager->createAllActions();
742 if ( d->mActions.contains( type ) )
743 return d->mActions.value( type );
750 return d->mGenericManager->action( type );
755 d->mGenericManager->setActionText( type, text );
761 d->mInterceptedActions.insert( type );
763 d->mInterceptedActions.remove( type );
768 d->mGenericManager->interceptAction( type, intercept );
773 return d->mGenericManager->selectedCollections();
778 return d->mGenericManager->selectedItems();
783 d->mGenericManager->setFavoriteCollectionsModel( favoritesModel );
788 d->mGenericManager->setFavoriteSelectionModel( selectionModel );
791 void StandardMailActionManager::setCollectionPropertiesPageNames(
const QStringList &names )
793 d->mGenericManager->setCollectionPropertiesPageNames( names );
796 Akonadi::StandardActionManager* StandardMailActionManager::standardActionManager()
const
798 return d->mGenericManager;
802 #include "standardmailactionmanager.moc"