X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmeterbridge.cc;h=65438c414e9db19a025e60ba9d32dfeb3c35fcde;hb=842c33fba81ee7d360bb347a9a011582f6aac95f;hp=be7fc4c47d2885e43b1d2b87ffe68b23c8a3d29d;hpb=9010262bed21611f2db652d16f63e4af4380259d;p=ardour.git diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index be7fc4c47d..65438c414e 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -40,7 +40,6 @@ #include "ardour/audio_track.h" #include "ardour/midi_track.h" -#include "ardour/route_sorters.h" #include "meterbridge.h" @@ -55,7 +54,7 @@ #include "meter_patterns.h" #include "timers.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; @@ -100,6 +99,16 @@ Meterbridge::Meterbridge () set_wmclass (X_("ardour_mixer"), PROGRAM_NAME); +#ifdef __APPLE__ + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); +#else + if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) { + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + } else { + set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); + } +#endif + Gdk::Geometry geom; geom.max_width = 1<<16; geom.max_height = max_height; @@ -124,7 +133,6 @@ Meterbridge::Meterbridge () signal_delete_event().connect (sigc::mem_fun (*this, &Meterbridge::hide_window)); signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); - Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this), gui_context()); MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context()); MeterStrip::MetricChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::resync_order, this), gui_context()); MeterStrip::ConfigurationChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::queue_resize, this), gui_context()); @@ -256,7 +264,7 @@ Meterbridge::on_key_press_event (GdkEventKey* ev) if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) { return true; } - return relay_key_press (ev); + return relay_key_press (ev, this); } bool @@ -400,6 +408,22 @@ Meterbridge::on_scroll() metrics_right.set_metric_mode(mm_right, mt_right); } +struct PresentationInfoRouteSorter +{ + bool operator() (boost::shared_ptr a, boost::shared_ptr b) { + if (a->is_master() || a->is_monitor()) { + /* "a" is a special route (master, monitor, etc), and comes + * last in the mixer ordering + */ + return false; + } else if (b->is_master() || b->is_monitor()) { + /* everything comes before b */ + return true; + } + return a->presentation_info().order() < b->presentation_info().order(); + } +}; + void Meterbridge::set_session (Session* s) { @@ -422,12 +446,11 @@ Meterbridge::set_session (Session* s) _show_master = _session->config.get_show_master_on_meterbridge(); _show_midi = _session->config.get_show_midi_on_meterbridge(); - ARDOUR::SignalOrderRouteSorter sorter; boost::shared_ptr routes = _session->get_routes(); - RouteList copy(*routes); - copy.sort(sorter); - add_strips(copy); + RouteList copy (*routes); + copy.sort (PresentationInfoRouteSorter()); + add_strips (copy); _session->RouteAdded.connect (_session_connections, invalidator (*this), boost::bind (&Meterbridge::add_strips, this, _1), gui_context()); _session->DirtyChanged.connect (_session_connections, invalidator (*this), boost::bind (&Meterbridge::update_title, this), gui_context()); @@ -463,7 +486,7 @@ Meterbridge::session_going_away () int Meterbridge::set_state (const XMLNode& node) { - const XMLProperty* prop; + XMLProperty const * prop; XMLNode* geometry; m_width = default_width; @@ -473,7 +496,7 @@ Meterbridge::set_state (const XMLNode& node) if ((geometry = find_named_node (node, "geometry")) != 0) { - XMLProperty* prop; + XMLProperty const * prop; if ((prop = geometry->property("x_size")) == 0) { prop = geometry->property ("x-size");