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

List:       kde-commits
Subject:    =?utf-8?q?=5Bcalligra=5D_/=3A_fix_crash_on_deleting_brush?=
From:       Sven Langkamp <sven.langkamp () gmail ! com>
Date:       2011-03-01 2:16:26
Message-ID: 20110301021626.CF150A60C9 () git ! kde ! org
[Download RAW message or body]

Git commit 2a0dad6b91ab1c38d221fdfdeb158c015b46ad77 by Sven Langkamp.
Committed on 01/03/2011 at 03:15.
Pushed by langkamp into branch 'master'.

fix crash on deleting brush
BUG:267320

M  +2    -2    krita/plugins/paintops/libbrush/kis_brush_server.cpp     
M  +1    -1    krita/plugins/paintops/libpaintop/kis_custom_brush_widget.cpp     
M  +8    -6    libs/widgets/KoResourceServer.h     

http://commits.kde.org/calligra/2a0dad6b91ab1c38d221fdfdeb158c015b46ad77

diff --git a/krita/plugins/paintops/libbrush/kis_brush_server.cpp \
b/krita/plugins/paintops/libbrush/kis_brush_server.cpp index da47696..6676085 100644
--- a/krita/plugins/paintops/libbrush/kis_brush_server.cpp
+++ b/krita/plugins/paintops/libbrush/kis_brush_server.cpp
@@ -41,14 +41,14 @@ class BrushResourceServer : public KoResourceServer<KisBrush>, \
public KoResource  
 public:
 
-    BrushResourceServer() : KoResourceServer<KisBrush>("kis_brushes", \
"*.gbr:*.gih:*.abr:*.png:*.svg") { +    BrushResourceServer() : \
KoResourceServer<KisBrush>("kis_brushes", "*.gbr:*.gih:*.abr:*.png:*.svg", false) {  \
addObserver(this, true);  }
 
     ~BrushResourceServer() {
         foreach(KisBrush* brush, m_brushes)
         {
-            removeResourceFromServer(brush, false);
+            removeResourceFromServer(brush);
         }
     }
 
diff --git a/krita/plugins/paintops/libpaintop/kis_custom_brush_widget.cpp \
b/krita/plugins/paintops/libpaintop/kis_custom_brush_widget.cpp index \
                40f6db9..7562409 100644
--- a/krita/plugins/paintops/libpaintop/kis_custom_brush_widget.cpp
+++ b/krita/plugins/paintops/libpaintop/kis_custom_brush_widget.cpp
@@ -170,7 +170,7 @@ void KisCustomBrushWidget::createBrush()
 
     if (m_brush){
         // don't delete shared pointer, please
-        bool removedCorrectly = \
KisBrushServer::instance()->brushServer()->removeResourceFromServer(  m_brush.data(), \
false ); +        bool removedCorrectly = \
KisBrushServer::instance()->brushServer()->removeResourceFromServer(  m_brush.data() \
);  if (!removedCorrectly){
             kWarning() << "Brush was not removed correctly for the resource server";
         }
diff --git a/libs/widgets/KoResourceServer.h b/libs/widgets/KoResourceServer.h
index 9afd88c..aa1e520 100644
--- a/libs/widgets/KoResourceServer.h
+++ b/libs/widgets/KoResourceServer.h
@@ -92,9 +92,9 @@ protected:
 template <class T> class KoResourceServer : public KoResourceServerBase {
 
 public:
-    KoResourceServer(const QString& type, const QString& extensions)
+    KoResourceServer(const QString& type, const QString& extensions, bool \
deleteResource = true)  : KoResourceServerBase(type, extensions)
-
+        , m_deleteResource(deleteResource)
         {
         }
 
@@ -182,8 +182,7 @@ public:
     }
     
     /// Remove a resource from Resource Server but not from a file
-    /// if deleteResource is true. the resource will be deleted by resource server
-    bool removeResourceFromServer(T* resource, bool deleteResource = true){
+    bool removeResourceFromServer(T* resource){
         if ( !m_resourcesByFilename.contains( resource->shortFilename() ) ) {
             return false;
         }
@@ -193,7 +192,7 @@ public:
         m_resources.removeAt(m_resources.indexOf(resource));
         notifyRemovingResource(resource);
         
-        if (deleteResource) { 
+        if (m_deleteResource) { 
             delete resource;
         }
         
@@ -226,7 +225,9 @@ public:
             m_resourcesByFilename.remove(resource->shortFilename());
             m_resources.removeAt(m_resources.indexOf(resource));
             notifyRemovingResource(resource);
-            delete resource;
+            if (m_deleteResource) { 
+                delete resource;
+            }
         } else {
             // TODO: save blacklist to config file and load it again on next start
             m_resourceBlackList << resource;
@@ -390,6 +391,7 @@ private:
     QList<T*> m_resourceBlackList;
     QList<T*> m_resources; ///< list of resources in order of addition
     QList<KoResourceServerObserver<T>*> m_observers;
+    bool m_deleteResource;
 
 };
 


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

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