diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-29 05:39:47 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-29 05:41:35 +0100 |
commit | e766ee9b110c81e334d2e3305df563d9cff3e604 (patch) | |
tree | 4d52c32df85cd9a09e13620c4bd6514a380c109a /options | |
parent | 05ef8b437c026f78fb43010311dcc169e3112bb9 (diff) |
options/tie: fix for enum
Fundamentally this was caused by incorrect lambda capture spec for the qobject
ptr. We need to capture the pointer by value.
Reported-by: @huliqan on IL-2 Sturmovik Russian forum.
Fixes: hatire serial port params
Diffstat (limited to 'options')
-rw-r--r-- | options/tie.hpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/options/tie.hpp b/options/tie.hpp index accd958e..bdd992d8 100644 --- a/options/tie.hpp +++ b/options/tie.hpp @@ -144,25 +144,34 @@ inline void tie_setting(value<int>& v, QTabWidget* t) template<> inline void tie_setting(value<slider_value>& v, QSlider* w) { - // we can't get these at runtime since signals cross threads - const int q_min = w->minimum(); - const int q_max = w->maximum(); + { + const int q_min = w->minimum(); + const int q_max = w->maximum(); - w->setValue(v->to_slider_pos(q_min, q_max)); - v = v->update_from_slider(w->value(), q_min, q_max); + w->setValue(v->to_slider_pos(q_min, q_max)); + v = v->update_from_slider(w->value(), q_min, q_max); + } base_value::connect(w, &QSlider::valueChanged, &v, - [=, &v](int pos) { - v = v->update_from_slider(pos, q_min, q_max); - w->setValue(v->to_slider_pos(q_min, q_max)); + [=, &v](int pos) + { + run_in_thread_sync(w, [&]() + { + const int q_min = w->minimum(); + const int q_max = w->maximum(); + v = v->update_from_slider(pos, q_min, q_max); + w->setValue(v->to_slider_pos(q_min, q_max)); + }); }, v.DIRECT_CONNTYPE); base_value::connect(&v, static_cast<void(base_value::*)(double) const>(&base_value::valueChanged), w, [=, &v](double) { + const int q_min = w->minimum(); + const int q_max = w->maximum(); w->setValue(v->to_slider_pos(q_min, q_max)); v = v->update_from_slider(w->value(), q_min, q_max); }, |