summaryrefslogtreecommitdiffstats
path: root/src/ui/tool/multi-path-manipulator.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2013-06-29 15:43:12 +0000
committerMartin Owens <doctormo@gmail.com>2013-06-29 15:43:12 +0000
commitfefbd8cbb7c09c8c6241c7ef52413e37d4d5e6eb (patch)
treecd007cf86ef7e02525865670d6a588be1f37a85e /src/ui/tool/multi-path-manipulator.cpp
parentFix crash when undoing/redoing a duplicate layer. (diff)
downloadinkscape-fefbd8cbb7c09c8c6241c7ef52413e37d4d5e6eb.tar.gz
inkscape-fefbd8cbb7c09c8c6241c7ef52413e37d4d5e6eb.zip
Make DAMN sure paths with zero nodes do not cause a crash.
Fixed bugs: - https://launchpad.net/bugs/710637 (bzr r12396)
Diffstat (limited to 'src/ui/tool/multi-path-manipulator.cpp')
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp
index 70bd0e859..5d5ea2adc 100644
--- a/src/ui/tool/multi-path-manipulator.cpp
+++ b/src/ui/tool/multi-path-manipulator.cpp
@@ -224,10 +224,12 @@ void MultiPathManipulator::shiftSelection(int dir)
SubpathList::iterator last_j;
NodeList::iterator last_k;
bool anything_found = false;
+ bool anynode_found = false;
for (MapType::iterator i = _mmap.begin(); i != _mmap.end(); ++i) {
SubpathList &sp = i->second->subpathList();
for (SubpathList::iterator j = sp.begin(); j != sp.end(); ++j) {
+ anynode_found = true;
for (NodeList::iterator k = (*j)->begin(); k != (*j)->end(); ++k) {
if (k->selected()) {
last_i = i;
@@ -249,10 +251,12 @@ void MultiPathManipulator::shiftSelection(int dir)
if (!anything_found) {
// select first / last node
// this should never fail because there must be at least 1 non-empty manipulator
- if (dir == 1) {
+ if (anynode_found) {
+ if (dir == 1) {
_selection.insert((*_mmap.begin()->second->subpathList().begin())->begin().ptr());
- } else {
+ } else {
_selection.insert((--(*--(--_mmap.end())->second->subpathList().end())->end()).ptr());
+ }
}
return;
}