(svn r15312) -Codechange: Handle closing of drop down menus when clicking in a window in a single place, instead of in the OnClick event for some windows. This standardises behaviour so that clicking anywhere in a window will close its drop down menu, which happened before for some windows but not all. In addition the dubious feature of hiding a drop down menu by opening the same menu has been removed. This only caused wasted CPU cycles as a whole new list was generated and then destroyed. Breathe.

This commit is contained in:
peter1138
2009-02-01 22:32:07 +00:00
parent 7cd579e7ef
commit aad67b5736
6 changed files with 11 additions and 20 deletions

View File

@@ -226,15 +226,8 @@ struct DropdownWindow : Window {
void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, uint width, bool auto_width, bool instant_close)
{
bool is_dropdown_menu_shown = w->IsWidgetLowered(button);
DeleteWindowById(WC_DROPDOWN_MENU, 0);
if (is_dropdown_menu_shown) {
DeleteDropDownList(list);
return;
}
w->LowerWidget(button);
w->InvalidateWidget(button);
@@ -339,12 +332,6 @@ void ShowDropDownList(Window *w, DropDownList *list, int selected, int button, u
void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int button, uint32 disabled_mask, uint32 hidden_mask, uint width)
{
/* Don't create a new list if we're just closing an existing menu */
if (w->IsWidgetLowered(button)) {
DeleteWindowById(WC_DROPDOWN_MENU, 0);
return;
}
uint result = 0;
DropDownList *list = new DropDownList();
@@ -368,7 +355,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt
* Delete the drop-down menu from window \a pw
* @param pw Parent window of the drop-down menu window
*/
void HideDropDownMenu(Window *pw)
int HideDropDownMenu(Window *pw)
{
Window *w;
FOR_ALL_WINDOWS_FROM_BACK(w) {
@@ -377,9 +364,12 @@ void HideDropDownMenu(Window *pw)
DropdownWindow *dw = dynamic_cast<DropdownWindow*>(w);
if (pw->window_class == dw->parent_wnd_class &&
pw->window_number == dw->parent_wnd_num) {
int parent_button = dw->parent_button;
delete dw;
break;
return parent_button;
}
}
return -1;
}