* 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:
parent
fea30ac1c8
commit
5742859f27
3 changed files with 12 additions and 183 deletions
|
@ -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).
|
||||
|
|
186
src/widget.c
186
src/widget.c
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue