diff options
| author | Ed Halley <ed@halley.cc> | 2009-03-10 02:43:40 +0000 |
|---|---|---|
| committer | speare <speare@users.sourceforge.net> | 2009-03-10 02:43:40 +0000 |
| commit | 12dd0f27b1eb81e21ed2ef9fdd6a0fd950a523cd (patch) | |
| tree | fcd9fc0603e55066bb86cb9a41b14a0b461f4afa /src/verbs.cpp | |
| parent | update from 2geom (bug fix) (diff) | |
| download | inkscape-12dd0f27b1eb81e21ed2ef9fdd6a0fd950a523cd.tar.gz inkscape-12dd0f27b1eb81e21ed2ef9fdd6a0fd950a523cd.zip | |
Edit > Duplicate Layer should duplicate hidden items, locked items, sublayers, everything
(bzr r7464)
Diffstat (limited to 'src/verbs.cpp')
| -rw-r--r-- | src/verbs.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/verbs.cpp b/src/verbs.cpp index 5e911552c..06abe9369 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1227,19 +1227,38 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/) } case SP_VERB_LAYER_DUPLICATE: { if ( dt->currentLayer() != dt->currentRoot() ) { + // Note with either approach: + // Any clone masters are duplicated, their clones use the *original*, + // but the duplicated master is not linked up as master nor clone of the original. +#if 0 + // Only copies selectable things, honoring locks, visibility, avoids sublayers. SPObject *new_layer = Inkscape::create_layer(dt->currentRoot(), dt->currentLayer(), LPOS_BELOW); if ( dt->currentLayer()->label() ) { gchar* name = g_strdup_printf(_("%s copy"), dt->currentLayer()->label()); dt->layer_manager->renameLayer( new_layer, name, TRUE ); g_free(name); } - sp_edit_select_all(dt); sp_selection_duplicate(dt, true); sp_selection_to_prev_layer(dt, true); dt->setCurrentLayer(new_layer); sp_edit_select_all(dt); - +#else + // Copies everything, regardless of locks, visibility, sublayers. + Inkscape::XML::Node *selected = dt->currentLayer()->repr; + Inkscape::XML::Node *parent = sp_repr_parent(selected); + Inkscape::XML::Node *dup = selected->duplicate(parent->document()); + parent->addChild(dup, selected); + SPObject *new_layer = dt->currentLayer()->next; + if (new_layer) { + if (new_layer->label()) { + gchar* name = g_strdup_printf(_("%s copy"), new_layer->label()); + dt->layer_manager->renameLayer( new_layer, name, TRUE ); + g_free(name); + } + dt->setCurrentLayer(new_layer); + } +#endif sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_DUPLICATE, _("Duplicate layer")); |
