cryptui: Enable/disable controls based on selection in certificate manager dialog.
authorJuan Lang <juan.lang@gmail.com>
Thu, 8 Jan 2009 01:45:41 +0000 (17:45 -0800)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 9 Jan 2009 13:46:57 +0000 (14:46 +0100)
dlls/cryptui/main.c

index 6383e0c45738179b97a9ce4f6917cf5bce85e77c..00f87ca9c5c9335eb893ebe0b4c171159aaa4f3a 100644 (file)
@@ -767,6 +767,18 @@ static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg,
     return 0;
 }
 
+static void cert_mgr_clear_cert_selection(HWND hwnd)
+{
+    WCHAR empty[] = { 0 };
+
+    EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), FALSE);
+    EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), FALSE);
+    EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), FALSE);
+    SendMessageW(GetDlgItem(hwnd, IDC_MGR_PURPOSES), WM_SETTEXT, 0,
+     (LPARAM)empty);
+    refresh_store_certs(hwnd);
+}
+
 static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
  LPARAM lp)
 {
@@ -809,8 +821,24 @@ static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
         switch (hdr->code)
         {
         case TCN_SELCHANGE:
-            refresh_store_certs(hwnd);
+            cert_mgr_clear_cert_selection(hwnd);
             break;
+        case LVN_ITEMCHANGED:
+        {
+            NMITEMACTIVATE *nm;
+            HWND lv = GetDlgItem(hwnd, IDC_MGR_CERTS);
+
+            nm = (NMITEMACTIVATE*)lp;
+            if (nm->uNewState & LVN_ITEMACTIVATE)
+            {
+                int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
+
+                EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), numSelected > 0);
+                EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), numSelected > 0);
+                EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), numSelected == 1);
+            }
+            break;
+        }
         }
         break;
     }
@@ -818,7 +846,7 @@ static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
         switch (wp)
         {
         case ((CBN_SELCHANGE << 16) | IDC_MGR_PURPOSE_SELECTION):
-            refresh_store_certs(hwnd);
+            cert_mgr_clear_cert_selection(hwnd);
             break;
         case IDC_MGR_ADVANCED:
             if (DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_CERT_MGR_ADVANCED),