From dc85f5d7b65336f14bd25f197cd276b24efbdad1 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt Date: Mon, 21 Nov 2011 13:06:18 +0100 Subject: [PATCH] Clear property cache when window is destroyed Change-Id: Icf2d949ebb517d010c34dbb9e040fb833eff1fc3 Reviewed-by: Martin Zielinski --- .../qwaylandwindowmanagerintegration.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp index 04754ed..14074ab 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp @@ -60,7 +60,7 @@ public: bool m_blockPropertyUpdates; QWaylandDisplay *m_waylandDisplay; struct wl_windowmanager *m_waylandWindowManager; - QHash m_queuedProperties; + QHash m_queuedProperties; }; @@ -167,11 +167,10 @@ void QWaylandWindowManagerIntegration::setWindowProperty(QWaylandWindow *window, propertyName.toLatin1().constData(), &data); } else { - QVariantMap props = d->m_queuedProperties.value(window); + QVariantMap props = d->m_queuedProperties.value(window->window()); props.insert(propertyName, propertyValue); - d->m_queuedProperties.insert(window, props); - // ### TODO we'll need to add listening to destroyed() of QWindow that owns QWaylandWindow - // once refactor changes are in, and connect to removeQueuedPropertiesForWindow(). + d->m_queuedProperties.insert(window->window(), props); + connect(window->window(), SIGNAL(destroyed()), SLOT(removeQueuedPropertiesForWindow())); } } @@ -181,10 +180,11 @@ void QWaylandWindowManagerIntegration::flushPropertyChanges(QWaylandWindow *wind // this can happen during startup, for example, or while the window is hidden. Q_D(QWaylandWindowManagerIntegration); - if (!windowToFlush) + if (!windowToFlush || !windowToFlush->window()) return; - QVariantMap properties = d->m_queuedProperties.value(windowToFlush); + + QVariantMap properties = d->m_queuedProperties.value(windowToFlush->window()); wl_surface *surface = windowToFlush->wl_surface(); QMapIterator pIt(properties); @@ -199,10 +199,9 @@ void QWaylandWindowManagerIntegration::flushPropertyChanges(QWaylandWindow *wind void QWaylandWindowManagerIntegration::removeQueuedPropertiesForWindow() { - // TODO enable this later once refactor changes are in. -// Q_D(QWaylandWindowManagerIntegration); -// QWaylandWindow *window = 0; -// d->m_queuedProperties.remove(window); + Q_D(QWaylandWindowManagerIntegration); + QWindow *window = static_cast(sender()); + d->m_queuedProperties.remove(window); } void QWaylandWindowManagerIntegration::wlHandleOnScreenVisibilityChange(void *data, struct wl_windowmanager *wl_windowmanager, int visible) -- 2.7.4