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:
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user