X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/4939150cb43137980c49b318bc70119b9d8ff6f7..002b843312aa23a3804028314c313e14f0039993:/src/xfaces.c diff --git a/src/xfaces.c b/src/xfaces.c index b5eeca0921..43535b9ea0 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1,6 +1,6 @@ /* xfaces.c -- "Face" primitives. -Copyright (C) 1993-1994, 1998-2012 Free Software Foundation, Inc. +Copyright (C) 1993-1994, 1998-2013 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -204,7 +204,6 @@ along with GNU Emacs. If not, see . */ #include #include #include /* This needs to be before termchar.h */ -#include #include "lisp.h" #include "character.h" @@ -225,26 +224,25 @@ along with GNU Emacs. If not, see . */ #include "dosfns.h" #endif -#ifdef WINDOWSNT -#include "w32term.h" +#ifdef HAVE_WINDOW_SYSTEM +#include TERM_HEADER #include "fontset.h" -/* Redefine X specifics to W32 equivalents to avoid cluttering the - code with #ifdef blocks. */ +#ifdef HAVE_NTGUI #undef FRAME_X_DISPLAY_INFO #define FRAME_X_DISPLAY_INFO FRAME_W32_DISPLAY_INFO #define x_display_info w32_display_info #define check_x check_w32 #define GCGraphicsExposures 0 -#endif /* WINDOWSNT */ +#endif /* HAVE_NTGUI */ #ifdef HAVE_NS -#include "nsterm.h" #undef FRAME_X_DISPLAY_INFO #define FRAME_X_DISPLAY_INFO FRAME_NS_DISPLAY_INFO #define x_display_info ns_display_info #define check_x check_ns #define GCGraphicsExposures 0 #endif /* HAVE_NS */ +#endif /* HAVE_WINDOW_SYSTEM */ #include "buffer.h" #include "dispextern.h" @@ -254,9 +252,6 @@ along with GNU Emacs. If not, see . */ #include "termchar.h" #include "font.h" -#ifdef HAVE_WINDOW_SYSTEM -#include "fontset.h" -#endif /* HAVE_WINDOW_SYSTEM */ #ifdef HAVE_X_WINDOWS @@ -279,7 +274,7 @@ along with GNU Emacs. If not, see . */ #endif /* HAVE_X_WINDOWS */ -#include +#include /* Number of pt per inch (from the TeXbook). */ @@ -319,15 +314,10 @@ static Lisp_Object QCfontset; Lisp_Object Qnormal; Lisp_Object Qbold; static Lisp_Object Qline, Qwave; -static Lisp_Object Qultra_light, Qextra_light, Qlight; -static Lisp_Object Qsemi_light, Qsemi_bold, Qextra_bold, Qultra_bold; -static Lisp_Object Qoblique, Qreverse_oblique, Qreverse_italic; +Lisp_Object Qextra_light, Qlight; +Lisp_Object Qsemi_light, Qsemi_bold, Qextra_bold, Qultra_bold; +Lisp_Object Qoblique; Lisp_Object Qitalic; -static Lisp_Object Qultra_condensed, Qextra_condensed; -Lisp_Object Qcondensed; -static Lisp_Object Qsemi_condensed, Qsemi_expanded, Qextra_expanded; -Lisp_Object Qexpanded; -static Lisp_Object Qultra_expanded; static Lisp_Object Qreleased_button, Qpressed_button; static Lisp_Object QCstyle, QCcolor, QCline_width; Lisp_Object Qunspecified; /* used in dosfns.c */ @@ -375,8 +365,6 @@ Lisp_Object Vface_alternative_font_registry_alist; static Lisp_Object Qscalable_fonts_allowed; -#define DEFAULT_FONT_LIST_LIMIT 100 - /* The symbols `foreground-color' and `background-color' which can be used as part of a `face' property. This is for compatibility with Emacs 20.2. */ @@ -456,18 +444,7 @@ static int menu_face_changed_default; struct table_entry; struct named_merge_point; -static void map_tty_color (struct frame *, struct face *, - enum lface_attribute_index, int *); -static Lisp_Object resolve_face_name (Lisp_Object, int); static void set_font_frame_param (Lisp_Object, Lisp_Object); -static int get_lface_attributes (struct frame *, Lisp_Object, Lisp_Object *, - int, struct named_merge_point *); -static ptrdiff_t load_pixmap (struct frame *, Lisp_Object, - unsigned *, unsigned *); -static struct frame *frame_or_selected_frame (Lisp_Object, int); -static void load_face_colors (struct frame *, struct face *, Lisp_Object *); -static void free_face_colors (struct frame *, struct face *); -static int face_color_gray_p (struct frame *, const char *); static struct face *realize_face (struct face_cache *, Lisp_Object *, int); static struct face *realize_non_ascii_face (struct frame *, Lisp_Object, @@ -477,38 +454,11 @@ static struct face *realize_tty_face (struct face_cache *, Lisp_Object *); static int realize_basic_faces (struct frame *); static int realize_default_face (struct frame *); static void realize_named_face (struct frame *, Lisp_Object, int); -static int lface_fully_specified_p (Lisp_Object *); -static int lface_equal_p (Lisp_Object *, Lisp_Object *); -static unsigned hash_string_case_insensitive (Lisp_Object); -static unsigned lface_hash (Lisp_Object *); -static int lface_same_font_attributes_p (Lisp_Object *, Lisp_Object *); static struct face_cache *make_face_cache (struct frame *); static void clear_face_gcs (struct face_cache *); static void free_face_cache (struct face_cache *); -static int face_fontset (Lisp_Object *); -static void merge_face_vectors (struct frame *, Lisp_Object *, Lisp_Object*, - struct named_merge_point *); static int merge_face_ref (struct frame *, Lisp_Object, Lisp_Object *, int, struct named_merge_point *); -static int set_lface_from_font (struct frame *, Lisp_Object, Lisp_Object, - int); -static Lisp_Object lface_from_face_name (struct frame *, Lisp_Object, int); -static struct face *make_realized_face (Lisp_Object *); -static void cache_face (struct face_cache *, struct face *, unsigned); -static void uncache_face (struct face_cache *, struct face *); - -#ifdef HAVE_WINDOW_SYSTEM - -static GC x_create_gc (struct frame *, unsigned long, XGCValues *); -static void x_free_gc (struct frame *, GC); - -#ifdef USE_X_TOOLKIT -static void x_update_menu_appearance (struct frame *); - -extern void free_frame_menubar (struct frame *); -#endif /* USE_X_TOOLKIT */ - -#endif /* HAVE_WINDOW_SYSTEM */ /*********************************************************************** @@ -551,7 +501,7 @@ unregister_color (unsigned long pixel) if (color_count[pixel] > 0) --color_count[pixel]; else - abort (); + emacs_abort (); } @@ -643,13 +593,13 @@ x_free_dpy_colors (Display *dpy, Screen *screen, Colormap cmap, /* Create and return a GC for use on frame F. GC values and mask are given by XGCV and MASK. */ -static inline GC +static GC x_create_gc (struct frame *f, long unsigned int mask, XGCValues *xgcv) { GC gc; - BLOCK_INPUT; + block_input (); gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), mask, xgcv); - UNBLOCK_INPUT; + unblock_input (); IF_DEBUG (++ngcs); return gc; } @@ -657,26 +607,26 @@ x_create_gc (struct frame *f, long unsigned int mask, XGCValues *xgcv) /* Free GC which was used on frame F. */ -static inline void +static void x_free_gc (struct frame *f, GC gc) { - eassert (interrupt_input_blocked); + eassert (input_blocked_p ()); IF_DEBUG (eassert (--ngcs >= 0)); XFreeGC (FRAME_X_DISPLAY (f), gc); } #endif /* HAVE_X_WINDOWS */ -#ifdef WINDOWSNT +#ifdef HAVE_NTGUI /* W32 emulation of GCs */ -static inline GC +static GC x_create_gc (struct frame *f, unsigned long mask, XGCValues *xgcv) { GC gc; - BLOCK_INPUT; + block_input (); gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, xgcv); - UNBLOCK_INPUT; + unblock_input (); IF_DEBUG (++ngcs); return gc; } @@ -684,52 +634,35 @@ x_create_gc (struct frame *f, unsigned long mask, XGCValues *xgcv) /* Free GC which was used on frame F. */ -static inline void +static void x_free_gc (struct frame *f, GC gc) { IF_DEBUG (eassert (--ngcs >= 0)); xfree (gc); } -#endif /* WINDOWSNT */ +#endif /* HAVE_NTGUI */ #ifdef HAVE_NS /* NS emulation of GCs */ -static inline GC +static GC x_create_gc (struct frame *f, unsigned long mask, XGCValues *xgcv) { GC gc = xmalloc (sizeof *gc); - memcpy (gc, xgcv, sizeof (XGCValues)); + *gc = *xgcv; return gc; } -static inline void +static void x_free_gc (struct frame *f, GC gc) { xfree (gc); } #endif /* HAVE_NS */ -/* If FRAME is nil, return a pointer to the selected frame. - Otherwise, check that FRAME is a live frame, and return a pointer - to it. NPARAM is the parameter number of FRAME, for - CHECK_LIVE_FRAME. This is here because it's a frequent pattern in - Lisp function definitions. */ - -static inline struct frame * -frame_or_selected_frame (Lisp_Object frame, int nparam) -{ - if (NILP (frame)) - frame = selected_frame; - - CHECK_LIVE_FRAME (frame); - return XFRAME (frame); -} - - /*********************************************************************** Frames and faces ***********************************************************************/ @@ -761,14 +694,14 @@ init_frame_faces (struct frame *f) #ifdef HAVE_X_WINDOWS if (!FRAME_X_P (f) || FRAME_X_WINDOW (f)) #endif -#ifdef WINDOWSNT +#ifdef HAVE_NTGUI if (!FRAME_WINDOW_P (f) || FRAME_W32_WINDOW (f)) #endif #ifdef HAVE_NS if (!FRAME_NS_P (f) || FRAME_NS_WINDOW (f)) #endif if (!realize_basic_faces (f)) - abort (); + emacs_abort (); } @@ -812,7 +745,7 @@ recompute_basic_faces (struct frame *f) { clear_face_cache (0); if (!realize_basic_faces (f)) - abort (); + emacs_abort (); } } @@ -949,7 +882,7 @@ load_pixmap (FRAME_PTR f, Lisp_Object name, unsigned int *w_ptr, CHECK_TYPE (!NILP (Fbitmap_spec_p (name)), Qbitmap_spec_p, name); - BLOCK_INPUT; + block_input (); if (CONSP (name)) { /* Decode a bitmap spec into a bitmap. */ @@ -969,7 +902,7 @@ load_pixmap (FRAME_PTR f, Lisp_Object name, unsigned int *w_ptr, /* It must be a string -- a file name. */ bitmap_id = x_create_bitmap_from_file (f, name); } - UNBLOCK_INPUT; + unblock_input (); if (bitmap_id < 0) { @@ -1033,7 +966,7 @@ parse_rgb_list (Lisp_Object rgb_list, XColor *color) non-zero, then the `standard' definition of the same color is returned in it. */ -static int +static bool tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, XColor *std_color) { @@ -1094,11 +1027,11 @@ tty_lookup_color (struct frame *f, Lisp_Object color, XColor *tty_color, /* A version of defined_color for non-X frames. */ -static int +static bool tty_defined_color (struct frame *f, const char *color_name, - XColor *color_def, int alloc) + XColor *color_def, bool alloc) { - int status = 1; + bool status = 1; /* Defaults. */ color_def->pixel = FACE_TTY_DEFAULT_COLOR; @@ -1126,13 +1059,13 @@ tty_defined_color (struct frame *f, const char *color_name, /* Decide if color named COLOR_NAME is valid for the display associated with the frame F; if so, return the rgb values in - COLOR_DEF. If ALLOC is nonzero, allocate a new colormap cell. + COLOR_DEF. If ALLOC, allocate a new colormap cell. This does the right thing for any type of frame. */ -static int +static bool defined_color (struct frame *f, const char *color_name, XColor *color_def, - int alloc) + bool alloc) { if (!FRAME_WINDOW_P (f)) return tty_defined_color (f, color_name, color_def, alloc); @@ -1140,7 +1073,7 @@ defined_color (struct frame *f, const char *color_name, XColor *color_def, else if (FRAME_X_P (f)) return x_defined_color (f, color_name, color_def, alloc); #endif -#ifdef WINDOWSNT +#ifdef HAVE_NTGUI else if (FRAME_W32_P (f)) return w32_defined_color (f, color_name, color_def, alloc); #endif @@ -1149,7 +1082,7 @@ defined_color (struct frame *f, const char *color_name, XColor *color_def, return ns_defined_color (f, color_name, color_def, alloc, 1); #endif else - abort (); + emacs_abort (); } @@ -1248,15 +1181,9 @@ FRAME specifies the frame and thus the display for interpreting COLOR. If FRAME is nil or omitted, use the selected frame. */) (Lisp_Object color, Lisp_Object frame) { - struct frame *f; - CHECK_STRING (color); - if (NILP (frame)) - frame = selected_frame; - else - CHECK_FRAME (frame); - f = XFRAME (frame); - return face_color_gray_p (f, SSDATA (color)) ? Qt : Qnil; + return (face_color_gray_p (decode_any_frame (frame), SSDATA (color)) + ? Qt : Qnil); } @@ -1269,17 +1196,10 @@ If FRAME is nil or omitted, use the selected frame. COLOR must be a valid color name. */) (Lisp_Object color, Lisp_Object frame, Lisp_Object background_p) { - struct frame *f; - CHECK_STRING (color); - if (NILP (frame)) - frame = selected_frame; - else - CHECK_FRAME (frame); - f = XFRAME (frame); - if (face_color_supported_p (f, SSDATA (color), !NILP (background_p))) - return Qt; - return Qnil; + return (face_color_supported_p (decode_any_frame (frame), + SSDATA (color), !NILP (background_p)) + ? Qt : Qnil); } @@ -1345,7 +1265,7 @@ load_color (struct frame *f, struct face *face, Lisp_Object name, break; default: - abort (); + emacs_abort (); } } #ifdef GLYPH_DEBUG @@ -1365,7 +1285,8 @@ load_color (struct frame *f, struct face *face, Lisp_Object name, try to emulate gray colors with a stipple from Vface_default_stipple. */ static void -load_face_colors (struct frame *f, struct face *face, Lisp_Object *attrs) +load_face_colors (struct frame *f, struct face *face, + Lisp_Object attrs[LFACE_VECTOR_SIZE]) { Lisp_Object fg, bg; @@ -1406,9 +1327,9 @@ unload_color (struct frame *f, long unsigned int pixel) #ifdef HAVE_X_WINDOWS if (pixel != -1) { - BLOCK_INPUT; + block_input (); x_free_colors (f, &pixel, 1); - UNBLOCK_INPUT; + unblock_input (); } #endif } @@ -1424,7 +1345,7 @@ free_face_colors (struct frame *f, struct face *face) if (face->colors_copied_bitwise_p) return; - BLOCK_INPUT; + block_input (); if (!face->foreground_defaulted_p) { @@ -1466,7 +1387,7 @@ free_face_colors (struct frame *f, struct face *face) IF_DEBUG (--ncolors_allocated); } - UNBLOCK_INPUT; + unblock_input (); #endif /* HAVE_X_WINDOWS */ } @@ -1559,8 +1480,10 @@ static enum font_property_index font_props_for_sorting[FONT_SIZE_INDEX]; static int compare_fonts_by_sort_order (const void *v1, const void *v2) { - Lisp_Object font1 = *(Lisp_Object *) v1; - Lisp_Object font2 = *(Lisp_Object *) v2; + Lisp_Object const *p1 = v1; + Lisp_Object const *p2 = v2; + Lisp_Object font1 = *p1; + Lisp_Object font2 = *p2; int i; for (i = 0; i < FONT_SIZE_INDEX; i++) @@ -1655,7 +1578,7 @@ the face font sort order. */) vec = Fvconcat (ndrivers, drivers); nfonts = ASIZE (vec); - qsort (XVECTOR (vec)->contents, nfonts, sizeof (Lisp_Object), + qsort (XVECTOR (vec)->contents, nfonts, word_size, compare_fonts_by_sort_order); result = Qnil; @@ -1724,9 +1647,7 @@ the WIDTH times as wide as FACE on FRAME. */) /* We can't simply call check_x_frame because this function may be called before any frame is created. */ - if (NILP (frame)) - frame = selected_frame; - f = frame_or_selected_frame (frame, 2); + f = decode_live_frame (frame); if (! FRAME_WINDOW_P (f)) { /* Perhaps we have not yet created any frame. */ @@ -1734,6 +1655,8 @@ the WIDTH times as wide as FACE on FRAME. */) frame = Qnil; face = Qnil; } + else + XSETFRAME (frame, f); /* Determine the width standard for comparison with the fonts we find. */ @@ -1842,7 +1765,7 @@ the WIDTH times as wide as FACE on FRAME. */) /* Check consistency of Lisp face attribute vector ATTRS. */ static void -check_lface_attrs (Lisp_Object *attrs) +check_lface_attrs (Lisp_Object attrs[LFACE_VECTOR_SIZE]) { eassert (UNSPECIFIEDP (attrs[LFACE_FAMILY_INDEX]) || IGNORE_DEFFACE_P (attrs[LFACE_FAMILY_INDEX]) @@ -1960,7 +1883,7 @@ struct named_merge_point FACE_NAME and NAMED_MERGE_POINT_KIND, as the head of the linked list pointed to by NAMED_MERGE_POINTS, and return 1. */ -static inline int +static int push_named_merge_point (struct named_merge_point *new_named_merge_point, Lisp_Object face_name, enum named_merge_point_kind named_merge_point_kind, @@ -2044,14 +1967,14 @@ resolve_face_name (Lisp_Object face_name, int signal_p) face text properties; Ediff uses that). If SIGNAL_P is non-zero, signal an error if FACE_NAME is not a valid face name. If SIGNAL_P is zero, value is nil if FACE_NAME is not a valid face name. */ -static inline Lisp_Object +static Lisp_Object lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, int signal_p) { Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, FVAR (f, face_alist)); + lface = assq_no_quit (face_name, f->face_alist); else lface = assq_no_quit (face_name, Vface_new_frame_defaults); @@ -2073,7 +1996,7 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, non-zero, signal an error if FACE_NAME is not a valid face name. If SIGNAL_P is zero, value is nil if FACE_NAME is not a valid face name. */ -static inline Lisp_Object +static Lisp_Object lface_from_face_name (struct frame *f, Lisp_Object face_name, int signal_p) { face_name = resolve_face_name (face_name, signal_p); @@ -2087,9 +2010,10 @@ lface_from_face_name (struct frame *f, Lisp_Object face_name, int signal_p) is non-zero, signal an error if FACE_NAME does not name a face. Otherwise, value is zero if FACE_NAME is not a face. */ -static inline int +static int get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name, - Lisp_Object *attrs, int signal_p) + Lisp_Object attrs[LFACE_VECTOR_SIZE], + int signal_p) { Lisp_Object lface; @@ -2109,9 +2033,9 @@ get_lface_attributes_no_remap (struct frame *f, Lisp_Object face_name, non-zero, signal an error if FACE_NAME does not name a face. Otherwise, value is zero if FACE_NAME is not a face. */ -static inline int +static int get_lface_attributes (struct frame *f, Lisp_Object face_name, - Lisp_Object *attrs, int signal_p, + Lisp_Object attrs[LFACE_VECTOR_SIZE], int signal_p, struct named_merge_point *named_merge_points) { Lisp_Object face_remapping; @@ -2148,7 +2072,7 @@ get_lface_attributes (struct frame *f, Lisp_Object face_name, specified, i.e. are non-nil. */ static int -lface_fully_specified_p (Lisp_Object *attrs) +lface_fully_specified_p (Lisp_Object attrs[LFACE_VECTOR_SIZE]) { int i; @@ -2274,11 +2198,12 @@ merge_face_heights (Lisp_Object from, Lisp_Object to, Lisp_Object invalid) loops in face inheritance/remapping; it should be 0 when called from other places. */ -static inline void +static void merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, struct named_merge_point *named_merge_points) { int i; + Lisp_Object font = Qnil; /* If FROM inherits from some other faces, merge their attributes into TO before merging FROM's direct attributes. Note that an :inherit @@ -2289,24 +2214,13 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, && !NILP (from[LFACE_INHERIT_INDEX])) merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points); - i = LFACE_FONT_INDEX; - if (!UNSPECIFIEDP (from[i])) + if (FONT_SPEC_P (from[LFACE_FONT_INDEX])) { - if (!UNSPECIFIEDP (to[i])) - to[i] = merge_font_spec (from[i], to[i]); + if (!UNSPECIFIEDP (to[LFACE_FONT_INDEX])) + font = merge_font_spec (from[LFACE_FONT_INDEX], to[LFACE_FONT_INDEX]); else - to[i] = copy_font_spec (from[i]); - if (! NILP (AREF (to[i], FONT_FOUNDRY_INDEX))) - to[LFACE_FOUNDRY_INDEX] = SYMBOL_NAME (AREF (to[i], FONT_FOUNDRY_INDEX)); - if (! NILP (AREF (to[i], FONT_FAMILY_INDEX))) - to[LFACE_FAMILY_INDEX] = SYMBOL_NAME (AREF (to[i], FONT_FAMILY_INDEX)); - if (! NILP (AREF (to[i], FONT_WEIGHT_INDEX))) - to[LFACE_WEIGHT_INDEX] = FONT_WEIGHT_FOR_FACE (to[i]); - if (! NILP (AREF (to[i], FONT_SLANT_INDEX))) - to[LFACE_SLANT_INDEX] = FONT_SLANT_FOR_FACE (to[i]); - if (! NILP (AREF (to[i], FONT_WIDTH_INDEX))) - to[LFACE_SWIDTH_INDEX] = FONT_WIDTH_FOR_FACE (to[i]); - ASET (to[i], FONT_SIZE_INDEX, Qnil); + font = copy_font_spec (from[LFACE_FONT_INDEX]); + to[LFACE_FONT_INDEX] = font; } for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2317,8 +2231,7 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, to[i] = merge_face_heights (from[i], to[i], to[i]); font_clear_prop (to, FONT_SIZE_INDEX); } - else if (i != LFACE_FONT_INDEX - && ! EQ (to[i], from[i])) + else if (i != LFACE_FONT_INDEX && ! EQ (to[i], from[i])) { to[i] = from[i]; if (i >= LFACE_FAMILY_INDEX && i <=LFACE_SLANT_INDEX) @@ -2332,6 +2245,25 @@ merge_face_vectors (struct frame *f, Lisp_Object *from, Lisp_Object *to, } } + /* If FROM specifies a font spec, make its contents take precedence + over :family and other attributes. This is needed for face + remapping using :font to work. */ + + if (!NILP (font)) + { + if (! NILP (AREF (font, FONT_FOUNDRY_INDEX))) + to[LFACE_FOUNDRY_INDEX] = SYMBOL_NAME (AREF (font, FONT_FOUNDRY_INDEX)); + if (! NILP (AREF (font, FONT_FAMILY_INDEX))) + to[LFACE_FAMILY_INDEX] = SYMBOL_NAME (AREF (font, FONT_FAMILY_INDEX)); + if (! NILP (AREF (font, FONT_WEIGHT_INDEX))) + to[LFACE_WEIGHT_INDEX] = FONT_WEIGHT_FOR_FACE (font); + if (! NILP (AREF (font, FONT_SLANT_INDEX))) + to[LFACE_SLANT_INDEX] = FONT_SLANT_FOR_FACE (font); + if (! NILP (AREF (font, FONT_WIDTH_INDEX))) + to[LFACE_SWIDTH_INDEX] = FONT_WIDTH_FOR_FACE (font); + ASET (font, FONT_SIZE_INDEX, Qnil); + } + /* TO is always an absolute face, which should inherit from nothing. We blindly copy the :inherit attribute above and fix it up here. */ to[LFACE_INHERIT_INDEX] = Qnil; @@ -2555,13 +2487,13 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, } else if (EQ (keyword, QCstipple)) { -#if defined (HAVE_X_WINDOWS) || defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) Lisp_Object pixmap_p = Fbitmap_spec_p (value); if (!NILP (pixmap_p)) to[LFACE_STIPPLE_INDEX] = value; else err = 1; -#endif +#endif /* HAVE_WINDOW_SYSTEM */ } else if (EQ (keyword, QCwidth)) { @@ -2573,6 +2505,13 @@ merge_face_ref (struct frame *f, Lisp_Object face_ref, Lisp_Object *to, else err = 1; } + else if (EQ (keyword, QCfont)) + { + if (FONTP (value)) + to[LFACE_FONT_INDEX] = value; + else + err = 1; + } else if (EQ (keyword, QCinherit)) { /* This is not really very useful; it's just like a @@ -2678,8 +2617,7 @@ Value is a vector of face attributes. */) lface = Fmake_vector (make_number (LFACE_VECTOR_SIZE), Qunspecified); ASET (lface, 0, Qface); - FVAR (f, face_alist) = Fcons (Fcons (face, lface), FVAR (f, - face_alist)); + fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2765,8 +2703,7 @@ The value is TO. */) copy = Finternal_make_lisp_face (to, new_frame); } - memcpy (XVECTOR (copy)->contents, XVECTOR (lface)->contents, - LFACE_VECTOR_SIZE * sizeof (Lisp_Object)); + vcopy (copy, 0, XVECTOR (lface)->contents, LFACE_VECTOR_SIZE); /* Changing a named face means that all realized faces depending on that face are invalid. Since we cannot tell which realized faces @@ -2933,6 +2870,12 @@ FRAME 0 means change the face on all frames, and change the default Lisp_Object key, val, list; list = value; + /* FIXME? This errs on the side of acceptance. Eg it accepts: + (defface foo '((t :underline 'foo) "doc") + Maybe this is intentional, maybe it isn't. + Non-nil symbols other than t are not documented as being valid. + Eg compare with inverse-video, which explicitly rejects them. + */ valid_p = 1; while (!NILP (CAR_SAFE(list))) @@ -3110,14 +3053,14 @@ FRAME 0 means change the face on all frames, and change the default } else if (EQ (attr, QCstipple)) { -#if defined (HAVE_X_WINDOWS) || defined (HAVE_NS) +#if defined (HAVE_WINDOW_SYSTEM) if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value) && !NILP (value) && NILP (Fbitmap_spec_p (value))) signal_error ("Invalid stipple attribute", value); old_value = LFACE_STIPPLE (lface); ASET (lface, LFACE_STIPPLE_INDEX, value); -#endif /* HAVE_X_WINDOWS || HAVE_NS */ +#endif /* HAVE_WINDOW_SYSTEM */ } else if (EQ (attr, QCwidth)) { @@ -3272,7 +3215,7 @@ FRAME 0 means change the face on all frames, and change the default param = Qbackground_color; } #ifdef HAVE_WINDOW_SYSTEM -#ifndef WINDOWSNT +#ifndef HAVE_NTGUI else if (EQ (face, Qscroll_bar)) { /* Changing the colors of `scroll-bar' sets frame parameters @@ -3282,7 +3225,7 @@ FRAME 0 means change the face on all frames, and change the default else if (EQ (attr, QCbackground)) param = Qscroll_bar_background; } -#endif /* not WINDOWSNT */ +#endif /* not HAVE_NTGUI */ else if (EQ (face, Qborder)) { /* Changing background color of `border' sets frame parameter @@ -3358,7 +3301,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (FVAR (f, face_alist))) + if (NILP (f->face_alist)) return; if (EQ (param, Qforeground_color)) @@ -3465,10 +3408,10 @@ DEFUN ("internal-face-x-get-resource", Finternal_face_x_get_resource, CHECK_STRING (resource); CHECK_STRING (class); CHECK_LIVE_FRAME (frame); - BLOCK_INPUT; + block_input (); value = display_x_get_resource (FRAME_X_DISPLAY_INFO (XFRAME (frame)), resource, class, Qnil, Qnil); - UNBLOCK_INPUT; + unblock_input (); return value; } @@ -3706,21 +3649,12 @@ frame. If FRAME is t, report on the defaults for face SYMBOL (for new frames). If FRAME is omitted or nil, use the selected frame. */) (Lisp_Object symbol, Lisp_Object keyword, Lisp_Object frame) { - Lisp_Object lface, value = Qnil; + struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); + Lisp_Object lface = lface_from_face_name (f, symbol, 1), value = Qnil; CHECK_SYMBOL (symbol); CHECK_SYMBOL (keyword); - if (EQ (frame, Qt)) - lface = lface_from_face_name (NULL, symbol, 1); - else - { - if (NILP (frame)) - frame = selected_frame; - CHECK_LIVE_FRAME (frame); - lface = lface_from_face_name (XFRAME (frame), symbol, 1); - } - if (EQ (keyword, QCfamily)) value = LFACE_FAMILY (lface); else if (EQ (keyword, QCfoundry)) @@ -3815,9 +3749,9 @@ Default face attributes override any local face attributes. */) gvec = XVECTOR (global_lface)->contents; for (i = 1; i < LFACE_VECTOR_SIZE; ++i) if (IGNORE_DEFFACE_P (gvec[i])) - lvec[i] = Qunspecified; + ASET (local_lface, i, Qunspecified); else if (! UNSPECIFIEDP (gvec[i])) - lvec[i] = gvec[i]; + ASET (local_lface, i, AREF (global_lface, i)); /* If the default face was changed, update the face cache and the `font' frame parameter. */ @@ -3834,7 +3768,7 @@ Default face attributes override any local face attributes. */) the previously-cached vector. */ memcpy (attrs, oldface->lface, sizeof attrs); merge_face_vectors (f, lvec, attrs, 0); - memcpy (lvec, attrs, sizeof attrs); + vcopy (local_lface, 0, attrs, LFACE_VECTOR_SIZE); newface = realize_face (c, lvec, DEFAULT_FACE_ID); if ((! UNSPECIFIEDP (gvec[LFACE_FAMILY_INDEX]) @@ -3903,7 +3837,7 @@ return the font name used for CHARACTER. */) } else { - struct frame *f = frame_or_selected_frame (frame, 1); + struct frame *f = decode_live_frame (frame); int face_id = lookup_named_face (f, face, 1); struct face *fface = FACE_FROM_ID (f, face_id); @@ -3933,7 +3867,7 @@ return the font name used for CHARACTER. */) all attributes are `equal'. Tries to be fast because this function is called quite often. */ -static inline int +static int face_attr_equal_p (Lisp_Object v1, Lisp_Object v2) { /* Type can differ, e.g. when one attribute is unspecified, i.e. nil, @@ -3966,7 +3900,7 @@ face_attr_equal_p (Lisp_Object v1, Lisp_Object v2) all attributes are `equal'. Tries to be fast because this function is called quite often. */ -static inline int +static int lface_equal_p (Lisp_Object *v1, Lisp_Object *v2) { int i, equal_p = 1; @@ -3990,14 +3924,11 @@ If FRAME is omitted or nil, use the selected frame. */) struct frame *f; Lisp_Object lface1, lface2; - if (EQ (frame, Qt)) - f = NULL; - else - /* Don't use check_x_frame here because this function is called - before X frames exist. At that time, if FRAME is nil, - selected_frame will be used which is the frame dumped with - Emacs. That frame is not an X frame. */ - f = frame_or_selected_frame (frame, 2); + /* Don't use check_x_frame here because this function is called + before X frames exist. At that time, if FRAME is nil, + selected_frame will be used which is the frame dumped with + Emacs. That frame is not an X frame. */ + f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); lface1 = lface_from_face_name (f, face1, 1); lface2 = lface_from_face_name (f, face2, 1); @@ -4015,20 +3946,10 @@ If FRAME is t, report on the defaults for face FACE (for new frames). If FRAME is omitted or nil, use the selected frame. */) (Lisp_Object face, Lisp_Object frame) { - struct frame *f; - Lisp_Object lface; + struct frame *f = EQ (frame, Qt) ? NULL : decode_live_frame (frame); + Lisp_Object lface = lface_from_face_name (f, face, 1); int i; - if (NILP (frame)) - frame = selected_frame; - CHECK_LIVE_FRAME (frame); - f = XFRAME (frame); - - if (EQ (frame, Qt)) - lface = lface_from_face_name (NULL, face, 1); - else - lface = lface_from_face_name (f, face, 1); - for (i = 1; i < LFACE_VECTOR_SIZE; ++i) if (!UNSPECIFIEDP (AREF (lface, i))) break; @@ -4043,29 +3964,28 @@ DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, For internal use only. */) (Lisp_Object frame) { - struct frame *f = frame_or_selected_frame (frame, 0); - return FVAR (f, face_alist); + return decode_live_frame (frame)->face_alist; } /* Return a hash code for Lisp string STRING with case ignored. Used below in computing a hash value for a Lisp face. */ -static inline unsigned +static unsigned hash_string_case_insensitive (Lisp_Object string) { const unsigned char *s; unsigned hash = 0; eassert (STRINGP (string)); for (s = SDATA (string); *s; ++s) - hash = (hash << 1) ^ tolower (*s); + hash = (hash << 1) ^ c_tolower (*s); return hash; } /* Return a hash code for face attribute vector V. */ -static inline unsigned +static unsigned lface_hash (Lisp_Object *v) { return (hash_string_case_insensitive (v[LFACE_FAMILY_INDEX]) @@ -4084,7 +4004,7 @@ lface_hash (Lisp_Object *v) family, point size, weight, width, slant, and font. Both LFACE1 and LFACE2 must be fully-specified. */ -static inline int +static int lface_same_font_attributes_p (Lisp_Object *lface1, Lisp_Object *lface2) { eassert (lface_fully_specified_p (lface1) @@ -4141,12 +4061,12 @@ free_realized_face (struct frame *f, struct face *face) free_face_fontset (f, face); if (face->gc) { - BLOCK_INPUT; + block_input (); if (face->font) font_done_for_face (f, face); x_free_gc (f, face->gc); face->gc = 0; - UNBLOCK_INPUT; + unblock_input (); } free_face_colors (f, face); @@ -4180,7 +4100,7 @@ prepare_face_for_display (struct frame *f, struct face *face) xgcv.graphics_exposures = False; #endif - BLOCK_INPUT; + block_input (); #ifdef HAVE_X_WINDOWS if (face->stipple) { @@ -4192,7 +4112,7 @@ prepare_face_for_display (struct frame *f, struct face *face) face->gc = x_create_gc (f, mask, &xgcv); if (face->font) font_prepare_for_face (f, face); - UNBLOCK_INPUT; + unblock_input (); } #endif /* HAVE_WINDOW_SYSTEM */ } @@ -4232,14 +4152,9 @@ or lists of the form (RED GREEN BLUE). If FRAME is unspecified or nil, the current frame is used. */) (Lisp_Object color1, Lisp_Object color2, Lisp_Object frame) { - struct frame *f; + struct frame *f = decode_live_frame (frame); XColor cdef1, cdef2; - if (NILP (frame)) - frame = selected_frame; - CHECK_LIVE_FRAME (frame); - f = XFRAME (frame); - if (!(CONSP (color1) && parse_rgb_list (color1, &cdef1)) && !(STRINGP (color1) && defined_color (f, SSDATA (color1), &cdef1, 0))) signal_error ("Invalid color", color1); @@ -4290,12 +4205,12 @@ clear_face_gcs (struct face_cache *c) struct face *face = c->faces_by_id[i]; if (face && face->gc) { - BLOCK_INPUT; + block_input (); if (face->font) font_done_for_face (c->f, face); x_free_gc (c->f, face->gc); face->gc = 0; - UNBLOCK_INPUT; + unblock_input (); } } #endif /* HAVE_WINDOW_SYSTEM */ @@ -4319,7 +4234,7 @@ free_realized_faces (struct face_cache *c) /* We must block input here because we can't process X events safely while only some faces are freed, or when the frame's current matrix still references freed faces. */ - BLOCK_INPUT; + block_input (); for (i = 0; i < c->used; ++i) { @@ -4335,13 +4250,13 @@ free_realized_faces (struct face_cache *c) matrices as invalid because they will reference faces freed above. This function is also called when a frame is destroyed. In this case, the root window of F is nil. */ - if (WINDOWP (FVAR (f, root_window))) + if (WINDOWP (f->root_window)) { clear_current_matrices (f); ++windows_or_buffers_changed; } - UNBLOCK_INPUT; + unblock_input (); } } @@ -4480,7 +4395,7 @@ uncache_face (struct face_cache *c, struct face *face) Value is the ID of the face found. If no suitable face is found, realize a new one. */ -static inline int +static int lookup_face (struct frame *f, Lisp_Object *attr) { struct face_cache *cache = FRAME_FACE_CACHE (f); @@ -4574,7 +4489,7 @@ lookup_named_face (struct frame *f, Lisp_Object symbol, int signal_p) return -1; default_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); if (default_face == NULL) - abort (); /* realize_basic_faces must have set it up */ + emacs_abort (); /* realize_basic_faces must have set it up */ } if (! get_lface_attributes (f, symbol, symbol_attrs, signal_p, 0)) @@ -4617,7 +4532,7 @@ lookup_basic_face (struct frame *f, int face_id) case MENU_FACE_ID: name = Qmenu; break; default: - abort (); /* the caller is supposed to pass us a basic face id */ + emacs_abort (); /* the caller is supposed to pass us a basic face id */ } /* Do a quick scan through Vface_remapping_alist, and return immediately @@ -4738,7 +4653,7 @@ lookup_derived_face (struct frame *f, Lisp_Object symbol, int face_id, struct face *default_face = FACE_FROM_ID (f, face_id); if (!default_face) - abort (); + emacs_abort (); if (!get_lface_attributes (f, symbol, symbol_attrs, signal_p, 0)) return -1; @@ -4787,7 +4702,8 @@ DEFUN ("face-attributes-as-vector", Fface_attributes_as_vector, \(2) `close in spirit' to what the attributes specify, if not exact. */ static int -x_supports_face_attributes_p (struct frame *f, Lisp_Object *attrs, +x_supports_face_attributes_p (struct frame *f, + Lisp_Object attrs[LFACE_VECTOR_SIZE], struct face *def_face) { Lisp_Object *def_attrs = def_face->lface; @@ -4889,7 +4805,8 @@ x_supports_face_attributes_p (struct frame *f, Lisp_Object *attrs, substitution of a `dim' face for italic. */ static int -tty_supports_face_attributes_p (struct frame *f, Lisp_Object *attrs, +tty_supports_face_attributes_p (struct frame *f, + Lisp_Object attrs[LFACE_VECTOR_SIZE], struct face *def_face) { int weight, slant; @@ -4960,6 +4877,8 @@ tty_supports_face_attributes_p (struct frame *f, Lisp_Object *attrs, { if (STRINGP (val)) return 0; /* ttys can't use colored underlines */ + else if (EQ (CAR_SAFE (val), QCstyle) && EQ (CAR_SAFE (CDR_SAFE (val)), Qwave)) + return 0; /* ttys can't use wave underlines */ else if (face_attr_equal_p (val, def_attrs[LFACE_UNDERLINE_INDEX])) return 0; /* same as default */ else @@ -5101,17 +5020,14 @@ face for italic. */) else { /* Find any frame on DISPLAY. */ - Lisp_Object fl_tail; + Lisp_Object tail; frame = Qnil; - for (fl_tail = Vframe_list; CONSP (fl_tail); fl_tail = XCDR (fl_tail)) - { - frame = XCAR (fl_tail); - if (!NILP (Fequal (Fcdr (Fassq (Qdisplay, - FVAR (XFRAME (frame), param_alist))), - display))) - break; - } + FOR_EACH_FRAME (tail, frame) + if (!NILP (Fequal (Fcdr (Fassq (Qdisplay, + XFRAME (frame)->param_alist)), + display))) + break; } CHECK_LIVE_FRAME (frame); @@ -5128,7 +5044,7 @@ face for italic. */) error ("Cannot realize default face"); def_face = FACE_FROM_ID (f, DEFAULT_FACE_ID); if (def_face == NULL) - abort (); /* realize_basic_faces must have set it up */ + emacs_abort (); /* realize_basic_faces must have set it up */ } /* Dispatch to the appropriate handler. */ @@ -5272,7 +5188,7 @@ be found. Value is ALIST. */) attribute of ATTRS doesn't name a fontset. */ static int -face_fontset (Lisp_Object *attrs) +face_fontset (Lisp_Object attrs[LFACE_VECTOR_SIZE]) { Lisp_Object name; @@ -5302,7 +5218,7 @@ realize_basic_faces (struct frame *f) /* Block input here so that we won't be surprised by an X expose event, for instance, without having the faces set up. */ - BLOCK_INPUT; + block_input (); specbind (Qscalable_fonts_allowed, Qt); if (realize_default_face (f)) @@ -5333,7 +5249,7 @@ realize_basic_faces (struct frame *f) } unbind_to (count, Qnil); - UNBLOCK_INPUT; + unblock_input (); return success_p; } @@ -5404,7 +5320,7 @@ realize_default_face (struct frame *f) { /* This function is called so early that colors are not yet set in the frame parameter list. */ - Lisp_Object color = Fassq (Qforeground_color, FVAR (f, param_alist)); + Lisp_Object color = Fassq (Qforeground_color, f->param_alist); if (CONSP (color) && STRINGP (XCDR (color))) ASET (lface, LFACE_FOREGROUND_INDEX, XCDR (color)); @@ -5413,14 +5329,14 @@ realize_default_face (struct frame *f) else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) ASET (lface, LFACE_FOREGROUND_INDEX, build_string (unspecified_fg)); else - abort (); + emacs_abort (); } if (UNSPECIFIEDP (LFACE_BACKGROUND (lface))) { /* This function is called so early that colors are not yet set in the frame parameter list. */ - Lisp_Object color = Fassq (Qbackground_color, FVAR (f, param_alist)); + Lisp_Object color = Fassq (Qbackground_color, f->param_alist); if (CONSP (color) && STRINGP (XCDR (color))) ASET (lface, LFACE_BACKGROUND_INDEX, XCDR (color)); else if (FRAME_WINDOW_P (f)) @@ -5428,7 +5344,7 @@ realize_default_face (struct frame *f) else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)) ASET (lface, LFACE_BACKGROUND_INDEX, build_string (unspecified_bg)); else - abort (); + emacs_abort (); } if (UNSPECIFIEDP (LFACE_STIPPLE (lface))) @@ -5501,7 +5417,8 @@ realize_named_face (struct frame *f, Lisp_Object symbol, int id) face. Value is a pointer to the newly created realized face. */ static struct face * -realize_face (struct face_cache *cache, Lisp_Object *attrs, int former_face_id) +realize_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE], + int former_face_id) { struct face *face; @@ -5528,7 +5445,7 @@ realize_face (struct face_cache *cache, Lisp_Object *attrs, int former_face_id) face = make_realized_face (attrs); } else - abort (); + emacs_abort (); /* Insert the new face. */ cache_face (cache, face, lface_hash (attrs)); @@ -5578,7 +5495,7 @@ realize_non_ascii_face (struct frame *f, Lisp_Object font_object, created realized face. */ static struct face * -realize_x_face (struct face_cache *cache, Lisp_Object *attrs) +realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) { struct face *face = NULL; #ifdef HAVE_WINDOW_SYSTEM @@ -5623,7 +5540,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object *attrs) if (default_face) fontset = default_face->fontset; if (fontset == -1) - abort (); + emacs_abort (); } if (! FONT_OBJECT_P (attrs[LFACE_FONT_INDEX])) attrs[LFACE_FONT_INDEX] @@ -5751,6 +5668,8 @@ realize_x_face (struct face_cache *cache, Lisp_Object *attrs) face->underline_defaulted_p = 1; face->underline_type = FACE_UNDER_LINE; + /* FIXME? This is also not robust about checking the precise form. + See comments in Finternal_set_lisp_face_attribute. */ while (CONSP (underline)) { Lisp_Object keyword, value; @@ -5905,7 +5824,8 @@ map_tty_color (struct frame *f, struct face *face, Value is a pointer to the newly created realized face. */ static struct face * -realize_tty_face (struct face_cache *cache, Lisp_Object *attrs) +realize_tty_face (struct face_cache *cache, + Lisp_Object attrs[LFACE_VECTOR_SIZE]) { struct face *face; int weight, slant; @@ -6031,12 +5951,11 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, ptrdiff_t *endptr, ptrdiff_t limit, int mouse, int base_face_id) { - struct frame *f = XFRAME (WVAR (w, frame)); + struct frame *f = XFRAME (w->frame); Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object prop, position; ptrdiff_t i, noverlays; Lisp_Object *overlay_vec; - Lisp_Object frame; ptrdiff_t endpos; Lisp_Object propname = mouse ? Qmouse_face : Qface; Lisp_Object limit1, end; @@ -6046,7 +5965,6 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, to use the frame and buffer of W, but right now it doesn't. */ /* eassert (XBUFFER (w->buffer) == current_buffer); */ - XSETFRAME (frame, f); XSETFASTINT (position, pos); endpos = ZV; @@ -6055,9 +5973,9 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, /* Get the `face' or `mouse_face' text property at POS, and determine the next position at which the property changes. */ - prop = Fget_text_property (position, propname, WVAR (w, buffer)); + prop = Fget_text_property (position, propname, w->buffer); XSETFASTINT (limit1, (limit < endpos ? limit : endpos)); - end = Fnext_single_property_change (position, propname, WVAR (w, buffer), limit1); + end = Fnext_single_property_change (position, propname, w->buffer, limit1); if (INTEGERP (end)) endpos = XINT (end); @@ -6103,7 +6021,7 @@ face_at_buffer_position (struct window *w, ptrdiff_t pos, for (i = 0; i < noverlays; i++) { Lisp_Object oend; - int oendpos; + ptrdiff_t oendpos; prop = Foverlay_get (overlay_vec[i], propname); if (!NILP (prop)) @@ -6143,11 +6061,10 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, ptrdiff_t *endptr, ptrdiff_t limit, int mouse, Lisp_Object overlay) { - struct frame *f = XFRAME (WVAR (w, frame)); + struct frame *f = XFRAME (w->frame); Lisp_Object attrs[LFACE_VECTOR_SIZE]; Lisp_Object prop, position; - Lisp_Object frame; - int endpos; + ptrdiff_t endpos; Lisp_Object propname = mouse ? Qmouse_face : Qface; Lisp_Object limit1, end; struct face *default_face; @@ -6156,7 +6073,6 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, to use the frame and buffer of W, but right now it doesn't. */ /* eassert (XBUFFER (w->buffer) == current_buffer); */ - XSETFRAME (frame, f); XSETFASTINT (position, pos); endpos = ZV; @@ -6165,9 +6081,9 @@ face_for_overlay_string (struct window *w, ptrdiff_t pos, /* Get the `face' or `mouse_face' text property at POS, and determine the next position at which the property changes. */ - prop = Fget_text_property (position, propname, WVAR (w, buffer)); + prop = Fget_text_property (position, propname, w->buffer); XSETFASTINT (limit1, (limit < endpos ? limit : endpos)); - end = Fnext_single_property_change (position, propname, WVAR (w, buffer), limit1); + end = Fnext_single_property_change (position, propname, w->buffer, limit1); if (INTEGERP (end)) endpos = XINT (end); @@ -6383,7 +6299,7 @@ where R,G,B are numbers between 0 and 255 and name is an arbitrary string. */) int red, green, blue; int num; - BLOCK_INPUT; + block_input (); while (fgets (buf, sizeof (buf), fp) != NULL) { if (sscanf (buf, "%u %u %u %n", &red, &green, &blue, &num) == 3) @@ -6393,7 +6309,7 @@ where R,G,B are numbers between 0 and 255 and name is an arbitrary string. */) if (num >= 0 && name[num] == '\n') name[num] = 0; cmap = Fcons (Fcons (build_string (name), -#ifdef WINDOWSNT +#ifdef HAVE_NTGUI make_number (RGB (red, green, blue))), #else make_number ((red << 16) | (green << 8) | blue)), @@ -6403,7 +6319,7 @@ where R,G,B are numbers between 0 and 255 and name is an arbitrary string. */) } fclose (fp); - UNBLOCK_INPUT; + unblock_input (); } return cmap; @@ -6536,7 +6452,6 @@ syms_of_xfaces (void) DEFSYM (Qreleased_button, "released-button"); DEFSYM (Qpressed_button, "pressed-button"); DEFSYM (Qnormal, "normal"); - DEFSYM (Qultra_light, "ultra-light"); DEFSYM (Qextra_light, "extra-light"); DEFSYM (Qlight, "light"); DEFSYM (Qsemi_light, "semi-light"); @@ -6546,16 +6461,6 @@ syms_of_xfaces (void) DEFSYM (Qultra_bold, "ultra-bold"); DEFSYM (Qoblique, "oblique"); DEFSYM (Qitalic, "italic"); - DEFSYM (Qreverse_oblique, "reverse-oblique"); - DEFSYM (Qreverse_italic, "reverse-italic"); - DEFSYM (Qultra_condensed, "ultra-condensed"); - DEFSYM (Qextra_condensed, "extra-condensed"); - DEFSYM (Qcondensed, "condensed"); - DEFSYM (Qsemi_condensed, "semi-condensed"); - DEFSYM (Qsemi_expanded, "semi-expanded"); - DEFSYM (Qexpanded, "expanded"); - DEFSYM (Qextra_expanded, "extra-expanded"); - DEFSYM (Qultra_expanded, "ultra-expanded"); DEFSYM (Qbackground_color, "background-color"); DEFSYM (Qforeground_color, "foreground-color"); DEFSYM (Qunspecified, "unspecified"); @@ -6625,12 +6530,6 @@ syms_of_xfaces (void) defsubr (&Sdump_colors); #endif - DEFVAR_LISP ("font-list-limit", Vfont_list_limit, - doc: /* Limit for font matching. -If an integer > 0, font matching functions won't load more than -that number of fonts when searching for a matching font. */); - Vfont_list_limit = make_number (DEFAULT_FONT_LIST_LIMIT); - DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, doc: /* List of global face definitions (for internal use only.) */); Vface_new_frame_defaults = Qnil;