Fix crash choosing jukebox directory
newmenu_listbox1 returns immediately
This commit is contained in:
parent
df46499f85
commit
1344fb2779
|
@ -232,6 +232,14 @@ listbox *newmenu_listbox1(const char *title, int nitems, const char *items[], in
|
|||
return newmenu_listbox1(title, nitems, items, allow_abort_flag, default_item, (listbox_subfunction_t<void>::type)listbox_callback, (void *)userdata);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
listbox *newmenu_listbox1(const char *title, int nitems, const char *items[], int allow_abort_flag, int default_item, typename listbox_subfunction_t<T>::type listbox_callback, std::unique_ptr<T> userdata)
|
||||
{
|
||||
auto r = newmenu_listbox1(title, nitems, items, allow_abort_flag, default_item, (listbox_subfunction_t<void>::type)listbox_callback, (void *)userdata.get());
|
||||
userdata.release();
|
||||
return r;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
listbox *newmenu_listbox(const char *title, int nitems, const char *items[], int allow_abort_flag, typename listbox_subfunction_t<T>::type listbox_callback, T *userdata)
|
||||
{
|
||||
|
|
|
@ -1469,8 +1469,7 @@ static int select_file_handler(listbox *menu,const d_event &event, browser *b)
|
|||
if (b->new_path)
|
||||
PHYSFS_removeFromSearchPath(b->view_path);
|
||||
|
||||
if (list)
|
||||
d_free(list);
|
||||
std::default_delete<browser>()(b);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1563,7 +1562,8 @@ int select_file_recursive(const char *title, const char *orig_path, const file_e
|
|||
return 0;
|
||||
}
|
||||
|
||||
return newmenu_listbox1(title, b->list.ptr.size(), &b->list.ptr[0], 1, 0, select_file_handler, b.get()) != NULL;
|
||||
auto pb = b.get();
|
||||
return newmenu_listbox1(title, pb->list.ptr.size(), &pb->list.ptr[0], 1, 0, select_file_handler, std::move(b)) != NULL;
|
||||
}
|
||||
|
||||
#define BROWSE_TXT " (browse...)"
|
||||
|
|
|
@ -973,11 +973,9 @@ static int mission_menu_handler(listbox *lb,const d_event &event, mission_menu *
|
|||
}
|
||||
}
|
||||
return !(*mm->when_selected)();
|
||||
break;
|
||||
|
||||
case EVENT_WINDOW_CLOSE:
|
||||
d_free(list);
|
||||
delete mm;
|
||||
std::default_delete<mission_menu>()(mm);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1021,8 +1019,8 @@ int select_mission(int anarchy_mode, const char *message, int (*when_selected)(v
|
|||
}
|
||||
|
||||
mm->ml = move(mission_list);
|
||||
mission_menu *pmm = mm.release();
|
||||
newmenu_listbox1( message, pmm->ml.size(), m, 1, default_mission, mission_menu_handler, pmm);
|
||||
auto pmm = mm.get();
|
||||
newmenu_listbox1( message, pmm->ml.size(), m, 1, default_mission, mission_menu_handler, std::move(mm));
|
||||
}
|
||||
|
||||
return 1; // presume success
|
||||
|
|
Loading…
Reference in a new issue