Code

Snap to intersections of line segments
[inkscape.git] / src / sp-item-group.cpp
index 91afd8db112f38f16c68863ea3ad0fab143fbc55..f1035e9eef6028a234a0eac680c841f90ed6808a 100644 (file)
@@ -34,6 +34,7 @@
 #include "prefs-utils.h"
 #include "sp-clippath.h"
 #include "sp-mask.h"
+#include "sp-path.h"
 
 static void sp_group_class_init (SPGroupClass *klass);
 static void sp_group_init (SPGroup *group);
@@ -297,8 +298,10 @@ static void sp_group_snappoints (SPItem const *item, SnapPointsIter p)
             o != NULL;
             o = SP_OBJECT_NEXT(o))
        {
-               if (SP_IS_ITEM(o)) {
-                       sp_item_snappoints(SP_ITEM(o), p);
+               if (SP_IS_ITEM(o) && !SP_IS_PATH(o)) {
+            // getSnapPoints() and sp_group_snappoints are only being used in the selector tool,
+            // which should not snap path nodes. Only the node tool should snap those.
+            sp_item_snappoints(SP_ITEM(o), false, p);
                }
        }
 }
@@ -364,7 +367,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
 
                        child->updateRepr();
 
-                       Inkscape::XML::Node *nrepr = SP_OBJECT_REPR (child)->duplicate();
+                       Inkscape::XML::Node *nrepr = SP_OBJECT_REPR (child)->duplicate(prepr->document());
 
                        // Merging transform
                        NR::Matrix ctrans;
@@ -394,7 +397,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
                        items = g_slist_prepend (items, nrepr);
 
                } else {
-                       Inkscape::XML::Node *nrepr = SP_OBJECT_REPR (child)->duplicate();
+                       Inkscape::XML::Node *nrepr = SP_OBJECT_REPR (child)->duplicate(prepr->document());
                        objects = g_slist_prepend (objects, nrepr);
                }
        }
@@ -417,7 +420,6 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
        }
 
        /* Step 4 - add items */
-       gint const preserve = prefs_get_int_attribute("options.preservetransform", "value", 0);
        while (items) {
                Inkscape::XML::Node *repr = (Inkscape::XML::Node *) items->data;
                // add item