summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/ios/qiosservices.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/ios/qiosservices.mm')
-rw-r--r--src/plugins/platforms/ios/qiosservices.mm25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/plugins/platforms/ios/qiosservices.mm b/src/plugins/platforms/ios/qiosservices.mm
index 3c44e1d7d6..7222bf6793 100644
--- a/src/plugins/platforms/ios/qiosservices.mm
+++ b/src/plugins/platforms/ios/qiosservices.mm
@@ -40,6 +40,9 @@
#include "qiosservices.h"
#include <QtCore/qurl.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <QtGui/qdesktopservices.h>
#import <UIKit/UIApplication.h>
@@ -48,6 +51,11 @@ QT_BEGIN_NAMESPACE
bool QIOSServices::openUrl(const QUrl &url)
{
+ if (qt_apple_isApplicationExtension()) {
+ qWarning() << "openUrl not implement for application extensions yet";
+ return false;
+ }
+
if (url == m_handlingUrl)
return false;
@@ -55,12 +63,25 @@ bool QIOSServices::openUrl(const QUrl &url)
return openDocument(url);
NSURL *nsUrl = url.toNSURL();
- UIApplication *application = [UIApplication sharedApplication];
+ UIApplication *application = qt_apple_sharedApplication();
if (![application canOpenURL:nsUrl])
return false;
- [application openURL:nsUrl options:@{} completionHandler:nil];
+ static SEL openUrlSelector = @selector(openURL:options:completionHandler:);
+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
+ [UIApplication instanceMethodSignatureForSelector:openUrlSelector]];
+ invocation.target = application;
+ invocation.selector = openUrlSelector;
+
+ static auto kEmptyDictionary = @{};
+ // Indices 0 and 1 are self and _cmd
+ [invocation setArgument:&nsUrl atIndex:2];
+ [invocation setArgument:&kEmptyDictionary atIndex:3];
+ // Fourth argument is nil, so left unset
+
+ [invocation invoke];
+
return true;
}