From 5e6e54dbb058a4e90be5cdd8fbd5ea1a9e69ccb2 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Wed, 7 Mar 2012 23:51:36 +0100 Subject: [PATCH] Do not delete m_annowindows directly If we do that slotAnnotationWindowDestroyed bites us and the list gets out of sync --- ui/pageview.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 344a9443f..28835ed19 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -383,7 +383,13 @@ PageView::~PageView() d->m_tts->stopAllSpeechs(); // delete the local storage structure - qDeleteAll(d->m_annowindows); + + // We need to assign it to a different list otherwise slotAnnotationWindowDestroyed + // will bite us and clear d->m_annowindows + QHash< Okular::Annotation *, AnnotWindow * > annowindows = d->m_annowindows; + d->m_annowindows.clear(); + qDeleteAll( annowindows ); + // delete all widgets QVector< PageViewItem * >::const_iterator dIt = d->items.constBegin(), dEnd = d->items.constEnd(); for ( ; dIt != dEnd; ++dIt ) @@ -889,8 +895,11 @@ void PageView::notifySetup( const QVector< Okular::Page * > & pageSet, int setup updateActionState( haspages, documentChanged, hasformwidgets ); - qDeleteAll( d->m_annowindows ); + // We need to assign it to a different list otherwise slotAnnotationWindowDestroyed + // will bite us and clear d->m_annowindows + QHash< Okular::Annotation *, AnnotWindow * > annowindows = d->m_annowindows; d->m_annowindows.clear(); + qDeleteAll( annowindows ); selectionClear(); }