13
0

remove tab-related code for tabbed notebook, add tooltips to new buttons

This commit is contained in:
Paul Davis 2015-11-18 23:03:16 -05:00
parent 51879285c5
commit 1e537cb539
7 changed files with 16 additions and 80 deletions

View File

@ -372,8 +372,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
bool _initial_verbose_plugin_scan;
bool first_time_engine_run;
bool tabs_button_event (GdkEventButton* ev);
void show_tabbable (Gtkmm2ext::Tabbable*);
void hide_tabbable (Gtkmm2ext::Tabbable*);
void detach_tabbable (Gtkmm2ext::Tabbable*);

View File

@ -68,42 +68,6 @@ using namespace Glib;
using namespace ARDOUR_UI_UTILS;
bool
ARDOUR_UI::tabs_button_event (GdkEventButton* ev)
{
std::vector<Widget*> children = _tabs.get_children();
for (std::vector<Widget*>::iterator w = children.begin(); w != children.end(); ++w) {
Gtk::Widget* close_button = reinterpret_cast<Gtk::Widget*> ((*w)->get_data ("close-button"));
if (close_button) {
Gtk::Allocation alloc (close_button->get_allocation());
int dx, dy;
/* Allocation origin uses toplevel window coordinates;
* event origin uses _tabs-centric coordinate space, so
* translate before computing if event is inside the
* close button.
*/
close_button->get_toplevel()->translate_coordinates (_tabs, alloc.get_x(), alloc.get_y(), dx, dy);
if (ev->x >= dx &&
ev->y >= dy &&
ev->x < dx + alloc.get_width() &&
ev->y < dy + alloc.get_height()) {
if (close_button->event ((GdkEvent*) ev)) {
return true;
}
}
}
}
return false;
}
void
ARDOUR_UI::setup_tooltips ()
{

View File

@ -233,15 +233,6 @@ ARDOUR_UI::setup_windows ()
keyboard->setup_keybindings ();
/* we don't use a widget with its own window for the tab close button,
which makes it impossible to rely on GTK+ to generate signals for
events occuring "in" this widget. Instead, we pre-connect a
handler to the relevant events on the notebook and then check
to see if the event coordinates tell us that it occured "in"
the close button.
*/
_tabs.signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_button_event), false);
_tabs.signal_button_release_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_button_event), false);
_tabs.signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch));
rc_option_editor = new RCOptionEditor;

View File

@ -367,7 +367,7 @@ ARDOUR_UI::detach_tabbable (Tabbable* t)
void
ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page)
{
if (page == _tabs.page_num (editor->contents())) {
if (page == (guint) _tabs.page_num (editor->contents())) {
editor_visibility_button.set_active_state (Gtkmm2ext::ImplicitActive);
if (mixer && (mixer->tabbed() || mixer->tabbed_by_default())) {
mixer_visibility_button.set_active_state (Gtkmm2ext::Off);
@ -375,7 +375,7 @@ ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page)
if (rc_option_editor && (rc_option_editor->tabbed() || rc_option_editor->tabbed_by_default())) {
prefs_visibility_button.set_active_state (Gtkmm2ext::Off);
}
} else if (page == _tabs.page_num (mixer->contents())) {
} else if (page == (guint) _tabs.page_num (mixer->contents())) {
if (editor && (editor->tabbed() || editor->tabbed_by_default())) {
editor_visibility_button.set_active_state (Gtkmm2ext::Off);
}

View File

@ -587,6 +587,18 @@ ARDOUR_UI::build_menu_bar ()
prefs_visibility_button.set_related_action (ActionManager::get_action (X_("Common"), X_("show-preferences")));
prefs_visibility_button.set_name (X_("page switch button"));
Gtkmm2ext::UI::instance()->set_tip (editor_visibility_button,
string_compose (_("Drag this tab to the desktop to show %1 in its own window\n\n"
"To put the window back, use the Window > %1 > Attach menu action"), editor->name()));
Gtkmm2ext::UI::instance()->set_tip (mixer_visibility_button,
string_compose (_("Drag this tab to the desktop to show %1 in its own window\n\n"
"To put the window back, use the Window > %1 > Attach menu action"), mixer->name()));
Gtkmm2ext::UI::instance()->set_tip (prefs_visibility_button,
string_compose (_("Drag this tab to the desktop to show %1 in its own window\n\n"
"To put the window back, use the Window > %1 > Attach menu action"), rc_option_editor->name()));
window_button_box->pack_start (editor_visibility_button, false, false);
window_button_box->pack_start (mixer_visibility_button, false, false);
window_button_box->pack_start (prefs_visibility_button, false, false);

View File

@ -85,9 +85,6 @@ class LIBGTKMM2EXT_API Tabbable : public WindowProxy {
Gtk::Notebook _own_notebook;
Gtk::Notebook* _parent_notebook;
std::string _tab_title;
Gtk::HBox _tab_box;
Gtk::Label _tab_label;
CairoIcon tab_close_image;
bool tab_requested_by_state;
void show_tab ();

View File

@ -39,18 +39,8 @@ Tabbable::Tabbable (Widget& w, const string& name)
: WindowProxy (name)
, _contents (w)
, _parent_notebook (0)
, tab_close_image (ArdourIcon::CloseCross, 0xffffffff)
, tab_requested_by_state (true)
{
/* sizes will be scaled during rendering */
tab_close_image.set_size_request (15,15);
_tab_box.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
_tab_box.set_spacing (2);
_tab_box.pack_start (_tab_label, true, true);
_tab_box.pack_start (tab_close_image, false, false);
tab_close_image.signal_button_release_event().connect (sigc::mem_fun (*this, &Tabbable::tab_close_clicked));
}
Tabbable::~Tabbable ()
@ -61,20 +51,10 @@ Tabbable::~Tabbable ()
}
}
bool
Tabbable::tab_close_clicked (GdkEventButton*)
{
hide_tab ();
return true;
}
void
Tabbable::add_to_notebook (Notebook& notebook, const string& tab_title)
{
_parent_notebook = &notebook;
_tab_title = tab_title;
_tab_label.set_text (tab_title);
_tab_box.show_all ();
if (tab_requested_by_state) {
attach ();
@ -91,7 +71,7 @@ Tabbable::use_own_window (bool and_pack_it)
if (parent) {
parent->remove (_contents);
}
_own_notebook.append_page (_contents, _tab_box);
_own_notebook.append_page (_contents);
}
return win;
@ -248,17 +228,11 @@ Tabbable::attach ()
_window->hide ();
}
_parent_notebook->append_page (_contents, _tab_box);
_contents.set_data ("close-button", &tab_close_image);
_parent_notebook->append_page (_contents);
_parent_notebook->set_tab_detachable (_contents);
_parent_notebook->set_tab_reorderable (_contents);
_parent_notebook->set_current_page (_parent_notebook->page_num (_contents));
Gtkmm2ext::UI::instance()->set_tip (_tab_label,
string_compose (_("Drag this tab to the desktop to show %1 in its own window\n\n"
"To put the window back, use the Window > %1 > Attach menu action"), _tab_title));
/* have to force this on, which is semantically correct, since
* the user has effectively asked for it.
*/