Make Dropdown menus at least as wide as the button
[ardour.git] / gtk2_ardour / ardour_ui_dialogs.cc
index 302f52b503c60bfbd825147c00f0fc4e60ccbfcc..e372c1e7fdf59f3b106fd1825f8b490b827cee0a 100644 (file)
@@ -52,7 +52,6 @@
 #include "lua_script_manager.h"
 #include "luawindow.h"
 #include "main_clock.h"
-#include "master_faders.h"
 #include "meterbridge.h"
 #include "meter_patterns.h"
 #include "monitor_section.h"
@@ -71,7 +70,7 @@
 #include "time_info_box.h"
 #include "timers.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace ARDOUR;
 using namespace PBD;
@@ -337,43 +336,66 @@ 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())) {
                        _tabs.set_current_page (_tabs.page_num (editor->contents()));
                } else {
-                       /* do nothing */
+                       /* go to mixer */
+                       _tabs.set_current_page (_tabs.page_num (mixer->contents()));
                }
                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
@@ -551,7 +573,6 @@ ARDOUR_UI::tabs_page_added (Widget*,guint)
                editor_visibility_button.drag_source_set (drag_target_entries);
                mixer_visibility_button.drag_source_set (drag_target_entries);
                prefs_visibility_button.drag_source_set (drag_target_entries);
-               masters_visibility_button.drag_source_set (drag_target_entries);
 
                editor_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (editor->name(),
                                                                                              Pango::FontDescription ("Sans 24"),
@@ -565,10 +586,6 @@ ARDOUR_UI::tabs_page_added (Widget*,guint)
                                                                                             Pango::FontDescription ("Sans 24"),
                                                                                             0, 0,
                                                                                             Gdk::Color ("red")));
-               masters_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (masters->name(),
-                       Pango::FontDescription ("Sans 24"),
-                       0, 0,
-                       Gdk::Color ("red")));
        }
 }
 
@@ -579,7 +596,6 @@ ARDOUR_UI::tabs_page_removed (Widget*, guint)
                editor_visibility_button.drag_source_unset ();
                mixer_visibility_button.drag_source_unset ();
                prefs_visibility_button.drag_source_unset ();
-               masters_visibility_button.drag_source_unset ();
        }
 }
 
@@ -608,10 +624,6 @@ ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page)
                        prefs_visibility_button.set_active_state (Gtkmm2ext::Off);
                }
 
-               if (masters && (masters->tabbed() || masters->tabbed_by_default())) {
-                       masters_visibility_button.set_active_state (Gtkmm2ext::Off);
-               }
-
        } else if (page == (guint) _tabs.page_num (rc_option_editor->contents())) {
 
                if (editor && (editor->tabbed() || editor->tabbed_by_default())) {
@@ -623,26 +635,6 @@ ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page)
                }
 
                prefs_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive);
-
-               if (masters && (masters->tabbed() || masters->tabbed_by_default())) {
-                       masters_visibility_button.set_active_state (Gtkmm2ext::Off);
-               }
-
-       } else if (page == (guint) _tabs.page_num (masters->contents())) {
-
-               if (editor && (editor->tabbed() || editor->tabbed_by_default())) {
-                       editor_visibility_button.set_active_state (Gtkmm2ext::Off);
-               }
-
-               if (mixer && (mixer->tabbed() || mixer->tabbed_by_default())) {
-                       mixer_visibility_button.set_active_state (Gtkmm2ext::Off);
-               }
-
-               if (rc_option_editor && (rc_option_editor->tabbed() || rc_option_editor->tabbed_by_default())) {
-                       prefs_visibility_button.set_active_state (Gtkmm2ext::Off);
-               }
-
-               masters_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive);
        }
 
 }
@@ -731,22 +723,14 @@ ARDOUR_UI::tabbable_state_change (Tabbable& t)
                vis_button = &editor_visibility_button;
                other_vis_buttons.push_back (&mixer_visibility_button);
                other_vis_buttons.push_back (&prefs_visibility_button);
-               other_vis_buttons.push_back (&masters_visibility_button);
        } else if (&t == mixer) {
                vis_button = &mixer_visibility_button;
                other_vis_buttons.push_back (&editor_visibility_button);
                other_vis_buttons.push_back (&prefs_visibility_button);
-               other_vis_buttons.push_back (&masters_visibility_button);
        } else if (&t == rc_option_editor) {
                vis_button = &prefs_visibility_button;
                other_vis_buttons.push_back (&editor_visibility_button);
-               other_vis_buttons.push_back (&masters_visibility_button);
-               other_vis_buttons.push_back (&mixer_visibility_button);
-       } else if (&t == masters) {
-               vis_button = &masters_visibility_button;
-               other_vis_buttons.push_back (&editor_visibility_button);
                other_vis_buttons.push_back (&mixer_visibility_button);
-               other_vis_buttons.push_back (&prefs_visibility_button);
        }
 
        if (!vis_button) {