* widget.c (DEFAULT_FACE_FONT, EmacsFrameSetValues, setup_frame_gcs)

(resources, setup_frame_cursor_bits): Remove unused variables and
functions, esp. wrt. font.

* widgetprv.h (EmacsFramePart): Remove font.

Fixes: debbugs:18227
This commit is contained in:
Jan Djärv 2014-08-09 11:06:25 +02:00
parent fea30ac1c8
commit 5742859f27
3 changed files with 12 additions and 183 deletions

View file

@ -1,3 +1,11 @@
2014-08-09 Jan Djärv <jan.h.d@swipnet.se>
* widgetprv.h (EmacsFramePart): Remove font.
* widget.c (DEFAULT_FACE_FONT, EmacsFrameSetValues, setup_frame_gcs)
(resources, setup_frame_cursor_bits): Remove unused variables and
functions, esp. wrt. font (Bug#18227).
2014-08-07 Paul Eggert <eggert@cs.ucla.edu>
* xterm.c (x_delete_terminal): Plug file descriptor leak (Bug#17691).

View file

@ -53,30 +53,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "character.h"
#include "font.h"
/* This sucks: this is the first default that x-faces.el tries. This won't
be used unless neither the "Emacs.EmacsFrame" resource nor the
"Emacs.EmacsFrame" resource is set; the frame
may have the wrong default size if this font doesn't exist, but some other
font that x-faces.el does. The workaround is to specify some font in the
resource database; I don't know a solution other than duplicating the font-
searching code from x-faces.el in this file.
This also means that if "Emacs.EmacsFrame" is specified as a non-
existent font, then Xt is going to substitute "XtDefaultFont" for it,
which is a different size than this one. The solution for this is to
make x-faces.el try to use XtDefaultFont. The problem with that is that
XtDefaultFont is almost certainly variable-width.
#### Perhaps we could have this code explicitly set XtDefaultFont to this?
*/
#define DEFAULT_FACE_FONT "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-*"
static void EmacsFrameInitialize (Widget request, Widget new, ArgList dum1, Cardinal *dum2);
static void EmacsFrameDestroy (Widget widget);
static void EmacsFrameRealize (Widget widget, XtValueMask *mask, XSetWindowAttributes *attrs);
static void EmacsFrameResize (Widget widget);
static Boolean EmacsFrameSetValues (Widget cur_widget, Widget req_widget, Widget new_widget, ArgList dum1, Cardinal *dum2);
static XtGeometryResult EmacsFrameQueryGeometry (Widget widget, XtWidgetGeometry *request, XtWidgetGeometry *result);
@ -102,8 +83,6 @@ static XtResource resources[] = {
offset (internal_border_width), XtRImmediate, (XtPointer)4},
{XtNinterline, XtCInterline, XtRInt, sizeof (int),
offset (interline), XtRImmediate, (XtPointer)0},
{XtNfont, XtCFont, XtRFontStruct, sizeof (struct font *),
offset (font),XtRString, DEFAULT_FACE_FONT},
{XtNforeground, XtCForeground, XtRPixel, sizeof (Pixel),
offset (foreground_pixel), XtRString, "XtDefaultForeground"},
{XtNcursorColor, XtCForeground, XtRPixel, sizeof (Pixel),
@ -157,7 +136,10 @@ static EmacsFrameClassRec emacsFrameClassRec = {
/* destroy */ EmacsFrameDestroy,
/* resize */ EmacsFrameResize,
/* expose */ XtInheritExpose,
/* set_values */ EmacsFrameSetValues,
/* Emacs never does XtSetvalues on this widget, so we have no code
for it. */
/* set_values */ 0, /* Not supported */
/* set_values_hook */ 0,
/* set_values_almost */ XtInheritSetValuesAlmost,
/* get_values_hook */ 0,
@ -502,91 +484,6 @@ widget_update_wm_size_hints (Widget widget)
update_wm_hints (ew);
}
static char setup_frame_cursor_bits[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static void
setup_frame_gcs (EmacsFrame ew)
{
XGCValues gc_values;
struct frame* s = ew->emacs_frame.frame;
Pixmap blank_stipple, blank_tile;
unsigned long valuemask = (GCForeground | GCBackground | GCGraphicsExposures
| GCStipple | GCTile);
Lisp_Object font;
XSETFONT (font, ew->emacs_frame.font);
font = Ffont_xlfd_name (font, Qnil);
if (STRINGP (font))
{
XFontStruct *xfont = XLoadQueryFont (FRAME_DISPLAY_INFO (s)->display,
SSDATA (font));
if (xfont)
{
gc_values.font = xfont->fid;
valuemask |= GCFont;
}
}
/* We have to initialize all of our GCs to have a stipple/tile, otherwise
XGetGCValues returns uninitialized data when we query the stipple
(instead of None or something sensible) and it makes things hard.
This should be fixed for real by not querying the GCs but instead having
some GC-based cache instead of the current face-based cache which doesn't
effectively cache all of the GC settings we need to use.
*/
blank_stipple
= XCreateBitmapFromData (XtDisplay (ew),
RootWindowOfScreen (XtScreen (ew)),
setup_frame_cursor_bits, 2, 2);
/* use fg = 0, bg = 1 below, but it's irrelevant since this pixmap should
never actually get used as a background tile!
*/
blank_tile
= XCreatePixmapFromBitmapData (XtDisplay (ew),
RootWindowOfScreen (XtScreen (ew)),
setup_frame_cursor_bits, 2, 2,
0, 1, ew->core.depth);
/* Normal video */
gc_values.foreground = ew->emacs_frame.foreground_pixel;
gc_values.background = ew->core.background_pixel;
gc_values.graphics_exposures = False;
gc_values.stipple = blank_stipple;
gc_values.tile = blank_tile;
XChangeGC (XtDisplay (ew), s->output_data.x->normal_gc,
valuemask, &gc_values);
/* Reverse video style. */
gc_values.foreground = ew->core.background_pixel;
gc_values.background = ew->emacs_frame.foreground_pixel;
gc_values.graphics_exposures = False;
gc_values.stipple = blank_stipple;
gc_values.tile = blank_tile;
XChangeGC (XtDisplay (ew), s->output_data.x->reverse_gc,
valuemask, &gc_values);
/* Cursor has to have an empty stipple. */
gc_values.foreground = ew->core.background_pixel;
gc_values.background = ew->emacs_frame.cursor_color;
gc_values.graphics_exposures = False;
gc_values.tile = blank_tile;
gc_values.stipple
= XCreateBitmapFromData (XtDisplay (ew),
RootWindowOfScreen (XtScreen (ew)),
setup_frame_cursor_bits, 16, 16);
XChangeGC (XtDisplay (ew), s->output_data.x->cursor_gc,
valuemask, &gc_values);
}
static void
update_various_frame_slots (EmacsFrame ew)
{
@ -614,7 +511,6 @@ update_from_various_frame_slots (EmacsFrame ew)
ew->core.width = FRAME_PIXEL_WIDTH (f);
ew->core.background_pixel = FRAME_BACKGROUND_PIXEL (f);
ew->emacs_frame.internal_border_width = f->internal_border_width;
ew->emacs_frame.font = x->font;
ew->emacs_frame.foreground_pixel = FRAME_FOREGROUND_PIXEL (f);
ew->emacs_frame.cursor_color = x->cursor_pixel;
ew->core.border_pixel = x->border_pixel;
@ -721,80 +617,6 @@ EmacsFrameResize (Widget widget)
}
}
static Boolean
EmacsFrameSetValues (Widget cur_widget, Widget req_widget, Widget new_widget, ArgList dum1, Cardinal *dum2)
{
EmacsFrame cur = (EmacsFrame)cur_widget;
EmacsFrame new = (EmacsFrame)new_widget;
Boolean needs_a_refresh = False;
Boolean has_to_recompute_size;
Boolean has_to_recompute_gcs;
Boolean has_to_update_hints;
int char_width, char_height;
Dimension pixel_width;
Dimension pixel_height;
/* AFAIK, this function is never called. -- Jan D, Oct 2009. */
has_to_recompute_gcs = (cur->emacs_frame.font != new->emacs_frame.font
|| (cur->emacs_frame.foreground_pixel
!= new->emacs_frame.foreground_pixel)
|| (cur->core.background_pixel
!= new->core.background_pixel)
);
has_to_recompute_size = (cur->emacs_frame.font != new->emacs_frame.font
&& cur->core.width == new->core.width
&& cur->core.height == new->core.height);
has_to_update_hints = (cur->emacs_frame.font != new->emacs_frame.font);
if (has_to_recompute_gcs)
{
setup_frame_gcs (new);
needs_a_refresh = True;
}
if (has_to_recompute_size)
{
/* Don't do this pixelwise, hopefully. */
pixel_width = new->core.width;
pixel_height = new->core.height;
pixel_to_char_size (new, pixel_width, pixel_height, &char_width,
&char_height);
char_to_pixel_size (new, char_width, char_height, &pixel_width,
&pixel_height);
new->core.width = pixel_width;
new->core.height = pixel_height;
change_frame_size (new->emacs_frame.frame, char_width, char_height,
1, 0, 0, 0);
needs_a_refresh = True;
}
if (has_to_update_hints)
update_wm_hints (new);
update_various_frame_slots (new);
/* #### This doesn't work, I haven't been able to find ANY kludge that
will let (x-create-frame '((iconic . t))) work. It seems that changes
to wm_shell's iconic slot have no effect after it has been realized,
and calling XIconifyWindow doesn't work either (even though the window
has been created.) Perhaps there is some property we could smash
directly, but I'm sick of this for now.
*/
if (cur->emacs_frame.iconic != new->emacs_frame.iconic)
{
Widget wmshell = get_wm_shell ((Widget) cur);
XtVaSetValues (wmshell, XtNiconic,
(XtArgVal) new->emacs_frame.iconic, NULL);
}
return needs_a_refresh;
}
static XtGeometryResult
EmacsFrameQueryGeometry (Widget widget, XtWidgetGeometry *request, XtWidgetGeometry *result)
{

View file

@ -43,7 +43,6 @@ typedef struct {
int internal_border_width; /* internal borders */
int interline; /* skips between lines */
struct font* font; /* font */
Pixel foreground_pixel; /* foreground */
Pixel cursor_color; /* text cursor color */