while (1)
{
- x_catch_errors (FRAME_X_DISPLAY (f));
+ int count = x_catch_errors (FRAME_X_DISPLAY (f));
XQueryTree (FRAME_X_DISPLAY (f), outer, &tmp_root_window,
&f->output_data.x->parent_desc,
Detect that and try the whole thing over. */
if (! x_had_errors_p (FRAME_X_DISPLAY (f)))
{
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
break;
}
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
}
*xptr = f->output_data.x->left_pos - win_x;
Lisp_Object arg, oldval;
{
Cursor cursor, nontext_cursor, mode_cursor, cross_cursor;
+ int count;
int mask_color;
if (!EQ (Qnil, arg))
BLOCK_INPUT;
/* It's not okay to crash if the user selects a screwy cursor. */
- x_catch_errors (FRAME_X_DISPLAY (f));
+ count = x_catch_errors (FRAME_X_DISPLAY (f));
if (!EQ (Qnil, Vx_pointer_shape))
{
/* Check and report errors with the above calls. */
x_check_errors (FRAME_X_DISPLAY (f), "can't set cursor shape: %s");
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
{
XColor fore_color, back_color;
else
nlines = 0;
+ /* Make sure we redisplay all windows in this frame. */
+ windows_or_buffers_changed++;
+
#ifdef USE_X_TOOLKIT
FRAME_MENU_BAR_LINES (f) = 0;
if (nlines)
{
int wid = FONT_WIDTH (f->output_data.x->font);
- if (XFASTINT (arg) < 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM)
- Fsignal (Qargs_out_of_range, Fcons (arg, Qnil));
+ if (XFASTINT (arg) <= 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM)
+ XSETINT (arg, 2 * VERTICAL_SCROLL_BAR_WIDTH_TRIM + 1);
FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = XFASTINT (arg);
FRAME_SCROLL_BAR_COLS (f) = (XFASTINT (arg) + wid-1) / wid;
}
len = strlen (shell_position) + 1;
+ /* We don't free this because we don't know whether
+ it is safe to free it while the frame exists.
+ It isn't worth the trouble of arranging to free it
+ when the frame is deleted. */
tem = (char *) xmalloc (len);
strncpy (tem, shell_position, len);
XtSetArg (al[ac], XtNgeometry, tem); ac++;
{
Lisp_Object font;
- font = x_get_arg (parms, Qfont, "font", "Font", string);
- if (!STRINGP (font))
- font = x_get_arg (parms, Qfontset, "fontset", "Fontset", string);
+ /* Determine font by the following priority.
+ 1. `font' parameter in parms.
+ 2. `font' parameter in Vdefault_frame_alist.
+ 3. X resource "font" ("Font").
+ 4. Select a plausible font be heuristics at least for ASCII. */
+ tem = Fassq (Qfont, parms);
+ if (NILP (tem))
+ tem = Fassq (Qfont, Vdefault_frame_alist);
+ if (!NILP (tem))
+ font = Fcdr (tem);
+ if (! STRINGP (font))
+ font = x_get_arg (parms, Qfont, "font", "Font", string);
+
BLOCK_INPUT;
/* First, try whatever font the caller has specified. */
if (STRINGP (font))
{
- Lisp_Object fontset = Fquery_fontset (font);
- if (STRINGP (fontset))
- font = x_new_fontset (f, XSTRING (fontset)->data);
+ tem = Fquery_fontset (font);
+ if (STRINGP (tem))
+ font = x_new_fontset (f, XSTRING (tem)->data);
else
font = x_new_font (f, XSTRING (font)->data);
}
if (! STRINGP (font))
font = build_string ("fixed");
- x_default_parameter (f, parms, Qfont, font,
+ x_default_parameter (f, parms, Qfont, font,
"font", "Font", string);
}
FRAME_PTR f;
Lisp_Object key;
int maxnames;
+ int count;
check_x ();
CHECK_STRING (pattern, 0);
{
XFontStruct *thisinfo;
- x_catch_errors (FRAME_X_DISPLAY (f));
+ count = x_catch_errors (FRAME_X_DISPLAY (f));
thisinfo = XLoadQueryFont (FRAME_X_DISPLAY (f),
XSTRING (XCONS (tem)->car)->data);
x_check_errors (FRAME_X_DISPLAY (f), "XLoadQueryFont failure: %s");
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
if (thisinfo && same_size_fonts (thisinfo, size_ref))
newlist = Fcons (XCONS (tem)->car, newlist);
BLOCK_INPUT;
- x_catch_errors (FRAME_X_DISPLAY (f));
+ count = x_catch_errors (FRAME_X_DISPLAY (f));
/* Solaris 2.3 has a bug in XListFontsWithInfo. */
#ifndef BROKEN_XLISTFONTSWITHINFO
&num_fonts); /* count_return */
x_check_errors (FRAME_X_DISPLAY (f), "XListFonts failure: %s");
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
UNBLOCK_INPUT;
BLOCK_INPUT;
- x_catch_errors (FRAME_X_DISPLAY (f));
+ count = x_catch_errors (FRAME_X_DISPLAY (f));
thisinfo = XLoadQueryFont (FRAME_X_DISPLAY (f), names[i]);
x_check_errors (FRAME_X_DISPLAY (f),
"XLoadQueryFont failure: %s");
- x_uncatch_errors (FRAME_X_DISPLAY (f));
+ x_uncatch_errors (FRAME_X_DISPLAY (f), count);
UNBLOCK_INPUT;