[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-kimageshop
Subject: [calligra] krita: Fix memory leak in the preset proxy system
From: Boudewijn Rempt <boud () valdyas ! org>
Date: 2014-11-01 8:40:49
Message-ID: E1XkUEr-0005OA-NZ () scm ! kde ! org
[Download RAW message or body]
Git commit 0006aa0b2be423ab2c512574aa42df70c55dfa25 by Boudewijn Rempt.
Committed on 01/11/2014 at 08:39.
Pushed by rempt into branch 'master'.
Fix memory leak in the preset proxy system
CCMAIL:kimageshop@kde.org
Please test... This should fix a memory leak and preset tweak weirdnesses
M +7 -10 krita/image/brushengine/kis_locked_properties_proxy.cpp
M +0 -12 krita/image/brushengine/kis_locked_properties_proxy.h
M +7 -5 krita/ui/kis_paintop_box.cc
M +9 -13 krita/ui/kis_paintop_options_widget.cpp
http://commits.kde.org/calligra/0006aa0b2be423ab2c512574aa42df70c55dfa25
diff --git a/krita/image/brushengine/kis_locked_properties_proxy.cpp \
b/krita/image/brushengine/kis_locked_properties_proxy.cpp index ca3db4d..1d81f95 \
100644
--- a/krita/image/brushengine/kis_locked_properties_proxy.cpp
+++ b/krita/image/brushengine/kis_locked_properties_proxy.cpp
@@ -19,30 +19,29 @@
#include "kis_locked_properties_proxy.h"
KisLockedPropertiesProxy ::KisLockedPropertiesProxy()
+ : m_lockedProperties(0)
+ , m_parent(0)
{
- m_lockedProperties = NULL;
- m_parent = NULL;
-
}
+
KisLockedPropertiesProxy::KisLockedPropertiesProxy(KisLockedProperties* p)
{
m_lockedProperties = p;
-
}
+
KisLockedPropertiesProxy::KisLockedPropertiesProxy(const KisPropertiesConfiguration \
*p, KisLockedProperties *l) {
m_lockedProperties = l;
m_parent = p;
-
}
+
QVariant KisLockedPropertiesProxy::getProperty(const QString &name) const
{
KisPropertiesConfiguration* temp = \
const_cast<KisPropertiesConfiguration*>(m_parent); KisPaintOpSettings* t = \
dynamic_cast<KisPaintOpSettings*>(temp);
- bool saveDirtyState = false;
if (t->preset()) {
- t->preset()->isPresetDirty();
+ bool saveDirtyState = t->preset()->isPresetDirty();
if (m_lockedProperties->lockedProperties()) {
if (m_lockedProperties->lockedProperties()->hasProperty(name)) {
@@ -67,6 +66,7 @@ QVariant KisLockedPropertiesProxy::getProperty(const QString &name) \
const }
return m_parent->getProperty(name);
}
+
void KisLockedPropertiesProxy::setProperty(const QString & name, const QVariant & \
value) {
KisPropertiesConfiguration* temp = \
const_cast<KisPropertiesConfiguration*>(m_parent); @@ -83,12 +83,9 @@ void \
KisLockedPropertiesProxy::setProperty(const QString & name, const QVariant \
t->preset()->setPresetDirty(saveDirtyState); return;
}
-
-
}
}
t->setProperty(name, value);
-
}
diff --git a/krita/image/brushengine/kis_locked_properties_proxy.h \
b/krita/image/brushengine/kis_locked_properties_proxy.h index a1e2ac2..052dd20 100644
--- a/krita/image/brushengine/kis_locked_properties_proxy.h
+++ b/krita/image/brushengine/kis_locked_properties_proxy.h
@@ -33,9 +33,6 @@
* Whenever the user selects the option of going back to the previous configuration \
of the preset or "unlocks" an option -- these settings are restored
* and the settings with the "_previous" suffix are destroyed.
*/
-
-
-
class KisLockedPropertiesServer;
class KisLockedPropertiesProxy: public KisPropertiesConfiguration
@@ -48,18 +45,9 @@ public:
QVariant getProperty(const QString &name) const;
using KisPropertiesConfiguration::setProperty;
void setProperty(const QString & name, const QVariant & value);
-
-
-
-
-
-
-
private:
KisLockedProperties* m_lockedProperties;
const KisPropertiesConfiguration* m_parent;
-
-
};
#endif // KIS_LOCKED_PROPERTIES_PROXY_H
diff --git a/krita/ui/kis_paintop_box.cc b/krita/ui/kis_paintop_box.cc
index 188165e..1584627 100644
--- a/krita/ui/kis_paintop_box.cc
+++ b/krita/ui/kis_paintop_box.cc
@@ -820,17 +820,19 @@ void KisPaintopBox::sliderChanged(int n)
if (m_resourceProvider->currentPreset()->settings()->hasProperty("FlowValue"))
m_resourceProvider->currentPreset()->settings()->setProperty("FlowValue", \
flow);
- KisLockedPropertiesProxy *p = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(m_resourceProvider->currentPreset()->settings());
- p->setProperty("OpacityValue", opacity);
- p->setProperty("FlowValue", flow);
+ KisLockedPropertiesProxy *propertiesProxy = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(m_resourceProvider->currentPreset()->settings());
+ propertiesProxy->setProperty("OpacityValue", opacity);
+ propertiesProxy->setProperty("FlowValue", flow);
+ delete propertiesProxy;
m_optionWidget->setConfiguration(m_resourceProvider->currentPreset()->settings().data());
} else m_resourceProvider->setOpacity(opacity);
m_optionWidget->blockSignals(false);
if (m_presetsEnabled) {
m_optionWidget->setConfiguration(m_resourceProvider->currentPreset()->settings().data());
- KisLockedPropertiesProxy *p = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(m_resourceProvider->currentPreset()->settings());
- p->setProperty("OpacityValue", opacity);
+ KisLockedPropertiesProxy *propertiesProxy = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(m_resourceProvider->currentPreset()->settings());
+ propertiesProxy->setProperty("OpacityValue", opacity);
+ delete propertiesProxy;
}
if (!m_dirtyPresetsEnabled) {
m_resourceProvider->currentPreset()->setPresetDirty(false);
diff --git a/krita/ui/kis_paintop_options_widget.cpp \
b/krita/ui/kis_paintop_options_widget.cpp index 0d065c9..3f870d8 100644
--- a/krita/ui/kis_paintop_options_widget.cpp
+++ b/krita/ui/kis_paintop_options_widget.cpp
@@ -103,16 +103,14 @@ void KisPaintOpOptionsWidget::addPaintOpOption(KisPaintOpOption \
* option) void KisPaintOpOptionsWidget::setConfiguration(const \
KisPropertiesConfiguration * config) {
Q_ASSERT(!config->getString("paintop").isEmpty());
- KisLockedPropertiesProxy* m = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(config); + \
KisLockedPropertiesProxy* propertiesProxy = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(config); int \
indexcount = 0;
- foreach(KisPaintOpOption* option, m_d->paintOpOptions) {
- option->readOptionSetting(m);
- if(KisLockedPropertiesServer::instance()->propertiesFromLocked())
- {
+ foreach (KisPaintOpOption* option, m_d->paintOpOptions) {
+ option->readOptionSetting(propertiesProxy);
+ if (KisLockedPropertiesServer::instance()->propertiesFromLocked()) {
option->setLocked(true);
}
- else
- {
+ else {
option->setLocked(false);
}
@@ -125,18 +123,16 @@ void KisPaintOpOptionsWidget::setConfiguration(const \
KisPropertiesConfiguration m_d->model->signalDataChanged(m_d->model->indexOf(info));
indexcount++;
}
-
+ delete propertiesProxy;
}
void KisPaintOpOptionsWidget::writeConfiguration(KisPropertiesConfiguration *config) \
const {
- KisLockedPropertiesProxy* m = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(config); + \
KisLockedPropertiesProxy* propertiesProxy = \
KisLockedPropertiesServer::instance()->createLockedPropertiesProxy(config); \
foreach(const KisPaintOpOption* option, m_d->paintOpOptions) {
- option->writeOptionSetting(m);
-
-
+ option->writeOptionSetting(propertiesProxy);
}
-
+ delete propertiesProxy;
}
void KisPaintOpOptionsWidget::setImage(KisImageWSP image)
_______________________________________________
Krita mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic