summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui_dependents.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-04-26 14:12:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-04-26 14:12:52 -0400
commitdb34831b183d511d76ea1f29606e1933e5ad4caf (patch)
treee1418a7085f5879311074717f107098df63ab34c /gtk2_ardour/ardour_ui_dependents.cc
parenta366fba7d0933a8f2d97d95fefcbcdc9692d2117 (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.cc50
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 ();
}
}