From 2ba936f0b3ae0472653c1d47c11819c8c5c70cce Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 24 Aug 2010 13:28:27 +0000 Subject: [PATCH] Fix port matrix menu checkbox when the window is closed. Make the port matrix origin the bottom left when tabs are on left and bottom. Don't shrink the port matrix when auto-resizing it. git-svn-id: svn://localhost/ardour2/branches/3.0@7673 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui_ed.cc | 16 ++++++++++++---- gtk2_ardour/port_matrix.cc | 11 ++++++++++- gtk2_ardour/port_matrix_body.cc | 12 ++++++------ libs/gtkmm2ext/actions.cc | 4 +++- libs/gtkmm2ext/gtkmm2ext/actions.h | 2 +- 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 4f1f980751..e493de0be2 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -751,14 +751,22 @@ ARDOUR_UI::save_ardour_state () void ARDOUR_UI::toggle_global_port_matrix (ARDOUR::DataType t) { + std::string const action = string_compose ("toggle-%1-connection-manager", t.to_string ()); + if (_global_port_matrix[t]->get() == 0) { _global_port_matrix[t]->set (new GlobalPortMatrixWindow (_session, t)); + _global_port_matrix[t]->get()->signal_unmap().connect(sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), string_compose (X_("/Common/%1"), action))); } - if (_global_port_matrix[t]->get()->is_visible ()) { - _global_port_matrix[t]->get()->hide (); - } else { - _global_port_matrix[t]->get()->present (); + RefPtr act = ActionManager::get_action (X_("Common"), action.c_str()); + if (act) { + RefPtr tact = RefPtr::cast_dynamic (act); + + if (tact->get_active()) { + _global_port_matrix[t]->get()->present (); + } else { + _global_port_matrix[t]->get()->hide (); + } } } diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc index f3559cbb21..3be5458973 100644 --- a/gtk2_ardour/port_matrix.cc +++ b/gtk2_ardour/port_matrix.cc @@ -787,7 +787,16 @@ PortMatrix::body_dimensions_changed () _vspacer.hide (); } - pair const m = max_size (); + int curr_width; + int curr_height; + _parent->get_size (curr_width, curr_height); + + pair m = max_size (); + + /* Don't shrink the window */ + m.first = max (int (m.first), curr_width); + m.second = max (int (m.second), curr_height); + resize_window_to_proportion_of_monitor (_parent, m.first, m.second); } diff --git a/gtk2_ardour/port_matrix_body.cc b/gtk2_ardour/port_matrix_body.cc index 73eae929b9..009c63fa2a 100644 --- a/gtk2_ardour/port_matrix_body.cc +++ b/gtk2_ardour/port_matrix_body.cc @@ -223,21 +223,21 @@ PortMatrixBody::compute_rectangles () } else if (_matrix->arrangement() == PortMatrix::LEFT_TO_BOTTOM) { col_rect.set_height (min (_alloc_height, col.second)); - - row_rect.set_x (0); - row_rect.set_y (0); - row_rect.set_width (min (_alloc_width, row.first)); row_rect.set_height (std::min (_alloc_height - col_rect.get_height(), row.second)); + row_rect.set_x (0); + row_rect.set_y (_alloc_height - row_rect.get_height() - col_rect.get_height()); + row_rect.set_width (min (_alloc_width, row.first)); + grid_rect.set_x (row_rect.get_width()); - grid_rect.set_y (0); + grid_rect.set_y (_alloc_height - row_rect.get_height() - col_rect.get_height()); grid_rect.set_width (std::min (_alloc_width - row_rect.get_width(), grid.first)); grid_rect.set_height (row_rect.get_height ()); col_rect.set_width (grid_rect.get_width () + col_overhang); col_rect.set_x (row_rect.get_width() + grid_rect.get_width() - col_rect.get_width()); _column_labels_border_x = col_rect.get_x () >= 0 ? col_rect.get_x () : 0; - col_rect.set_y (row_rect.get_height()); + col_rect.set_y (_alloc_height - col_rect.get_height()); } _column_labels_height = col_rect.get_height (); diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc index bff718e9b7..e9ff15fa46 100644 --- a/libs/gtkmm2ext/actions.cc +++ b/libs/gtkmm2ext/actions.cc @@ -268,8 +268,10 @@ ActionManager::set_sensitive (vector >& actions, bool state) } void -ActionManager::uncheck_toggleaction (const char * name) +ActionManager::uncheck_toggleaction (string n) { + char const * name = n.c_str (); + const char *last_slash = strrchr (name, '/'); if (last_slash == 0) { diff --git a/libs/gtkmm2ext/gtkmm2ext/actions.h b/libs/gtkmm2ext/gtkmm2ext/actions.h index 5616bbb302..da19015313 100644 --- a/libs/gtkmm2ext/gtkmm2ext/actions.h +++ b/libs/gtkmm2ext/gtkmm2ext/actions.h @@ -77,7 +77,7 @@ namespace ActionManager { std::vector& paths, std::vector& bindings); - extern void uncheck_toggleaction (const char * actionname); + extern void uncheck_toggleaction (std::string); }; #endif /* __libgtkmm2ext_actions_h__ */