summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1309597)
raw | patch | inline | side by side (parent: 1309597)
| author | jucablues <jucablues@users.sourceforge.net> | |
| Mon, 25 Feb 2008 16:50:06 +0000 (16:50 +0000) | ||
| committer | jucablues <jucablues@users.sourceforge.net> | |
| Mon, 25 Feb 2008 16:50:06 +0000 (16:50 +0000) |
referenced object changes
| src/sp-feimage.cpp | patch | blob | history | |
| src/sp-feimage.h | patch | blob | history |
diff --git a/src/sp-feimage.cpp b/src/sp-feimage.cpp
index d72435f2c5415cc77b1895fabcd2384504cd73da..2628d397c61e8a2c405c9aaaa8f7235d8d5c5d4b 100644 (file)
--- a/src/sp-feimage.cpp
+++ b/src/sp-feimage.cpp
@@ -118,11 +118,20 @@ sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
static void
sp_feImage_release(SPObject *object)
{
+ SPFeImage *feImage = SP_FEIMAGE(object);
+ feImage->_modified_connection.disconnect();
+ if (feImage->SVGElemRef) delete feImage->SVGElemRef;
if (((SPObjectClass *) feImage_parent_class)->release)
((SPObjectClass *) feImage_parent_class)->release(object);
}
+static void
+sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj)
+{
+ obj->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
/**
* Sets a specific value in the SPFeImage.
*/
SPFeImage *feImage = SP_FEIMAGE(object);
(void)feImage;
Inkscape::URI* SVGElem_uri;
- Inkscape::URIReference* SVGElemRef;
switch(key) {
/*DEAL WITH SETTING ATTRIBUTES HERE*/
case SP_ATTR_XLINK_HREF:
if (!feImage->href) return;
try{
SVGElem_uri = new Inkscape::URI(feImage->href);
- SVGElemRef = new Inkscape::URIReference(feImage->document);
+ feImage->SVGElemRef = new Inkscape::URIReference(feImage->document);
feImage->from_element = true;
- SVGElemRef->attach(*SVGElem_uri);
- feImage->SVGElem = SP_ITEM(SVGElemRef->getObject());
+ feImage->SVGElemRef->attach(*SVGElem_uri);
+ feImage->SVGElem = SP_ITEM(feImage->SVGElemRef->getObject());
g_free(SVGElem_uri);
- g_free(SVGElemRef);
- //TODO: maybe keeping SVGElemRef we can observe changes to the
- // referenced object and trigger updates of the filtered object
+ feImage->_modified_connection = ((SPObject*) feImage->SVGElem)->connectModified(sigc::bind(sigc::ptr_fun(&sp_feImage_elem_modified), object));
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
}
diff --git a/src/sp-feimage.h b/src/sp-feimage.h
index d66a4fb770594608fc6241213512df86a077fd42..dc432a6720857eabe140f526286198af27a325a1 100644 (file)
--- a/src/sp-feimage.h
+++ b/src/sp-feimage.h
#include "sp-feimage-fns.h"
#include "svg/svg-length.h"
#include "sp-item.h"
+#include "uri-references.h"
/* FeImage base class */
class SPFeImageClass;
SPDocument *document;
bool from_element;
SPItem* SVGElem;
+ Inkscape::URIReference* SVGElemRef;
+ sigc::connection _modified_connection;
};
struct SPFeImageClass {