From kde-commits Sat Aug 27 12:30:48 2016 From: Sven Langkamp Date: Sat, 27 Aug 2016 12:30:48 +0000 To: kde-commits Subject: [krita] libs/ui/widgets: Fix crash when the Iconwidget tries to display an already deleted resource Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=147230105824512 Git commit 88a03cd3777a820db835f1e5eceb27346dd52d03 by Sven Langkamp. Committed on 27/08/2016 at 12:29. Pushed by langkamp into branch 'master'. Fix crash when the Iconwidget tries to display an already deleted resource Based on patch by Bruno P. Kinoshita CCBUG:366741 M +11 -2 libs/ui/widgets/kis_iconwidget.cc M +2 -0 libs/ui/widgets/kis_iconwidget.h http://commits.kde.org/krita/88a03cd3777a820db835f1e5eceb27346dd52d03 diff --git a/libs/ui/widgets/kis_iconwidget.cc b/libs/ui/widgets/kis_iconwi= dget.cc index 988b188..d3454b9 100644 --- a/libs/ui/widgets/kis_iconwidget.cc +++ b/libs/ui/widgets/kis_iconwidget.cc @@ -74,8 +74,10 @@ void KisIconWidget::paintEvent(QPaintEvent *event) void KisIconWidget::setResourceAdapter(QSharedPointer adapter) { Q_ASSERT(adapter); - adapter->connectToResourceServer(); - connect(adapter.data(), SIGNAL(resourceChanged(KoResource*)), this, SL= OT(slotAdapterResourceChanged(KoResource*))); + m_adapter =3D adapter; + m_adapter->connectToResourceServer(); + connect(m_adapter.data(), SIGNAL(resourceChanged(KoResource*)), this, = SLOT(slotAdapterResourceChanged(KoResource*))); + connect(m_adapter.data(), SIGNAL(removingResource(KoResource*)), this,= SLOT(slotAdapterResourceRemoved(KoResource*))); } = void KisIconWidget::slotAdapterResourceChanged(KoResource* resource) @@ -84,3 +86,10 @@ void KisIconWidget::slotAdapterResourceChanged(KoResourc= e* resource) update(); } } + +void KisIconWidget::slotAdapterResourceRemoved(KoResource* resource) +{ + if (m_resource =3D=3D resource) { + m_resource =3D 0; + } +} diff --git a/libs/ui/widgets/kis_iconwidget.h b/libs/ui/widgets/kis_iconwid= get.h index 7cd56f1..480c3f5 100644 --- a/libs/ui/widgets/kis_iconwidget.h +++ b/libs/ui/widgets/kis_iconwidget.h @@ -44,12 +44,14 @@ public: public Q_SLOTS: void slotSetItem(KoResource * resource); void slotAdapterResourceChanged(KoResource * resource); + void slotAdapterResourceRemoved(KoResource * resource); = protected: virtual void paintEvent(QPaintEvent *); = private: KoResource *m_resource; + QSharedPointer m_adapter; }; = #endif // KIS_ICONWIDGET_H_