63 |
|
|
64 |
static subclass_s keylist_proc; |
static subclass_s keylist_proc; |
65 |
|
|
66 |
|
/* Handle to the global image list. */ |
67 |
HIMAGELIST glob_imagelist; |
HIMAGELIST glob_imagelist; |
68 |
|
|
69 |
struct km_info_s { |
struct km_info_s { |
72 |
int ypos_sep; |
int ypos_sep; |
73 |
int ypercent_sep; |
int ypercent_sep; |
74 |
|
|
75 |
|
/* Different kind of windows. */ |
76 |
HWND dlg; |
HWND dlg; |
77 |
HWND hwnd_sep; |
HWND hwnd_sep; |
78 |
HWND toolbar; |
HWND toolbar; |
210 |
/* Restore the width of the columns from the registry. |
/* Restore the width of the columns from the registry. |
211 |
If no bitstring was found, the default size is used. */ |
If no bitstring was found, the default size is used. */ |
212 |
int |
int |
213 |
restore_column_info (listview_ctrl_t hd) |
restore_column_info (struct km_info_s *kmi) |
214 |
{ |
{ |
215 |
WORD *buf; |
WORD *buf; |
216 |
HKEY root; |
HKEY root; |
217 |
DWORD type; |
DWORD type; |
218 |
DWORD size = hd->cols*sizeof (WORD), i; |
DWORD size = kmi->lv->cols*sizeof (WORD), i; |
219 |
LONG ec; |
LONG ec; |
220 |
|
|
221 |
ec = RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\WinPT", 0, |
ec = RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\WinPT", 0, |
227 |
if (!buf) |
if (!buf) |
228 |
BUG (NULL); |
BUG (NULL); |
229 |
ec = RegQueryValueEx (root, "KMColumnSize", NULL, &type, |
ec = RegQueryValueEx (root, "KMColumnSize", NULL, &type, |
230 |
(BYTE*)buf, &size); |
(BYTE*)buf, &size); |
|
RegCloseKey (root); |
|
231 |
if (ec != ERROR_SUCCESS) { |
if (ec != ERROR_SUCCESS) { |
232 |
|
RegCloseKey (root); |
233 |
free_if_alloc (buf); |
free_if_alloc (buf); |
234 |
return -1; |
return -1; |
235 |
} |
} |
242 |
} |
} |
243 |
} |
} |
244 |
for (i=0; i < size/2; i++) |
for (i=0; i < size/2; i++) |
245 |
listview_set_column_width (hd, i, buf[i]); |
listview_set_column_width (kmi->lv, i, buf[i]); |
246 |
free_if_alloc (buf); |
free_if_alloc (buf); |
247 |
|
|
248 |
|
size = sizeof (kmi->keylist_sortby); |
249 |
|
ec = RegQueryValueEx (root, "KMSortBy", NULL, &type, |
250 |
|
(BYTE*)&kmi->keylist_sortby, &size); |
251 |
|
if (ec != ERROR_SUCCESS) |
252 |
|
kmi->keylist_sortby = KEY_SORT_USERID; |
253 |
|
RegCloseKey (root); |
254 |
return 0; |
return 0; |
255 |
} |
} |
256 |
|
|
257 |
|
|
258 |
/* Save the current column width to the registry. */ |
/* Save the current column width to the registry. */ |
259 |
int |
int |
260 |
save_column_info (listview_ctrl_t hd) |
save_column_info (struct km_info_s *kmi) |
261 |
{ |
{ |
|
WORD *buf; |
|
262 |
HKEY root; |
HKEY root; |
263 |
|
WORD *buf; |
264 |
LONG ec; |
LONG ec; |
265 |
int i; |
int i; |
266 |
|
|
267 |
buf = new WORD[hd->cols]; |
buf = new WORD[kmi->lv->cols]; |
268 |
if (!buf) |
if (!buf) |
269 |
BUG (NULL); |
BUG (NULL); |
270 |
for (i=0; i < hd->cols; i++) { |
for (i=0; i < kmi->lv->cols; i++) { |
271 |
LVCOLUMN lvc; |
LVCOLUMN lvc; |
272 |
|
|
273 |
memset (&lvc, 0, sizeof (lvc)); |
memset (&lvc, 0, sizeof (lvc)); |
274 |
lvc.mask = LVCF_WIDTH; |
lvc.mask = LVCF_WIDTH; |
275 |
ListView_GetColumn (hd->ctrl, i, &lvc); |
ListView_GetColumn (kmi->lv->ctrl, i, &lvc); |
276 |
buf[i] = lvc.cx; |
buf[i] = lvc.cx; |
277 |
} |
} |
278 |
|
|
284 |
} |
} |
285 |
|
|
286 |
ec = RegSetValueEx (root, "KMColumnSize", 0, REG_BINARY, |
ec = RegSetValueEx (root, "KMColumnSize", 0, REG_BINARY, |
287 |
(const BYTE*)buf, 2*hd->cols); |
(const BYTE*)buf, 2*kmi->lv->cols); |
288 |
|
if (ec == ERROR_SUCCESS) { |
289 |
|
ec = RegSetValueEx (root, "KMSortBy", 0, REG_DWORD_BIG_ENDIAN, |
290 |
|
(const BYTE*)&kmi->keylist_sortby, |
291 |
|
sizeof (kmi->keylist_sortby)); |
292 |
|
} |
293 |
RegCloseKey (root); |
RegCloseKey (root); |
294 |
free_if_alloc (buf); |
free_if_alloc (buf); |
295 |
return ec == ERROR_SUCCESS? 0 : -1; |
return ec == ERROR_SUCCESS? 0 : -1; |
812 |
static void |
static void |
813 |
update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair) |
update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair) |
814 |
{ |
{ |
815 |
gpgme_key_t key; |
struct winpt_key_s key; |
816 |
|
|
817 |
keycache_update (0, keyid); |
keycache_update (0, keyid); |
818 |
if (keypair) |
if (keypair) |
820 |
|
|
821 |
/* because we replaced the key item, we need to update the |
/* because we replaced the key item, we need to update the |
822 |
address of the pointer in the ListView control. */ |
address of the pointer in the ListView control. */ |
823 |
get_pubkey (keyid, &key); |
memset (&key, 0, sizeof (key)); |
824 |
keylist_upd_key (lv, pos, key); |
winpt_get_pubkey (keyid, &key); |
825 |
|
keylist_upd_key (lv, pos, key.ext, key.ctx); |
826 |
keyring_check_last_access (); |
keyring_check_last_access (); |
827 |
} |
} |
828 |
|
|
1053 |
kc = keycache_get_ctx (1); |
kc = keycache_get_ctx (1); |
1054 |
while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) { |
while (!gpg_keycache_next_updated_key (kc, &ctx, &status)) { |
1055 |
if (status == KC_FLAG_ADD) |
if (status == KC_FLAG_ADD) |
1056 |
keylist_add_key (kmi->lv, KEYLIST_LIST, ctx->key); |
keylist_add_key (kmi->lv, KEYLIST_LIST, ctx, ctx->key); |
1057 |
else { |
else { |
1058 |
pos = find_keypos (kmi->lv, ctx->key); |
pos = find_keypos (kmi->lv, ctx->key); |
1059 |
if (pos != -1) |
if (pos != -1) |
1060 |
keylist_upd_key (kmi->lv, pos, ctx->key); |
keylist_upd_key (kmi->lv, pos, ctx, ctx->key); |
1061 |
} |
} |
1062 |
} |
} |
1063 |
keylist_sort (kmi->lv, KEY_SORT_USERID); |
keylist_sort (kmi->lv, KEY_SORT_USERID); |
1140 |
struct km_info_s *kmi = NULL; |
struct km_info_s *kmi = NULL; |
1141 |
HWND kl; |
HWND kl; |
1142 |
HMENU hm; |
HMENU hm; |
1143 |
|
struct keycache_s *kci; |
1144 |
gpg_keycache_t c; |
gpg_keycache_t c; |
1145 |
gpgme_key_t key; |
gpgme_key_t key; |
1146 |
struct genkey_s genkey; |
struct genkey_s genkey; |
1210 |
do_center_window (dlg, kmi); |
do_center_window (dlg, kmi); |
1211 |
do_resize_window (dlg, kmi); |
do_resize_window (dlg, kmi); |
1212 |
update_ui_items (dlg, kmi->lv); |
update_ui_items (dlg, kmi->lv); |
1213 |
restore_column_info (kmi->lv); |
restore_column_info (kmi); |
1214 |
|
keylist_sort (kmi->lv, kmi->keylist_sortby); |
1215 |
|
|
1216 |
SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups")); |
SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups")); |
1217 |
SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, |
SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, |
1221 |
return TRUE; |
return TRUE; |
1222 |
|
|
1223 |
case WM_DESTROY: |
case WM_DESTROY: |
1224 |
save_column_info (kmi->lv); |
save_column_info (kmi); |
1225 |
if (kmi->lv) { |
if (kmi->lv) { |
1226 |
keylist_delete (kmi->lv); |
keylist_delete (kmi->lv); |
1227 |
kmi->lv = NULL; |
kmi->lv = NULL; |
1695 |
if (listview_count_items (kmi->lv, 1) > 1) |
if (listview_count_items (kmi->lv, 1) > 1) |
1696 |
name = m_strdup ("Exported_GPG_Keys.asc"); |
name = m_strdup ("Exported_GPG_Keys.asc"); |
1697 |
else { |
else { |
1698 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1699 |
name = km_gen_export_filename (key->subkeys->keyid+8, 0); |
name = km_gen_export_filename (key->subkeys->keyid+8, 0); |
1700 |
} |
} |
1701 |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
1728 |
"Do you really want to export the key?"), |
"Do you really want to export the key?"), |
1729 |
_("WARNING"), MB_INFO|MB_YESNO); |
_("WARNING"), MB_INFO|MB_YESNO); |
1730 |
if (i == IDYES) { |
if (i == IDYES) { |
1731 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
|
if (!key) |
|
|
BUG (NULL); |
|
1732 |
name = km_gen_export_filename (key->subkeys->keyid+8, 1); |
name = km_gen_export_filename (key->subkeys->keyid+8, 1); |
1733 |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
t = get_filesave_dlg (dlg, _("Choose Name for Key File"), NULL, name); |
1734 |
if (t != NULL) |
if (t != NULL) |
1865 |
case ID_KEYCTX_UID_COPY: |
case ID_KEYCTX_UID_COPY: |
1866 |
/* XXX: add generic function to support multiple selection |
/* XXX: add generic function to support multiple selection |
1867 |
with a callback */ |
with a callback */ |
1868 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, &kci); |
1869 |
name = utf8_to_native (key->uids->uid); |
name = kci->uids->name; |
1870 |
set_clip_text (NULL, name, strlen (name)); |
set_clip_text (NULL, name, strlen (name)); |
|
safe_free (name); |
|
1871 |
break; |
break; |
1872 |
|
|
1873 |
case ID_KEYCTX_KEYID_COPY: |
case ID_KEYCTX_KEYID_COPY: |
1874 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1875 |
set_clip_text (NULL, key->subkeys->keyid+8, |
set_clip_text (NULL, key->subkeys->keyid+8, |
1876 |
strlen (key->subkeys->keyid+8)); |
strlen (key->subkeys->keyid+8)); |
1877 |
break; |
break; |
1878 |
|
|
1879 |
case ID_KEYCTX_FPR_COPY: |
case ID_KEYCTX_FPR_COPY: |
1880 |
key = (gpgme_key_t) listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1881 |
t = key->subkeys->fpr; |
t = key->subkeys->fpr; |
1882 |
set_clip_text (NULL, t? t : "", t? strlen (t): 0); |
set_clip_text (NULL, t? t : "", t? strlen (t): 0); |
1883 |
break; |
break; |
1884 |
|
|
1885 |
case ID_KEYCTX_KINFO_COPY: |
case ID_KEYCTX_KINFO_COPY: |
1886 |
key = (gpgme_key_t) listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
|
if (!key) |
|
|
BUG (NULL); |
|
1887 |
km_set_clip_info (key->subkeys->keyid+8); |
km_set_clip_info (key->subkeys->keyid+8); |
1888 |
break; |
break; |
1889 |
|
|
1919 |
|
|
1920 |
case ID_KEYCTX_SETDEFKEY: |
case ID_KEYCTX_SETDEFKEY: |
1921 |
if (!km_check_key_status (kmi->lv, kmi->lv_idx)) { |
if (!km_check_key_status (kmi->lv, kmi->lv_idx)) { |
1922 |
key = (gpgme_key_t)listview_get_item2 (kmi->lv, kmi->lv_idx); |
key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL); |
1923 |
rc = set_gnupg_default_key (key->subkeys->keyid+8); |
rc = set_gnupg_default_key (key->subkeys->keyid+8); |
1924 |
if (rc) |
if (rc) |
1925 |
msg_box (dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |
msg_box (dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR); |