From 28df667ceb7fa74a1146a2bede0a908bc9dd3eb4 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 22 Nov 2005 14:02:45 +0000 Subject: [PATCH] (svn r3225) - Fix for "[ 1359165 ] Autoreplace problem with r3171 and later" -- Move the disabled/hidden bits to custom data in window struct. --- widget.c | 12 ++++++------ window.h | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/widget.c b/widget.c index acd401235b..8d0d3ad582 100644 --- a/widget.c +++ b/widget.c @@ -453,12 +453,12 @@ static int GetDropdownItem(const Window *w) return - 1; item = y / 10; - if (item >= WP(w,dropdown_d).num_items || (HASBIT(w->disabled_state, item) && !HASBIT(w->hidden_state, item)) || WP(w,dropdown_d).items[item] == 0) + if (item >= WP(w,dropdown_d).num_items || (HASBIT(WP(w,dropdown_d).disabled_state, item) && !HASBIT(WP(w,dropdown_d).hidden_state, item)) || WP(w,dropdown_d).items[item] == 0) return - 1; // Skip hidden items -- +1 for each hidden item before the clicked item. for (counter = 0; item >= counter; ++counter) - if (HASBIT(w->hidden_state, counter)) item++; + if (HASBIT(WP(w,dropdown_d).hidden_state, counter)) item++; return item; } @@ -478,7 +478,7 @@ static void DropdownMenuWndProc(Window *w, WindowEvent *e) sel = WP(w,dropdown_d).selected_index; for (i = 0; WP(w,dropdown_d).items[i] != INVALID_STRING_ID; i++) { - if (HASBIT(w->hidden_state, i)) { + if (HASBIT(WP(w,dropdown_d).hidden_state, i)) { sel--; continue; } @@ -486,7 +486,7 @@ static void DropdownMenuWndProc(Window *w, WindowEvent *e) if (sel == 0) GfxFillRect(x + 1, y, x + w->width - 4, y + 9, 0); DrawString(x + 2, y, WP(w,dropdown_d).items[i], sel == 0 ? 12 : 16); - if (HASBIT(w->disabled_state, i)) { + if (HASBIT(WP(w,dropdown_d).disabled_state, i)) { GfxFillRect(x, y, x + w->width - 3, y + 9, PALETTE_MODIFIER_GREYOUT | _color_list[_dropdown_menu_widgets[0].color].window_color_bga ); @@ -603,8 +603,8 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt w2->flags4 &= ~WF_WHITE_BORDER_MASK; - w2->disabled_state = disabled_mask; - w2->hidden_state = hidden_mask; + WP(w2,dropdown_d).disabled_state = disabled_mask; + WP(w2,dropdown_d).hidden_state = hidden_mask; WP(w2,dropdown_d).parent_wnd_class = w->window_class; WP(w2,dropdown_d).parent_wnd_num = w->window_number; diff --git a/window.h b/window.h index 72886b369a..bffaf0d6e3 100644 --- a/window.h +++ b/window.h @@ -453,6 +453,8 @@ typedef struct message_d { assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(message_d)); typedef struct dropdown_d { + uint32 disabled_state; + uint32 hidden_state; WindowClass parent_wnd_class; WindowNumber parent_wnd_num; byte parent_button;