X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fdevice-x.c;h=6fc5ff91f6d84240b9f6b46549fe07040f7452a4;hb=0d0e70673e6643c90f98a4af5592e23289dc0e59;hp=a0586b6f9737ed27b04494533ee20a15835cc0db;hpb=59eec5f21669e81977b5b1fe9bf717cab49cf7fb;p=chise%2Fxemacs-chise.git- diff --git a/src/device-x.c b/src/device-x.c index a0586b6..6fc5ff9 100644 --- a/src/device-x.c +++ b/src/device-x.c @@ -168,6 +168,8 @@ get_x_display (Lisp_Object device) /* initializing an X connection */ /************************************************************************/ +static struct device *device_being_initialized = NULL; + static void allocate_x_device_struct (struct device *d) { @@ -562,7 +564,9 @@ x_init_device (struct device *d, Lisp_Object props) */ slow_down_interrupts (); /* May not be needed but XtOpenDisplay could not deal with signals here. */ + device_being_initialized = d; dpy = DEVICE_X_DISPLAY (d) = XOpenDisplay (disp_name); + device_being_initialized = NULL; speed_up_interrupts (); if (dpy == 0) @@ -1053,10 +1057,14 @@ x_error_handler (Display *disp, XErrorEvent *event) } #endif /* EXTERNAL_WIDGET */ +#if 0 + /* This ends up calling X, which isn't allowed in an X error handler + */ stderr_out ("\n%s: ", (STRINGP (Vinvocation_name) ? (char *) XSTRING_DATA (Vinvocation_name) : "xemacs")); +#endif XmuPrintDefaultErrorMessage (disp, event, stderr); } return 0; @@ -1116,6 +1124,9 @@ x_IO_error_handler (Display *disp) Lisp_Object dev; struct device *d = get_device_from_display_1 (disp); + if (!d) + d = device_being_initialized; + assert (d != NULL); XSETDEVICE (dev, d); @@ -1434,13 +1445,13 @@ found. If the third arg is `string', a string is returned, and if it is returned value is the list (t) for true, (nil) for false, and is nil to mean ``unspecified''. */ - (name, class, type, locale, device, no_error)) + (name, class, type, locale, device, noerror)) { char* name_string, *class_string; char *raw_result; XrmDatabase db; Display *display; - Error_behavior errb = decode_error_behavior_flag (no_error); + Error_behavior errb = decode_error_behavior_flag (noerror); CHECK_STRING (name); CHECK_STRING (class);