summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-07-23 23:42:48 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-07-23 23:42:48 +0100
commitea0246756466114be22b0705705f4e7d9f575009 (patch)
tree31169138dd11282f9ca25c073281fdbafdbaa770 /src
parent58101645ab6d43772ae14c1d335f0981a3bc43e7 (diff)
Disable notifications when disabling an option temporarly
Diffstat (limited to 'src')
-rw-r--r--src/commands.cc4
-rw-r--r--src/option_manager.hh11
2 files changed, 8 insertions, 7 deletions
diff --git a/src/commands.cc b/src/commands.cc
index ab791f66..921b5c35 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -1163,9 +1163,9 @@ struct DisableOption {
DisableOption(Context& context, const char* name)
: m_option(context.options()[name]),
m_prev_value(m_option.get<T>())
- { m_option.set(T{}); }
+ { m_option.set(T{}, false); }
- ~DisableOption() { m_option.set(m_prev_value); }
+ ~DisableOption() { m_option.set(m_prev_value, false); }
private:
Option& m_option;
diff --git a/src/option_manager.hh b/src/option_manager.hh
index 23a801f3..830098f9 100644
--- a/src/option_manager.hh
+++ b/src/option_manager.hh
@@ -44,7 +44,7 @@ public:
virtual ~Option() = default;
template<typename T> const T& get() const;
- template<typename T> void set(const T& val);
+ template<typename T> void set(const T& val, bool notify=true);
template<typename T> bool is_of_type() const;
virtual String get_as_string() const = 0;
@@ -116,12 +116,13 @@ public:
TypedOption(OptionManager& manager, const OptionDesc& desc, const T& value)
: Option(desc, manager), m_value(value) {}
- void set(T value)
+ void set(T value, bool notify = true)
{
if (m_value != value)
{
m_value = std::move(value);
- manager().on_option_changed(*this);
+ if (notify)
+ manager().on_option_changed(*this);
}
}
const T& get() const { return m_value; }
@@ -172,12 +173,12 @@ template<typename T> const T& Option::get() const
return typed_opt->get();
}
-template<typename T> void Option::set(const T& val)
+template<typename T> void Option::set(const T& val, bool notify)
{
auto* typed_opt = dynamic_cast<TypedOption<T>*>(this);
if (not typed_opt)
throw runtime_error(format("option '{}' is not of type '{}'", name(), typeid(T).name()));
- return typed_opt->set(val);
+ return typed_opt->set(val, notify);
}
template<typename T> bool Option::is_of_type() const