summaryrefslogtreecommitdiffstats
path: root/src/extension/prefdialog.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2018-05-09 19:47:33 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2018-05-09 19:47:33 +0000
commite312c345ba946b59dcd228d1e4d382b51aa37e9d (patch)
tree4291cf591ca52682a00bc72341dc1d626058c6d0 /src/extension/prefdialog.cpp
parentReset code to reaply (diff)
downloadinkscape-e312c345ba946b59dcd228d1e4d382b51aa37e9d.tar.gz
inkscape-e312c345ba946b59dcd228d1e4d382b51aa37e9d.zip
Apply fixed
Diffstat (limited to 'src/extension/prefdialog.cpp')
-rw-r--r--src/extension/prefdialog.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/extension/prefdialog.cpp b/src/extension/prefdialog.cpp
index 0247e18e9..0861f1dc3 100644
--- a/src/extension/prefdialog.cpp
+++ b/src/extension/prefdialog.cpp
@@ -18,6 +18,8 @@
// Used to get SP_ACTIVE_DESKTOP
#include "inkscape.h"
#include "desktop.h"
+#include "document.h"
+#include "document-undo.h"
#include "effect.h"
#include "implementation/implementation.h"
@@ -61,6 +63,13 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co
controls = _effect->get_imp()->prefs_effect(_effect, SP_ACTIVE_DESKTOP, &_signal_param_change, NULL);
_signal_param_change.connect(sigc::mem_fun(this, &PrefDialog::param_change));
}
+ SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ if (desktop) {
+ Inkscape::Selection * selection = desktop->getSelection();
+ if (selection) {
+ selection->emptyBackup();
+ }
+ }
hbox->pack_start(*controls, true, true, 0);
hbox->show();
@@ -170,12 +179,29 @@ PrefDialog::run (void) {
void
PrefDialog::preview_toggle (void) {
+ SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ SPDocument *document = SP_ACTIVE_DOCUMENT;
+ Inkscape::Selection * selection = NULL;
+ bool modified = document->isModifiedSinceSave();
+ if(desktop) {
+ selection = desktop->getSelection();
+ if (!selection->isEmpty()) {
+ selection->setBackup();
+ }
+ }
if(_param_preview->get_bool(NULL, NULL)) {
- set_modal(true);
if (_exEnv == NULL) {
+ set_modal(true);
+ if (desktop && selection) {
+ desktop->on_live_extension = true;
+
+ }
_exEnv = new ExecutionEnv(_effect, SP_ACTIVE_DESKTOP, NULL, false, false);
_effect->set_execution_env(_exEnv);
_exEnv->run();
+ if (desktop && selection) {
+ selection->clear();
+ }
}
} else {
set_modal(false);
@@ -185,8 +211,13 @@ PrefDialog::preview_toggle (void) {
delete _exEnv;
_exEnv = NULL;
_effect->set_execution_env(_exEnv);
+ if (desktop && selection) {
+ selection->restoreBackup();
+ desktop->on_live_extension = false;
+ }
}
}
+ document->setModifiedSinceSave(modified);
}
void