[PATCH v2 07/10] comctl32/listbox: Use a helper to set the selected item in single-selection listboxes

Gabriel Iv─âncescu gabrielopcode at gmail.com
Mon Feb 11 11:03:10 CST 2019


Signed-off-by: Gabriel Iv─âncescu <gabrielopcode at gmail.com>
---
 dlls/comctl32/listbox.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c
index 48b5b78..633e7c6 100644
--- a/dlls/comctl32/listbox.c
+++ b/dlls/comctl32/listbox.c
@@ -160,6 +160,18 @@ static BOOL is_item_selected( const LB_DESCR *descr, UINT index )
     return descr->items[index].selected;
 }
 
+static void set_item_selected( LB_DESCR *descr, UINT index )
+{
+    INT oldsel = descr->selected_item;
+
+    if (!(descr->style & LBS_NODATA))
+    {
+        if (oldsel != -1) descr->items[oldsel].selected = FALSE;
+        if (index != -1) descr->items[index].selected = TRUE;
+    }
+    descr->selected_item = index;
+}
+
 static ULONG_PTR get_item_data( const LB_DESCR *descr, UINT index )
 {
     return (descr->style & LBS_NODATA) ? 0 : descr->items[index].data;
@@ -1476,10 +1488,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;
+        set_item_selected(descr, index);
         if (oldsel != -1) LISTBOX_RepaintItem( descr, oldsel, ODA_SELECT );
-        descr->selected_item = index;
         if (index != -1) LISTBOX_RepaintItem( descr, index, ODA_SELECT );
         if (send_notify && descr->nb_items) SEND_NOTIFICATION( descr,
                                (index != -1) ? LBN_SELCHANGE : LBN_SELCANCEL );
-- 
2.20.1




More information about the wine-devel mailing list