Fix 0-id menu item in the CPL menu which causes an error on OS X (#1001).
authorCarl Hetherington <cth@carlh.net>
Tue, 15 Nov 2016 09:15:00 +0000 (09:15 +0000)
committerCarl Hetherington <cth@carlh.net>
Tue, 15 Nov 2016 09:15:00 +0000 (09:15 +0000)
ChangeLog
src/wx/content_menu.cc

index 7a741860fc85fb2f4fa0147a2f4463f0dc479e82..5ae17f323fed04f3cd37c7da4b066793c027ad71 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2016-11-15  Carl Hetherington  <cth@carlh.net>
 
+       * Fix error on using the CPL selection menu on OS X.
+
        * Version 2.10.0 released.
 
 2016-11-14  Carl Hetherington  <cth@carlh.net>
index fb255b3606aafed7d51b2d0646ab7d310f7c4d42..2d49ac4be583ee34e1ae45ffd7a11a7d3d23cd51 100644 (file)
@@ -50,7 +50,7 @@ using boost::weak_ptr;
 using boost::dynamic_pointer_cast;
 
 enum {
-       /* Start at 256 so we can have IDs on _cpl_menu from 0 to 255 */
+       /* Start at 256 so we can have IDs on _cpl_menu from 1 to 255 */
        ID_repeat = 256,
        ID_join,
        ID_find_missing,
@@ -88,7 +88,7 @@ ContentMenu::ContentMenu (wxWindow* p)
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::ov, this), ID_ov);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::remove, this), ID_remove);
 
-       _parent->Bind (wxEVT_MENU, boost::bind (&ContentMenu::cpl_selected, this, _1), 0, ID_repeat - 1);
+       _parent->Bind (wxEVT_MENU, boost::bind (&ContentMenu::cpl_selected, this, _1), 1, ID_repeat - 1);
 }
 
 ContentMenu::~ContentMenu ()
@@ -108,7 +108,7 @@ ContentMenu::popup (weak_ptr<Film> film, ContentList c, TimelineContentViewList
        _views = v;
 
        int const N = _cpl_menu->GetMenuItemCount();
-       for (int i = 0; i < N; ++i) {
+       for (int i = 1; i <= N; ++i) {
                _cpl_menu->Delete (i);
        }
 
@@ -135,7 +135,8 @@ ContentMenu::popup (weak_ptr<Film> film, ContentList c, TimelineContentViewList
                        DCPExaminer ex (dcp);
                        list<shared_ptr<dcp::CPL> > cpls = ex.cpls ();
                        _choose_cpl->Enable (cpls.size() > 1);
-                       int id = 0;
+                       /* We can't have 0 as a menu item ID on OS X */
+                       int id = 1;
                        BOOST_FOREACH (shared_ptr<dcp::CPL> i, cpls) {
                                wxMenuItem* item = _cpl_menu->AppendCheckItem (
                                        id++,
@@ -421,10 +422,11 @@ ContentMenu::cpl_selected (wxCommandEvent& ev)
 
        DCPExaminer ex (dcp);
        list<shared_ptr<dcp::CPL> > cpls = ex.cpls ();
-       DCPOMATIC_ASSERT (ev.GetId() < int (cpls.size()));
+       DCPOMATIC_ASSERT (ev.GetId() > 0);
+       DCPOMATIC_ASSERT (ev.GetId() <= int (cpls.size()));
 
        list<shared_ptr<dcp::CPL> >::const_iterator i = cpls.begin ();
-       for (int j = 0; j < ev.GetId(); ++j) {
+       for (int j = 0; j < ev.GetId() - 1; ++j) {
                ++i;
        }