X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flayer-manager.cpp;h=8c45c7e53642fdebabb75b930ce24efb09909ab2;hb=e51e77b1ae5ed3ffa90c30fc971b35b5484ce148;hp=32a8b46ff0ee0717dbe236247f2dfb5884ca08b3;hpb=2628d316780e2fb792077c95ec9e91fb28e3bcb9;p=inkscape.git diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp index 32a8b46ff..8c45c7e53 100644 --- a/src/layer-manager.cpp +++ b/src/layer-manager.cpp @@ -16,7 +16,7 @@ #include "desktop.h" #include "desktop-handles.h" #include "layer-manager.h" -#include "prefs-utils.h" +#include "preferences.h" #include "ui/view/view.h" #include "selection.h" #include "sp-object.h" @@ -150,55 +150,60 @@ void LayerManager::setCurrentLayer( SPObject* obj ) if ( _desktop->currentRoot() ) { _desktop->setCurrentLayer( obj ); - if ( prefs_get_int_attribute_limited("options.selection", "layerdeselect", 1, 0, 1) ) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + if (prefs->getBool("/options/selection/layerdeselect", true)) { sp_desktop_selection( _desktop )->clear(); } } } -void LayerManager::renameLayer( SPObject* obj, gchar const *label ) +void LayerManager::renameLayer( SPObject* obj, gchar const *label, bool uniquify ) { Glib::ustring incoming( label ? label : "" ); Glib::ustring result(incoming); Glib::ustring base(incoming); guint startNum = 1; - Glib::ustring::size_type pos = base.rfind('#'); - if ( pos != Glib::ustring::npos ) { - gchar* numpart = g_strdup(base.substr(pos+1).c_str()); - if ( numpart ) { - gchar* endPtr = 0; - guint64 val = g_ascii_strtoull( numpart, &endPtr, 10); - if ( ((val > 0) || (endPtr != numpart)) && (val < 65536) ) { - base.erase( pos ); - result = base; - startNum = static_cast(val); + if (uniquify) { + + Glib::ustring::size_type pos = base.rfind('#'); + if ( pos != Glib::ustring::npos ) { + gchar* numpart = g_strdup(base.substr(pos+1).c_str()); + if ( numpart ) { + gchar* endPtr = 0; + guint64 val = g_ascii_strtoull( numpart, &endPtr, 10); + if ( ((val > 0) || (endPtr != numpart)) && (val < 65536) ) { + base.erase( pos ); + result = base; + startNum = static_cast(val); + } + g_free(numpart); } - g_free(numpart); } - } - std::set currentNames; - GSList const *layers=sp_document_get_resource_list(_document, "layer"); - SPObject *root=_desktop->currentRoot(); - if ( root ) { - for ( GSList const *iter=layers ; iter ; iter = iter->next ) { - SPObject *layer=static_cast(iter->data); - if ( layer != obj ) { - currentNames.insert( layer->label() ? Glib::ustring(layer->label()) : Glib::ustring() ); + std::set currentNames; + GSList const *layers=sp_document_get_resource_list(_document, "layer"); + SPObject *root=_desktop->currentRoot(); + if ( root ) { + for ( GSList const *iter=layers ; iter ; iter = iter->next ) { + SPObject *layer=static_cast(iter->data); + if ( layer != obj ) { + currentNames.insert( layer->label() ? Glib::ustring(layer->label()) : Glib::ustring() ); + } } } - } - // Not sure if we need to cap it, but we'll just be paranoid for the moment - // Intentionally unsigned - guint endNum = startNum + 3000; - for ( guint i = startNum; (i < endNum) && (currentNames.find(result) != currentNames.end()); i++ ) { - gchar* suffix = g_strdup_printf("#%d", i); - result = base; - result += suffix; + // Not sure if we need to cap it, but we'll just be paranoid for the moment + // Intentionally unsigned + guint endNum = startNum + 3000; + for ( guint i = startNum; (i < endNum) && (currentNames.find(result) != currentNames.end()); i++ ) { + gchar* suffix = g_strdup_printf("#%d", i); + result = base; + result += suffix; + + g_free(suffix); + } - g_free(suffix); } obj->setLabel( result.c_str() ); @@ -283,7 +288,9 @@ void LayerManager::_rebuild() { layersToAdd.insert(SP_GROUP(layer)); } for ( std::set::iterator it = additional.begin(); it != additional.end(); ++it ) { - layersToAdd.insert(*it); + if ( !includes(*it) ) { + layersToAdd.insert(*it); + } } } }