From 336d321a1b4354e9fcaf46c17c4560c863c58dde Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 18 Nov 2015 23:45:48 -0500 Subject: [PATCH] prevent dragging the last tab from the notebook --- gtk2_ardour/ardour_ui.h | 2 ++ gtk2_ardour/ardour_ui_dependents.cc | 2 ++ gtk2_ardour/ardour_ui_dialogs.cc | 43 +++++++++++++++++++++++++++-- gtk2_ardour/ardour_ui_ed.cc | 20 -------------- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index d681394d84..730594d09b 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -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; diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc index 90e2fd8428..5f75144c15 100644 --- a/gtk2_ardour/ardour_ui_dependents.cc +++ b/gtk2_ardour/ardour_ui_dependents.cc @@ -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)); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index d40195b303..108229a16a 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -32,8 +32,12 @@ #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 - #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 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) { diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index a8900fd028..14891eee4c 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -555,28 +555,8 @@ ARDOUR_UI::build_menu_bar () Gtk::HBox* window_button_box = manage (new Gtk::HBox); - std::vector 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));