[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/xterm.c
From: |
Chong Yidong |
Subject: |
[Emacs-diffs] Changes to emacs/src/xterm.c |
Date: |
Sat, 25 Feb 2006 23:20:13 +0000 |
Index: emacs/src/xterm.c
diff -u emacs/src/xterm.c:1.898 emacs/src/xterm.c:1.899
--- emacs/src/xterm.c:1.898 Mon Feb 20 01:18:43 2006
+++ emacs/src/xterm.c Sat Feb 25 23:20:10 2006
@@ -324,8 +324,8 @@
void x_delete_display P_ ((struct x_display_info *));
static int x_io_error_quitter P_ ((Display *));
-int x_catch_errors P_ ((Display *));
-void x_uncatch_errors P_ ((Display *, int));
+void x_catch_errors P_ ((Display *));
+void x_uncatch_errors P_ ((Display *));
void x_lower_frame P_ ((struct frame *));
void x_scroll_bar_clear P_ ((struct frame *));
int x_had_errors_p P_ ((Display *));
@@ -3719,7 +3719,6 @@
Window win, child;
int win_x, win_y;
int parent_x = 0, parent_y = 0;
- int count;
win = root;
@@ -3727,7 +3726,7 @@
structure is changing at the same time this function
is running. So at least we must not crash from them. */
- count = x_catch_errors (FRAME_X_DISPLAY (*fp));
+ x_catch_errors (FRAME_X_DISPLAY (*fp));
if (FRAME_X_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame
&& FRAME_LIVE_P (last_mouse_frame))
@@ -3796,7 +3795,7 @@
if (x_had_errors_p (FRAME_X_DISPLAY (*fp)))
f1 = 0;
- x_uncatch_errors (FRAME_X_DISPLAY (*fp), count);
+ x_uncatch_errors (FRAME_X_DISPLAY (*fp));
/* If not, is it one of our scroll bars? */
if (! f1)
@@ -5713,7 +5712,7 @@
Display *d = event.xclient.display;
/* Catch and ignore errors, in case window has been
iconified by a window manager such as GWM. */
- int count = x_catch_errors (d);
+ x_catch_errors (d);
XSetInputFocus (d, event.xclient.window,
/* The ICCCM says this is
the only valid choice. */
@@ -5722,7 +5721,7 @@
/* This is needed to detect the error
if there is an error. */
XSync (d, False);
- x_uncatch_errors (d, count);
+ x_uncatch_errors (d);
}
/* Not certain about handling scroll bars here */
#endif /* 0 */
@@ -7469,7 +7468,11 @@
#define X_ERROR_MESSAGE_SIZE 200
/* If non-nil, this should be a string.
- It means catch X errors and store the error message in this string. */
+ It means catch X errors and store the error message in this string.
+
+ The reason we use a stack is that x_catch_error/x_uncatch_error can
+ be called from a signal handler.
+*/
struct x_error_message_stack {
char string[X_ERROR_MESSAGE_SIZE];
@@ -7506,20 +7509,12 @@
Calling x_uncatch_errors resumes the normal error handling. */
void x_check_errors ();
-static Lisp_Object x_catch_errors_unwind ();
-int
+void
x_catch_errors (dpy)
Display *dpy;
{
- int count = SPECPDL_INDEX ();
struct x_error_message_stack *data = xmalloc (sizeof (*data));
- Lisp_Object dummy;
-#ifdef ENABLE_CHECKING
- dummy = make_number ((EMACS_INT)dpy + (EMACS_INT)x_error_message);
-#else
- dummy = Qnil;
-#endif
/* Make sure any errors from previous requests have been dealt with. */
XSync (dpy, False);
@@ -7528,21 +7523,19 @@
data->string[0] = 0;
data->prev = x_error_message;
x_error_message = data;
-
- record_unwind_protect (x_catch_errors_unwind, dummy);
-
- return count;
}
-/* Unbind the binding that we made to check for X errors. */
+/* Undo the last x_catch_errors call.
+ DPY should be the display that was passed to x_catch_errors. */
-static Lisp_Object
-x_catch_errors_unwind (dummy)
- Lisp_Object dummy;
+void
+x_uncatch_errors (dpy)
+ Display *dpy;
{
- Display *dpy = x_error_message->dpy;
struct x_error_message_stack *tmp;
+ eassert (x_error_message && dpy == x_error_message->dpy);
+
/* The display may have been closed before this function is called.
Check if it is still open before calling XSync. */
if (x_display_info_for_display (dpy) != 0)
@@ -7554,12 +7547,7 @@
tmp = x_error_message;
x_error_message = x_error_message->prev;
- free (tmp);
-
- eassert (EQ (dummy,
- make_number ((EMACS_INT)dpy + (EMACS_INT)x_error_message)));
-
- return Qnil;
+ xfree (tmp);
}
/* If any X protocol errors have arrived since the last call to
@@ -7575,7 +7563,12 @@
XSync (dpy, False);
if (x_error_message->string[0])
- error (format, x_error_message->string);
+ {
+ char string[X_ERROR_MESSAGE_SIZE];
+ bcopy (x_error_message->string, string, X_ERROR_MESSAGE_SIZE);
+ x_uncatch_errors (dpy);
+ error (format, string);
+ }
}
/* Nonzero if we had any X protocol errors
@@ -7600,19 +7593,6 @@
x_error_message->string[0] = 0;
}
-/* Stop catching X protocol errors and let them make Emacs die.
- DPY should be the display that was passed to x_catch_errors.
- COUNT should be the value that was returned by
- the corresponding call to x_catch_errors. */
-
-void
-x_uncatch_errors (dpy, count)
- Display *dpy;
- int count;
-{
- unbind_to (count, Qnil);
-}
-
#if 0
static unsigned int x_wire_count;
x_trace_wire ()
@@ -7669,7 +7649,6 @@
{
struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
Lisp_Object frame, tail;
- int count;
error_msg = (char *) alloca (strlen (error_message) + 1);
strcpy (error_msg, error_message);
@@ -7679,7 +7658,7 @@
below. Otherwise, we might end up with printing ``can't find per
display information'' in the recursive call instead of printing
the original message here. */
- count = x_catch_errors (dpy);
+ x_catch_errors (dpy);
/* We have to close the display to inform Xt that it doesn't
exist anymore. If we don't, Xt will continue to wait for
@@ -7747,7 +7726,7 @@
if (dpyinfo)
x_delete_display (dpyinfo);
- x_uncatch_errors (dpy, count);
+ x_uncatch_errors (dpy);
if (x_display_list == 0)
{
@@ -9353,7 +9332,6 @@
= f ? FRAME_X_DISPLAY_INFO (f) : x_display_list;
Display *dpy = dpyinfo->display;
int try_XLoadQueryFont = 0;
- int count;
int allow_auto_scaled_font = 0;
if (size < 0)
@@ -9393,7 +9371,7 @@
/* At first, put PATTERN in the cache. */
BLOCK_INPUT;
- count = x_catch_errors (dpy);
+ x_catch_errors (dpy);
if (try_XLoadQueryFont)
{
@@ -9474,7 +9452,7 @@
}
}
- x_uncatch_errors (dpy, count);
+ x_uncatch_errors (dpy);
UNBLOCK_INPUT;
if (names)
@@ -9565,7 +9543,7 @@
XFontStruct *thisinfo;
BLOCK_INPUT;
- count = x_catch_errors (dpy);
+ x_catch_errors (dpy);
thisinfo = XLoadQueryFont (dpy,
SDATA (XCAR (tem)));
if (x_had_errors_p (dpy))
@@ -9575,7 +9553,7 @@
thisinfo = NULL;
x_clear_errors (dpy);
}
- x_uncatch_errors (dpy, count);
+ x_uncatch_errors (dpy);
UNBLOCK_INPUT;
if (thisinfo)
@@ -9731,7 +9709,6 @@
{
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
Lisp_Object font_names;
- int count;
/* Get a list of all the fonts that match this name. Once we
have a list of matching fonts, we compare them against the fonts
@@ -9770,7 +9747,7 @@
fontname = (char *) SDATA (XCAR (font_names));
BLOCK_INPUT;
- count = x_catch_errors (FRAME_X_DISPLAY (f));
+ x_catch_errors (FRAME_X_DISPLAY (f));
font = (XFontStruct *) XLoadQueryFont (FRAME_X_DISPLAY (f), fontname);
if (x_had_errors_p (FRAME_X_DISPLAY (f)))
{
@@ -9779,7 +9756,7 @@
font = NULL;
x_clear_errors (FRAME_X_DISPLAY (f));
}
- x_uncatch_errors (FRAME_X_DISPLAY (f), count);
+ x_uncatch_errors (FRAME_X_DISPLAY (f));
UNBLOCK_INPUT;
if (!font)
return NULL;
@@ -10552,7 +10529,6 @@
Display *dpy = dpyinfo->display;
XrmValue d, fr, to;
Font font;
- int count;
d.addr = (XPointer)&dpy;
d.size = sizeof (Display *);
@@ -10560,12 +10536,12 @@
fr.size = sizeof (XtDefaultFont);
to.size = sizeof (Font *);
to.addr = (XPointer)&font;
- count = x_catch_errors (dpy);
+ x_catch_errors (dpy);
if (!XtCallConverter (dpy, XtCvtStringToFont, &d, 1, &fr, &to, NULL))
abort ();
if (x_had_errors_p (dpy) || !XQueryFont (dpy, font))
XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15");
- x_uncatch_errors (dpy, count);
+ x_uncatch_errors (dpy);
}
#endif
#endif
- [Emacs-diffs] Changes to emacs/src/xterm.c, Jan Djärv, 2006/02/09
- [Emacs-diffs] Changes to emacs/src/xterm.c, Jan Djärv, 2006/02/13
- [Emacs-diffs] Changes to emacs/src/xterm.c, Richard M. Stallman, 2006/02/13
- [Emacs-diffs] Changes to emacs/src/xterm.c, Jan Djärv, 2006/02/14
- [Emacs-diffs] Changes to emacs/src/xterm.c, Richard M. Stallman, 2006/02/19
- [Emacs-diffs] Changes to emacs/src/xterm.c,
Chong Yidong <=
- [Emacs-diffs] Changes to emacs/src/xterm.c, Chong Yidong, 2006/02/26