From c832235b1dc76af96cd2a9ac8b5127871f6bec6c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 1 Sep 2007 04:34:22 +0000 Subject: 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) --- src/extension/execution-env.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/extension/execution-env.cpp') 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 * 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, -- cgit v1.2.3