FFT analysis: use actual latency
[ardour.git] / gtk2_ardour / ardour_ui.cc
index dce3fbfac88d66b355f41bd3448c70106c945539..09912dc95e0d11cdb164485132dd6bfa94497b39 100644 (file)
@@ -287,6 +287,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , _was_dirty (false)
        , _mixer_on_top (false)
        , _initial_verbose_plugin_scan (false)
+       , _shared_popup_menu (0)
        , secondary_clock_spacer (0)
        , auto_input_button (ArdourButton::led_default_elements)
        , time_info_box (0)
@@ -298,7 +299,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , error_alert_button ( ArdourButton::just_led_default_elements )
        , editor_meter_peak_display()
        , editor_meter(0)
-       , _suspend_editor_meter_callbacks (false)
        , _numpad_locate_happening (false)
        , _session_is_new (false)
        , last_key_press_time (0)
@@ -351,7 +351,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
                MessageDialog msg (string_compose (_("Your configuration files were copied. You can now restart %1."), PROGRAM_NAME), true);
                msg.run ();
                /* configuration was modified, exit immediately */
-               _exit (0);
+               _exit (EXIT_SUCCESS);
        }
 
 
@@ -739,7 +739,7 @@ ARDOUR_UI::post_engine ()
 
                halt_connection.disconnect ();
                AudioEngine::instance()->stop ();
-               exit (0);
+               exit (EXIT_SUCCESS);
 
        }
 
@@ -771,8 +771,7 @@ ARDOUR_UI::post_engine ()
                vector<string>::iterator l;
 
                for (p = paths.begin(), l = labels.begin(); p != paths.end(); ++p, ++l) {
-                       output << "     <tr><th><kbd class=\"osc\">" << (*p).substr (10, string::npos);
-                       output << "</kbd></th><td>" << *l << "</td></tr>" << endl;
+                       output << " <tr><th><kbd class=\"osc\">" << *p << "</kbd></th><td>" << *l << "</td></tr>" << endl;
                }
                output << "  </tbody>\n  </table>" << endl;
 
@@ -817,7 +816,7 @@ ARDOUR_UI::post_engine ()
 
                halt_connection.disconnect ();
                AudioEngine::instance()->stop ();
-               exit (0);
+               exit (EXIT_SUCCESS);
        }
 
        /* this being a GUI and all, we want peakfiles */
@@ -868,6 +867,7 @@ ARDOUR_UI::~ARDOUR_UI ()
                delete rc_option_editor; rc_option_editor = 0; // failed to wrap object warning
                delete nsm; nsm = 0;
                delete gui_object_state; gui_object_state = 0;
+               delete _shared_popup_menu ; _shared_popup_menu = 0;
                delete main_window_visibility;
                FastMeter::flush_pattern_cache ();
                ArdourFader::flush_pattern_cache ();
@@ -1261,7 +1261,7 @@ ARDOUR_UI::starting ()
                        c.signal_toggled().connect (sigc::hide_return (sigc::bind (sigc::ptr_fun (toggle_file_existence), path)));
 
                        if (d.run () != RESPONSE_OK) {
-                               _exit (0);
+                               _exit (EXIT_SUCCESS);
                        }
                }
 #endif
@@ -1878,7 +1878,7 @@ ARDOUR_UI::open_recent_session ()
                                recent_session_dialog.hide();
                                return;
                        } else {
-                               exit (1);
+                               exit (EXIT_FAILURE);
                        }
                }
 
@@ -3242,7 +3242,7 @@ ARDOUR_UI::load_from_application_api (const std::string& path)
                ARDOUR_COMMAND_LINE::session_name = "";
 
                if (get_session_parameters (true, false)) {
-                       exit (1);
+                       exit (EXIT_FAILURE);
                }
        }
 }
@@ -3483,12 +3483,12 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
 
                        if (ret == -2) {
                                /* not connected to the AudioEngine, so quit to avoid an infinite loop */
-                               exit (1);
+                               exit (EXIT_FAILURE);
                        }
 
                        if (!ARDOUR_COMMAND_LINE::immediate_save.empty()) {
                                _session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
-                               exit (1);
+                               exit (EXIT_FAILURE);
                        }
 
                        /* clear this to avoid endless attempts to load the
@@ -3518,7 +3518,7 @@ ARDOUR_UI::close_session()
        ARDOUR_COMMAND_LINE::session_name = "";
 
        if (get_session_parameters (true, false)) {
-               exit (1);
+               exit (EXIT_FAILURE);
        }
 }
 
@@ -3582,7 +3582,7 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
 
                switch (response) {
                case RESPONSE_CANCEL:
-                       exit (1);
+                       exit (EXIT_FAILURE);
                default:
                        break;
                }
@@ -4197,17 +4197,14 @@ Clean-up will move all unused files to a \"dead\" location."));
        default:
                return;
        }
+       checker.hide();
 
        ARDOUR::CleanupReport rep;
 
        editor->prepare_for_cleanup ();
 
        /* do not allow flush until a session is reloaded */
