summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/ios/quiview.mm
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2017-01-03 17:50:28 +0100
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2017-01-06 13:31:26 +0000
commitbc80cef1d4bb07605cba81de082625f07fc4136b (patch)
tree0d776ce4b59709ffa7cd1f7900782516e2836055 /src/plugins/platforms/ios/quiview.mm
parent8ad200dcb437ae6138dce39c260860db9c7aaa02 (diff)
iOS: Limit duration of FirstResponderCandidate to becomeFirstResponder
We only need the FirstResponderCandidate for the duration of the call to [super becomeFirstResponder]. Keeping it around longer means that when emitting window activation events, which may result in changing the first responder again, we may wrongly conclude that we're not allowed to change the responder due to the FirstResponderCandidate still being alive. Change-Id: I8203e795cdde4128776283fe63a1907eb6ebc151 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/plugins/platforms/ios/quiview.mm')
-rw-r--r--src/plugins/platforms/ios/quiview.mm25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index 259070216e..9966bd50a3 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -209,19 +209,24 @@
- (BOOL)becomeFirstResponder
{
- FirstResponderCandidate firstResponderCandidate(self);
-
- qImDebug() << "win:" << m_qioswindow->window() << "self:" << self
- << "first:" << [UIResponder currentFirstResponder];
+ {
+ // Scope for the duration of becoming first responder only, as the window
+ // activation event may trigger new responders, which we don't want to be
+ // blocked by this guard.
+ FirstResponderCandidate firstResponderCandidate(self);
+
+ qImDebug() << "win:" << m_qioswindow->window() << "self:" << self
+ << "first:" << [UIResponder currentFirstResponder];
+
+ if (![super becomeFirstResponder]) {
+ qImDebug() << m_qioswindow->window()
+ << "was not allowed to become first responder";
+ return NO;
+ }
- if (![super becomeFirstResponder]) {
- qImDebug() << m_qioswindow->window()
- << "was not allowed to become first responder";
- return NO;
+ qImDebug() << m_qioswindow->window() << "became first responder";
}
- qImDebug() << m_qioswindow->window() << "became first responder";
-
if (qGuiApp->focusWindow() != m_qioswindow->window())
QWindowSystemInterface::handleWindowActivated<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window());
else