diff --git a/src/akonadi/CMakeLists.txt b/src/akonadi/CMakeLists.txt --- a/src/akonadi/CMakeLists.txt +++ b/src/akonadi/CMakeLists.txt @@ -38,4 +38,5 @@ ${KDEPIMLIBS_AKONADI_NOTES_LIBS} ${KDEPIMLIBS_KCALCORE_LIBS} ${KDEPIMLIBS_KMIME_LIBS} + ${KDEPIMLIBS_KPIMIDENTITIES_LIBS} ) diff --git a/src/akonadi/akonadimessaging.cpp b/src/akonadi/akonadimessaging.cpp --- a/src/akonadi/akonadimessaging.cpp +++ b/src/akonadi/akonadimessaging.cpp @@ -25,15 +25,24 @@ #include "akonadimessaging.h" #include +#include +#include +#include +#include #include +#include "utils/mem_fn.h" + using namespace Akonadi; Messaging::Messaging() : m_itip(new ITIPHandler) { m_itip->setShowDialogsOnError(true); + + auto calendar = new ETMCalendar(QStringList() << KCalCore::Todo::todoMimeType()); + m_itip->setCalendar(CalendarBase::Ptr(calendar)); } Messaging::~Messaging() @@ -48,8 +57,24 @@ QWidget *window = Q_NULLPTR; if (!QApplication::topLevelWidgets().isEmpty()) { - window = QApplication::topLevelWidgets().first(); + window = QApplication::activeWindow(); } - m_itip->sendiTIPMessage(KCalCore::iTIPRequest, todo, window); + KPIMIdentities::IdentityManager identities(true); + auto emails = QStringList(); + std::transform(identities.begin(), identities.end(), + std::back_inserter(emails), + Utils::mem_fn(&KPIMIdentities::Identity::fullEmailAddr)); + const auto defaultIndex = emails.indexOf(identities.defaultIdentity().fullEmailAddr()); + const auto email = QInputDialog::getItem(window, + QObject::tr("Choose an identity"), + QObject::tr("Choose the identity to use for the groupware message"), + emails, + defaultIndex, + false); + + if (!email.isEmpty()) { + todo->setOrganizer(email); + m_itip->sendiTIPMessage(KCalCore::iTIPRequest, todo, window); + } }