(svn r11879) -Fix: Only update group action drop down list when clicking on the dropdown text/button. Other times is not needed and caused a double free.
--- a/src/group_gui.cpp Wed Jan 16 16:52:50 2008 +0000
+++ b/src/group_gui.cpp Wed Jan 16 17:43:46 2008 +0000
@@ -263,10 +263,8 @@
* @param w the window the dropdown belongs to
* @param gid the currently selected group in the window
*/
-static void UpdateGroupActionDropdown(Window *w, GroupID gid, bool refresh = true)
+static void ShowGroupActionDropdown(Window *w, GroupID gid)
{
- if (refresh && !w->IsWidgetLowered(GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN)) return;
-
static StringID action_str[] = {
STR_REPLACE_VEHICLES,
STR_SEND_FOR_SERVICING,
@@ -299,8 +297,10 @@
case WE_INVALIDATE_DATA:
gv->l.flags |= VL_REBUILD;
gl->l.flags |= VL_REBUILD;
- if (!IsValidGroupID(gv->group_sel)) gv->group_sel = ALL_GROUP;
- UpdateGroupActionDropdown(w, gv->group_sel);
+ if (!IsValidGroupID(gv->group_sel)) {
+ gv->group_sel = ALL_GROUP;
+ HideDropDownMenu(w);
+ }
SetWindowDirty(w);
break;
@@ -513,7 +513,6 @@
if (!IsAllGroupID(gv->group_sel)) {
gv->group_sel = ALL_GROUP;
gv->l.flags |= VL_REBUILD;
- UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
}
break;
@@ -522,7 +521,6 @@
if (!IsDefaultGroupID(gv->group_sel)) {
gv->group_sel = DEFAULT_GROUP;
gv->l.flags |= VL_REBUILD;
- UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
}
break;
@@ -539,7 +537,6 @@
gv->group_sel = gl->sort_list[id_g]->index;;
gv->l.flags |= VL_REBUILD;
- UpdateGroupActionDropdown(w, gv->group_sel);
SetWindowDirty(w);
break;
}
@@ -594,7 +591,7 @@
case GRP_WIDGET_MANAGE_VEHICLES:
case GRP_WIDGET_MANAGE_VEHICLES_DROPDOWN: {
- UpdateGroupActionDropdown(w, gv->group_sel, false);
+ ShowGroupActionDropdown(w, gv->group_sel);
break;
}