summaryrefslogtreecommitdiffstats
path: root/src/ui/tools/eraser-tool.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-05-21 22:03:52 +0000
committerjabiertxof <info@marker.es>2016-05-21 22:03:52 +0000
commit2d2718e48ee56f975342f0329b98f892f118d85e (patch)
treef683ad71e8a04a600662cfae099a03d9119231c8 /src/ui/tools/eraser-tool.cpp
parentworking on undo (diff)
downloadinkscape-2d2718e48ee56f975342f0329b98f892f118d85e.tar.gz
inkscape-2d2718e48ee56f975342f0329b98f892f118d85e.zip
Fixing undo thing
(bzr r14865.1.5)
Diffstat (limited to 'src/ui/tools/eraser-tool.cpp')
-rw-r--r--src/ui/tools/eraser-tool.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index b62f68a5f..60b8c2792 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -644,6 +644,8 @@ void EraserTool::clear_current() {
void EraserTool::set_to_accumulated() {
bool workDone = false;
SPDocument *document = this->desktop->doc();
+ bool saved = DocumentUndo::getUndoSensitive(document);
+ DocumentUndo::setUndoSensitive(document, false);
if (!this->accumulated->is_empty()) {
if (!this->repr) {
/* Create object */
@@ -721,7 +723,9 @@ void EraserTool::set_to_accumulated() {
Inkscape::GC::release(dup); // parent takes over
selection->set(dup);
if (!this->nowidth) {
- sp_selected_path_union(selection, desktop);
+ DocumentUndo::setUndoSensitive(document, saved);
+ sp_selected_path_union_skip_undo(selection, desktop);
+ DocumentUndo::setUndoSensitive(document, false);
}
selection->add(item);
if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){
@@ -731,13 +735,16 @@ void EraserTool::set_to_accumulated() {
sp_repr_css_attr_unref(css);
css = 0;
}
+ DocumentUndo::setUndoSensitive(document, saved);
if (this->nowidth) {
- sp_selected_path_cut(selection, desktop);
+ sp_selected_path_cut_skip_undo(selection, desktop);
} else {
- sp_selected_path_diff(selection, desktop);
+ sp_selected_path_diff_skip_undo(selection, desktop);
}
+ DocumentUndo::setUndoSensitive(document, saved);
workDone = true; // TODO set this only if something was cut.
bool break_apart = prefs->getBool("/tools/eraser/break_apart", false);
+ DocumentUndo::setUndoSensitive(document, saved);
if(!break_apart){
sp_selected_path_combine(desktop, true);
} else {
@@ -745,6 +752,7 @@ void EraserTool::set_to_accumulated() {
sp_selected_path_break_apart(desktop, true);
}
}
+ DocumentUndo::setUndoSensitive(document, saved);
if ( !selection->isEmpty() ) {
// If the item was not completely erased, track the new remainder.
std::vector<SPItem*> nowSel(selection->itemList());
@@ -777,7 +785,9 @@ void EraserTool::set_to_accumulated() {
this->repr->parent()->appendChild(dup);
Inkscape::GC::release(dup); // parent takes over
selection->set(dup);
- sp_selected_path_union(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, saved);
+ sp_selected_path_union_skip_undo(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, false);
sp_selection_raise_to_top(selection, this->desktop);
if (bbox && bbox->intersects(*eraserBbox)) {
SPClipPath *clip_path = item->clip_ref->getObject();
@@ -800,14 +810,19 @@ void EraserTool::set_to_accumulated() {
sp_object_unref(rect);
sp_selection_raise_to_top(selection, this->desktop);
selection->add(dup_clip);
- sp_selected_path_diff(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, saved);
+ sp_selected_path_diff_skip_undo(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, saved);
SPItem * clip = SP_ITEM(selection->itemList()[0]);
+ DocumentUndo::setUndoSensitive(document, false);
}
}
}
} else {
selection->add(rect);
- sp_selected_path_diff(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, saved);
+ sp_selected_path_diff_skip_undo(selection, this->desktop);
+ DocumentUndo::setUndoSensitive(document, false);
}
sp_selection_raise_to_top(selection, this->desktop);
selection->add(item);
@@ -863,6 +878,8 @@ void EraserTool::set_to_accumulated() {
this->repr = 0;
}
}
+ document->setModifiedSinceSave();
+ DocumentUndo::setUndoSensitive(document, saved);
if ( workDone ) {
DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke"));
} else {