Michael Müller : aclui: Add icons to the users list.

Alexandre Julliard julliard at winehq.org
Thu Mar 4 15:53:38 CST 2021


Module: wine
Branch: master
Commit: fe7d44dfa38657bd9151a8b28592ac457e1a067a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fe7d44dfa38657bd9151a8b28592ac457e1a067a

Author: Michael Müller <michael at fds-team.de>
Date:   Sun Feb 28 10:27:47 2021 -0600

aclui: Add icons to the users list.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/aclui/Makefile.in    |   2 +-
 dlls/aclui/aclui.rc       |   5 +++++
 dlls/aclui/aclui_main.c   |  34 +++++++++++++++++++++++++++++++++-
 dlls/aclui/user_icons.bmp | Bin 0 -> 2730 bytes
 4 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/dlls/aclui/Makefile.in b/dlls/aclui/Makefile.in
index f93e5da6c8d..1eac32f0700 100644
--- a/dlls/aclui/Makefile.in
+++ b/dlls/aclui/Makefile.in
@@ -1,6 +1,6 @@
 MODULE    = aclui.dll
 IMPORTLIB = aclui
-IMPORTS   = comctl32 user32 advapi32
+IMPORTS   = comctl32 user32 advapi32 gdi32
 
 EXTRADLLFLAGS = -mno-cygwin -Wb,--prefer-native
 
diff --git a/dlls/aclui/aclui.rc b/dlls/aclui/aclui.rc
index 5cc808811ca..1228c2ab15b 100644
--- a/dlls/aclui/aclui.rc
+++ b/dlls/aclui/aclui.rc
@@ -40,3 +40,8 @@ BEGIN
                                           | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP,
                                           5, 115, 230, 95, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE
 END
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+/* @makedep: user_icons.bmp */
+IDB_USER_ICONS BITMAP user_icons.bmp
diff --git a/dlls/aclui/aclui_main.c b/dlls/aclui/aclui_main.c
index 199e7295adc..01e3476b97f 100644
--- a/dlls/aclui/aclui_main.c
+++ b/dlls/aclui/aclui_main.c
@@ -55,6 +55,7 @@ struct security_page
     unsigned int user_count;
 
     HWND dialog;
+    HIMAGELIST image_list;
 };
 
 static HINSTANCE aclui_instance;
@@ -110,11 +111,12 @@ static void add_user(struct security_page *page, PSID sid)
     user->name = name;
     user->sid = sid;
 
-    item.mask     = LVIF_PARAM | LVIF_TEXT;
+    item.mask     = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE;
     item.iItem    = -1;
     item.iSubItem = 0;
     item.pszText  = name;
     item.lParam   = (LPARAM)user;
+    item.iImage = (sid_type == SidTypeGroup || sid_type == SidTypeWellKnownGroup) ? 0 : 1;
 
     SendMessageW(GetDlgItem(page->dialog, IDC_USERS), LVM_INSERTITEMW, 0, (LPARAM)&item);
 }
@@ -160,6 +162,30 @@ static void init_users(struct security_page *page)
     }
 }
 
+static HIMAGELIST create_image_list(UINT resource, UINT width, UINT height, UINT count, COLORREF mask_color)
+{
+    HIMAGELIST image_list;
+    HBITMAP image;
+    INT ret;
+
+    if (!(image_list = ImageList_Create(width, height, ILC_COLOR32 | ILC_MASK, 0, count)))
+        return NULL;
+    if (!(image = LoadBitmapW(aclui_instance, MAKEINTRESOURCEW(resource))))
+    {
+        ImageList_Destroy(image_list);
+        return NULL;
+    }
+
+    ret = ImageList_AddMasked(image_list, image, mask_color);
+    DeleteObject(image);
+    if (ret == -1)
+    {
+        ImageList_Destroy(image_list);
+        return NULL;
+    }
+    return image_list;
+}
+
 static void security_page_free(struct security_page *page)
 {
     unsigned int i;
@@ -169,6 +195,8 @@ static void security_page_free(struct security_page *page)
     free(page->users);
 
     LocalFree(page->sd);
+    if (page->image_list)
+        ImageList_Destroy(page->image_list);
     if (page->security)
         ISecurityInformation_Release(page->security);
     free(page);
@@ -199,6 +227,10 @@ static void security_page_init_dlg(HWND hwnd, struct security_page *page)
     column.cx = rect.right - rect.left;
     SendMessageW(control, LVM_INSERTCOLUMNW, 0, (LPARAM)&column);
 
+    if (!(page->image_list = create_image_list(IDB_USER_ICONS, 18, 18, 2, RGB(255, 0, 255))))
+        return;
+    SendMessageW(control, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)page->image_list);
+
     init_users(page);
 
     if (page->user_count)
diff --git a/dlls/aclui/user_icons.bmp b/dlls/aclui/user_icons.bmp
new file mode 100644
index 00000000000..29259e2724c
Binary files /dev/null and b/dlls/aclui/user_icons.bmp differ




More information about the wine-cvs mailing list