summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2009-06-15 09:44:59 (GMT)
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2009-06-15 09:44:59 (GMT)
commit3a0294a449ee4bf226d7396fbcf0c7c647bfd909 (patch)
tree472f0a1e0194342de23390ab3ea4f73a404b5cb6 /src
parentb36117b3ca028da664075b2d249f2e106e54a8f4 (diff)
parent47ec0f00869019fd7ea08577b9906209dd4bdf55 (diff)
downloadQt-3a0294a449ee4bf226d7396fbcf0c7c647bfd909.zip
Qt-3a0294a449ee4bf226d7396fbcf0c7c647bfd909.tar.gz
Qt-3a0294a449ee4bf226d7396fbcf0c7c647bfd909.tar.bz2
Merge branch 'master' of git@scm.dev.troll.no:qt/qt-s60-public
Diffstat (limited to 'src')
-rw-r--r--src/corelib/global/qglobal.h2
-rw-r--r--src/gui/util/qdesktopservices_s60.cpp75
2 files changed, 45 insertions, 32 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 450fd86..10dee86 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -2314,7 +2314,7 @@ QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathSysconf();
#include <stdexcept>
-class QSymbianLeaveException : public std::exception
+class Q_CORE_EXPORT QSymbianLeaveException : public std::exception
{
public:
inline QSymbianLeaveException(int err) : error(err) {}
diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp
index d53c046..3588ec9 100644
--- a/src/gui/util/qdesktopservices_s60.cpp
+++ b/src/gui/util/qdesktopservices_s60.cpp
@@ -89,38 +89,51 @@ static void handleMailtoSchemeL(const QUrl &url)
User::LeaveIfError(sendAs.Connect());
CleanupClosePushL(sendAs);
- RSendAsMessage sendAsMessage;
- sendAsMessage.CreateL(sendAs, KUidMsgTypeSMTP);
- CleanupClosePushL(sendAsMessage);
-
-
- // Subject
- sendAsMessage.SetSubjectL(qt_QString2TPtrC(subject));
-
- // Body
- sendAsMessage.SetBodyTextL(qt_QString2TPtrC(body));
-
- // To
- foreach(QString item, recipients)
- sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientTo );
-
- foreach(QString item, tos)
- sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientTo );
-
- // Cc
- foreach(QString item, ccs)
- sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientCc );
-
- // Bcc
- foreach(QString item, bccs)
- sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientBcc );
-
- // send the message
- sendAsMessage.LaunchEditorAndCloseL();
-
- // sendAsMessage (already closed)
- CleanupStack::Pop();
+ CSendAsAccounts* accounts = CSendAsAccounts::NewL();
+ CleanupStack::PushL(accounts);
+ sendAs.AvailableAccountsL(KUidMsgTypeSMTP, *accounts);
+ TInt count = accounts->Count();
+ CleanupStack::PopAndDestroy(accounts);
+
+ if(!count) {
+ // TODO: we should try to create account if count == 0
+ // CSendUi would provide account creation service for us, but it requires ridicilous
+ // capabilities: LocalServices NetworkServices ReadDeviceData ReadUserData WriteDeviceData WriteUserData
+ User::Leave(KErrNotSupported);
+ } else {
+ RSendAsMessage sendAsMessage;
+ sendAsMessage.CreateL(sendAs, KUidMsgTypeSMTP);
+ CleanupClosePushL(sendAsMessage);
+
+
+ // Subject
+ sendAsMessage.SetSubjectL(qt_QString2TPtrC(subject));
+
+ // Body
+ sendAsMessage.SetBodyTextL(qt_QString2TPtrC(body));
+
+ // To
+ foreach(QString item, recipients)
+ sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientTo );
+
+ foreach(QString item, tos)
+ sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientTo );
+
+ // Cc
+ foreach(QString item, ccs)
+ sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientCc );
+
+ // Bcc
+ foreach(QString item, bccs)
+ sendAsMessage.AddRecipientL(qt_QString2TPtrC(item), RSendAsMessage::ESendAsRecipientBcc );
+
+ // send the message
+ sendAsMessage.LaunchEditorAndCloseL();
+
+ // sendAsMessage (already closed)
+ CleanupStack::Pop();
+ }
// sendAs
CleanupStack::PopAndDestroy();
}