See fix (attached), which will be part of #263 -- Thomas E. Dickey <dickey@invisible-island.net> http://invisible-island.net ftp://invisible-island.net
# ftp://invisible-island.net/xterm/patches/temp/xterm-262a.patch.gz
# patch by Thomas E. Dickey <dickey@invisible-island.net>
# created Wed Sep 1 00:35:26 UTC 2010
# ------------------------------------------------------------------------------
# charproc.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-----
# fontutils.c | 14 ++++++++------
# misc.c | 14 +++++++-------
# ptyx.h | 8 +++++---
# version.h | 4 ++--
# xterm.log.html | 20 +++++++++++++++++++-
# 6 files changed, 87 insertions(+), 24 deletions(-)
# ------------------------------------------------------------------------------
Index: charproc.c
--- xterm-262+/charproc.c 2010-08-29 22:51:09.000000000 +0000
+++ xterm-262a/charproc.c 2010-08-31 23:03:49.000000000 +0000
@@ -1,4 +1,4 @@
-/* $XTermId: charproc.c,v 1.1076 2010/08/29 22:51:09 tom Exp $ */
+/* $XTermId: charproc.c,v 1.1078 2010/08/31 23:03:49 tom Exp $ */
/*
@@ -550,7 +550,7 @@
#ifndef NO_ACTIVE_ICON
Bres("activeIcon", "ActiveIcon", misc.active_icon, False),
Ires("iconBorderWidth", XtCBorderWidth, misc.icon_border_width, 2),
- Fres("iconFont", "IconFont", screen.fnt_icon.fs, XtDefaultFont),
+ Sres("iconFont", "IconFont", screen.icon_fontname, "nil2"),
Cres("iconBorderColor", XtCBorderColor, misc.icon_border_pixel, XtDefaultBackground),
#endif /* NO_ACTIVE_ICON */
@@ -6369,11 +6369,17 @@
init_Bres(screen.quiet_grab);
#ifndef NO_ACTIVE_ICON
- TScreenOf(wnew)->fnt_icon.fs = TScreenOf(request)->fnt_icon.fs;
+ init_Sres(screen.icon_fontname);
+ TScreenOf(wnew)->fnt_icon.fs = XLoadQueryFont(TScreenOf(wnew)->display,
+ TScreenOf(wnew)->icon_fontname);
+ TRACE(("iconFont '%s' %sloaded successfully\n",
+ TScreenOf(wnew)->icon_fontname,
+ TScreenOf(wnew)->fnt_icon.fs ? "" : "NOT "));
init_Bres(misc.active_icon);
init_Ires(misc.icon_border_width);
wnew->misc.icon_border_pixel = request->misc.icon_border_pixel;
#endif /* NO_ACTIVE_ICON */
+
init_Bres(misc.titeInhibit);
init_Bres(misc.tiXtraScroll);
init_Bres(misc.dynamicColors);
@@ -7171,14 +7177,49 @@
screen->event_mask = values->event_mask;
#ifndef NO_ACTIVE_ICON
+ /*
+ * Normally, the font-number for icon fonts does not correspond with any of
+ * the menu-selectable fonts. If we cannot load the font given for the
+ * iconFont resource, try with font1 aka "Unreadable".
+ */
+ screen->icon_fontnum = -1;
+ if (screen->fnt_icon.fs == 0) {
+ screen->fnt_icon.fs = XLoadQueryFont(screen->display,
+ screen->MenuFontName(fontMenu_font1));
+ TRACE(("%susing font1 '%s' as iconFont\n",
+ (screen->fnt_icon.fs
+ ? ""
+ : "NOT "),
+ screen->MenuFontName(fontMenu_font1)));
+ }
+#if OPT_RENDERFONT
+ /*
+ * If we still have no result from iconFont resource (perhaps because fonts
+ * are missing) but are using Xft, try to use that instead. We prefer
+ * bitmap fonts in any case, since scaled fonts are usually less readable,
+ * particularly at small sizes.
+ */
+ if (UsingRenderFont(xw)
+ && screen->fnt_icon.fs == 0) {
+ screen->icon_fontnum = fontMenu_default;
+ screen->fnt_icon.fs = screen->fnts[0].fs; /* need for next-if */
+ TRACE(("using TrueType font as iconFont\n"));
+ }
+#endif
if (xw->misc.active_icon && screen->fnt_icon.fs) {
int iconX = 0, iconY = 0;
Widget shell = SHELL_OF(xw);
VTwin *win = &(screen->iconVwin);
+ int save_fontnum = screen->menu_font_number;
- TRACE(("Initializing active-icon\n"));
- XtVaGetValues(shell, XtNiconX, &iconX, XtNiconY, &iconY, (XtPointer) 0);
+ TRACE(("Initializing active-icon %d\n", screen->icon_fontnum));
+ screen->menu_font_number = screen->icon_fontnum;
+ XtVaGetValues(shell,
+ XtNiconX, &iconX,
+ XtNiconY, &iconY,
+ (XtPointer) 0);
xtermComputeFontInfo(xw, &(screen->iconVwin), screen->fnt_icon.fs, 0);
+ screen->menu_font_number = save_fontnum;
/* since only one client is permitted to select for Button
* events, we have to let the window manager get 'em...
Index: fontutils.c
--- xterm-262+/fontutils.c 2010-06-15 08:18:58.000000000 +0000
+++ xterm-262a/fontutils.c 2010-08-31 22:50:53.000000000 +0000
@@ -1,4 +1,4 @@
-/* $XTermId: fontutils.c,v 1.344 2010/06/15 08:18:58 tom Exp $ */
+/* $XTermId: fontutils.c,v 1.345 2010/08/31 22:50:53 tom Exp $ */
/************************************************************
@@ -1795,6 +1795,9 @@
TScreen *screen = TScreenOf(xw);
int i, j, width, height;
+#if OPT_RENDERFONT
+ int fontnum = screen->menu_font_number;
+#endif
#if OPT_RENDERFONT
/*
@@ -1804,9 +1807,8 @@
* font-loading for fixed-fonts still goes on whether or not this chunk
* overrides it.
*/
- if (UsingRenderFont(xw)) {
+ if (UsingRenderFont(xw) && fontnum >= 0) {
char *face_name = getFaceName(xw, False);
- int fontnum = screen->menu_font_number;
XftFont *norm = screen->renderFontNorm[fontnum].font;
XftFont *bold = screen->renderFontBold[fontnum].font;
XftFont *ital = screen->renderFontItal[fontnum].font;
@@ -1820,8 +1822,8 @@
XftPattern *pat;
double face_size = xw->misc.face_size[fontnum];
- TRACE(("xtermComputeFontInfo norm(face %s, size %f)\n",
- face_name,
+ TRACE(("xtermComputeFontInfo font %d: norm(face %s, size %f)\n",
+ fontnum, face_name,
xw->misc.face_size[fontnum]));
if (face_size <= 0.0) {
@@ -2030,7 +2032,7 @@
/*
* Are we handling a bitmap font?
*/
- if (!UsingRenderFont(xw))
+ else
#endif /* OPT_RENDERFONT */
{
if (is_double_width_font(font) && !(screen->fnt_prop)) {
Index: misc.c
--- xterm-262+/misc.c 2010-08-30 08:26:45.000000000 +0000
+++ xterm-262a/misc.c 2010-09-01 00:19:06.000000000 +0000
@@ -1,4 +1,4 @@
-/* $XTermId: misc.c,v 1.507 2010/08/30 08:26:45 tom Exp $ */
+/* $XTermId: misc.c,v 1.508 2010/09/01 00:19:06 tom Exp $ */
/*
* Copyright 1999-2009,2010 by Thomas E. Dickey
@@ -3450,11 +3450,11 @@
result = MdFlag(xw->flags, LINEFEED);
break;
}
- reply.a_param[count++] = params[0];
- reply.a_param[count++] = result;
+ reply.a_param[count++] = (ParmType) params[0];
+ reply.a_param[count++] = (ParmType) result;
}
reply.a_type = ANSI_CSI;
- reply.a_nparam = count;
+ reply.a_nparam = (ParmType) count;
reply.a_inters = '$';
reply.a_final = 'y';
unparseseq(xw, &reply);
@@ -3680,12 +3680,12 @@
break;
#endif /* OPT_READLINE */
}
- reply.a_param[count++] = params[0];
- reply.a_param[count++] = result;
+ reply.a_param[count++] = (ParmType) params[0];
+ reply.a_param[count++] = (ParmType) result;
}
reply.a_type = ANSI_CSI;
reply.a_pintro = '?';
- reply.a_nparam = count;
+ reply.a_nparam = (ParmType) count;
reply.a_inters = '$';
reply.a_final = 'y';
unparseseq(xw, &reply);
Index: ptyx.h
--- xterm-262+/ptyx.h 2010-08-19 09:30:01.000000000 +0000
+++ xterm-262a/ptyx.h 2010-09-01 00:16:50.000000000 +0000
@@ -1,4 +1,4 @@
-/* $XTermId: ptyx.h,v 1.671 2010/08/19 09:30:01 Ryan.Johnson Exp $ */
+/* $XTermId: ptyx.h,v 1.673 2010/09/01 00:16:50 tom Exp $ */
/*
* Copyright 1999-2009,2010 by Thomas E. Dickey
@@ -1581,7 +1581,7 @@
long event_mask;
unsigned send_mouse_pos; /* user wants mouse transition */
/* and position information */
- unsigned ext_mode_mouse; /* support large terminals */
+ Boolean ext_mode_mouse; /* support large terminals */
Boolean send_focus_pos; /* user wants focus in/out info */
Boolean quiet_grab; /* true if no cursor change on focus */
#if OPT_PASTE64
@@ -1695,7 +1695,9 @@
XTermFonts fnts[fMAX]; /* normal/bold/etc for terminal */
Boolean free_bold_box; /* same_font_size's austerity */
#ifndef NO_ACTIVE_ICON
- XTermFonts fnt_icon; /* icon font */
+ XTermFonts fnt_icon; /* icon font */
+ String icon_fontname; /* name of icon font */
+ int icon_fontnum; /* number to use for icon font */
#endif /* NO_ACTIVE_ICON */
int enbolden; /* overstrike for bold font */
XPoint *box; /* draw unselected cursor */
Index: version.h
--- xterm-262+/version.h 2010-07-16 00:42:31.000000000 +0000
+++ xterm-262a/version.h 2010-08-31 09:28:23.000000000 +0000
@@ -1,5 +1,5 @@
/*
- * $XTermId: version.h,v 1.320 2010/07/16 00:42:31 tom Exp $
+ * $XTermId: version.h,v 1.321 2010/08/31 09:28:23 tom Exp $
* ----------------------------------------------------------------------------
* this file is part of xterm
*
@@ -39,7 +39,7 @@
* version of X to which this version of xterm has been built. The number in
* parentheses is my patch number (Thomas E. Dickey).
*/
-#define XTERM_PATCH 262
+#define XTERM_PATCH 263
#ifndef __vendorversion__
#define __vendorversion__ "XTerm"
Index: xterm.log.html
--- xterm-262+/xterm.log.html 2010-08-30 00:19:46.000000000 +0000
+++ xterm-262a/xterm.log.html 2010-08-31 23:16:32.000000000 +0000
@@ -31,7 +31,7 @@
* sale, use or other dealings in this Software without prior written *
* authorization. *
*****************************************************************************
- $XTermId: xterm.log.html,v 1.965 2010/08/30 00:19:46 tom Exp $
+ $XTermId: xterm.log.html,v 1.966 2010/08/31 23:16:32 tom Exp $
-->
<HTML>
<HEAD>
@@ -56,6 +56,7 @@
is the latest version of this file.
<UL>
+<LI><A HREF="#xterm_dev">Development</A>
<LI><A HREF="#xterm_262">Patch #262 - 2010/8/30</A>
<LI><A HREF="#xterm_261">Patch #261 - 2010/6/28</A>
<LI><A HREF="#xterm_260">Patch #260 - 2010/6/20</A>
@@ -321,6 +322,23 @@
<LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
</UL>
+<H1><A NAME="xterm_dev">Development</A></H1>
+<ul>
+ <li>further extend initialization for active-icon font to check if
+ the font was not loaded succesfully,
+ to retry with <code>font1</code>,
+ or as even (if TrueType fonts are used) to use a TrueType font.
+ The retries are to help with cases as in
+ <a href="#xterm_241">patch #241</a> where the bitmap fonts are
+ not available.
+
+ <li>fix special case of active-icon used when TrueType font is
+ specified for the xterm window,
+ from <a href="#xterm_261">patch #261</a> change.
+ In that case, the default font's size was used for layout of the
+ active icon's window (Debian #591265).
+</ul>
+
<H1><A NAME="xterm_262">Patch #262 - 2010/8/30</A></H1>
<ul>
<li>fix a case where changing the cursor color via escape sequences
Attachment:
signature.asc
Description: Digital signature