diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-04-26 14:12:52 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-04-26 14:12:52 -0400 |
commit | db34831b183d511d76ea1f29606e1933e5ad4caf (patch) | |
tree | e1418a7085f5879311074717f107098df63ab34c /gtk2_ardour/ardour_ui_dependents.cc | |
parent | a366fba7d0933a8f2d97d95fefcbcdc9692d2117 (diff) |
redesign toggling of editor/mixer stacking to use Gtkmm2ext::VisibilityTracker
Diffstat (limited to 'gtk2_ardour/ardour_ui_dependents.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui_dependents.cc | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index b9b0cdb6a2..7438fab9f0 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -150,21 +150,49 @@ ARDOUR_UI::toggle_mixer_window () } void -ARDOUR_UI::toggle_mixer_on_top () +ARDOUR_UI::toggle_editor_mixer () { + if (editor && mixer) { - if (gtk_window_is_active(Mixer_UI::instance()->gobj())) { + if (editor->get_screen() != mixer->get_screen()) { + // different screens, so don't do anything + return; + } + + /* See if they are obscuring each other */ + + gint ex, ey, ew, eh; + gint mx, my, mw, mh; + + editor->get_position (ex, ey); + editor->get_size (ew, eh); + + mixer->get_position (mx, my); + mixer->get_size (mw, mh); + + GdkRectangle e; + GdkRectangle m; + GdkRectangle r; + + e.x = ex; + e.y = ey; + e.width = ew; + e.height = eh; + + m.x = mx; + m.y = my; + m.width = mw; + m.height = mh; + + if (!gdk_rectangle_intersect (&e, &m, &r)) { + /* they do not intersect so do not toggle */ + return; + } + } + + if (mixer && mixer->fully_visible()) { goto_editor_window (); } else { - Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer")); - if (act) { - Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); - - /* Toggle the mixer to `visible' if required */ - if (!tact->get_active ()) { - tact->set_active (true); - } - } goto_mixer_window (); } } |