From 80a6db8c1fd8a95721b11875541f9e5e5b41fd1b Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 11 Jun 2006 05:24:48 +0000 Subject: Applied patch #1503864 (bzr r1202) --- src/object-snapper.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/object-snapper.cpp') diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 9439fea8b..6b51f8508 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -15,6 +15,7 @@ #include "document.h" #include "sp-namedview.h" #include "sp-path.h" +#include "sp-item-group.h" #include "display/curve.h" #include "desktop.h" #include "inkscape.h" @@ -37,8 +38,9 @@ void Inkscape::ObjectSnapper::_findCandidates(std::list& c, std::list const &it, NR::Point const &p) const { - for (SPObject* o = r->children; o != NULL; o = o->next) { - if (SP_IS_ITEM(o)) { + SPDesktop const *desktop = SP_ACTIVE_DESKTOP; + for (SPObject* o = sp_object_first_child(r); o != NULL; o = SP_OBJECT_NEXT(o)) { + if (SP_IS_ITEM(o) && !SP_ITEM(o)->isLocked() && !desktop->itemIsHidden(SP_ITEM(o))) { /* See if this item is on the ignore list */ std::list::const_iterator i = it.begin(); @@ -48,14 +50,17 @@ void Inkscape::ObjectSnapper::_findCandidates(std::list& c, if (i == it.end()) { /* See if the item is within range */ - NR::Rect const b = NR::expand(sp_item_bbox_desktop(SP_ITEM(o)), -getDistance()); - if (b.contains(p)) { - c.push_back(SP_ITEM(o)); + if (SP_IS_GROUP(o)) { + _findCandidates(c, o, it, p); + } else { + NR::Rect const b = NR::expand(sp_item_bbox_desktop(SP_ITEM(o)), -getDistance()); + if (b.contains(p)) { + c.push_back(SP_ITEM(o)); + } } } - } - _findCandidates(c, o, it, p); + } } } -- cgit v1.2.3