prevent dragging the last tab from the notebook
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 19 Nov 2015 04:45:48 +0000 (23:45 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 22 Feb 2016 20:31:25 +0000 (15:31 -0500)
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_dependents.cc
gtk2_ardour/ardour_ui_dialogs.cc
gtk2_ardour/ardour_ui_ed.cc

index d681394d842128e67f8e770daba0cfe09e6e0f6f..730594d09b18c31262b643b694aa8a71ad8d6f38 100644 (file)
@@ -825,6 +825,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
        void grab_focus_after_dialog ();
 
        void tabs_switch (GtkNotebookPage*, guint page_number);
+       void tabs_page_added (Gtk::Widget*, guint);
+       void tabs_page_removed (Gtk::Widget*, guint);
        ArdourButton editor_visibility_button;
        ArdourButton mixer_visibility_button;
        ArdourButton prefs_visibility_button;
index 90e2fd84280c942cf6da7a22f95c2ede60aafd6b..5f75144c15f3e95fd402e6f956409ed27eb57f39 100644 (file)
@@ -234,6 +234,8 @@ ARDOUR_UI::setup_windows ()
        keyboard->setup_keybindings ();
 
        _tabs.signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch));
+       _tabs.signal_page_added().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_added));
+       _tabs.signal_page_removed().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_page_removed));
 
        rc_option_editor = new RCOptionEditor;
        rc_option_editor->StateChange.connect (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_state_change));
index d40195b303dc7fc831b85e528255152a5ea0ee94..108229a16a976f0618236f492f56542d8de3f535 100644 (file)
 #include "ardour/control_protocol_manager.h"
 #include "ardour/profile.h"
 #include "ardour/session.h"
+
 #include "control_protocol/control_protocol.h"
 
+#include "gtkmm2ext/keyboard.h"
+#include "gtkmm2ext/utils.h"
+
 #include "actions.h"
 #include "add_route_dialog.h"
 #include "add_video_dialog.h"
@@ -62,8 +66,6 @@
 #include "time_info_box.h"
 #include "timers.h"
 
-#include <gtkmm2ext/keyboard.h>
-
 #include "i18n.h"
 
 using namespace ARDOUR;
@@ -364,6 +366,43 @@ ARDOUR_UI::detach_tabbable (Tabbable* t)
        t->detach ();
 }
 
+void
+ARDOUR_UI::tabs_page_added (Widget*,guint)
+{
+       if (_tabs.get_n_pages() > 1) {
+
+               std::vector<TargetEntry> drag_target_entries;
+               drag_target_entries.push_back (TargetEntry ("tabbable"));
+
+               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);
+
+               editor_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (editor->name(),
+                                                                                             Pango::FontDescription ("Sans 24"),
+                                                                                             40, 20,
+                                                                                             Gdk::Color ("red")));
+               mixer_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (mixer->name(),
+                                                                                            Pango::FontDescription ("Sans 24"),
+                                                                                            40, 20,
+                                                                                            Gdk::Color ("red")));
+               prefs_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (rc_option_editor->name(),
+                                                                                            Pango::FontDescription ("Sans 24"),
+                                                                                            40, 20,
+                                                                                            Gdk::Color ("red")));
+       }
+}
+
+void
+ARDOUR_UI::tabs_page_removed (Widget*, guint)
+{
+       if (_tabs.get_n_pages() < 2) {
+               editor_visibility_button.drag_source_unset ();
+               mixer_visibility_button.drag_source_unset ();
+               prefs_visibility_button.drag_source_unset ();
+       }
+}
+
 void
 ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page)
 {
index a8900fd0285fd2507fac4a818fe2c4e5c20bcd22..14891eee4cdaeb12ec7d3ccbea5dd44d02153329 100644 (file)
@@ -555,28 +555,8 @@ ARDOUR_UI::build_menu_bar ()
 
        Gtk::HBox*   window_button_box = manage (new Gtk::HBox);
 
-       std::vector<TargetEntry> drag_target_entries;
-       drag_target_entries.push_back (TargetEntry ("tabbable"));
-
-       editor_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"),
-                                                                                     40, 20,
-                                                                                     Gdk::Color ("red")));
        editor_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), editor));
-
-       mixer_visibility_button.drag_source_set (drag_target_entries);
-       mixer_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (mixer->name(),
-                                                                                    Pango::FontDescription ("Sans 24"),
-                                                                                    40, 20,
-                                                                                    Gdk::Color ("red")));
        mixer_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), mixer));
-
-       prefs_visibility_button.drag_source_set (drag_target_entries);
-       prefs_visibility_button.drag_source_set_icon (Gtkmm2ext::pixbuf_from_string (rc_option_editor->name(),
-                                                                                    Pango::FontDescription ("Sans 24"),
-                                                                                    40, 20,
-                                                                                    Gdk::Color ("red")));
        prefs_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), rc_option_editor));