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);                          },  | 
