diff options
| author | Simon Tatham <anakin@pobox.com> | 2018-12-12 22:18:00 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2018-12-12 22:18:00 +0000 |
| commit | ced51ada363d895eee796dd03923042f97f95321 (patch) | |
| tree | 9f14c89721066a7b896f73caedf3d303535cb0be | |
| parent | 0a5d13bcd5e6a88418abaf528d9d529ced7dfb9c (diff) | |
| download | puzzles-ced51ada363d895eee796dd03923042f97f95321.zip puzzles-ced51ada363d895eee796dd03923042f97f95321.tar.gz puzzles-ced51ada363d895eee796dd03923042f97f95321.tar.bz2 puzzles-ced51ada363d895eee796dd03923042f97f95321.tar.xz | |
Replace fe->preset_menu when we change midend.
Thanks to Rocco Matano for reporting that in the -DCOMBINED version of
the Windows front end, switching games causes a crash because the
presets menu from the old midend is still left over in fe, and its
presence inhibits the setup code from making a new one. Now we throw
it out at the same time as we throw out the old midend itself.
Also, the condition 'if (!fe->preset_menu)' was misguided. I think the
point of that was to avoid pointlessly tearing down and rebuilding the
preset menu when we're _not_ changing game - but that's a cost too
small to worry about if it causes the slightest trouble. Now
fe->preset_menu should always be NULL at that point in the function,
so I've replaced the if with an assert.
| -rw-r--r-- | windows.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -1719,7 +1719,11 @@ static int fe_set_midend(frontend *fe, midend *me) int x, y; RECT r; - if (fe->me) midend_free(fe->me); + if (fe->me) { + midend_free(fe->me); + fe->preset_menu = NULL; + sfree(fe->preset_menuitems); + } fe->me = me; fe->game = midend_which_game(fe->me); @@ -1847,12 +1851,14 @@ static int fe_set_midend(frontend *fe, midend *me) AppendMenu(menu, MF_ENABLED, IDM_SEED, TEXT("Rando&m Seed...")); #endif - if (!fe->preset_menu) { + assert(!fe->preset_menu); + + fe->preset_menu = midend_get_presets( + fe->me, &fe->n_preset_menuitems); + fe->preset_menuitems = snewn(fe->n_preset_menuitems, + struct preset_menuitemref); + { int i; - fe->preset_menu = midend_get_presets( - fe->me, &fe->n_preset_menuitems); - fe->preset_menuitems = snewn(fe->n_preset_menuitems, - struct preset_menuitemref); for (i = 0; i < fe->n_preset_menuitems; i++) fe->preset_menuitems[i].which_menu = NULL; } |