diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index b6328963bb..6c5e08c8f8 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -341,6 +341,7 @@ + diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 130fc69581..1f90a4cbb6 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -171,6 +171,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void new_midi_tracer_window (); void toggle_editing_space(); + void toggle_mixer_space(); void toggle_keep_tearoffs(); Gtk::Tooltips& tooltips() { return _tooltips; } diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index b0ac528b79..6f55f7cc44 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -565,3 +565,18 @@ ARDOUR_UI::editor_meter_peak_button_release (GdkEventButton* ev) } return true; } + +void +ARDOUR_UI::toggle_mixer_space() +{ + Glib::RefPtr act = ActionManager::get_action ("Common", "ToggleMaximalMixer"); + + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + if (tact->get_active()) { + mixer->maximise_mixer_space (); + } else { + mixer->restore_mixer_space (); + } + } +} diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 0ed7a95df3..454c657e6e 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -191,6 +191,7 @@ ARDOUR_UI::install_actions () /* windows visibility actions */ ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), sigc::mem_fun (*this, &ARDOUR_UI::toggle_editing_space)); + ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalMixer"), _("Maximise Mixer Space"), sigc::mem_fun (*this, &ARDOUR_UI::toggle_mixer_space)); act = ActionManager::register_toggle_action (common_actions, X_("KeepTearoffs"), _("Show Toolbars"), mem_fun (*this, &ARDOUR_UI::toggle_keep_tearoffs)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 12cf87d793..874f8feddf 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -240,6 +240,7 @@ Mixer_UI::Mixer_UI () group_display.show(); _in_group_rebuild_or_clear = false; + _maximised = false; MixerStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::remove_strip, this, _1), gui_context()); @@ -1559,6 +1560,19 @@ Mixer_UI::set_state (const XMLNode& node) } } + if ((prop = node.property ("maximised"))) { + bool yn = string_is_affirmative (prop->value()); + Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleMaximalMixer")); + assert (act); + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + bool fs = tact && tact->get_active(); + if (yn ^ fs) { + ActionManager::do_action ("Common", + "ToggleMaximalMixer"); + } + } + + return 0; } @@ -1601,6 +1615,8 @@ Mixer_UI::get_state (void) node->add_property ("show-mixer", _visible ? "yes" : "no"); + node->add_property ("maximised", _maximised ? "yes" : "no"); + return *node; } @@ -1942,3 +1958,26 @@ Mixer_UI::toggle_midi_input_active (bool flip_others) _session->set_exclusive_input_active (rl, onoff, flip_others); } +void +Mixer_UI::maximise_mixer_space () +{ + if (_maximised) { + return; + } + + fullscreen (); + + _maximised = true; +} + +void +Mixer_UI::restore_mixer_space () +{ + if (!_maximised) { + return; + } + + unfullscreen(); + + _maximised = false; +} diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index db841535b7..693fd9dfa5 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -80,6 +80,9 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR void show_strip (MixerStrip *); void hide_strip (MixerStrip *); + void maximise_mixer_space(); + void restore_mixer_space(); + void ensure_float (Gtk::Window&); MonitorSection* monitor_section() const { return _monitor_section; } @@ -279,6 +282,9 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR bool _following_editor_selection; void monitor_section_going_away (); + + /// true if we are in fullscreen mode + bool _maximised; }; #endif /* __ardour_mixer_ui_h__ */