Juan Lang : cryptui: Show cert when it' s double-clicked in the hierarchy page.
Alexandre Julliard
julliard at winehq.org
Fri Dec 19 11:19:20 CST 2008
Module: wine
Branch: master
Commit: 63be2a038e2c032e73ba0fa8c185bd6a85368265
URL: http://source.winehq.org/git/wine.git/?a=commit;h=63be2a038e2c032e73ba0fa8c185bd6a85368265
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Dec 18 13:52:03 2008 -0800
cryptui: Show cert when it's double-clicked in the hierarchy page.
---
dlls/cryptui/main.c | 108 ++++++++++++++++++++++++++++++---------------------
1 files changed, 64 insertions(+), 44 deletions(-)
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index 011d531..43c5992 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -1866,13 +1866,58 @@ static void show_cert_hierarchy(HWND hwnd, struct hierarchy_data *data)
set_certificate_status_for_end_cert(hwnd, data->pCertViewInfo);
}
+static void show_dialog_for_selected_cert(HWND hwnd)
+{
+ HWND tree = GetDlgItem(hwnd, IDC_CERTPATH);
+ TVITEMW item;
+ struct hierarchy_data *data;
+ DWORD selection;
+
+ memset(&item, 0, sizeof(item));
+ item.mask = TVIF_HANDLE | TVIF_PARAM;
+ item.hItem = (HTREEITEM)SendMessageW(tree, TVM_GETNEXTITEM, TVGN_CARET,
+ (LPARAM)NULL);
+ SendMessageW(tree, TVM_GETITEMW, 0, (LPARAM)&item);
+ data = get_hierarchy_data_from_tree_item(tree, item.hItem);
+ selection = lparam_to_index(data, item.lParam);
+ if (selection != 0)
+ {
+ CRYPT_PROVIDER_SGNR *provSigner;
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW viewInfo;
+ BOOL changed = FALSE;
+
+ provSigner = WTHelperGetProvSignerFromChain(
+ (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
+ data->pCertViewInfo->idxSigner,
+ data->pCertViewInfo->fCounterSigner,
+ data->pCertViewInfo->idxCounterSigner);
+ memset(&viewInfo, 0, sizeof(viewInfo));
+ viewInfo.dwSize = sizeof(viewInfo);
+ viewInfo.dwFlags = data->pCertViewInfo->dwFlags;
+ viewInfo.szTitle = data->pCertViewInfo->szTitle;
+ viewInfo.pCertContext = provSigner->pasCertChain[selection].pCert;
+ viewInfo.cStores = data->pCertViewInfo->cStores;
+ viewInfo.rghStores = data->pCertViewInfo->rghStores;
+ viewInfo.cPropSheetPages = data->pCertViewInfo->cPropSheetPages;
+ viewInfo.rgPropSheetPages = data->pCertViewInfo->rgPropSheetPages;
+ viewInfo.nStartPage = data->pCertViewInfo->nStartPage;
+ CryptUIDlgViewCertificateW(&viewInfo, &changed);
+ if (changed)
+ {
+ /* Delete the contents of the tree */
+ SendMessageW(tree, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
+ /* Reinitialize the tree */
+ show_cert_hierarchy(hwnd, data);
+ }
+ }
+}
+
static LRESULT CALLBACK hierarchy_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
LPARAM lp)
{
PROPSHEETPAGEW *page;
struct hierarchy_data *data;
- HWND tree = GetDlgItem(hwnd, IDC_CERTPATH);
- DWORD selection;
+ LRESULT ret = 0;
TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
@@ -1885,13 +1930,18 @@ static LRESULT CALLBACK hierarchy_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
break;
case WM_NOTIFY:
{
- NMTREEVIEWW *nm;
- CRYPT_PROVIDER_SGNR *provSigner;
+ NMHDR *hdr;
- nm = (NMTREEVIEWW*)lp;
- switch (nm->hdr.code)
+ hdr = (NMHDR *)lp;
+ switch (hdr->code)
{
case TVN_SELCHANGEDW:
+ {
+ NMTREEVIEWW *nm = (NMTREEVIEWW*)lp;
+ HWND tree = GetDlgItem(hwnd, IDC_CERTPATH);
+ DWORD selection;
+ CRYPT_PROVIDER_SGNR *provSigner;
+
data = get_hierarchy_data_from_tree_item(tree, nm->itemNew.hItem);
selection = lparam_to_index(data, nm->itemNew.lParam);
provSigner = WTHelperGetProvSignerFromChain(
@@ -1904,54 +1954,24 @@ static LRESULT CALLBACK hierarchy_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
&provSigner->pasCertChain[selection]);
break;
}
+ case NM_DBLCLK:
+ show_dialog_for_selected_cert(hwnd);
+ SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, 1);
+ ret = 1;
+ break;
+ }
break;
}
case WM_COMMAND:
switch (wp)
{
case IDC_VIEWCERTIFICATE:
- {
- TVITEMW item;
- CRYPT_PROVIDER_SGNR *provSigner;
- CRYPTUI_VIEWCERTIFICATE_STRUCTW viewInfo;
- BOOL changed = FALSE;
-
- memset(&item, 0, sizeof(item));
- item.mask = TVIF_HANDLE | TVIF_PARAM;
- item.hItem = (HTREEITEM)SendMessageW(tree, TVM_GETNEXTITEM,
- TVGN_CARET, (LPARAM)NULL);
- SendMessageW(tree, TVM_GETITEMW, 0, (LPARAM)&item);
- data = get_hierarchy_data_from_tree_item(tree, item.hItem);
- selection = lparam_to_index(data, item.lParam);
- provSigner = WTHelperGetProvSignerFromChain(
- (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
- data->pCertViewInfo->idxSigner,
- data->pCertViewInfo->fCounterSigner,
- data->pCertViewInfo->idxCounterSigner);
- memset(&viewInfo, 0, sizeof(viewInfo));
- viewInfo.dwSize = sizeof(viewInfo);
- viewInfo.dwFlags = data->pCertViewInfo->dwFlags;
- viewInfo.szTitle = data->pCertViewInfo->szTitle;
- viewInfo.pCertContext = provSigner->pasCertChain[selection].pCert;
- viewInfo.cStores = data->pCertViewInfo->cStores;
- viewInfo.rghStores = data->pCertViewInfo->rghStores;
- viewInfo.cPropSheetPages = data->pCertViewInfo->cPropSheetPages;
- viewInfo.rgPropSheetPages = data->pCertViewInfo->rgPropSheetPages;
- viewInfo.nStartPage = data->pCertViewInfo->nStartPage;
- CryptUIDlgViewCertificateW(&viewInfo, &changed);
- if (changed)
- {
- /* Delete the contents of the tree */
- SendMessageW(tree, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
- /* Reinitialize the tree */
- show_cert_hierarchy(hwnd, data);
- }
+ show_dialog_for_selected_cert(hwnd);
break;
}
- }
break;
}
- return 0;
+ return ret;
}
static UINT CALLBACK hierarchy_callback(HWND hwnd, UINT msg,
More information about the wine-cvs
mailing list