From: Gabriel Ivăncescu Subject: [PATCH v5 8/9] comctl32/listbox: Use a helper to set the selected item state Message-Id: <8252fa8b4931d8c7b79fc8c78dcca6104f0c99e5.1550068339.git.gabrielopcode@gmail.com> Date: Wed, 13 Feb 2019 16:36:19 +0200 In-Reply-To: <11333f7ce22359311af049afdfeb56e71fc1a611.1550068339.git.gabrielopcode@gmail.com> References: <11333f7ce22359311af049afdfeb56e71fc1a611.1550068339.git.gabrielopcode@gmail.com> Signed-off-by: Gabriel Ivăncescu --- I used it this way to mirror is_item_selected since it's based on the storage of items (like in other parts of the code so LBS_NOSEL shouldn't factor into it). dlls/comctl32/listbox.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c index 47c76ad..9f4dcb6 100644 --- a/dlls/comctl32/listbox.c +++ b/dlls/comctl32/listbox.c @@ -170,6 +170,12 @@ static BOOL is_item_selected( const LB_DESCR *descr, UINT index ) return descr->items[index].selected; } +static void set_item_selected_state(LB_DESCR *descr, UINT index, BOOL state) +{ + if (descr->style & (LBS_MULTIPLESEL | LBS_EXTENDEDSEL)) + descr->items[index].selected = state; +} + /*********************************************************************** * LISTBOX_GetCurrentPageSize * @@ -1435,7 +1441,7 @@ static LRESULT LISTBOX_SelectItemRange( LB_DESCR *descr, INT first, for (i = first; i <= last; i++) { if (is_item_selected(descr, i)) continue; - descr->items[i].selected = TRUE; + set_item_selected_state(descr, i, TRUE); LISTBOX_InvalidateItemRect(descr, i); } } @@ -1444,7 +1450,7 @@ static LRESULT LISTBOX_SelectItemRange( LB_DESCR *descr, INT first, for (i = first; i <= last; i++) { if (!is_item_selected(descr, i)) continue; - descr->items[i].selected = FALSE; + set_item_selected_state(descr, i, FALSE); LISTBOX_InvalidateItemRect(descr, i); } } @@ -1477,8 +1483,8 @@ static LRESULT LISTBOX_SetSelection( LB_DESCR *descr, INT index, { INT oldsel = descr->selected_item; if (index == oldsel) return LB_OKAY; - if (oldsel != -1) descr->items[oldsel].selected = FALSE; - if (index != -1) descr->items[index].selected = TRUE; + if (oldsel != -1) set_item_selected_state(descr, oldsel, FALSE); + if (index != -1) set_item_selected_state(descr, index, TRUE); descr->selected_item = index; if (oldsel != -1) LISTBOX_RepaintItem( descr, oldsel, ODA_SELECT ); if (index != -1) LISTBOX_RepaintItem( descr, index, ODA_SELECT ); -- 2.20.1