summaryrefslogtreecommitdiffstats
path: root/src/sp-flowtext.cpp
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2013-10-01 13:25:44 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2013-10-01 13:25:44 +0000
commit87d93e27330577c2fd632dbaccbd3103884aa590 (patch)
tree2acaa8e8ab51a4dbaef40bd22bd780bdaceae0db /src/sp-flowtext.cpp
parentFix possible bug in DrawingItem code (diff)
downloadinkscape-87d93e27330577c2fd632dbaccbd3103884aa590.tar.gz
inkscape-87d93e27330577c2fd632dbaccbd3103884aa590.zip
Comprehensive fix for the issues with disappearing filtered objects.
Fixes #304407 and possibly a few other bugs. Revert incorrect _item_bbox changes from r12528. Fixed bugs: - https://launchpad.net/bugs/304407 (bzr r12648)
Diffstat (limited to 'src/sp-flowtext.cpp')
-rw-r--r--src/sp-flowtext.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp
index 266e9dfe0..49360f9d9 100644
--- a/src/sp-flowtext.cpp
+++ b/src/sp-flowtext.cpp
@@ -72,10 +72,11 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) {
SPItemCtx *ictx = (SPItemCtx *) ctx;
SPItemCtx cctx = *ictx;
- SPItem::update(ctx, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ unsigned childflags = flags;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ childflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ childflags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
@@ -90,20 +91,22 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) {
SPObject *child = SP_OBJECT(l->data);
l = g_slist_remove(l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (childflags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
if (SP_IS_ITEM(child)) {
SPItem const &chi = *SP_ITEM(child);
cctx.i2doc = chi.transform * ictx->i2doc;
cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
+ child->updateDisplay((SPCtx *)&cctx, childflags);
} else {
- child->updateDisplay(ctx, flags);
+ child->updateDisplay(ctx, childflags);
}
}
sp_object_unref(child);
}
+ SPItem::update(ctx, flags);
+
this->rebuildLayout();
Geom::OptRect pbox = this->geometricBounds();