Commit e5563d54 authored by René J.V. Bertin's avatar René J.V. Bertin

Merge branch 'KDE/4.14' of git://anongit.kde.org/kdepim into KDE/4.14

parents 6305d1c6 569b43cc
......@@ -10,7 +10,7 @@ Comment[el]=Πράκτορας υπενθύμισης συνέχισης επι
Comment[en_GB]=Followup reminder agent
Comment[es]=Seguimiento de agente de recordatorio
Comment[et]=Vastamise meeldetuletuse agent
Comment[fi]=Vastaamisesta muistuttaja
Comment[fi]=Vastaamisen seurannasta muistuttaja
Comment[fr]=Agent de rappel des messages suivis
Comment[gl]=Axente de lembranzas de seguimento
Comment[hu]=Nyomkövető emlékeztető ügynök
......
......@@ -9,7 +9,7 @@ Name[el]=Πράκτορας υπενθύμισης συνέχισης επικο
Name[en_GB]=Followup Reminder Agent
Name[es]=Seguimiento de agente de recordatorio
Name[et]=Vastamise meeldetuletuse agent
Name[fi]=Vastaamisesta muistuttaja
Name[fi]=Vastaamisen seurannasta muistuttaja
Name[fr]=Agent de rappel des messages suivis
Name[gl]=Axente de lembranzas de seguimento
Name[hu]=Nyomkövető emlékeztető ügynök
......@@ -43,7 +43,7 @@ Comment[el]=Ο πράκτορας υπενθύμισης συνέχισης επ
Comment[en_GB]=Followup Reminder Agent allows to remind you when an email was not answered.
Comment[es]=El seguimiento de agente de recordatorio le permite recordar cuando no se ha respondido a un correo.
Comment[et]=Vastamise meeldetuletuse agent laseb meelde tuletada, kui sa pole kirjale vastust saanud.
Comment[fi]=Vastaamisesta muistuttaja voi muistuttaa sinua, kun sähköpostiin ei ole vastattu.
Comment[fi]=Vastaamisen seurannasta muistuttaja voi muistuttaa sinua, kun sähköpostiin ei ole vastattu.
Comment[fr]=L'agent de rappel des messages suivis permet de se rappeler lorsqu'il n'y a pas eu de réponse à un courriel.
Comment[gl]=O Axente de lembranzas de seguimento permite lembrarlle cando non se respondeu a unha mensaxe de correo.
Comment[hu]=A Nyomkövető emlékeztető ügynök lehetővé teszi, hogy emlékeztesse önt, ha egy levél nem lett megválaszolva.
......
......@@ -187,6 +187,7 @@ void FollowUpReminderInfoWidget::customContextMenuRequested(const QPoint &pos)
QAction *showMessage = 0;
if (mailItem && mailItem->data(0, AnswerItemFound).toBool()) {
showMessage = menu.addAction(i18n("Show Message"));
menu.addSeparator();
}
QAction *deleteItem = menu.addAction(KIcon(QLatin1String("edit-delete")), i18n("Delete"));
QAction *result = menu.exec(QCursor::pos());
......
......@@ -134,8 +134,10 @@ Action=Popup
Name=An error occurred during filtering
Name[ca]=S'ha detectat un error durant el filtratge
Name[de]=Beim Filtern ist ein Fehler aufgetreten
Name[en_GB]=An error occurred during filtering
Name[es]=Ocurrió un error durante el filtrado
Name[fi]=Suodattamisen aikana tapahtui virhe
Name[it]=Si è verificato un errore durante il filtraggio
Name[nl]=Er is een fout opgetreden bij het filteren
Name[pl]=Podczas filtrowania wystąpił błąd
Name[pt]=Ocorreu um erro durante a filtragem
......
......@@ -435,12 +435,12 @@ class EVENTVIEWS_EXPORT EventView : public QWidget
/**
* Copy the incidence to the specified resource.
*/
void copyIncidenceToResourceSignal( const Akonadi::Item &, const QString & );
void copyIncidenceToResourceSignal( const Akonadi::Item &, const Akonadi::Collection & );
/**
* Move the incidence to the specified resource.
*/
void moveIncidenceToResourceSignal( const Akonadi::Item &, const QString & );
void moveIncidenceToResourceSignal( const Akonadi::Item &, const Akonadi::Collection & );
/** Dissociate from a recurring incidence the occurrence on the given
* date to a new incidence or dissociate all occurrences from the
......
......@@ -67,6 +67,7 @@ GenericName[ga]=Feidhmchlár KDE4
GenericName[gl]=Unha aplicación do KDE4
GenericName[hu]=KDE4-alkalmazás
GenericName[ia]=Un application de KDE 4
GenericName[it]=Un'applicazione KDE4
GenericName[ja]=KDE4 アプリケーション
GenericName[kk]=KDE4 қолданбасы
GenericName[km]=កម្មវិធី​របស់ KDE4
......
KAlarm Change Log
=== Version 2.10.12 --- 30 September 2014 ===
=== Version 2.10.12 (KDE 4.14.2) --- 30 September 2014 ===
- Make New Audio Alarm dialogue use sound file repeat preference setting.
=== Version 2.10.11 (KDE 4.14.0) --- 12 August 2014 ===
......
......@@ -186,6 +186,7 @@ if (KDEPIM_BUILD_DESKTOP)
util.cpp
messageactions.cpp
foldershortcutactionmanager.cpp
kmconfigureagent.cpp
${kmailprivate_attributes_LIB_SRCS}
${kmailprivate_tag_LIB_SRCS}
${kmailprivate_job_LIB_SRCS}
......@@ -231,6 +232,10 @@ if (KDEPIM_BUILD_DESKTOP)
${CMAKE_SOURCE_DIR}/kmail/dbusinterface/org.freedesktop.Akonadi.NewMailNotifier.xml
)
qt4_add_dbus_interfaces(kmailprivate_LIB_SRCS
${CMAKE_SOURCE_DIR}/agents/followupreminderagent/org.freedesktop.Akonadi.FollowUpReminder.xml
)
kde4_add_ui_files(kmailprivate_LIB_SRCS
ui/composercryptoconfiguration.ui
......
......@@ -46,8 +46,6 @@ public:
HDR_FROM = 0x01,
HDR_REPLY_TO = 0x02,
HDR_SUBJECT = 0x20,
HDR_NEWSGROUPS = 0x40,
HDR_FOLLOWUP_TO = 0x80,
HDR_IDENTITY = 0x100,
HDR_TRANSPORT = 0x200,
HDR_FCC = 0x400,
......
......@@ -226,6 +226,7 @@ KMComposeWin::KMComposeWin( const KMime::Message::Ptr &aMsg, bool lastSignState,
mLabelWidth( 0 ),
mComposerBase( 0 ),
mSelectSpecialChar( 0 ),
m_verifyMissingAttachment( 0 ),
mPreventFccOverwrite( false ),
mCheckForForgottenAttachments( true ),
mIgnoreStickyFields( false ),
......@@ -237,7 +238,6 @@ KMComposeWin::KMComposeWin( const KMime::Message::Ptr &aMsg, bool lastSignState,
mStatusBarLabelToggledOverrideMode(0),
mStatusBarLabelSpellCheckingChangeMode(0)
{
m_verifyMissingAttachment = 0;
mComposerBase = new MessageComposer::ComposerViewBase( this, this );
mComposerBase->setIdentityManager( kmkernel->identityManager() );
......@@ -424,13 +424,13 @@ KMComposeWin::KMComposeWin( const KMime::Message::Ptr &aMsg, bool lastSignState,
mAttachmentMissing = new AttachmentMissingWarning(this);
connect(mAttachmentMissing, SIGNAL(attachMissingFile()), this, SLOT(slotAttachMissingFile()));
connect(mAttachmentMissing, SIGNAL(closeAttachMissingFile()), this, SLOT(slotCloseAttachMissingFile()));
connect(mAttachmentMissing, SIGNAL(explicitClosedMissingAttachment()), this, SLOT(slotExplicitClosedMissingAttachment()));
v->addWidget(mAttachmentMissing);
if (GlobalSettings::self()->showForgottenAttachmentWarning()) {
m_verifyMissingAttachment = new QTimer(this);
m_verifyMissingAttachment->start(1000*5);
m_verifyMissingAttachment->setSingleShot(true);
m_verifyMissingAttachment->setInterval(1000*5);
connect( m_verifyMissingAttachment, SIGNAL(timeout()), this, SLOT(slotVerifyMissingAttachmentTimeout()) );
}
connect( attachmentController, SIGNAL(fileAttached()), mAttachmentMissing, SLOT(slotFileAttached()) );
......@@ -524,6 +524,9 @@ void KMComposeWin::slotEditorTextChanged()
mFindNextText->setEnabled( textIsNotEmpty );
mReplaceText->setEnabled( textIsNotEmpty );
mSelectAll->setEnabled( textIsNotEmpty );
if (m_verifyMissingAttachment && !m_verifyMissingAttachment->isActive()) {
m_verifyMissingAttachment->start();
}
}
//-----------------------------------------------------------------------------
......@@ -3567,19 +3570,10 @@ void KMComposeWin::slotAttachMissingFile()
mComposerBase->attachmentController()->showAddAttachmentDialog();
}
void KMComposeWin::slotCloseAttachMissingFile()
{
if(m_verifyMissingAttachment) {
m_verifyMissingAttachment->start();
}
}
void KMComposeWin::slotVerifyMissingAttachmentTimeout()
{
if( mComposerBase->hasMissingAttachments( GlobalSettings::self()->attachmentKeywords() )) {
mAttachmentMissing->animatedShow();
} else {
m_verifyMissingAttachment->start();
}
}
......
......@@ -438,7 +438,6 @@ private slots:
void slotCreateAddressBookContact();
void slotAttachMissingFile();
void slotCloseAttachMissingFile();
void slotExplicitClosedMissingAttachment();
void slotVerifyMissingAttachmentTimeout();
void slotCheckSendNow();
......
......@@ -2,7 +2,7 @@
the same menu entries at the same place in KMail and Kontact -->
<!DOCTYPE kpartgui>
<kpartgui version="500" name="kmmainwin" >
<kpartgui version="501" name="kmmainwin" >
<MenuBar>
<Menu noMerge="1" name="file" >
<text>&amp;File</text>
......@@ -32,6 +32,7 @@
<Action name="send_queued" />
<Action name="send_queued_via" />
<Action name="message_delayed"/>
<Action name="followup_reminder_messages"/>
<Separator/>
<Action name="file_quit" />
</Menu>
......
/*
Copyright (c) 2014 Montel Laurent <montel@kde.org>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "kmconfigureagent.h"
#include <KMessageBox>
#include <KLocalizedString>
#include "archivemailagentinterface.h"
#include "sendlateragentinterface.h"
#include "followupreminderinterface.h"
#include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusReply>
KMConfigureAgent::KMConfigureAgent(QWidget *parentWidget, QObject *parent)
: QObject(parent),
mParentWidget(parentWidget)
{
}
KMConfigureAgent::~KMConfigureAgent()
{
}
void KMConfigureAgent::slotConfigureAutomaticArchiving()
{
OrgFreedesktopAkonadiArchiveMailAgentInterface archiveMailInterface(QLatin1String("org.freedesktop.Akonadi.ArchiveMailAgent"), QLatin1String("/ArchiveMailAgent"),QDBusConnection::sessionBus(), this);
if (archiveMailInterface.isValid()) {
archiveMailInterface.showConfigureDialog( (qlonglong)mParentWidget->winId() );
} else {
KMessageBox::error(mParentWidget,i18n("Archive Mail Agent was not registered."));
}
}
void KMConfigureAgent::slotConfigureSendLater()
{
OrgFreedesktopAkonadiSendLaterAgentInterface sendLaterInterface(QLatin1String("org.freedesktop.Akonadi.SendLaterAgent"), QLatin1String("/SendLaterAgent"),QDBusConnection::sessionBus(), this);
if (sendLaterInterface.isValid()) {
sendLaterInterface.showConfigureDialog( (qlonglong)mParentWidget->winId() );
} else {
KMessageBox::error(mParentWidget,i18n("Send Later Agent was not registered."));
}
}
void KMConfigureAgent::slotConfigureFollowupReminder()
{
OrgFreedesktopAkonadiFollowUpReminderAgentInterface followUpInterface(QLatin1String("org.freedesktop.Akonadi.FollowUpReminder"), QLatin1String("/FollowUpReminder"),QDBusConnection::sessionBus(), this);
if (followUpInterface.isValid()) {
followUpInterface.showConfigureDialog( (qlonglong)mParentWidget->winId() );
} else {
KMessageBox::error(mParentWidget,i18n("Followup Reminder Agent was not registered."));
}
}
/*
Copyright (c) 2014 Montel Laurent <montel@kde.org>
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef KMCONFIGUREAGENT_H
#define KMCONFIGUREAGENT_H
#include <QObject>
class KMConfigureAgent : public QObject
{
Q_OBJECT
public:
explicit KMConfigureAgent(QWidget *parentWidget, QObject *parent=0);
~KMConfigureAgent();
public Q_SLOTS:
void slotConfigureSendLater();
void slotConfigureAutomaticArchiving();
void slotConfigureFollowupReminder();
private:
QWidget *mParentWidget;
};
#endif // KMCONFIGUREAGENT_H
......@@ -53,9 +53,7 @@ using KSieveUi::SieveDebugDialog;
#include "collectionpage/collectionviewpage.h"
#include "collectionpage/collectionmailinglistpage.h"
#include "tag/tagselectdialog.h"
#include "archivemailagentinterface.h"
#include "job/createnewcontactjob.h"
#include "sendlateragentinterface.h"
#include "folderarchive/folderarchiveutil.h"
#include "folderarchive/folderarchivemanager.h"
......@@ -97,7 +95,7 @@ using KSieveUi::SieveDebugDialog;
#include "widgets/displaymessageformatactionmenu.h"
#include "ksieveui/vacation/vacationmanager.h"
#include "kmconfigureagent.h"
// LIBKDEPIM includes
#include "progresswidget/progressmanager.h"
......@@ -196,7 +194,6 @@ using KSieveUi::SieveDebugDialog;
#include <QDBusPendingCallWatcher>
// System includes
#include <assert.h>
#include <errno.h> // ugh
#include <akonadi/standardactionmanager.h>
#include <job/removeduplicatemailjob.h>
......@@ -238,6 +235,7 @@ KMMainWidget::KMMainWidget( QWidget *parent, KXMLGUIClient *aGUIClient,
mFolderDisplayFormatPreference(MessageViewer::Viewer::UseGlobalSetting),
mSearchMessages( 0 )
{
mConfigAgent = new KMConfigureAgent(this, this);
// must be the first line of the constructor:
mStartupDone = false;
mWasEverShown = false;
......@@ -611,8 +609,8 @@ void KMMainWidget::writeFolderConfig()
void KMMainWidget::layoutSplitters()
{
// This function can only be called when the old splitters are already deleted
assert( !mSplitter1 );
assert( !mSplitter2 );
Q_ASSERT( !mSplitter1 );
Q_ASSERT( !mSplitter2 );
// For some reason, this is necessary here so that the copy action still
// works after changing the folder layout.
......@@ -3094,13 +3092,19 @@ void KMMainWidget::setupActions()
{
KAction *action = new KAction(i18n("&Configure Automatic Archiving..."), this);
actionCollection()->addAction(QLatin1String("tools_automatic_archiving"), action );
connect(action, SIGNAL(triggered(bool)), SLOT(slotConfigureAutomaticArchiving()));
connect(action, SIGNAL(triggered(bool)), mConfigAgent, SLOT(slotConfigureAutomaticArchiving()));
}
{
KAction *action = new KAction(i18n("Delayed Messages..."), this);
actionCollection()->addAction(QLatin1String("message_delayed"), action );
connect(action, SIGNAL(triggered(bool)), SLOT(slotConfigureSendLater()));
connect(action, SIGNAL(triggered(bool)), mConfigAgent, SLOT(slotConfigureSendLater()));
}
{
KAction *action = new KAction(i18n("Followup Reminder Messages..."), this);
actionCollection()->addAction(QLatin1String("followup_reminder_messages"), action );
connect(action, SIGNAL(triggered(bool)), mConfigAgent, SLOT(slotConfigureFollowupReminder()));
}
......@@ -4730,26 +4734,6 @@ void KMMainWidget::savePaneSelection()
}
}
void KMMainWidget::slotConfigureAutomaticArchiving()
{
OrgFreedesktopAkonadiArchiveMailAgentInterface archiveMailInterface(QLatin1String("org.freedesktop.Akonadi.ArchiveMailAgent"), QLatin1String("/ArchiveMailAgent"),QDBusConnection::sessionBus(), this);
if (archiveMailInterface.isValid()) {
archiveMailInterface.showConfigureDialog( (qlonglong)winId() );
} else {
KMessageBox::error(this,i18n("Archive Mail Agent was not registered."));
}
}
void KMMainWidget::slotConfigureSendLater()
{
OrgFreedesktopAkonadiSendLaterAgentInterface sendLaterInterface(QLatin1String("org.freedesktop.Akonadi.SendLaterAgent"), QLatin1String("/SendLaterAgent"),QDBusConnection::sessionBus(), this);
if (sendLaterInterface.isValid()) {
sendLaterInterface.showConfigureDialog( (qlonglong)winId() );
} else {
KMessageBox::error(this,i18n("Send Later Agent was not registered."));
}
}
void KMMainWidget::updatePaneTagComboBox()
{
if (mMessagePane) {
......
......@@ -48,7 +48,7 @@ class Message;
class KUrl;
class QVBoxLayout;
class QSplitter;
class KMConfigureAgent;
class DisplayMessageFormatActionMenu;
class QMenu;
class KAction;
......@@ -426,11 +426,9 @@ protected slots:
void slotCollectionChanged( const Akonadi::Collection&, const QSet<QByteArray>& );
void slotCreateNewTab( bool );
void slotUpdateActionsAfterMailChecking();
void slotConfigureAutomaticArchiving();
void slotExportData();
void slotCreateAddressBookContact();
void slotOpenRecentMsg(const KUrl& url);
void slotConfigureSendLater();
private:
void checkAkonadiServerManagerState();
......@@ -629,6 +627,7 @@ private:
DisplayMessageFormatActionMenu *mDisplayMessageFormatMenu;
MessageViewer::Viewer::DisplayFormatMessage mFolderDisplayFormatPreference;
KAction *mSearchMessages;
KMConfigureAgent *mConfigAgent;
};
#endif
......
......@@ -2,7 +2,7 @@
the same menu entries at the same place in KMail and Kontact -->
<!DOCTYPE kpartgui>
<kpartgui version="500" name="kmmainwin" >
<kpartgui version="501" name="kmmainwin" >
<MenuBar>
<Menu noMerge="1" name="file" >
<text>&amp;File</text>
......@@ -32,6 +32,7 @@
<Action name="send_queued" />
<Action name="send_queued_via" />
<Action name="message_delayed"/>
<Action name="followup_reminder_messages"/>
<Separator/>
<Action name="file_quit" />
</Menu>
......
......@@ -106,7 +106,8 @@ void insertLibraryCataloguesAndIcons() {
KLocale * l = KGlobal::locale();
KIconLoader * il = KIconLoader::global();
for ( unsigned int i = 0 ; i < sizeof catalogs / sizeof *catalogs ; ++i ) {
unsigned int catalogSize = (sizeof catalogs / sizeof *catalogs);
for ( unsigned int i = 0 ; i < catalogSize ; ++i ) {
l->insertCatalog( QLatin1String(catalogs[i]) );
il->addAppDir( QLatin1String(catalogs[i]) );
}
......
......@@ -20,12 +20,6 @@
#include "kmail_export.h"
extern "C" {
KMAIL_EXPORT void kmsetSignalHandler( void (*handler)(int) );
KMAIL_EXPORT void kmsignalHandler( int sigId );
KMAIL_EXPORT void kmcrashHandler( int sigId );
}
namespace KMail {
KMAIL_EXPORT void checkConfigUpdates();
KMAIL_EXPORT void insertLibraryCataloguesAndIcons();
......
......@@ -223,16 +223,6 @@ QColor KMail::Util::quoteL3Color()
}
void KMail::Util::reduceQuery(QString &query)
{
QRegExp rx(QLatin1String("<[\\w]+://[\\w\\d-_.]+(/[\\d\\w/-._]+/)*([\\w\\d-._]+)#([\\w\\d]+)>"));
query.replace(rx,QLatin1String("\\2:\\3"));
query.replace( QLatin1String("rdf-schema:"), QLatin1String("rdfs:") );
query.replace( QLatin1String("22-rdf-syntax-ns:"), QLatin1String("rdf:") );
query.replace( QLatin1String("XMLSchema:"), QLatin1String("xsd:") );
query = query.simplified();
}
void KMail::Util::migrateFromKMail1()
{
// Akonadi migration
......
......@@ -102,7 +102,6 @@ QColor misspelledColor();
QColor quoteL1Color();
QColor quoteL2Color();
QColor quoteL3Color();
void reduceQuery(QString &query);
void migrateFromKMail1();
}
}
......
[Global]
IconName=knotes
Comment=notes
Comment[bs]=bilješke
Comment[ca]=notes
Comment[ca@valencia]=notes
Comment[cs]=poznámky
Comment[da]=noter
Comment[de]=Notizen
Comment[el]=σημειώσεις
Comment[en_GB]=notes
Comment[es]=notas
Comment[et]=sedelid
Comment[fi]=muistiinpanot
Comment[fr]=Notes
Comment[gl]=notas
Comment[hu]=jegyzetek
Comment[ia]=notas
Comment[it]=note
Comment[nb]=notater
Comment[nds]=Notizen
Comment[nl]=notities
Comment[pl]=notatki
Comment[pt]=notas
Comment[pt_BR]=notas
Comment[ru]=Заметки
Comment[sk]=poznámky
Comment[sr]=Белешке
Comment[sr@ijekavian]=Белешке
Comment[sr@ijekavianlatin]=Beleške
Comment[sr@latin]=Beleške
Comment[sv]=anteckningar
Comment[tr]=notlar
Comment[uk]=нотатки
Comment[x-test]=xxnotesxx
Comment[zh_TW]=便條
[Event/receivednote]
Name=Received note
Name[bs]=Primljena bilješka
Name[ca]=S'ha rebut una nota
Name[ca@valencia]=S'ha rebut una nota
Name[da]=Modtog en note
Name[de]=Erhaltene Notiz
Name[el]=Σημείωση λήφθηκε
Name[en_GB]=Received note
Name[es]=Nota recibida
Name[et]=Saadi sedel
Name[fi]=Muistiinpano vastaanotettu
Name[fr]=Notes reçues
Name[gl]=Nota recibida
Name[hu]=Fogadott jegyzet
Name[ia]=Nota recipite
Name[it]=Nota ricevuta
Name[nb]=Mottatt notat
Name[nds]=Notiz kregen
Name[nl]=Ontvangen notitie
Name[pl]=Otrzymana notatka
Name[pt]=Nota recebida
Name[pt_BR]=Nota recebida
Name[ru]=Получена заметка
Name[sk]=Prijatá poznámka
Name[sr]=Примљена белешка
Name[sr@ijekavian]=Примљена белешка
Name[sr@ijekavianlatin]=Primljena beleška
Name[sr@latin]=Primljena beleška
Name[sv]=Mottagen anteckning
Name[tr]=Alınan not
Name[uk]=Отримано нотатку
Name[x-test]=xxReceived notexx
Name[zh_TW]=接收到便條
Action=Popup
+-----------------------+
| K O R G A N I Z E R |
+-----------------------+
version 3.3 pre
http://korganizer.kde.org
Next release: KDEPIM-3.3 (something like May 2004)
QUICK NOTES ON WHAT'S NEW IN THE DIFFERENT VERSIONS:
* Official 3.2 release (January 2004)
- New Features:
- Support for multiple calendars and todo lists. Korganizer can now
transparently merge calendar data from different files or other calendar
data sources for example calendars on the web. They can conveniently
activated, deactivated, added and removed from the graphical user
interface.
- Kontact integration. KOrganizer now is fully integrated with Kontact, the
complete KDE personal information management application. Within Kontact
some additional features are available like conversion of mails to events