summaryrefslogtreecommitdiffstats
path: root/src/ui/tool/path-manipulator.cpp
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2010-12-16 23:16:33 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2010-12-16 23:16:33 +0000
commit69059080428adb8b6258a6d5de15f0028c4444f8 (patch)
tree8bb0223cebe590c3e043dafd725406c6cb4a42af /src/ui/tool/path-manipulator.cpp
parentNode tool: fix Tab and Shift+Tab (diff)
downloadinkscape-69059080428adb8b6258a6d5de15f0028c4444f8.tar.gz
inkscape-69059080428adb8b6258a6d5de15f0028c4444f8.zip
Node tool: special case node duplication for endnodes - select new endnode
(bzr r9962)
Diffstat (limited to 'src/ui/tool/path-manipulator.cpp')
-rw-r--r--src/ui/tool/path-manipulator.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 7c60efbab..ea7f3412d 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -275,22 +275,31 @@ void PathManipulator::duplicateNodes()
NodeList::iterator k = j.next();
Node *n = new Node(_multi_path_manipulator._path_data.node_data, *j);
- // Move the new node to the bottom of the Z-order. This way you can drag all
- // nodes that were selected before this operation without deselecting
- // everything because there is a new node above.
- n->sink();
+ if (k) {
+ // Move the new node to the bottom of the Z-order. This way you can drag all
+ // nodes that were selected before this operation without deselecting
+ // everything because there is a new node above.
+ n->sink();
+ }
n->front()->setPosition(*j->front());
j->front()->retract();
j->setType(NODE_CUSP, false);
(*i)->insert(k, n);
- // We need to manually call the selection change callback to refresh
- // the handle display correctly.
- // This call changes num_selected, but we call this once for a selected node
- // and once for an unselected node, so in the end the number stays correct.
- _selectionChanged(j.ptr(), true);
- _selectionChanged(n, false);
+ if (k) {
+ // We need to manually call the selection change callback to refresh
+ // the handle display correctly.
+ // This call changes num_selected, but we call this once for a selected node
+ // and once for an unselected node, so in the end the number stays correct.
+ _selectionChanged(j.ptr(), true);
+ _selectionChanged(n, false);
+ } else {
+ // select the new end node instead of the node just before it
+ _selection.erase(j.ptr());
+ _selection.insert(n);
+ break; // this was the end node, nothing more to do
+ }
}
}
}