summaryrefslogtreecommitdiffstats
path: root/src/desktop.cpp
diff options
context:
space:
mode:
authorJohn Smith <john.smith7545@yahoo.com>2012-10-11 09:43:21 +0000
committerJohn Smith <john.smith7545@yahoo.com>2012-10-11 09:43:21 +0000
commitc520388928f8cc85d91f24a2f01fa7549096fe83 (patch)
tree5b5f0a7b4433dc22a1080c722b78e04f7fc779e4 /src/desktop.cpp
parentFix for 171904 : toggleToolbox verb (diff)
downloadinkscape-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.cpp29
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) {