summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui_dialogs.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-07 18:30:04 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-06-07 18:30:04 -0400
commita5ae129a066747901ff1ed95368729b63cb6a70d (patch)
treea1a5de3514f225804d4712ef94a5026abbb2ded6 /gtk2_ardour/ardour_ui_dialogs.cc
parent3e089ee678164440be71a90c01a77b47e5f16654 (diff)
take a rather different approach toggling editor+mixer
Diffstat (limited to 'gtk2_ardour/ardour_ui_dialogs.cc')
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc52
1 files changed, 37 insertions, 15 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index b96ae22075..e74ee8fa04 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -336,6 +336,7 @@ void
ARDOUR_UI::toggle_editor_and_mixer ()
{
if (editor->tabbed() && mixer->tabbed()) {
+ /* both in the same window */
if (_tabs.get_current_page() == _tabs.page_num (editor->contents())) {
_tabs.set_current_page (_tabs.page_num (mixer->contents()));
} else if (_tabs.get_current_page() == _tabs.page_num (mixer->contents())) {
@@ -346,33 +347,54 @@ ARDOUR_UI::toggle_editor_and_mixer ()
return;
}
+
if (editor->tabbed() && !mixer->tabbed()) {
- if (main_window_visibility && main_window_visibility->fully_visible()) {
- if (_tabs.get_current_page() == _tabs.page_num (editor->contents())) {
+ /* editor is tabbed, mixer is not */
+
+ Gtk::Window* mwin = mixer->current_toplevel ();
+
+ if (!mwin) {
+ /* mixer's own window doesn't exist */
+ mixer->make_visible ();
+ } else if (!mwin->is_mapped ()) {
+ /* mixer's own window exists but isn't mapped */
+ mixer->make_visible ();
+ } else {
+ /* mixer window is mapped, editor is visible as tab */
+ Gtk::Widget* f = mwin->get_focus();
+ if (f && f->has_focus()) {
+ /* mixer has focus, switch to editor */
+ editor->make_visible ();
+ } else {
mixer->make_visible ();
}
- } else {
- _main_window.present ();
}
return;
}
- if (mixer->tabbed () && !editor->tabbed()) {
- if (main_window_visibility && main_window_visibility->fully_visible()) {
- if (_tabs.get_current_page() == _tabs.page_num (mixer->contents())) {
+ if (!editor->tabbed() && mixer->tabbed()) {
+ /* mixer is tabbed, editor is not */
+
+ Gtk::Window* ewin = editor->current_toplevel ();
+
+ if (!ewin) {
+ /* mixer's own window doesn't exist */
+ editor->make_visible ();
+ } else if (!ewin->is_mapped ()) {
+ /* editor's own window exists but isn't mapped */
+ editor->make_visible ();
+ } else {
+ /* editor window is mapped, mixer is visible as tab */
+ Gtk::Widget* f = ewin->get_focus();
+ if (f && f->has_focus()) {
+ /* editor has focus, switch to mixer */
+ mixer->make_visible ();
+ } else {
editor->make_visible ();
}
- } else {
- _main_window.present ();
}
return;
}
-
- if (editor->fully_visible()) {
- mixer->make_visible ();
- } else {
- editor->make_visible ();
- }
}
void