1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-18 11:31:00 -05:00

Support custom clipboard names under X.

This required me to turn the drop-lists into combo boxes and add an
extra string-typed Conf setting alongside each enumerated value.
This commit is contained in:
Simon Tatham
2017-12-17 18:44:27 +00:00
parent 018aa57645
commit 2a76f8d4a2
6 changed files with 242 additions and 58 deletions

View File

@ -448,7 +448,7 @@ static void wprefs(void *sesskey, const char *name,
}
static void write_clip_setting(void *handle, const char *savekey,
Conf *conf, int confkey)
Conf *conf, int confkey, int strconfkey)
{
int val = conf_get_int(conf, confkey);
switch (val) {
@ -462,21 +462,33 @@ static void write_clip_setting(void *handle, const char *savekey,
case CLIPUI_EXPLICIT:
write_setting_s(handle, savekey, "explicit");
break;
case CLIPUI_CUSTOM:
{
char *sval = dupcat("custom:", conf_get_str(conf, strconfkey),
(const char *)NULL);
write_setting_s(handle, savekey, sval);
sfree(sval);
}
break;
}
}
static void read_clip_setting(void *handle, const char *savekey,
int def, Conf *conf, int confkey)
int def, Conf *conf, int confkey, int strconfkey)
{
char *setting = read_setting_s(handle, savekey);
int val;
conf_set_str(conf, strconfkey, "");
if (!setting) {
val = def;
} else if (!strcmp(setting, "implicit")) {
val = CLIPUI_IMPLICIT;
} else if (!strcmp(setting, "explicit")) {
val = CLIPUI_EXPLICIT;
} else if (!strncmp(setting, "custom:", 7)) {
val = CLIPUI_CUSTOM;
conf_set_str(conf, strconfkey, setting + 7);
} else {
val = CLIPUI_NONE;
}
@ -676,9 +688,12 @@ void save_open_settings(void *sesskey, Conf *conf)
}
write_setting_i(sesskey, "MouseAutocopy",
conf_get_int(conf, CONF_mouseautocopy));
write_clip_setting(sesskey, "MousePaste", conf, CONF_mousepaste);
write_clip_setting(sesskey, "CtrlShiftIns", conf, CONF_ctrlshiftins);
write_clip_setting(sesskey, "CtrlShiftCV", conf, CONF_ctrlshiftcv);
write_clip_setting(sesskey, "MousePaste", conf,
CONF_mousepaste, CONF_mousepaste_custom);
write_clip_setting(sesskey, "CtrlShiftIns", conf,
CONF_ctrlshiftins, CONF_ctrlshiftins_custom);
write_clip_setting(sesskey, "CtrlShiftCV", conf,
CONF_ctrlshiftcv, CONF_ctrlshiftcv_custom);
write_setting_s(sesskey, "LineCodePage", conf_get_str(conf, CONF_line_codepage));
write_setting_i(sesskey, "CJKAmbigWide", conf_get_int(conf, CONF_cjk_ambig_wide));
write_setting_i(sesskey, "UTF8Override", conf_get_int(conf, CONF_utf8_override));
@ -1103,11 +1118,11 @@ void load_open_settings(void *sesskey, Conf *conf)
gppi(sesskey, "MouseAutocopy", CLIPUI_DEFAULT_AUTOCOPY,
conf, CONF_mouseautocopy);
read_clip_setting(sesskey, "MousePaste", CLIPUI_DEFAULT_MOUSE,
conf, CONF_mousepaste);
conf, CONF_mousepaste, CONF_mousepaste_custom);
read_clip_setting(sesskey, "CtrlShiftIns", CLIPUI_DEFAULT_INS,
conf, CONF_ctrlshiftins);
conf, CONF_ctrlshiftins, CONF_ctrlshiftins_custom);
read_clip_setting(sesskey, "CtrlShiftCV", CLIPUI_NONE,
conf, CONF_ctrlshiftcv);
conf, CONF_ctrlshiftcv, CONF_ctrlshiftcv_custom);
/*
* The empty default for LineCodePage will be converted later
* into a plausible default for the locale.