summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.cc2
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_markers.cc32
-rw-r--r--gtk2_ardour/location_ui.cc11
-rw-r--r--gtk2_ardour/location_ui.h2
5 files changed, 27 insertions, 22 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index e131efeb2a..bfcaba145f 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -1138,7 +1138,7 @@ Editor::set_session (Session *t)
_session->locations()->added.connect (_session_connections, invalidator (*this), ui_bind (&Editor::add_new_location, this, _1), gui_context());
_session->locations()->removed.connect (_session_connections, invalidator (*this), ui_bind (&Editor::location_gone, this, _1), gui_context());
_session->locations()->changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::refresh_location_display, this), gui_context());
- _session->locations()->StateChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::refresh_location_display_s, this, _1), gui_context());
+ _session->locations()->StateChanged.connect (_session_connections, invalidator (*this), ui_bind (&Editor::refresh_location_display, this), gui_context());
_session->history().Changed.connect (_session_connections, invalidator (*this), boost::bind (&Editor::history_changed, this), gui_context());
if (Profile->get_sae()) {
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 1a08dd3aac..10fba5e8b6 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -541,9 +541,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void location_changed (ARDOUR::Location *);
void location_flags_changed (ARDOUR::Location *, void *);
void refresh_location_display ();
- void refresh_location_display_s (const PBD::PropertyChange&);
void refresh_location_display_internal (ARDOUR::Locations::LocationList&);
void add_new_location (ARDOUR::Location *);
+ ArdourCanvas::Group* add_new_location_internal (ARDOUR::Location *);
void location_gone (ARDOUR::Location *);
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
gint really_remove_marker (ARDOUR::Location* loc);
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 8b4b2b39bb..34fdc094b1 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -61,8 +61,21 @@ Editor::clear_marker_display ()
void
Editor::add_new_location (Location *location)
{
- ENSURE_GUI_THREAD (*this, &Editor::add_new_location, location)
+ ENSURE_GUI_THREAD (*this, &Editor::add_new_location, location);
+ ArdourCanvas::Group* group = add_new_location_internal (location);
+
+ /* Do a full update of the markers in this group */
+ update_marker_labels (group);
+}
+
+/** Add a new location, without a time-consuming update of all marker labels;
+ * the caller must call update_marker_labels () after calling this.
+ * @return canvas group that the location's marker was added to.
+ */
+ArdourCanvas::Group*
+Editor::add_new_location_internal (Location* location)
+{
LocationMarkers *lam = new LocationMarkers;
uint32_t color;
@@ -163,15 +176,14 @@ Editor::add_new_location (Location *location)
lam->set_show_lines (_show_marker_lines);
/* Add these markers to the appropriate sorted marker lists, which will render
- them unsorted until the update_marker_labels() below sorts them out.
+ them unsorted until a call to update_marker_labels() sorts them out.
*/
_sorted_marker_lists[group].push_back (lam->start);
if (lam->end) {
_sorted_marker_lists[group].push_back (lam->end);
}
- /* Do a full update of the markers in this group */
- update_marker_labels (group);
+ return group;
}
void
@@ -483,7 +495,7 @@ Editor::refresh_location_display_internal (Locations::LocationList& locations)
continue;
}
- add_new_location (*i);
+ add_new_location_internal (*i);
}
/* remove dead ones */
@@ -521,16 +533,8 @@ Editor::refresh_location_display ()
if (_session) {
_session->locations()->apply (*this, &Editor::refresh_location_display_internal);
}
-}
-
-void
-Editor::refresh_location_display_s (const PropertyChange&)
-{
- ENSURE_GUI_THREAD (*this, &Editor::refresh_location_display_s, ignored)
- if (_session) {
- _session->locations()->apply (*this, &Editor::refresh_location_display_internal);
- }
+ update_marker_labels ();
}
void
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index c24da57685..97f0d03a38 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -972,7 +972,7 @@ LocationUI::map_locations (Locations::LocationList& locations)
if (location->is_mark()) {
LocationEditRow* erow = manage (new LocationEditRow (_session, location, mark_n));
- erow->set_clock_group (*_clock_group);
+ erow->set_clock_group (*_clock_group);
erow->remove_requested.connect (sigc::mem_fun(*this, &LocationUI::location_remove_requested));
erow->redraw_ranges.connect (sigc::mem_fun(*this, &LocationUI::location_redraw_ranges));
@@ -1052,7 +1052,9 @@ LocationUI::refresh_location_list ()
using namespace Box_Helpers;
// this is just too expensive to do when window is not shown
- if (!is_visible()) return;
+ if (!is_mapped()) {
+ return;
+ }
BoxList & loc_children = location_rows.children();
BoxList & range_children = range_rows.children();
@@ -1063,7 +1065,6 @@ LocationUI::refresh_location_list ()
if (_session) {
_session->locations()->apply (*this, &LocationUI::map_locations);
}
-
}
void
@@ -1133,10 +1134,10 @@ LocationUIWindow::~LocationUIWindow()
}
void
-LocationUIWindow::on_show()
+LocationUIWindow::on_map ()
{
+ ArdourDialog::on_map ();
_ui.refresh_location_list();
- ArdourDialog::on_show();
}
bool
diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h
index 84c6fa9fc5..325ab96bd7 100644
--- a/gtk2_ardour/location_ui.h
+++ b/gtk2_ardour/location_ui.h
@@ -206,7 +206,7 @@ class LocationUIWindow : public ArdourDialog
LocationUIWindow ();
~LocationUIWindow ();
- void on_show();
+ void on_map ();
void set_session (ARDOUR::Session *);
LocationUI& ui() { return _ui; }