1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-05 05:22:47 -05:00

In the new unified font handling, my strategy so far for combining

client- and server-side fonts into a single namespace was mainly to
hope there would naturally be no collisions, and to provide
disambiguating "client:" and "server:" prefixes for manual use in
emergencies.

Jacob points out, however, that his system not only has a namespace
clash but worse still the clash is at the name "fixed", which is our
default font! So, modify my namespace policy to use the
disambiguating prefixes everywhere by default, and use _unprefixed_
names only if the user types one in by hand.

In particular, I've changed the keys used to store font names in
Unix saved session files. Font names read from the new keys will be
passed straight to the new unifont framework; font names read from
the old keys will have "server:" prepended. So any existing
configuration file for GTK1 PuTTY should now work reliably in GTK2
PuTTY and select the same font, even if that font is one on which
your system (rather, your client+server combination) has a font
namespace clash.

[originally from svn r7973]
This commit is contained in:
Simon Tatham
2008-04-05 13:37:20 +00:00
parent 2503cd1861
commit 8ac9896853
3 changed files with 135 additions and 37 deletions

View File

@ -362,7 +362,35 @@ int read_setting_i(void *handle, const char *key, int defvalue)
int read_setting_fontspec(void *handle, const char *name, FontSpec *result)
{
return !!read_setting_s(handle, name, result->name, sizeof(result->name));
/*
* In GTK1-only PuTTY, we used to store font names simply as a
* valid X font description string (logical or alias), under a
* bare key such as "Font".
*
* In GTK2 PuTTY, we have a prefix system where "client:"
* indicates a Pango font and "server:" an X one; existing
* configuration needs to be reinterpreted as having the
* "server:" prefix, so we change the storage key from the
* provided name string (e.g. "Font") to a suffixed one
* ("FontName").
*/
char *suffname = dupcat(name, "Name", NULL);
if (read_setting_s(handle, suffname, result->name, sizeof(result->name))) {
sfree(suffname);
return TRUE; /* got new-style name */
}
sfree(suffname);
/* Fall back to old-style name. */
memcpy(result->name, "server:", 7);
if (!read_setting_s(handle, name,
result->name + 7, sizeof(result->name) - 7) ||
!result->name[7]) {
result->name[0] = '\0';
return FALSE;
} else {
return TRUE;
}
}
int read_setting_filename(void *handle, const char *name, Filename *result)
{
@ -371,7 +399,14 @@ int read_setting_filename(void *handle, const char *name, Filename *result)
void write_setting_fontspec(void *handle, const char *name, FontSpec result)
{
write_setting_s(handle, name, result.name);
/*
* read_setting_fontspec had to handle two cases, but when
* writing our settings back out we simply always generate the
* new-style name.
*/
char *suffname = dupcat(name, "Name", NULL);
write_setting_s(handle, suffname, result.name);
sfree(suffname);
}
void write_setting_filename(void *handle, const char *name, Filename result)
{