From 2b2a4e33d2693923b46834ca3072b69d7348f790 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Fri, 4 Mar 2011 15:56:31 -0800 Subject: When possible, use MFMailComposeViewController for _openMailToURL:. --- CyteKit/WebViewController.mm | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'CyteKit/WebViewController.mm') diff --git a/CyteKit/WebViewController.mm b/CyteKit/WebViewController.mm index e6f7e45..78da1c5 100644 --- a/CyteKit/WebViewController.mm +++ b/CyteKit/WebViewController.mm @@ -1,6 +1,8 @@ #include "CyteKit/UCPlatform.h" +#include "CyteKit/WebViewController.h" + +#include "CyteKit/MFMailComposeViewController-MailToURL.h" -#include #include "iPhonePrivate.h" #include "CyteKit/Localize.h" @@ -31,6 +33,9 @@ extern NSString * const kCAFilterNearest; #define lprintf(args...) fprintf(stderr, args) +// XXX: centralize these special class things to some file or mechanism? +static Class $MFMailComposeViewController; + template static inline void CYRelease(Type_ &value) { if (value != nil) { @@ -126,6 +131,9 @@ float CYScrollViewDecelerationRateNormal; + (void) _initialize { [WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]; + dlopen("/System/Library/Frameworks/MessageUI.framework/MessageUI", RTLD_GLOBAL | RTLD_LAZY); + $MFMailComposeViewController = objc_getClass("MFMailComposeViewController"); + if (float *_UIScrollViewDecelerationRateNormal = reinterpret_cast(dlsym(RTLD_DEFAULT, "UIScrollViewDecelerationRateNormal"))) CYScrollViewDecelerationRateNormal = *_UIScrollViewDecelerationRateNormal; else // XXX: this actually might be fast on some older systems: we should look into this @@ -285,7 +293,21 @@ float CYScrollViewDecelerationRateNormal; [self _setViewportWidth]; } +- (void) mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { + [self dismissModalViewControllerAnimated:YES]; +} + - (void) _openMailToURL:(NSURL *)url { + if ($MFMailComposeViewController != nil && [$MFMailComposeViewController canSendMail]) { + MFMailComposeViewController *controller([[[$MFMailComposeViewController alloc] init] autorelease]); + [controller setMailComposeDelegate:self]; + + [controller setMailToURL:url]; + + [self presentModalViewController:controller animated:YES]; + return; + } + UIApplication *app([UIApplication sharedApplication]); if ([app respondsToSelector:@selector(openURL:asPanel:)]) [app openURL:url asPanel:YES]; -- cgit v1.2.3