From 362a5e86b25374054cee29168b2423346d18e922 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 29 Apr 2015 22:14:46 +0100 Subject: [PATCH] Hand-apply a2f776bd239ef1a744c1a9fea841ac0a51c4f33b from master; more deflickering. --- ChangeLog | 5 +++-- TO_PORT | 1 - src/wx/content_panel.cc | 36 +++++++++++++++++++++++++++++++----- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 84deaaffe..d9375527c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,8 @@ 2015-04-29 c.hetherington - * Hand-apply 291179175729b62e17a9c322cd27ae134d1310d9 and - 8d92cce7d2885afa13ee4cb6f546dbf43942124b from master; + * Hand-apply 291179175729b62e17a9c322cd27ae134d1310d9, + 8d92cce7d2885afa13ee4cb6f546dbf43942124b and + c994839239e84a1f62865ed82fdc090900a66b03 from master; stop flickering when dragging in the timeline on OS X. 2015-04-22 c.hetherington diff --git a/TO_PORT b/TO_PORT index a318eefce..0449d9157 100644 --- a/TO_PORT +++ b/TO_PORT @@ -1,4 +1,3 @@ -c994839239e84a1f62865ed82fdc090900a66b03 1114df4c0d2167f6b7b394bfbf85890cd0a4a3e3 03bee41ebb15a9ddd61af1607426d22d906ad226 6cb9a4fd6b8ec1141bffa9294347e80baa3445dd diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index aed208ad6..33308b112 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -43,6 +43,7 @@ using std::list; using std::string; using std::cout; +using std::vector; using boost::shared_ptr; using boost::weak_ptr; using boost::dynamic_pointer_cast; @@ -440,6 +441,36 @@ ContentPanel::film_content_changed (int property) void ContentPanel::setup () { + ContentList content = _film->content (); + sort (content.begin(), content.end(), ContentSorter ()); + + /* First, check to see if anything has changed and bail if not; this avoids + flickering on OS X. + */ + + vector existing; + for (int i = 0; i < _content->GetItemCount(); ++i) { + existing.push_back (wx_to_std (_content->GetItemText (i))); + } + + vector proposed; + for (ContentList::iterator i = content.begin(); i != content.end(); ++i) { + bool const valid = (*i)->paths_valid (); + + string s = (*i)->summary (); + if (!valid) { + s = _("MISSING: ") + s; + } + + proposed.push_back (s); + } + + if (existing == proposed) { + return; + } + + /* Something has changed: set up the control */ + string selected_summary; int const s = _content->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (s != -1) { @@ -448,9 +479,6 @@ ContentPanel::setup () _content->DeleteAllItems (); - ContentList content = _film->content (); - sort (content.begin(), content.end(), ContentSorter ()); - for (ContentList::iterator i = content.begin(); i != content.end(); ++i) { int const t = _content->GetItemCount (); bool const valid = (*i)->paths_valid (); @@ -487,8 +515,6 @@ ContentPanel::setup () void ContentPanel::files_dropped (wxDropFilesEvent& event) { - cout << "SHIT!\n"; - if (!_film) { return; } -- 2.30.2