• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
  • editor
kmcomposewin.h
Go to the documentation of this file.
1 /*
2  * This file is part of KMail.
3  * Copyright (c) 2009 Constantin Berzan <exit3219@gmail.com>
4  *
5  * Based on KMail code by:
6  * Copyright (c) 1997 Markus Wuebben <markus.wuebben@kde.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef __KMComposeWin
24 #define __KMComposeWin
25 
26 // KMail includes
27 #include "editor/composer.h"
28 #include "messagecomposer/recipient/recipientseditor.h"
29 
30 // Qt includes
31 #include <QFont>
32 #include <QList>
33 
34 // KDE includes
35 #include <kglobalsettings.h>
36 
37 // LIBKDEPIM includes
38 #include <messagecomposer/composer/kmeditor.h>
39 
40 #include "messagecomposer/sender/messagesender.h"
41 
42 // KDEPIMLIBS includes
43 #include <kmime/kmime_message.h>
44 #include <kmime/kmime_headers.h>
45 
46 // Other includes
47 #include "kleo/enum.h"
48 #include <composer/composerviewbase.h>
49 
50 class QByteArray;
51 class QCheckBox;
52 class QGridLayout;
53 class QLabel;
54 class QPushButton;
55 class QSplitter;
56 
57 class CodecAction;
58 class KMComposeWin;
59 class KMComposerEditor;
60 class KSelectAction;
61 class KAction;
62 class KJob;
63 class KToggleAction;
64 class KUrl;
65 class KRecentFilesAction;
66 class SnippetWidget;
67 class SelectSpecialChar;
68 class AttachmentMissingWarning;
69 class ExternalEditorWarning;
70 
71 namespace boost {
72  template <typename T> class shared_ptr;
73 }
74 
75 namespace Sonnet {
76  class DictionaryComboBox;
77 }
78 
79 namespace KPIMIdentities {
80  class Identity;
81 }
82 
83 namespace KPIMTextEdit {
84  class SelectSpecialChar;
85 }
86 
87 namespace KIO {
88  class Job;
89 }
90 
91 namespace MessageComposer {
92  class ComposerLineEdit;
93  class Composer;
94  class SubjectLineEditWithAutoCorrection;
95 }
96 
97 namespace MailCommon {
98  class FolderRequester;
99 }
100 
101 namespace PimCommon {
102  class TranslatorWidget;
103 }
104 
105 //-----------------------------------------------------------------------------
106 class KMComposeWin : public KMail::Composer
107 {
108  Q_OBJECT
109  Q_CLASSINFO("D-Bus Interface", "org.kde.kmail.mailcomposer")
110 
111  friend class ::KMComposerEditor;
112 
113  private: // mailserviceimpl, kmkernel, kmcommands, callback, kmmainwidget
114  explicit KMComposeWin(const KMime::Message::Ptr &msg, bool lastSignState, bool lastEncryptState, TemplateContext context = NoTemplate,
115  uint identity = 0, const QString & textSelection = QString(),
116  const QString & customTemplate = QString() );
117  ~KMComposeWin();
118 
119  public:
120  static Composer *create( const KMime::Message::Ptr &msg, bool lastSignState, bool lastEncryptState, TemplateContext context = NoTemplate,
121  uint identity = 0, const QString & textSelection = QString(),
122  const QString & customTemplate = QString() );
123 
124  QString dbusObjectPath() const;
125  QString smartQuote( const QString & msg );
126 
131  // TODO clean-up dbus stuff; make the adaptor a friend; etc.
132  public slots:
133 
134  Q_SCRIPTABLE void send( int how );
135 
136  Q_SCRIPTABLE void addAttachmentsAndSend( const KUrl::List & urls,
137  const QString & comment,
138  int how );
139 
140  Q_SCRIPTABLE void addAttachment( const KUrl & url,
141  const QString & comment );
142 
143  Q_SCRIPTABLE void addAttachment( const QString & name,
144  KMime::Headers::contentEncoding cte,
145  const QString& charset,
146  const QByteArray & data,
147  const QByteArray & mimeType );
148 
153  signals:
154  void identityChanged( const KPIMIdentities::Identity &identity );
155 
156 
157  public: // kmkernel, kmcommands, callback
162  void setMessage( const KMime::Message::Ptr &newMsg, bool lastSignState = false, bool lastEncryptState = false,
163  bool mayAutoSign=true, bool allowDecryption=false, bool isModified=false );
164 
165  void setCurrentTransport( int transportId );
166 
172  void setFcc( const QString &idString );
173 
179  void disableWordWrap();
180 
188  void forceDisableHtml();
189 
193  bool isComposing() const { return mComposerBase && mComposerBase->isComposing(); }
194 
198  void setTextSelection( const QString& selection );
199 
203  void setCustomTemplate( const QString& customTemplate );
204 
206  void setSigningAndEncryptionDisabled( bool v )
207  {
208  mSigningAndEncryptionExplicitlyDisabled = v;
209  }
214  void setFolder(const Akonadi::Collection &aFolder ) { mFolder = aFolder; }
218  void setFocusToEditor();
219 
224  void setFocusToSubject();
225 
226  bool insertFromMimeData( const QMimeData *source, bool forceAttachment = false );
227 
228  void setCurrentReplyTo(const QString&);
229  void setCollectionForNewMessage( const Akonadi::Collection& folder);
230 
231  void addExtraCustomHeaders( const QMap<QByteArray, QString> &header);
232 
233  KAction *lowerCaseAction() const { return mLowerCase; }
234  KAction *upperCaseAction() const { return mUpperCase; }
235 
236 
237  private:
241  void writeConfig( void );
242 
243 
248  KMime::Message::Ptr msg() const { return mMsg; }
252  bool isModified() const;
253  bool isComposerModified() const;
254  void changeModifiedState( bool modified );
255 
256 
257 
261  bool inlineSigningEncryptionSelected();
262 
263 
269  static QString prettyMimeType( const QString &type );
270 
271  public slots: // kmkernel, callback
272  void slotSendNow();
276  void slotWordWrapToggled( bool );
277 
278  void slotToggleMarkup();
279  void slotTextModeChanged( KRichTextEdit::Mode );
280  void htmlToolBarVisibilityChanged( bool visible );
281  void slotSpellcheckDoneClearStatus();
282  void autoSaveMessage(bool force = false);
286  void setModified( bool modified );
287  void slotFetchJob(KJob*);
288 
289  private slots:
294  void disableHtml( MessageComposer::ComposerViewBase::Confirmation confirmation );
299  void enableHtml();
300 
304  void slotPrint();
305  void slotPrintPreview();
306 
307  void slotInsertRecentFile( const KUrl & );
308  void slotRecentListFileClear();
309 
310  void slotSendNowVia( QAction * );
311  void slotSendLater();
312  void slotSendLaterVia( QAction * );
313  void getTransportMenu();
314 
318  void slotSaveDraft();
319  void slotSaveTemplate();
320  void slotNewComposer();
321  void slotNewMailReader();
322  void slotClose();
323  void slotHelp();
324  void slotUndo();
325  void slotRedo();
326  void slotCut();
327  void slotCopy();
328  void slotPaste();
329  void slotPasteAsAttachment();
330  void slotMarkAll();
331  void slotTranslatorWasClosed();
332 
333  void slotFolderRemoved( const Akonadi::Collection& );
334  void slotLanguageChanged( const QString &language );
335  void slotFccFolderChanged(const Akonadi::Collection&);
336  void slotEditorTextChanged();
337  void slotOverwriteModeChanged();
341  void slotUpdateFont();
342 
346  void slotAddrBook();
347 
351  void slotInsertFile();
352 
356  void slotSpellcheckConfig();
357 
362  void slotSelectCryptoModule( bool init = false );
363 
367  void slotEditToolbars();
368  void slotUpdateToolbars();
369  void slotEditKeys();
370 
374  void readConfig( bool reload = false );
375 
379  void slotUpdWinTitle();
380 
385  void slotEncryptToggled( bool );
386 
390  void slotSignToggled( bool );
391 
392  void slotView();
393 
400  void slotIdentityChanged( uint uoid, bool initalChange = false );
401 
402  void slotCursorPositionChanged();
403 
404  void slotSpellCheckingStatus( const QString & status );
405 
406  void slotDelayedApplyTemplate( KJob* );
407 
408  void recipientEditorSizeHintChanged();
409  void setMaximumHeaderSize();
410  void slotDoDelayedSend( KJob* );
411 
412  void slotCompletionModeChanged( KGlobalSettings::Completion );
413  void slotConfigChanged();
414 
415  void slotPrintComposeResult( KJob *job );
416 
417  //void slotEncryptChiasmusToggled( bool );
418 
419  void slotSendFailed(const QString& msg , MessageComposer::ComposerViewBase::FailedType type);
420  void slotSendSuccessful();
421 
425  void slotAutoSpellCheckingToggled( bool );
426 
430  void slotUpdateSignatureAndEncrypionStateIndicators();
431 
432  virtual void setAutoSaveFileName( const QString& fileName );
433  void slotSpellCheckingLanguage(const QString& language);
434  void forceAutoSaveMessage();
435  void insertSpecialCharacter();
436  void charSelected(const QChar& c);
437  void slotSaveAsFile();
438  void slotCreateAddressBookContact();
439 
440  void slotAttachMissingFile();
441  void slotCloseAttachMissingFile();
442  void slotExplicitClosedMissingAttachment();
443  void slotVerifyMissingAttachmentTimeout();
444  void slotCheckSendNow();
445 
446  void slotUpperCase();
447  void slotLowerCase();
448 
449  void slotExternalEditorStarted();
450  void slotExternalEditorClosed();
451 
452 
453  public: // kmcommand
454  // FIXME we need to remove these, but they're pure virtual in Composer.
455  void addAttach( KMime::Content *msgPart );
456 
457  const KPIMIdentities::Identity &identity() const;
458 
460  void disableForgottenAttachmentsCheck();
461 
471  void ignoreStickyFields();
472 
473  private:
474  void updateSignature(uint uoid, uint uOldId);
475  Kleo::CryptoMessageFormat cryptoMessageFormat() const;
476  QString overwriteModeStr() const;
477  void printComposeResult( KJob *job, bool preview );
478  void printComposer(bool preview);
484  void rethinkFields( bool fromslot=false );
485 
489  QWidget *connectFocusMoving( QWidget *prev, QWidget *next );
490 
494  void rethinkHeaderLine( int aValue, int aMask, int &aRow,
495  QLabel *aLbl, QWidget *aEdt,
496  QPushButton *aBtn = 0 );
497 
498  void rethinkHeaderLine( int value, int mask, int &row,
499  QLabel *lbl, QWidget *cbx, QCheckBox *chk ); // krazy:exclude=qclasses
500 
501 
505  void applyTemplate(uint uoid , uint uOldId);
506 
510  void setQuotePrefix( uint uoid );
511 
516  bool checkRecipientNumber() const;
517 
518  bool checkTransport() const;
522  void setupActions();
523  void setupStatusBar(QWidget *w);
524  void setupEditor();
525 
529  QString subject() const;
530  QString from() const;
531  QString replyTo() const;
532 
533  void setCharset( const QByteArray &charset );
534  void setAutoCharset();
535 
539  virtual bool queryClose();
540 
545  void setEncryption( bool encrypt, bool setByUser = false );
546 
551  void setSigning( bool sign, bool setByUser = false );
552 
553  MessageComposer::ComposerViewBase::MissingAttachment userForgotAttachment();
554 
562  static void decryptOrStripOffCleartextSignature( QByteArray & );
563 
567  void doSend( MessageComposer::MessageSender::SendMethod method=MessageComposer::MessageSender::SendDefault,
568  MessageComposer::MessageSender::SaveIn saveIn = MessageComposer::MessageSender::SaveInNone );
569 
570  void doDelayedSend( MessageComposer::MessageSender::SendMethod method, MessageComposer::MessageSender::SaveIn saveIn );
571 
572  void changeCryptoAction();
573  void applyComposerSetting( MessageComposer::ComposerViewBase* mComposerBase );
581  MessageComposer::Composer* createSimpleComposer();
582 
583  bool canSignEncryptAttachments() const {
584  return cryptoMessageFormat() != Kleo::InlineOpenPGPFormat;
585  }
586 
587  QString addQuotesToText( const QString &inputText ) const;
588  // helper method for rethinkFields
589  int calcColumnWidth( int which, long allShowing, int width ) const;
590 
591 
595  void initHeader( KMime::Message *message, uint identity=0 );
596 
597  inline bool encryptToSelf();
598 
599  private:
600  QWidget *mMainWidget;
601  Sonnet::DictionaryComboBox *mDictionaryCombo;
602  MessageComposer::ComposerLineEdit *mEdtFrom, *mEdtReplyTo;
603  MessageComposer::SubjectLineEditWithAutoCorrection *mEdtSubject;
604  QLabel *mLblIdentity, *mLblTransport, *mLblFcc;
605  QLabel *mLblFrom, *mLblReplyTo;
606  QLabel *mLblSubject;
607  QLabel *mDictionaryLabel;
608  QCheckBox *mBtnIdentity, *mBtnDictionary, *mBtnTransport, *mBtnFcc;
609  bool mDone;
610 
611  KMime::Message::Ptr mMsg;
612  QGridLayout *mGrid;
613  QString mTextSelection;
614  QString mCustomTemplate;
615  bool mLastSignActionState, mLastEncryptActionState, mSigningAndEncryptionExplicitlyDisabled;
616  bool mLastIdentityHasSigningKey, mLastIdentityHasEncryptionKey;
617  Akonadi::Collection mFolder;
618  long mShowHeaders;
619  bool mForceDisableHtml; // Completely disable any HTML. Useful when sending invitations in the
620  // mail body.
621  int mNumHeaders;
622  QFont mBodyFont, mFixedFont;
623  uint mId;
624  TemplateContext mContext;
625 
626  KRecentFilesAction *mRecentAction;
627 
628  KToggleAction *mSignAction, *mEncryptAction, *mRequestMDNAction;
629  KToggleAction *mUrgentAction, *mAllFieldsAction, *mFromAction;
630  KToggleAction *mReplyToAction;
631  KToggleAction *mSubjectAction;
632  KToggleAction *mIdentityAction, *mTransportAction, *mFccAction;
633  KToggleAction *mWordWrapAction, *mFixedFontAction, *mAutoSpellCheckingAction;
634  KToggleAction *mDictionaryAction, *mSnippetAction, *mTranslateAction;
635 
636  KToggleAction *markupAction;
637 
638  CodecAction *mCodecAction;
639  KSelectAction *mCryptoModuleAction;
640 
641  KAction *mFindText, *mFindNextText, *mReplaceText, *mSelectAll;
642  KAction *mLowerCase;
643  KAction *mUpperCase;
644 
645 
646  QSplitter *mHeadersToEditorSplitter;
647  QWidget* mHeadersArea;
648  QSplitter *mSplitter;
649  QSplitter *mSnippetSplitter;
650  QByteArray mOriginalPreferredCharset;
651 
652  //KToggleAction *mEncryptChiasmusAction;
653 
654  MessageComposer::Composer *mDummyComposer;
655  // used for auto saving, printing, etc. Not for sending, which happens in ComposerViewBase
656  QList< MessageComposer::Composer* > mMiscComposers;
657 
658  int mLabelWidth;
659 
660  QMenu *mActNowMenu;
661  QMenu *mActLaterMenu;
662 
663  QString mdbusObjectPath;
664  static int s_composerNumber;
665 
666  MessageComposer::ComposerViewBase* mComposerBase;
667 
668 
669  SnippetWidget *mSnippetWidget;
670  PimCommon::TranslatorWidget *mTranslatorWidget;
671  QPointer<KPIMTextEdit::SelectSpecialChar> mSelectSpecialChar;
672  AttachmentMissingWarning *mAttachmentMissing;
673  ExternalEditorWarning *mExternalEditorWarning;
674  QTimer *m_verifyMissingAttachment;
675  QLabel *mSignatureStateIndicator;
676  QLabel *mEncryptionStateIndicator;
677  MailCommon::FolderRequester *mFccFolder;
678  bool mPreventFccOverwrite;
679  bool mCheckForForgottenAttachments;
680  bool mIgnoreStickyFields;
681  bool mWasModified;
682  Akonadi::Collection mCollectionForNewMessage;
683  QMap<QByteArray, QString> mExtraHeaders;
684 };
685 
686 #endif
KMComposeWin::setFolder
void setFolder(const Akonadi::Collection &aFolder)
If this folder is set, the original message is inserted back after canceling.
Definition: kmcomposewin.h:214
KMComposeWin::htmlToolBarVisibilityChanged
void htmlToolBarVisibilityChanged(bool visible)
Definition: kmcomposewin.cpp:3041
KMComposeWin::slotSpellcheckDoneClearStatus
void slotSpellcheckDoneClearStatus()
Definition: kmcomposewin.cpp:3074
KMComposeWin::setTextSelection
void setTextSelection(const QString &selection)
Set the text selection the message is a response to.
Definition: kmcomposewin.cpp:1791
ExternalEditorWarning
Definition: externaleditorwarning.h:23
KMail::Composer::NoTemplate
Definition: composer.h:44
KMComposeWin::disableWordWrap
void disableWordWrap()
Disables word wrap completely.
Definition: kmcomposewin.cpp:2568
KMComposeWin::slotWordWrapToggled
void slotWordWrapToggled(bool)
Switch wordWrap on/off.
Definition: kmcomposewin.cpp:2559
KMComposeWin::lowerCaseAction
KAction * lowerCaseAction() const
Definition: kmcomposewin.h:233
KMComposeWin::create
static Composer * create(const KMime::Message::Ptr &msg, bool lastSignState, bool lastEncryptState, TemplateContext context=NoTemplate, uint identity=0, const QString &textSelection=QString(), const QString &customTemplate=QString())
Definition: kmcomposewin.cpp:177
KMComposeWin::addAttachmentsAndSend
Q_SCRIPTABLE void addAttachmentsAndSend(const KUrl::List &urls, const QString &comment, int how)
Definition: kmcomposewin.cpp:564
QWidget
KMComposeWin::setCollectionForNewMessage
void setCollectionForNewMessage(const Akonadi::Collection &folder)
Definition: kmcomposewin.cpp:1077
KMComposeWin::identity
const KPIMIdentities::Identity & identity() const
Definition: kmcomposewin.cpp:1956
KMComposeWin::isComposing
bool isComposing() const
Returns true while the message composing is in progress.
Definition: kmcomposewin.h:193
KMComposeWin
Definition: kmcomposewin.h:106
KMComposeWin::addAttachment
Q_SCRIPTABLE void addAttachment(const KUrl &url, const QString &comment)
Definition: kmcomposewin.cpp:576
KMComposeWin::disableForgottenAttachmentsCheck
void disableForgottenAttachmentsCheck()
Don't check for forgotten attachments for a mail, eg.
Definition: kmcomposewin.cpp:2582
KMail::Composer
Definition: composer.h:37
KMComposeWin::identityChanged
void identityChanged(const KPIMIdentities::Identity &identity)
End of D-Bus callable stuff.
KMComposeWin::forceDisableHtml
void forceDisableHtml()
Disables HTML completely.
Definition: kmcomposewin.cpp:2574
boost::shared_ptr
Definition: kmcomposewin.h:72
KMComposeWin::setCurrentReplyTo
void setCurrentReplyTo(const QString &)
Definition: kmcomposewin.cpp:1565
KMComposeWin::setCustomTemplate
void setCustomTemplate(const QString &customTemplate)
Set custom template to be used for the message.
Definition: kmcomposewin.cpp:1797
KMComposeWin::smartQuote
QString smartQuote(const QString &msg)
Definition: kmcomposewin.cpp:2131
KMComposeWin::setModified
void setModified(bool modified)
Set whether the message should be treated as modified or not.
Definition: kmcomposewin.cpp:1832
KMComposerEditor
Definition: kmcomposereditor.h:31
QMimeData
CodecAction
Definition: codecaction.h:31
KMComposeWin::slotFetchJob
void slotFetchJob(KJob *)
Definition: kmcomposewin.cpp:2257
KMComposeWin::setFcc
void setFcc(const QString &idString)
Use the given folder as sent-mail folder if the given folder exists.
Definition: kmcomposewin.cpp:1803
KMComposeWin::slotTextModeChanged
void slotTextModeChanged(KRichTextEdit::Mode)
Definition: kmcomposewin.cpp:3032
KMComposeWin::upperCaseAction
KAction * upperCaseAction() const
Definition: kmcomposewin.h:234
KMComposeWin::send
Q_SCRIPTABLE void send(int how)
Start of D-Bus callable stuff.
Definition: kmcomposewin.cpp:548
QMenu
KMComposeWin::setMessage
void setMessage(const KMime::Message::Ptr &newMsg, bool lastSignState=false, bool lastEncryptState=false, bool mayAutoSign=true, bool allowDecryption=false, bool isModified=false)
Set the message the composer shall work with.
Definition: kmcomposewin.cpp:1573
KMComposeWin::setFocusToSubject
void setFocusToSubject()
Sets the focus to the subject line edit.
Definition: kmcomposewin.cpp:3246
KMComposeWin::setCurrentTransport
void setCurrentTransport(int transportId)
Definition: kmcomposewin.cpp:1560
KMComposeWin::addAttach
void addAttach(KMime::Content *msgPart)
Add an attachment to the list.
Definition: kmcomposewin.cpp:1970
KMail::Composer::TemplateContext
TemplateContext
Definition: composer.h:44
KMComposeWin::setFocusToEditor
void setFocusToEditor()
Sets the focus to the edit-widget.
Definition: kmcomposewin.cpp:3239
KMComposeWin::addExtraCustomHeaders
void addExtraCustomHeaders(const QMap< QByteArray, QString > &header)
Definition: kmcomposewin.cpp:3530
KMComposeWin::slotToggleMarkup
void slotToggleMarkup()
Definition: kmcomposewin.cpp:3026
composer.h
KMComposeWin::slotSendNow
void slotSendNow()
Definition: kmcomposewin.cpp:2903
QLabel
SnippetWidget
Definition: snippetwidget.h:31
AttachmentMissingWarning
Definition: attachmentmissingwarning.h:23
KMail::Composer::Composer
Composer(const char *name=0)
Definition: composer.h:41
KMComposeWin::autoSaveMessage
void autoSaveMessage(bool force=false)
Definition: kmcomposewin.cpp:1917
KMComposeWin::ignoreStickyFields
void ignoreStickyFields()
Ignore the "sticky" setting of the transport combo box and prefer the X-KMail-Transport header field ...
Definition: kmcomposewin.cpp:2587
KMComposeWin::setSigningAndEncryptionDisabled
void setSigningAndEncryptionDisabled(bool v)
Disabled signing and encryption completely for this composer window.
Definition: kmcomposewin.h:206
KJob
QMap< QByteArray, QString >
KMComposeWin::insertFromMimeData
bool insertFromMimeData(const QMimeData *source, bool forceAttachment=false)
Definition: kmcomposewin.cpp:2137
QList< MessageComposer::Composer * >
KMComposeWin::dbusObjectPath
QString dbusObjectPath() const
Definition: kmcomposewin.cpp:533
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:52 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal