diff options
| author | Ted Gould <ted@gould.cx> | 2007-09-01 04:34:22 +0000 |
|---|---|---|
| committer | gouldtj <gouldtj@users.sourceforge.net> | 2007-09-01 04:34:22 +0000 |
| commit | c832235b1dc76af96cd2a9ac8b5127871f6bec6c (patch) | |
| tree | b45b1461598f06080dc15b8f07b65b39198afce2 /src/extension/execution-env.cpp | |
| parent | r16405@tres: ted | 2007-08-29 19:50:24 -0700 (diff) | |
| download | inkscape-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.cpp | 20 |
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, |
