summaryrefslogtreecommitdiffstats
path: root/src/extension/execution-env.cpp
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2007-09-01 04:34:22 +0000
committergouldtj <gouldtj@users.sourceforge.net>2007-09-01 04:34:22 +0000
commitc832235b1dc76af96cd2a9ac8b5127871f6bec6c (patch)
treeb45b1461598f06080dc15b8f07b65b39198afce2 /src/extension/execution-env.cpp
parentr16405@tres: ted | 2007-08-29 19:50:24 -0700 (diff)
downloadinkscape-c832235b1dc76af96cd2a9ac8b5127871f6bec6c.tar.gz
inkscape-c832235b1dc76af96cd2a9ac8b5127871f6bec6c.zip
r16406@tres: ted | 2007-08-29 20:14:55 -0700
Reroute the way that the preferences signal changes so that pinning works as expected. Fixes a segmentation fault. (bzr r3645)
Diffstat (limited to 'src/extension/execution-env.cpp')
-rw-r--r--src/extension/execution-env.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp
index 666270d5f..caef5033a 100644
--- a/src/extension/execution-env.cpp
+++ b/src/extension/execution-env.cpp
@@ -28,7 +28,7 @@ namespace Inkscape {
namespace Extension {
-ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Gtk::Widget * controls, Gtk::Dialog * prefDialog) :
+ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Gtk::Widget * controls, sigc::signal<void> * changeSignal, Gtk::Dialog * prefDialog) :
_visibleDialog(NULL),
_effect(effect),
_prefsVisible(false),
@@ -38,6 +38,7 @@ ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Gtk
_prefsChanged(false),
_livePreview(true),
_selfdelete(false),
+ _changeSignal(changeSignal),
_doc(doc) {
SPDesktop *desktop = (SPDesktop *)_doc;
@@ -67,15 +68,23 @@ ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Gtk
_visibleDialog = prefDialog;
_prefsVisible = true;
}
+
+ if (_changeSignal != NULL) {
+ _changesig = _changeSignal->connect(sigc::mem_fun(this, &ExecutionEnv::preferencesChange));
+ }
return;
}
ExecutionEnv::~ExecutionEnv (void) {
_dialogsig.disconnect();
+ _changesig.disconnect();
if (_visibleDialog != NULL && !_shutdown) {
delete _visibleDialog;
}
+ if (_changeSignal != NULL && !_shutdown) {
+ delete _changeSignal;
+ }
return;
}
@@ -96,11 +105,7 @@ ExecutionEnv::preferencesChange (void) {
void
ExecutionEnv::createPrefsDialog (Gtk::Widget * controls) {
- if (_visibleDialog != NULL) {
- delete _visibleDialog;
- }
-
- _visibleDialog = new PrefDialog(_effect->get_name(), _effect->get_help(), controls, this, _effect);
+ _visibleDialog = new PrefDialog(_effect->get_name(), _effect->get_help(), controls, this, _effect, _changeSignal);
_visibleDialog->signal_response().connect(sigc::mem_fun(this, &ExecutionEnv::preferencesResponse));
_visibleDialog->show();
_dialogsig = _visibleDialog->signal_response().connect(sigc::mem_fun(this, &ExecutionEnv::preferencesResponse));
@@ -114,6 +119,9 @@ ExecutionEnv::createWorkingDialog (void) {
if (_visibleDialog != NULL) {
delete _visibleDialog;
}
+ if (_changeSignal != NULL) {
+ delete _changeSignal;
+ }
gchar * dlgmessage = g_strdup_printf(_("'%s' working, please wait..."), _effect->get_name());
_visibleDialog = new Gtk::MessageDialog(dlgmessage,