mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
winpgnt: grey out key-list window buttons as appropriate.
Now the Remove button is disabled if there aren't any keys at all loaded, and the Re-encrypt button is disabled if no key is currently in a state where it's decrypted but re-encryptable.
This commit is contained in:
parent
b8374f1bdf
commit
8edeecdcfd
@ -294,14 +294,24 @@ void old_keyfile_warning(void)
|
|||||||
MessageBox(NULL, message, mbtitle, MB_OK);
|
MessageBox(NULL, message, mbtitle, MB_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct keylist_update_ctx {
|
||||||
|
bool enable_remove_controls;
|
||||||
|
bool enable_reencrypt_controls;
|
||||||
|
};
|
||||||
|
|
||||||
static void keylist_update_callback(
|
static void keylist_update_callback(
|
||||||
void *ctx, char **fingerprints, const char *comment, uint32_t ext_flags,
|
void *vctx, char **fingerprints, const char *comment, uint32_t ext_flags,
|
||||||
struct pageant_pubkey *key)
|
struct pageant_pubkey *key)
|
||||||
{
|
{
|
||||||
|
struct keylist_update_ctx *ctx = (struct keylist_update_ctx *)vctx;
|
||||||
FingerprintType this_type = ssh2_pick_fingerprint(fingerprints, fptype);
|
FingerprintType this_type = ssh2_pick_fingerprint(fingerprints, fptype);
|
||||||
const char *fingerprint = fingerprints[this_type];
|
const char *fingerprint = fingerprints[this_type];
|
||||||
strbuf *listentry = strbuf_new();
|
strbuf *listentry = strbuf_new();
|
||||||
|
|
||||||
|
/* There is at least one key, so the controls for removing keys
|
||||||
|
* should be enabled */
|
||||||
|
ctx->enable_remove_controls = true;
|
||||||
|
|
||||||
switch (key->ssh_version) {
|
switch (key->ssh_version) {
|
||||||
case 1: {
|
case 1: {
|
||||||
strbuf_catf(listentry, "ssh1\t%s\t%s", fingerprint, comment);
|
strbuf_catf(listentry, "ssh1\t%s\t%s", fingerprint, comment);
|
||||||
@ -364,11 +374,15 @@ static void keylist_update_callback(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ext_flags & LIST_EXTENDED_FLAG_HAS_NO_CLEARTEXT_KEY)
|
if (ext_flags & LIST_EXTENDED_FLAG_HAS_NO_CLEARTEXT_KEY) {
|
||||||
strbuf_catf(listentry, "\t(encrypted)");
|
strbuf_catf(listentry, "\t(encrypted)");
|
||||||
else if (ext_flags & LIST_EXTENDED_FLAG_HAS_ENCRYPTED_KEY_FILE)
|
} else if (ext_flags & LIST_EXTENDED_FLAG_HAS_ENCRYPTED_KEY_FILE) {
|
||||||
strbuf_catf(listentry, "\t(re-encryptable)");
|
strbuf_catf(listentry, "\t(re-encryptable)");
|
||||||
|
|
||||||
|
/* At least one key can be re-encrypted */
|
||||||
|
ctx->enable_reencrypt_controls = true;
|
||||||
|
}
|
||||||
|
|
||||||
SendDlgItemMessage(keylist, IDC_KEYLIST_LISTBOX,
|
SendDlgItemMessage(keylist, IDC_KEYLIST_LISTBOX,
|
||||||
LB_ADDSTRING, 0, (LPARAM)listentry->s);
|
LB_ADDSTRING, 0, (LPARAM)listentry->s);
|
||||||
strbuf_free(listentry);
|
strbuf_free(listentry);
|
||||||
@ -384,12 +398,20 @@ void keylist_update(void)
|
|||||||
LB_RESETCONTENT, 0, 0);
|
LB_RESETCONTENT, 0, 0);
|
||||||
|
|
||||||
char *errmsg;
|
char *errmsg;
|
||||||
int status = pageant_enum_keys(keylist_update_callback, NULL, &errmsg);
|
struct keylist_update_ctx ctx[1];
|
||||||
|
ctx->enable_remove_controls = false;
|
||||||
|
ctx->enable_reencrypt_controls = false;
|
||||||
|
int status = pageant_enum_keys(keylist_update_callback, ctx, &errmsg);
|
||||||
assert(status == PAGEANT_ACTION_OK);
|
assert(status == PAGEANT_ACTION_OK);
|
||||||
assert(!errmsg);
|
assert(!errmsg);
|
||||||
|
|
||||||
SendDlgItemMessage(keylist, IDC_KEYLIST_LISTBOX,
|
SendDlgItemMessage(keylist, IDC_KEYLIST_LISTBOX,
|
||||||
LB_SETCURSEL, (WPARAM) - 1, 0);
|
LB_SETCURSEL, (WPARAM) - 1, 0);
|
||||||
|
|
||||||
|
EnableWindow(GetDlgItem(keylist, IDC_KEYLIST_REMOVE),
|
||||||
|
ctx->enable_remove_controls);
|
||||||
|
EnableWindow(GetDlgItem(keylist, IDC_KEYLIST_REENCRYPT),
|
||||||
|
ctx->enable_reencrypt_controls);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user