diff options
author | Tor Arne Vestbø <tor.arne.vestbo@digia.com> | 2014-10-23 14:28:06 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@digia.com> | 2014-11-03 18:46:11 +0100 |
commit | c432960718de8afb43512f35d5339b3a5b8ead2c (patch) | |
tree | 2ce5f694f264ad474ceed991b7c14e431a3a5162 /src | |
parent | d563f6142b9f319826ae68dbe630f1d865be29a0 (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.mm | 22 |
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 |