summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2014-10-23 14:28:06 +0200
committerTor Arne Vestbø <tor.arne.vestbo@digia.com>2014-11-03 18:46:11 +0100
commitc432960718de8afb43512f35d5339b3a5b8ead2c (patch)
tree2ce5f694f264ad474ceed991b7c14e431a3a5162 /src
parentd563f6142b9f319826ae68dbe630f1d865be29a0 (diff)
iOS: Be more thorough when looking for current first responder
The technique of sending an action does not always end up at the actual first responder, but it will end up in a responder in the responder chain of the first responder, so we continue searching the subviews recursively until we find the real first-responder. Change-Id: I6abc9bc18eb127fa4b317cd308783c0ecfcd670a Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/ios/qiosglobal.mm22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm
index bc16a7997d..71d5a58088 100644
--- a/src/plugins/platforms/ios/qiosglobal.mm
+++ b/src/plugins/platforms/ios/qiosglobal.mm
@@ -152,6 +152,22 @@ int infoPlistValue(NSString* key, int defaultValue)
@implementation QtFirstResponderEvent
@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)
+(id)currentFirstResponder
@@ -164,7 +180,11 @@ 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