X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mixer.cc;h=0c0348383f2a577a3423dc9144acbbc63eec6476;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=b693cf7e75609720ac907aa9d6c09c41d68b2e8d;hpb=6ae4f104371ed433a79c8845de97428d964edd8b;p=ardour.git diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index b693cf7e75..0c0348383f 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -30,6 +30,8 @@ #include "ardour/rc_configuration.h" +#include "control_protocol/control_protocol.h" + #include "actions.h" #include "ardour_ui.h" #include "audio_time_axis.h" @@ -42,8 +44,9 @@ #include "mixer_strip.h" #include "mixer_ui.h" #include "selection.h" +#include "ui_config.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace Gtkmm2ext; @@ -77,16 +80,21 @@ Editor::show_editor_mixer (bool yn) show_editor_mixer_when_tracks_arrive = false; if (yn) { - Glib::RefPtr win = get_window (); + Gtk::Window* toplevel = current_toplevel(); + Glib::RefPtr win; Glib::RefPtr screen; - + + if (toplevel) { + win = toplevel->get_window(); + } + if (win) { - screen = win->get_screen(); + screen = win->get_screen(); } else { screen = Gdk::Screen::get_default(); } - if (screen && screen->get_height() < 700) { + if (g_getenv ("ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && screen && screen->get_height() < 700) { Gtk::MessageDialog msg (_("This screen is not tall enough to display the editor mixer")); msg.run (); return; @@ -133,17 +141,19 @@ Editor::show_editor_mixer (bool yn) if (current_mixer_strip == 0) { create_editor_mixer (); } - - current_mixer_strip->set_route (r); - current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } - if (current_mixer_strip->get_parent() == 0) { + if (current_mixer_strip && current_mixer_strip->get_parent() == 0) { global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK ); global_hpacker.reorder_child (*current_mixer_strip, 0); current_mixer_strip->show (); } + if (r) { + current_mixer_strip->set_route (r); + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); + } + } else { if (current_mixer_strip) { @@ -153,18 +163,17 @@ Editor::show_editor_mixer (bool yn) } } -#ifdef GTKOSX +#ifdef __APPLE__ /* XXX gtk problem here */ ensure_all_elements_drawn(); #endif } -#ifdef GTKOSX +#ifdef __APPLE__ void Editor::ensure_all_elements_drawn () { controls_layout.queue_draw (); - ruler_label_event_box.queue_draw (); time_bars_event_box.queue_draw (); } #endif @@ -172,16 +181,15 @@ Editor::ensure_all_elements_drawn () void Editor::create_editor_mixer () { - current_mixer_strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(), - _session, - false); + current_mixer_strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(), _session, false); current_mixer_strip->Hiding.connect (sigc::mem_fun(*this, &Editor::current_mixer_strip_hidden)); current_mixer_strip->WidthChanged.connect (sigc::mem_fun (*this, &Editor::mixer_strip_width_changed)); -#ifdef GTKOSX +#ifdef __APPLE__ current_mixer_strip->WidthChanged.connect (sigc::mem_fun(*this, &Editor::ensure_all_elements_drawn)); #endif current_mixer_strip->set_embedded (true); + } void @@ -191,21 +199,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) return; } - Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); - - if (act) { - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); - if (!tact || !tact->get_active()) { - /* not showing mixer strip presently */ - return; - } - } - - if (current_mixer_strip == 0) { - create_editor_mixer (); - } - - // if this is an automation track, then we shold the mixer strip should // show the parent @@ -234,6 +227,26 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) } } + /* Typically this is set by changing the TAV selection but if for any + reason we decide to show a different strip for some reason, make + sure that control surfaces can find it. + */ + ARDOUR::ControlProtocol::set_first_selected_stripable (route); + + Glib::RefPtr act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + if (!tact || !tact->get_active()) { + /* not showing mixer strip presently */ + return; + } + } + + if (current_mixer_strip == 0) { + create_editor_mixer (); + } + if (current_mixer_strip->route() == route) { return; } @@ -265,7 +278,7 @@ Editor::maybe_add_mixer_strip_width (XMLNode& node) void Editor::mixer_strip_width_changed () { -#ifdef GTKOSX +#ifdef __APPLE__ ensure_all_elements_drawn (); #endif @@ -281,19 +294,19 @@ Editor::track_mixer_selection () void Editor::follow_mixer_selection () { - if (!ARDOUR::Config->get_link_editor_and_mixer_selection() || _following_mixer_selection) { + if (_following_mixer_selection) { return; } _following_mixer_selection = true; selection->block_tracks_changed (true); - RouteUISelection& s (Mixer_UI::instance()->selection().routes); + AxisViewSelection& s (Mixer_UI::instance()->selection().axes); selection->clear_tracks (); - for (RouteUISelection::iterator i = s.begin(); i != s.end(); ++i) { - TimeAxisView* tav = get_route_view_by_route_id ((*i)->route()->id()); + for (AxisViewSelection::iterator i = s.begin(); i != s.end(); ++i) { + TimeAxisView* tav = axis_view_from_stripable ((*i)->stripable()); if (tav) { selection->add (tav); }