Emitting value changed when value doesn't change is not a goo idea
Especially when it causes a crash in derived applications.
(gdb) bt
#0 dtkCoreParameter::shareValue (this=0x5ea420, v=...) at /home/clebreto/programming/dream/dtk-core/src/dtkCore/dtkCoreParameter.cpp:181
#1 0x00007ffff6bdbb29 in dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1::operator()(double) const (this=<optimized out>, v=20)
at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsParameterDoubleSpinBox.cpp:92
#2 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<double>, void, dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1>::call(dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1&, void**) (
f=..., arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:146
#3 QtPrivate::Functor<dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1, 1>::call<QtPrivate::List<double>, void>(dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1&, void*, void**) (f=...,
arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:256
#4 QtPrivate::QFunctorSlotObject<dtkWidgetsParameterDoubleSpinBox::connect(dtkCoreParameter*)::$_1, 1, QtPrivate::List<double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=<optimized out>,
this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:439
#5 0x00007ffff23316d7 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#6 0x00007ffff6b9acf0 in dtkWidgetsSpinBoxDouble::valueChanged (this=0x5ea420, _t1=20) at /home/clebreto/programming/dream/dtk-widgets/build/src/dtkWidgets/dtkWidgets_autogen/EWIEGA46WW/moc_dtkWidgetsSpinBoxDouble.cpp:131
#7 0x00007ffff6bf0eec in dtkWidgetsSpinBoxDoublePrivate::touch (this=<optimized out>) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsSpinBoxDouble.cpp:59
#8 dtkWidgetsSpinBoxDoublePrivate::update (this=0x8bf4e0) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsSpinBoxDouble.cpp:54
#9 0x00007ffff23317b8 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#10 0x00007ffff2b72039 in QWidget::event(QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#11 0x00007ffff2c50295 in QAbstractSpinBox::event(QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#12 0x00007ffff2b4682a in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#13 0x00007ffff2b4c3f1 in QApplication::notify(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#14 0x00007ffff231b186 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#15 0x00007ffff2b49063 in QApplicationPrivate::setFocusWidget(QWidget*, Qt::FocusReason) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#16 0x00007ffff2b6ddd5 in QWidget::setFocus(Qt::FocusReason) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#17 0x00007ffff2b6e51a in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#18 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#19 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#20 0x00007ffff2c493b0 in QScrollArea::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#21 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#22 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#23 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#24 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#25 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#26 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#27 0x00007ffff2c493b0 in QScrollArea::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#28 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#29 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#30 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#31 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#32 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#33 0x00007ffff2b6e453 in QWidget::focusNextPrevChild(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#34 0x00007ffff2b6e795 in QWidgetPrivate::hide_helper() () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#35 0x00007ffff2b71a81 in QWidgetPrivate::setVisible(bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#36 0x00007ffff2b72978 in QWidget::setParent(QWidget*, QFlags<Qt::WindowType>) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#37 0x00007ffff6bc5986 in dtkWidgetsMenuItemParameterFacade::~dtkWidgetsMenuItemParameterFacade (this=0xeee640) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenu+ux.cpp:254
#38 0x00007ffff6bc59f9 in dtkWidgetsMenuItemParameterFacade::~dtkWidgetsMenuItemParameterFacade (this=0xeee640) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenu+ux.cpp:251
#39 0x00007ffff233473a in QObjectPrivate::deleteChildren() () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#40 0x00007ffff2b6edd4 in QWidget::~QWidget() () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#41 0x00007ffff6bc5e39 in dtkWidgetsMenuFacade::~dtkWidgetsMenuFacade (this=0xbb0a80) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenu+ux.cpp:295
#42 dtkWidgetsMenuFacade::~dtkWidgetsMenuFacade (this=0xbb0a80) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenu+ux.cpp:293
#43 0x00007ffff6bc7ca4 in dtkWidgetsMenuBarContainerSlide::touch (this=0x6b3500, mb=0x6138c0, c=0x72f040) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenuBar.cpp:357
#44 0x00007ffff6bc8ec6 in dtkWidgetsMenuBarContainer::touch (this=0x72f040, mb=0x6138c0) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenuBar.cpp:560
#45 0x00007ffff6bcbe8d in dtkWidgetsMenuBar::touch (this=0x6138c0) at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsMenuBar.cpp:1108
#46 0x0000000000425a38 in ztrNeurofeedbackWorkspacePrivate::changePluginMenu<ztrTemporalFilter> (this=<optimized out>, node_switch=0x7aa270, menu_name=..., menu=<optimized out>)
at /user/clebreto/home/programming/come/zither/app/zither/ztrNeurofeedbackWorkspace.cpp:278
#47 0x00007ffff23316d7 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#48 0x0000000000422390 in ztrNodeSwitch<ztrTemporalFilter>::changePlugin (this=0x7aa270, plugin=...) at /user/clebreto/home/programming/come/zither/src/ztrCore/ztrNodeSwitch.tpp:135
#49 0x0000000000421f50 in ztrNodeSwitch<ztrTemporalFilter>::ztrNodeSwitch(QString const&, QObject*)::{lambda(QVariant)#1}::operator()(QVariant) const (this=<optimized out>, v=...)
--Type <RET> for more, q to quit, c to continue without paging--
at /user/clebreto/home/programming/come/zither/src/ztrCore/ztrNodeSwitch.tpp:33
#50 0x0000000000421e17 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QVariant>, void, ztrNodeSwitch<ztrTemporalFilter>::ztrNodeSwitch(QString const&, QObject*)::{lambda(QVariant)#1}>::call({lambda(QVariant)#1}&, void**) (f=..., arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:146
#51 QtPrivate::Functor<ztrNodeSwitch<ztrTemporalFilter>::ztrNodeSwitch(QString const&, QObject*)::{lambda(QVariant)#1}, 1>::call<QtPrivate::List<QVariant>, void>({lambda(QVariant)#1}&, void*, {lambda(QVariant)#1}&*) (f=...,
arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:256
#52 QtPrivate::QFunctorSlotObject<ztrNodeSwitch<ztrTemporalFilter>::ztrNodeSwitch(QString const&, QObject*)::{lambda(QVariant)#1}, 1, QtPrivate::List<QVariant>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (
which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:439
#53 0x00007ffff23316d7 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#54 0x00007ffff61c4892 in dtkCoreParameterConnection::valueChanged (this=0x5ea420, _t1=...) at /home/clebreto/programming/dream/dtk-core/build/src/dtkCore/dtkCore_autogen/EWIEGA46WW/moc_dtkCoreParameter.cpp:142
#55 0x00007ffff61cef6f in dtkCoreParameter::sync (this=<optimized out>) at /home/clebreto/programming/dream/dtk-core/src/dtkCore/dtkCoreParameter.cpp:136
#56 0x000000000041aaab in dtkCoreParameterInList<QString>::setValue (this=0x6ab628, v=...) at /home/clebreto/programming/dream/dtk-core/src/dtkCore/dtkCoreParameter.tpp:1164
#57 0x00007ffff61cf46c in dtkCoreParameter::shareValue (this=<optimized out>, v=...) at /home/clebreto/programming/dream/dtk-core/src/dtkCore/dtkCoreParameter.cpp:182
#58 0x00007ffff6bee66f in dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1::operator()(QString const&) const (this=<optimized out>, v=...)
at /home/clebreto/programming/dream/dtk-widgets/src/dtkWidgets/dtkWidgetsParameterStringListComboBox.cpp:134
#59 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QString const&>, void, dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1>::call(dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1&, void**) (f=..., arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:146
#60 QtPrivate::Functor<dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1, 1>::call<QtPrivate::List<QString const&>, void>(dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1&, void*, void**) (
f=..., arg=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:256
#61 QtPrivate::QFunctorSlotObject<dtkWidgetsParameterStringListComboBox::connect(dtkCoreParameter*)::$_1, 1, QtPrivate::List<QString const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=<optimized out>,
this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /user/clebreto/home/miniconda3/envs/zitherminus/include/qt/QtCore/qobjectdefs_impl.h:439
#62 0x00007ffff23316d7 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#63 0x00007ffff2bea401 in QComboBox::currentTextChanged(QString const&) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#64 0x00007ffff2beb9e4 in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#65 0x00007ffff2bed0ca in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#66 0x00007ffff2bed119 in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#67 0x00007ffff2bf0e35 in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#68 0x00007ffff23317b8 in QMetaObject::activate(QObject*, int, int, void**) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#69 0x00007ffff2bea45c in QComboBoxPrivateContainer::itemSelected(QModelIndex const&) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#70 0x00007ffff2bea83b in QComboBoxPrivateContainer::eventFilter(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#71 0x00007ffff2318b6d in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#72 0x00007ffff2b4681a in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#73 0x00007ffff2b4b095 in QApplication::notify(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#74 0x00007ffff231b186 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#75 0x00007ffff2b4a53f in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#76 0x00007ffff2b80fe4 in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#77 0x00007ffff2b823a6 in ?? () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#78 0x00007ffff2b4682a in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#79 0x00007ffff2b4c3f1 in QApplication::notify(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Widgets.so.5
#80 0x00007ffff231b186 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#81 0x00007ffff26c140b in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Gui.so.5
#82 0x00007ffff26c1ff7 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Gui.so.5
#83 0x00007ffff26aedd4 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Gui.so.5
#84 0x00007fffc0a64f0e in ?? () from /home/clebreto/miniconda3/envs/zitherminus/plugins/platforms/../../lib/libQt5XcbQpa.so.5
#85 0x00007fffe63f1d1b in g_main_context_dispatch () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/./libglib-2.0.so.0
#86 0x00007fffe63f1f61 in g_main_context_iterate.isra () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/./libglib-2.0.so.0
#87 0x00007fffe63f1fee in g_main_context_iteration () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/./libglib-2.0.so.0
#88 0x00007ffff234a42b in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#89 0x00007ffff2317bc1 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#90 0x00007ffff231ba39 in QCoreApplication::exec() () from /user/clebreto/home/miniconda3/envs/zitherminus/lib/libQt5Core.so.5
#91 0x000000000042ac77 in main (argc=<optimized out>, argv=<optimized out>) at /user/clebreto/home/programming/come/zither/app/zither/main.cpp:62