… | |
… | |
362 | { |
362 | { |
363 | for (rxvt_term **t = rxvt_term::termlist.begin (); t < rxvt_term::termlist.end (); t++) |
363 | for (rxvt_term **t = rxvt_term::termlist.begin (); t < rxvt_term::termlist.end (); t++) |
364 | (*t)->emergency_cleanup (); |
364 | (*t)->emergency_cleanup (); |
365 | } |
365 | } |
366 | |
366 | |
|
|
367 | #if ENABLE_FRILLS |
|
|
368 | static void |
|
|
369 | print_x_error (Display *dpy, XErrorEvent *event) |
|
|
370 | { |
|
|
371 | char buffer[BUFSIZ]; |
|
|
372 | char mesg[BUFSIZ]; |
|
|
373 | char number[32]; |
|
|
374 | char *mtype = "XlibMessage"; |
|
|
375 | XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); |
|
|
376 | XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); |
|
|
377 | rxvt_warn ("An X Error occured, trying to continue after report.\n"); |
|
|
378 | rxvt_warn ("%s: %s\n", mesg, buffer); |
|
|
379 | XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); |
|
|
380 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->request_code); |
|
|
381 | sprintf(number, "%d", event->request_code); |
|
|
382 | XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); |
|
|
383 | rxvt_warn ("(which is %s)\n", buffer); |
|
|
384 | if (event->request_code >= 128) { |
|
|
385 | XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", |
|
|
386 | mesg, BUFSIZ); |
|
|
387 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->minor_code); |
|
|
388 | } |
|
|
389 | if ((event->error_code == BadWindow) || |
|
|
390 | (event->error_code == BadPixmap) || |
|
|
391 | (event->error_code == BadCursor) || |
|
|
392 | (event->error_code == BadFont) || |
|
|
393 | (event->error_code == BadDrawable) || |
|
|
394 | (event->error_code == BadColor) || |
|
|
395 | (event->error_code == BadGC) || |
|
|
396 | (event->error_code == BadIDChoice) || |
|
|
397 | (event->error_code == BadValue) || |
|
|
398 | (event->error_code == BadAtom)) { |
|
|
399 | if (event->error_code == BadValue) |
|
|
400 | XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x", |
|
|
401 | mesg, BUFSIZ); |
|
|
402 | else if (event->error_code == BadAtom) |
|
|
403 | XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x", |
|
|
404 | mesg, BUFSIZ); |
|
|
405 | else |
|
|
406 | XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", |
|
|
407 | mesg, BUFSIZ); |
|
|
408 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->resourceid); |
|
|
409 | } |
|
|
410 | XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", |
|
|
411 | mesg, BUFSIZ); |
|
|
412 | rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->serial); |
|
|
413 | } |
|
|
414 | #endif |
|
|
415 | |
367 | int |
416 | int |
368 | rxvt_xerror_handler (Display *display, XErrorEvent *event) |
417 | rxvt_xerror_handler (Display *display, XErrorEvent *event) |
369 | { |
418 | { |
370 | if (GET_R->allowedxerror == -1) |
419 | if (GET_R->allowedxerror == -1) |
371 | GET_R->allowedxerror = event->error_code; |
420 | GET_R->allowedxerror = event->error_code; |
372 | else |
421 | else |
373 | { |
422 | { |
374 | //TODO: GET_R is most likely not the terminal which caused the error |
423 | //TODO: GET_R is most likely not the terminal which caused the error |
375 | //TODO: maybe just output the error and continue? |
424 | //TODO: maybe just output the error and continue? |
|
|
425 | #if ENABLE_FRILLS |
|
|
426 | print_x_error (display, event); |
|
|
427 | #else |
376 | old_xerror_handler (display, event); |
428 | old_xerror_handler (display, event); |
377 | GET_R->destroy (); |
429 | #endif |
378 | } |
430 | } |
379 | |
431 | |
380 | return 0; |
432 | return 0; |
381 | } |
433 | } |
382 | |
434 | |
… | |
… | |
1501 | int i, found, had_im; |
1553 | int i, found, had_im; |
1502 | const char *p; |
1554 | const char *p; |
1503 | char **s; |
1555 | char **s; |
1504 | char buf[IMBUFSIZ]; |
1556 | char buf[IMBUFSIZ]; |
1505 | |
1557 | |
|
|
1558 | SET_R (this); |
|
|
1559 | |
1506 | im_destroy (); |
1560 | im_destroy (); |
1507 | |
1561 | |
1508 | D_MAIN ((stderr, "rxvt_IMInstantiateCallback ()")); |
1562 | D_MAIN ((stderr, "rxvt_IMInstantiateCallback ()")); |
1509 | if (Input_Context) |
1563 | if (Input_Context) |
1510 | return; |
1564 | return; |