void QQuickWindowAttached::windowChanged(QQuickWindow *window) { if (window != m_window) { QQuickWindow* oldWindow = m_window; m_window = window; if (oldWindow) oldWindow->disconnect(this); if (!window) return; // No values to get, therefore nothing to emit if (!oldWindow || window->visibility() != oldWindow->visibility()) emit visibilityChanged(); if (!oldWindow || window->isActive() != oldWindow->isActive()) emit activeChanged(); if (!oldWindow || window->activeFocusItem() != oldWindow->activeFocusItem()) emit activeFocusItemChanged(); emit contentItemChanged(); // QQuickWindowQmlImpl::visibilityChanged also exists, and window might even // be QQuickWindowQmlImpl, but that's not what we are connecting to. // So this is actual window state rather than a buffered or as-requested one. // If we used the metaobject connect syntax there would be a warning: // QMetaObjectPrivate::indexOfSignalRelative - QMetaObject::indexOfSignal: // signal visibilityChanged(QWindow::Visibility) from QQuickWindow redefined in QQuickWindowQmlImpl connect(window, &QQuickWindow::visibilityChanged, this, &QQuickWindowAttached::visibilityChanged); connect(window, &QQuickWindow::activeChanged, this, &QQuickWindowAttached::activeChanged); connect(window, &QQuickWindow::activeFocusItemChanged, this, &QQuickWindowAttached::activeFocusItemChanged); } }