diff options
| author | John Smith <john.smith7545@yahoo.com> | 2012-10-11 09:43:21 +0000 |
|---|---|---|
| committer | John Smith <john.smith7545@yahoo.com> | 2012-10-11 09:43:21 +0000 |
| commit | c520388928f8cc85d91f24a2f01fa7549096fe83 (patch) | |
| tree | 5b5f0a7b4433dc22a1080c722b78e04f7fc779e4 /src/desktop.cpp | |
| parent | Fix for 171904 : toggleToolbox verb (diff) | |
| download | inkscape-c520388928f8cc85d91f24a2f01fa7549096fe83.tar.gz inkscape-c520388928f8cc85d91f24a2f01fa7549096fe83.zip | |
Fix for 191020 : Lock/Unlock all layers - Lock other layers
(bzr r11779)
Diffstat (limited to 'src/desktop.cpp')
| -rw-r--r-- | src/desktop.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp index bfec523db..fa0c8647f 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -511,6 +511,35 @@ void SPDesktop::toggleLockAllLayers(bool lock) { } } +void SPDesktop::toggleLockOtherLayers(SPObject *object) { + g_return_if_fail(SP_IS_GROUP(object)); + g_return_if_fail( currentRoot() == object || (currentRoot() && currentRoot()->isAncestorOf(object)) ); + + bool othersLocked = false; + std::vector<SPObject*> layers; + for ( SPObject* obj = Inkscape::next_layer(currentRoot(), object); obj; obj = Inkscape::next_layer(currentRoot(), obj) ) { + // Dont lock any ancestors, since that would in turn lock the layer as well + if (!obj->isAncestorOf(object)) { + layers.push_back(obj); + othersLocked |= !SP_ITEM(obj)->isLocked(); + } + } + for ( SPObject* obj = Inkscape::previous_layer(currentRoot(), object); obj; obj = Inkscape::previous_layer(currentRoot(), obj) ) { + if (!obj->isAncestorOf(object)) { + layers.push_back(obj); + othersLocked |= !SP_ITEM(obj)->isLocked(); + } + } + + SPItem *item = SP_ITEM(object); + if ( item->isLocked() ) { + item->setLocked(false); + } + + for ( std::vector<SPObject*>::iterator it = layers.begin(); it != layers.end(); ++it ) { + SP_ITEM(*it)->setLocked(othersLocked); + } +} void SPDesktop::toggleLayerSolo(SPObject *object) { |