-
-       Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("FlushWastebasket"));
-       if (act) {
-               act->set_sensitive (false);
-       }
+       ActionManager::get_action (X_("Main"), X_("FlushWastebasket"))->set_sensitive (false);
 
        if (_session->cleanup_sources (rep)) {
                editor->finish_cleanup ();
@@ -4216,7 +4213,6 @@ Clean-up will move all unused files to a \"dead\" location."));
 
        editor->finish_cleanup ();
 
-       checker.hide();
        display_cleanup_results (rep, _("Cleaned Files"), false);
 }
 
@@ -5418,53 +5414,6 @@ ARDOUR_UI::session_format_mismatch (std::string xml_path, std::string backup_pat
        msg.run ();
 }
 
-void
-ARDOUR_UI::add_editor_meter_type_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
-{
-       using namespace Menu_Helpers;
-
-       items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (editor_meter, &LevelMeterHBox::set_meter_type), type)));
-       RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
-       i->set_active (editor_meter->meter_type () == type);
-}
-
-void
-ARDOUR_UI::popup_editor_meter_menu (GdkEventButton* ev)
-{
-       using namespace Gtk::Menu_Helpers;
-
-       Gtk::Menu* m = manage (new Menu);
-       MenuList& items = m->items ();
-
-       RadioMenuItem::Group group;
-
-       _suspend_editor_meter_callbacks = true;
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak0dB), MeterPeak0dB);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms),  MeterKrms);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK12), MeterK12);
-       add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterVU),  MeterVU);
-
-       m->popup (ev->button, ev->time);
-       _suspend_editor_meter_callbacks = false;
-}
-
-bool
-ARDOUR_UI::editor_meter_button_press (GdkEventButton* ev)
-{
-       if (ev->button == 3 && editor_meter) {
-               popup_editor_meter_menu (ev);
-               return true;
-       }
-       return false;
-}
-
 void
 ARDOUR_UI::reset_peak_display ()
 {
@@ -5561,16 +5510,16 @@ ARDOUR_UI::transport_numpad_event (int num)
                _pending_locate_num = _pending_locate_num*10 + num;
        } else {
                switch (num) {
-                       case 0:  toggle_roll(false, false);             break;
-                       case 1:  transport_rewind(1);                           break;
-                       case 2:  transport_forward(1);                          break;
-                       case 3:  transport_record(true);                        break;
-                       case 4:  toggle_session_auto_loop();            break;
-                       case 5:  transport_record(false); toggle_session_auto_loop();   break;
-                       case 6:  toggle_punch();                                        break;
-                       case 7:  toggle_click();                                break;
-                       case 8:  toggle_auto_return();                  break;
-                       case 9:  toggle_follow_edits();         break;
+                       case 0: toggle_roll(false, false);                           break;
+                       case 1: transport_rewind(1);                                 break;
+                       case 2: transport_forward(1);                                break;
+                       case 3: transport_record(true);                              break;
+                       case 4: toggle_session_auto_loop();                          break;
+                       case 5: transport_record(false); toggle_session_auto_loop(); break;
+                       case 6: toggle_punch();                                      break;
+                       case 7: toggle_click();                                      break;
+                       case 8: toggle_auto_return();                                break;
+                       case 9: toggle_follow_edits();                               break;
                }
        }
 }
@@ -5628,7 +5577,7 @@ ARDOUR_UI::audioengine_became_silent ()
        case Gtk::RESPONSE_NO:
                /* save and quit */
                save_state_canfail ("");
-               exit (0);
+               exit (EXIT_SUCCESS);
                break;
 
        case Gtk::RESPONSE_CANCEL:
@@ -6025,3 +5974,14 @@ ARDOUR_UI::monitor_mono ()
        Glib::RefPtr<ToggleAction> tact = ActionManager::get_toggle_action (X_("Monitor"), "monitor-mono");
        _monitor->set_mono (tact->get_active());
 }
+
+Gtk::Menu*
+ARDOUR_UI::shared_popup_menu ()
+{
+       ENSURE_GUI_THREAD (*this, &ARDOUR_UI::shared_popup_menu, ignored);
+
+       assert (!_shared_popup_menu || !_shared_popup_menu->is_visible());
+       delete _shared_popup_menu;
+       _shared_popup_menu = new Gtk::Menu;
+       return _shared_popup_menu;
+}