[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krita] libs/ui/widgets: Fix crash when the Iconwidget tries to display an already deleted resource
From:       Sven Langkamp <sven.langkamp () gmail ! com>
Date:       2016-08-27 12:30:48
Message-ID: E1bdcl6-0005I3-JV () code ! kde ! org
[Download RAW message or body]

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_iconwidget.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<KoAbstractResourceServerAdapter> \
adapter)  {
     Q_ASSERT(adapter);
-    adapter->connectToResourceServer();
-    connect(adapter.data(), SIGNAL(resourceChanged(KoResource*)), this, \
SLOT(slotAdapterResourceChanged(KoResource*))); +    m_adapter = 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(KoResource* \
resource)  update();
     }
 }
+
+void KisIconWidget::slotAdapterResourceRemoved(KoResource* resource)
+{
+    if (m_resource == resource) {
+        m_resource = 0;
+    }
+}
diff --git a/libs/ui/widgets/kis_iconwidget.h b/libs/ui/widgets/kis_iconwidget.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<KoAbstractResourceServerAdapter> m_adapter;
 };
 
 #endif // KIS_ICONWIDGET_H_


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic