diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-01-31 10:42:11 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-02-02 17:21:59 +0000 |
commit | 6d8f6a7e406515df358bacc6f737f4fe5fae97ea (patch) | |
tree | 3539b9e9cfca060a70c0d33f3361ce5599e58476 /src/quick/items/qquickwindowattached.cpp | |
parent | 7b38d8e0025aba6366fd2f222838cf99f6bd15f3 (diff) |
Window attached property: fix notifier signals
The change notifiers must be emitted when an item's window is
reset. Otherwise any existing bindings don't get re-evaluated,
and in worst scenario one ends up with dangling pointers.
Change-Id: I6075957f1447bb8628d25bd822345e45837c027a
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Diffstat (limited to 'src/quick/items/qquickwindowattached.cpp')
-rw-r--r-- | src/quick/items/qquickwindowattached.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/quick/items/qquickwindowattached.cpp b/src/quick/items/qquickwindowattached.cpp index e33e32631c..b1961386bb 100644 --- a/src/quick/items/qquickwindowattached.cpp +++ b/src/quick/items/qquickwindowattached.cpp @@ -89,21 +89,21 @@ void QQuickWindowAttached::windowChanged(QQuickWindow *window) if (oldWindow) oldWindow->disconnect(this); - if (!window) - return; // No values to get, therefore nothing to emit - - if (!oldWindow || window->visibility() != oldWindow->visibility()) + if (!oldWindow || !window || window->visibility() != oldWindow->visibility()) emit visibilityChanged(); - if (!oldWindow || window->isActive() != oldWindow->isActive()) + if (!oldWindow || !window || window->isActive() != oldWindow->isActive()) emit activeChanged(); - if (!oldWindow || window->activeFocusItem() != oldWindow->activeFocusItem()) + if (!oldWindow || !window || window->activeFocusItem() != oldWindow->activeFocusItem()) emit activeFocusItemChanged(); emit contentItemChanged(); - if (!oldWindow || window->width() != oldWindow->width()) + if (!oldWindow || !window || window->width() != oldWindow->width()) emit widthChanged(); - if (!oldWindow || window->height() != oldWindow->height()) + if (!oldWindow || !window || window->height() != oldWindow->height()) emit heightChanged(); + if (!window) + return; + // 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. |