ignore state-changes during [meter] context-menu popup (gtkmm bug?)
authorRobin Gareus <robin@gareus.org>
Sun, 7 Jul 2013 17:04:07 +0000 (19:04 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 10 Jul 2013 13:27:13 +0000 (15:27 +0200)
gtk2_ardour/meter_strip.cc
gtk2_ardour/meter_strip.h
gtk2_ardour/mixer_strip.cc
gtk2_ardour/mixer_strip.h
libs/ardour/meter.cc

index 50ef230e6546784e30edc4a5ca3443bcdc4fe440..53ece6745ad69b4123f487f16a167dd7cda4f59e 100644 (file)
@@ -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
index a1851b92b06fc46eaea5403b0f1c2695515dd8c4..9f80cfee8761e34803dfb1c0618e676eeeb212d5 100644 (file)
@@ -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);
index 238b6077a6c4aba1af91e492d6d9d514db0890ce..50522564d09f15ec20bd0046e7b5ff1f6fee4190 100644 (file)
@@ -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);
 }
index 135ee6d77c95124f05686b159c001b09a382ae5b..fe10070fbb6397d2be554415b41fd0c02b457ba5 100644 (file)
@@ -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);
index c33214332472f2d25b64a7f4be89f7638cffb53b..9871b582c038105e8fea8dd926a3c8ac05369c0c 100644 (file)
@@ -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) {