From 5dae93e5ea4a975afae92bbb51ba3410f6dc3e5f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 7 Jul 2013 19:04:07 +0200 Subject: [PATCH] ignore state-changes during [meter] context-menu popup (gtkmm bug?) --- gtk2_ardour/meter_strip.cc | 4 +++- gtk2_ardour/meter_strip.h | 1 + gtk2_ardour/mixer_strip.cc | 5 ++++- gtk2_ardour/mixer_strip.h | 1 + libs/ardour/meter.cc | 4 ++++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index 50ef230e65..53ece6745a 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -452,10 +452,12 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev) RadioMenuItem::Group group; + _suspend_menu_callbacks = true; add_level_meter_item (items, group, _("Peak"), MeterPeak); add_level_meter_item (items, group, _("RMS"), MeterKrms); m->popup (ev->button, ev->time); + _suspend_menu_callbacks = false; } void @@ -471,8 +473,8 @@ MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem:: void MeterStrip::set_meter_type (MeterType m) { + if (_suspend_menu_callbacks) return; level_meter->set_type (m); - //_route->set_meter_type(m); } void diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index a1851b92b0..9f80cfee87 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -116,6 +116,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI void parameter_changed (std::string const & p); void redraw_metrics (); + bool _suspend_menu_callbacks; bool level_meter_button_press (GdkEventButton* ev); void popup_level_meter_menu (GdkEventButton* ev); void add_level_meter_item (Gtk::Menu_Helpers::MenuList& items, Gtk::RadioMenuItem::Group& group, std::string const & name, ARDOUR::MeterType mode); diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 238b6077a6..50522564d0 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -2125,6 +2125,7 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev) RadioMenuItem::Group group; + _suspend_menu_callbacks = true; add_level_meter_item_point (items, group, _("Input"), MeterInput); add_level_meter_item_point (items, group, _("Pre-fader"), MeterPreFader); add_level_meter_item_point (items, group, _("Post-fader"), MeterPostFader); @@ -2138,6 +2139,7 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev) add_level_meter_item_type (items, tgroup, _("RMS"), MeterKrms); m->popup (ev->button, ev->time); + _suspend_menu_callbacks = false; } void @@ -2154,6 +2156,7 @@ MixerStrip::add_level_meter_item_point (Menu_Helpers::MenuList& items, void MixerStrip::set_meter_point (MeterPoint p) { + if (_suspend_menu_callbacks) return; _route->set_meter_point (p); } @@ -2171,6 +2174,6 @@ MixerStrip::add_level_meter_item_type (Menu_Helpers::MenuList& items, void MixerStrip::set_meter_type (MeterType t) { - //_route->set_meter_type (t); + if (_suspend_menu_callbacks) return; gpm.set_type (t); } diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index 135ee6d77c..fe10070fbb 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -308,6 +308,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox void add_input_port (ARDOUR::DataType); void add_output_port (ARDOUR::DataType); + bool _suspend_menu_callbacks; bool level_meter_button_press (GdkEventButton *); void popup_level_meter_menu (GdkEventButton *); void add_level_meter_item_point (Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterPoint); diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc index c332143324..9871b582c0 100644 --- a/libs/ardour/meter.cc +++ b/libs/ardour/meter.cc @@ -307,6 +307,10 @@ PeakMeter::meter_level(uint32_t n, MeterType type) { void PeakMeter::set_type(MeterType t) { + if (t == _meter_type) { + return; + } + _meter_type = t; if (t & MeterKrms) {