summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/ios/qiosglobal.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/ios/qiosglobal.mm')
-rw-r--r--src/plugins/platforms/ios/qiosglobal.mm45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm
index 7ff4950599..3ecd0ca61f 100644
--- a/src/plugins/platforms/ios/qiosglobal.mm
+++ b/src/plugins/platforms/ios/qiosglobal.mm
@@ -46,6 +46,8 @@
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods");
+
bool isQtApplication()
{
// Returns \c true if the plugin is in full control of the whole application. This means
@@ -125,15 +127,6 @@ UIDeviceOrientation fromQtScreenOrientation(Qt::ScreenOrientation qtOrientation)
return uiOrientation;
}
-QRect fromPortraitToPrimary(const QRect &rect, QPlatformScreen *screen)
-{
- // UIScreen is always in portrait. Use this function to convert CGRects
- // aligned with UIScreen into whatever is the current orientation of QScreen.
- QRect geometry = screen->geometry();
- return geometry.width() < geometry.height() ? rect
- : QRect(rect.y(), geometry.height() - rect.width() - rect.x(), rect.height(), rect.width());
-}
-
int infoPlistValue(NSString* key, int defaultValue)
{
static NSBundle *bundle = [NSBundle mainBundle];
@@ -148,6 +141,27 @@ int infoPlistValue(NSString* key, int defaultValue)
@end
@implementation QtFirstResponderEvent
+- (void) dealloc
+{
+ self.firstResponder = 0;
+ [super dealloc];
+}
+@end
+
+
+@implementation UIView (QtFirstResponder)
+- (UIView*)qt_findFirstResponder
+{
+ if ([self isFirstResponder])
+ return self;
+
+ for (UIView *subview in self.subviews) {
+ if (UIView *firstResponder = [subview qt_findFirstResponder])
+ return firstResponder;
+ }
+
+ return nil;
+}
@end
@implementation UIResponder (QtFirstResponder)
@@ -162,9 +176,20 @@ int infoPlistValue(NSString* key, int defaultValue)
- (void)qt_findFirstResponder:(id)sender event:(QtFirstResponderEvent *)event
{
Q_UNUSED(sender);
- event.firstResponder = self;
+
+ if ([self isKindOfClass:[UIView class]])
+ event.firstResponder = [static_cast<UIView *>(self) qt_findFirstResponder];
+ else
+ event.firstResponder = [self isFirstResponder] ? self : nil;
}
@end
+FirstResponderCandidate::FirstResponderCandidate(UIResponder *responder)
+ : QScopedValueRollback<UIResponder *>(s_firstResponderCandidate, responder)
+{
+}
+
+UIResponder *FirstResponderCandidate::s_firstResponderCandidate = 0;
+
QT_END_NAMESPACE