919
919
DbgResource("w/bold", f_wb, fWBold);
922
if (!xtermOpenFont(xw, myfonts.f_n, &fnts[fNorm], warn[fNorm], True))
923
* If we are opening the default font, and it happens to be missing, force
924
* that to the compiled-in default font, e.g., "fixed". If we cannot open
925
* the font, disable it from the menu.
927
if (!xtermOpenFont(xw,
931
(fontnum == fontMenu_default))) {
932
SetItemSensitivity(fontMenuEntries[fontnum].widget, False);
925
936
strcpy(normal, myfonts.f_n);
926
937
if (!check_fontname(myfonts.f_b)) {
1233
1244
* Collect font-names that we can modify with the load-vt-fonts() action.
1236
VTFontNames default_font;
1237
String menu_font_names[fontMenu_lastBuiltin + 1][fMAX];
1240
1246
#define MERGE_SUBFONT(src,dst,name) \
1241
1247
if (IsEmpty(dst.name)) { \
1242
1248
TRACE(("MERGE_SUBFONT " #dst "." #name " merge %s\n", NonNull(src.name))); \
1251
1257
for (m = 0; m < fMAX; ++m) { \
1252
1258
dst.menu_font_names[n][m] = x_strdup(src.menu_font_names[n][m]); \
1260
TRACE((".. " #dst ".menu_fonts_names[%d] = %s\n", n, dst.menu_font_names[n][fNorm])); \
1264
xtermSaveVTFonts(XtermWidget xw)
1266
TScreen *screen = TScreenOf(xw);
1269
if (!screen->savedVTFonts) {
1271
screen->savedVTFonts = True;
1272
TRACE(("xtermSaveVTFonts saving original\n"));
1273
screen->cacheVTFonts.default_font = xw->misc.default_font;
1274
COPY_MENU_FONTS(xw->screen, screen->cacheVTFonts);
1278
#define SAME_STRING(x,y) ((x) == (y) || ((x) && (y) && !strcmp(x, y)))
1279
#define SAME_MEMBER(n) SAME_STRING(a->n, b->n)
1282
sameSubResources(SubResourceRec * a, SubResourceRec * b)
1284
Boolean result = True;
1287
if (!SAME_MEMBER(default_font.f_n)
1288
|| !SAME_MEMBER(default_font.f_b)
1289
|| !SAME_MEMBER(default_font.f_w)
1290
|| !SAME_MEMBER(default_font.f_wb)) {
1291
TRACE(("sameSubResources: default_font differs\n"));
1294
for (n = 0; n < NMENUFONTS; ++n) {
1295
if (!SAME_MEMBER(menu_font_names[n][fNorm])) {
1296
TRACE(("sameSubResources: menu_font_names[%d] differs\n", n));
1257
1307
* Load the "VT" font names from the given subresource name/class. These
1261
1311
xtermLoadVTFonts(XtermWidget xw, String myName, String myClass)
1263
static Bool initialized = False;
1264
static SubResourceRec original, referenceRec, subresourceRec;
1313
SubResourceRec subresourceRec;
1314
SubResourceRec referenceRec;
1267
1317
* These are duplicates of the VT100 font resources, but with a special
1286
1336
Bool status = True;
1287
1337
TScreen *screen = TScreenOf(xw);
1339
TRACE(("called xtermLoadVTFonts(name=%s, class=%s)\n",
1340
NonNull(myName), NonNull(myClass)));
1292
TRACE(("xtermLoadVTFonts saving original\n"));
1293
original.default_font = xw->misc.default_font;
1294
COPY_MENU_FONTS(xw->screen, original);
1342
xtermSaveVTFonts(xw);
1297
1344
if (IsEmpty(myName)) {
1298
1345
TRACE(("xtermLoadVTFonts restoring original\n"));
1299
xw->misc.default_font = original.default_font;
1300
COPY_MENU_FONTS(original, xw->screen);
1301
for (n = 0; n < XtNumber(original.menu_font_names); ++n)
1302
screen->MenuFontName(n) = original.MenuFontName(n);
1346
xw->misc.default_font = screen->cacheVTFonts.default_font;
1347
COPY_MENU_FONTS(screen->cacheVTFonts, xw->screen);
1348
for (n = 0; n < XtNumber(screen->cacheVTFonts.menu_font_names); ++n) {
1349
screen->MenuFontName(n) = screen->cacheVTFonts.MenuFontName(n);
1304
1352
TRACE(("xtermLoadVTFonts(%s, %s)\n", myName, myClass));
1354
memset(&referenceRec, 0, sizeof(referenceRec));
1306
1355
memset(&subresourceRec, 0, sizeof(subresourceRec));
1307
1356
XtGetSubresources((Widget) xw, (XtPointer) &subresourceRec,
1308
1357
myName, myClass,
1310
1359
(Cardinal) XtNumber(font_resources),
1311
1360
NULL, (Cardinal) 0);
1313
if (memcmp(&referenceRec, &subresourceRec, sizeof(referenceRec))) {
1363
* XtGetSubresources returns no status, so we compare the returned
1364
* data against a zero'd struct to see if any data is returned.
1366
if (memcmp(&referenceRec, &subresourceRec, sizeof(referenceRec))
1367
&& !sameSubResources(&(screen->cacheVTFonts), &subresourceRec)) {
1369
screen->mergedVTFonts = True;
1316
1372
* If a particular resource value was not found, use the original.
1390
1446
TRACE(("current fonts are not all wide%s\n", nullOk ? " nullOk" : ""));
1391
result = xtermLoadVTFonts(xw, "utf8Fonts", "Utf8Fonts");
1447
result = xtermLoadVTFonts(xw, XtNutf8Fonts, XtCUtf8Fonts);
1393
1449
TRACE(("xtermLoadWideFonts:%d\n", result));