Juan Lang : cryptui: Fix problem with usage checkbox bitmap not being visible after the first time the edit cert properties dialog is shown .
Alexandre Julliard
julliard at winehq.org
Sat Dec 20 06:35:00 CST 2008
Module: wine
Branch: master
Commit: dd4e05e3ab834aa7cfebaf00ff29e8583f8fe1b4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=dd4e05e3ab834aa7cfebaf00ff29e8583f8fe1b4
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Dec 19 09:32:25 2008 -0800
cryptui: Fix problem with usage checkbox bitmap not being visible after the first time the edit cert properties dialog is shown.
---
dlls/cryptui/main.c | 79 +++++++++++++++++++++++++++++++-------------------
1 files changed, 49 insertions(+), 30 deletions(-)
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 169d0cd..82a877f 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -1157,7 +1157,6 @@ struct detail_data
BOOL *pfPropertiesChanged;
int cFields;
struct field_value_data *fields;
- HIMAGELIST imageList;
};
typedef void (*add_fields_func)(HWND hwnd, struct detail_data *data);
@@ -1860,9 +1859,16 @@ static void add_known_usage(HWND lv, PCCRYPT_OID_INFO info)
SendMessageW(lv, LVM_INSERTITEMW, 0, (LPARAM)&item);
}
-static void show_cert_usages(HWND hwnd, struct detail_data *data)
+struct edit_cert_data
{
- PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
+ PCCERT_CONTEXT cert;
+ BOOL *pfPropertiesChanged;
+ HIMAGELIST imageList;
+};
+
+static void show_cert_usages(HWND hwnd, struct edit_cert_data *data)
+{
+ PCCERT_CONTEXT cert = data->cert;
HWND lv = GetDlgItem(hwnd, IDC_CERTIFICATE_USAGES);
PCERT_ENHKEY_USAGE usage;
DWORD size;
@@ -1949,9 +1955,9 @@ static void show_cert_usages(HWND hwnd, struct detail_data *data)
BM_CLICK, 0, 0);
}
-static void set_general_cert_properties(HWND hwnd, struct detail_data *data)
+static void set_general_cert_properties(HWND hwnd, struct edit_cert_data *data)
{
- PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
+ PCCERT_CONTEXT cert = data->cert;
WCHAR *str;
if ((str = get_cert_property_as_string(cert, CERT_FRIENDLY_NAME_PROP_ID)))
@@ -2021,27 +2027,25 @@ static BOOL CALLBACK refresh_propsheet_pages(HWND hwnd, LPARAM lParam)
static void apply_general_changes(HWND hwnd)
{
WCHAR buf[MAX_DESCRIPTION + 1];
- struct detail_data *data =
- (struct detail_data *)GetWindowLongPtrW(hwnd, DWLP_USER);
+ struct edit_cert_data *data =
+ (struct edit_cert_data *)GetWindowLongPtrW(hwnd, DWLP_USER);
SendMessageW(GetDlgItem(hwnd, IDC_FRIENDLY_NAME), WM_GETTEXT,
sizeof(buf) / sizeof(buf[0]), (LPARAM)buf);
- set_cert_string_property(data->pCertViewInfo->pCertContext,
- CERT_FRIENDLY_NAME_PROP_ID, buf);
+ set_cert_string_property(data->cert, CERT_FRIENDLY_NAME_PROP_ID, buf);
SendMessageW(GetDlgItem(hwnd, IDC_DESCRIPTION), WM_GETTEXT,
sizeof(buf) / sizeof(buf[0]), (LPARAM)buf);
- set_cert_string_property(data->pCertViewInfo->pCertContext,
- CERT_DESCRIPTION_PROP_ID, buf);
+ set_cert_string_property(data->cert, CERT_DESCRIPTION_PROP_ID, buf);
if (IsDlgButtonChecked(hwnd, IDC_ENABLE_ALL_PURPOSES))
{
/* Setting a NULL usage removes the enhanced key usage property. */
- CertSetEnhancedKeyUsage(data->pCertViewInfo->pCertContext, NULL);
+ CertSetEnhancedKeyUsage(data->cert, NULL);
}
else if (IsDlgButtonChecked(hwnd, IDC_DISABLE_ALL_PURPOSES))
{
CERT_ENHKEY_USAGE usage = { 0, NULL };
- CertSetEnhancedKeyUsage(data->pCertViewInfo->pCertContext, &usage);
+ CertSetEnhancedKeyUsage(data->cert, &usage);
}
else if (IsDlgButtonChecked(hwnd, IDC_ENABLE_SELECTED_PURPOSES))
{
@@ -2078,7 +2082,7 @@ static void apply_general_changes(HWND hwnd)
}
}
}
- CertSetEnhancedKeyUsage(data->pCertViewInfo->pCertContext, &usage);
+ CertSetEnhancedKeyUsage(data->cert, &usage);
HeapFree(GetProcessHeap(), 0, usage.rgpszUsageIdentifier);
}
EnumChildWindows(GetParent(GetParent(hwnd)), refresh_propsheet_pages, 0);
@@ -2090,7 +2094,6 @@ static LRESULT CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg,
WPARAM wp, LPARAM lp)
{
PROPSHEETPAGEW *page;
- struct detail_data *data;
TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
@@ -2099,15 +2102,36 @@ static LRESULT CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg,
case WM_INITDIALOG:
{
HWND description = GetDlgItem(hwnd, IDC_DESCRIPTION);
+ struct detail_data *detailData;
+ struct edit_cert_data *editData;
page = (PROPSHEETPAGEW *)lp;
- data = (struct detail_data *)page->lParam;
+ detailData = (struct detail_data *)page->lParam;
SendMessageW(GetDlgItem(hwnd, IDC_FRIENDLY_NAME), EM_SETLIMITTEXT,
MAX_FRIENDLY_NAME, 0);
SendMessageW(description, EM_SETLIMITTEXT, MAX_DESCRIPTION, 0);
ShowScrollBar(description, SB_VERT, FALSE);
- set_general_cert_properties(hwnd, data);
- SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data);
+ editData = HeapAlloc(GetProcessHeap(), 0,
+ sizeof(struct edit_cert_data));
+ if (editData)
+ {
+ editData->imageList = ImageList_Create(16, 16,
+ ILC_COLOR4 | ILC_MASK, 4, 0);
+ if (editData->imageList)
+ {
+ HBITMAP bmp;
+ COLORREF backColor = RGB(255, 0, 255);
+
+ bmp = LoadBitmapW(hInstance, MAKEINTRESOURCEW(IDB_CHECKS));
+ ImageList_AddMasked(editData->imageList, bmp, backColor);
+ DeleteObject(bmp);
+ ImageList_SetBkColor(editData->imageList, CLR_NONE);
+ }
+ editData->cert = detailData->pCertViewInfo->pCertContext;
+ editData->pfPropertiesChanged = detailData->pfPropertiesChanged;
+ SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)editData);
+ set_general_cert_properties(hwnd, editData);
+ }
break;
}
case WM_NOTIFY:
@@ -2172,6 +2196,7 @@ static UINT CALLBACK cert_properties_general_callback(HWND hwnd, UINT msg,
{
HWND lv;
int cItem, i;
+ struct edit_cert_data *data;
switch (msg)
{
@@ -2196,6 +2221,12 @@ static UINT CALLBACK cert_properties_general_callback(HWND hwnd, UINT msg,
}
}
}
+ data = (struct edit_cert_data *)GetWindowLongPtrW(hwnd, DWLP_USER);
+ if (data)
+ {
+ ImageList_Destroy(data->imageList);
+ HeapFree(GetProcessHeap(), 0, data);
+ }
break;
}
return 1;
@@ -2359,7 +2390,6 @@ static UINT CALLBACK detail_callback(HWND hwnd, UINT msg,
case PSPCB_RELEASE:
data = (struct detail_data *)page->lParam;
free_detail_fields(data);
- ImageList_Destroy(data->imageList);
HeapFree(GetProcessHeap(), 0, data);
break;
}
@@ -2379,17 +2409,6 @@ static BOOL init_detail_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo,
data->pfPropertiesChanged = pfPropertiesChanged;
data->cFields = 0;
data->fields = NULL;
- data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 4, 0);
- if (data->imageList)
- {
- HBITMAP bmp;
- COLORREF backColor = RGB(255, 0, 255);
-
- bmp = LoadBitmapW(hInstance, MAKEINTRESOURCEW(IDB_CHECKS));
- ImageList_AddMasked(data->imageList, bmp, backColor);
- DeleteObject(bmp);
- ImageList_SetBkColor(data->imageList, CLR_NONE);
- }
memset(page, 0, sizeof(PROPSHEETPAGEW));
page->dwSize = sizeof(PROPSHEETPAGEW);
page->dwFlags = PSP_USECALLBACK;
More information about the wine-cvs
mailing list