iOS: Simplify logging of QUIView/QIOSWindow

Automatically printing the relationship between the view, platform
window, and window, makes it easier to track each object across
events.

Change-Id: I9fbfaa5c304849ed99dba3b5cd8e7449105d0307
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
bb10
Tor Arne Vestbø 2018-01-24 15:42:17 +01:00
parent 6197df32ec
commit 35f6f530bf
3 changed files with 40 additions and 12 deletions

View File

@ -110,6 +110,10 @@ private:
friend class QIOSScreen;
};
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, const QIOSWindow *window);
#endif
QT_END_NAMESPACE
#endif // QIOSWINDOW_H

View File

@ -381,6 +381,19 @@ CAEAGLLayer *QIOSWindow::eaglLayer() const
return static_cast<CAEAGLLayer *>(m_view.layer);
}
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, const QIOSWindow *window)
{
QDebugStateSaver saver(debug);
debug.nospace();
debug << "QIOSWindow(" << (const void *)window;
if (window)
debug << ", window=" << window->window();
debug << ')';
return debug;
}
#endif // !QT_NO_DEBUG_STREAM
#include "moc_qioswindow.cpp"
QT_END_NAMESPACE

View File

@ -147,6 +147,21 @@
[super dealloc];
}
- (NSString *)description
{
NSMutableString *description = [NSMutableString stringWithString:[super description]];
#ifndef QT_NO_DEBUG_STREAM
QString platformWindowDescription;
QDebug debug(&platformWindowDescription);
debug.nospace() << "; " << m_qioswindow << ">";
NSRange lastCharacter = [description rangeOfComposedCharacterSequenceAtIndex:description.length - 1];
[description replaceCharactersInRange:lastCharacter withString:platformWindowDescription.toNSString()];
#endif
return description;
}
- (void)willMoveToWindow:(UIWindow *)newWindow
{
// UIKIt will normally set the scale factor of a view to match the corresponding
@ -191,13 +206,12 @@
// when the size is also changed.
if (!CGAffineTransformIsIdentity(self.transform))
qWarning() << m_qioswindow->window()
<< "is backed by a UIView that has a transform set. This is not supported.";
qWarning() << self << "has a transform set. This is not supported.";
QWindow *window = m_qioswindow->window();
QRect lastReportedGeometry = qt_window_private(window)->geometry;
QRect currentGeometry = QRectF::fromCGRect(self.frame).toRect();
qCDebug(lcQpaWindow) << m_qioswindow->window() << "new geometry is" << currentGeometry;
qCDebug(lcQpaWindow) << m_qioswindow << "new geometry is" << currentGeometry;
QWindowSystemInterface::handleGeometryChange(window, currentGeometry);
if (currentGeometry.size() != lastReportedGeometry.size()) {
@ -230,7 +244,7 @@
region = QRect(QPoint(), bounds);
}
qCDebug(lcQpaWindow) << m_qioswindow->window() << region << "isExposed" << m_qioswindow->isExposed();
qCDebug(lcQpaWindow) << m_qioswindow << region << "isExposed" << m_qioswindow->isExposed();
QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region);
}
@ -254,16 +268,14 @@
// blocked by this guard.
FirstResponderCandidate firstResponderCandidate(self);
qImDebug() << "win:" << m_qioswindow->window() << "self:" << self
<< "first:" << [UIResponder currentFirstResponder];
qImDebug() << "self:" << self << "first:" << [UIResponder currentFirstResponder];
if (![super becomeFirstResponder]) {
qImDebug() << m_qioswindow->window()
<< "was not allowed to become first responder";
qImDebug() << self << "was not allowed to become first responder";
return NO;
}
qImDebug() << m_qioswindow->window() << "became first responder";
qImDebug() << self << "became first responder";
}
if (qGuiApp->focusWindow() != m_qioswindow->window())
@ -295,13 +307,12 @@
- (BOOL)resignFirstResponder
{
qImDebug() << "win:" << m_qioswindow->window() << "self:" << self
<< "first:" << [UIResponder currentFirstResponder];
qImDebug() << "self:" << self << "first:" << [UIResponder currentFirstResponder];
if (![super resignFirstResponder])
return NO;
qImDebug() << m_qioswindow->window() << "resigned first responder";
qImDebug() << self << "resigned first responder";
UIResponder *newResponder = FirstResponderCandidate::currentCandidate();
if ([self responderShouldTriggerWindowDeactivation:newResponder])