ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/main.C
(Generate patch)

Comparing rxvt-unicode/src/main.C (file contents):
Revision 1.379 by root, Tue Jun 5 11:10:58 2012 UTC vs.
Revision 1.383 by sf-exg, Wed Aug 29 09:43:42 2012 UTC

362} 362}
363 363
364/*----------------------------------------------------------------------*/ 364/*----------------------------------------------------------------------*/
365/* 365/*
366 * Exit gracefully, clearing the utmp entry and restoring tty attributes 366 * Exit gracefully, clearing the utmp entry and restoring tty attributes
367 * TODO: if debugging, this should free up any known resources if we can
368 */ 367 */
369static XErrorHandler old_xerror_handler; 368static XErrorHandler old_xerror_handler;
370 369
371static void 370static void
372rxvt_emergency_cleanup () 371rxvt_emergency_cleanup ()
380print_x_error (Display *dpy, XErrorEvent *event) 379print_x_error (Display *dpy, XErrorEvent *event)
381{ 380{
382 char buffer[BUFSIZ]; 381 char buffer[BUFSIZ];
383 char mesg[BUFSIZ]; 382 char mesg[BUFSIZ];
384 char number[32]; 383 char number[32];
385 const char mtype[] = "XlibMessage"; 384
385 rxvt_warn ("An X Error occurred, trying to continue after report.\n");
386
387 XGetErrorDatabaseText (dpy, "XlibMessage", "ErrorSerial", "Error Serial #%d", mesg, BUFSIZ);
388 snprintf (buffer, BUFSIZ, "+ %s\n", mesg); rxvt_warn (buffer, event->serial);
386 389
387 XGetErrorText (dpy, event->error_code, buffer, BUFSIZ); 390 XGetErrorText (dpy, event->error_code, buffer, BUFSIZ);
388 XGetErrorDatabaseText (dpy, mtype, "XError", "X Error", mesg, BUFSIZ); 391 XGetErrorDatabaseText (dpy, "XlibMessage", "XError", "X Error", mesg, BUFSIZ);
389 rxvt_warn ("An X Error occurred, trying to continue after report.\n");
390 rxvt_warn ("%s: %s\n", mesg, buffer); 392 rxvt_warn ("+ %s: %s\n", mesg, buffer);
393
391 XGetErrorDatabaseText (dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); 394 XGetErrorDatabaseText (dpy, "XlibMessage", "MajorCode", "Request Major code %d", mesg, BUFSIZ);
392 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->request_code); 395 snprintf (buffer, BUFSIZ, "+ %s\n", mesg); rxvt_warn (buffer, event->request_code);
393 sprintf (number, "%d", event->request_code);
394 XGetErrorDatabaseText (dpy, "XRequest", number, "", buffer, BUFSIZ);
395 rxvt_warn ("(which is %s)\n", buffer);
396 396
397 if (event->request_code >= 128) 397 if (event->request_code >= 128)
398 { 398 {
399#if 0
400 /* XListExtensions and probably query extensions hangs when there are multiple queues errors */
401 int nexts;
402 char **exts = XListExtensions (dpy, &nexts);
403
404 while (nexts)
405 {
406 char *extname = exts [nexts - 1];
407 int major, first_event, first_error;
408
409 if (XQueryExtension (dpy, extname, &major, &first_event, &first_error) && major == event->request_code)
410 {
411 XGetErrorDatabaseText (dpy, "XlibMessage", "MinorCode", "Request Minor code %d", mesg, BUFSIZ);
412 rxvt_warn ("+ (which is extension %s minor code %d)\n", extname, event->minor_code);
413
414 snprintf (buffer, BUFSIZ, "%s.%d", extname, event->minor_code);
415 XGetErrorDatabaseText (dpy, "XRequest", buffer, "an unregistered minor code", buffer, BUFSIZ);
416 rxvt_warn ("+ (which is %s)\n", buffer);
417
418 break;
419 }
420
421 printf ("nextss %d %s\n", nexts, extname);//D
422 --nexts;
423 ++exts;
424 }
425#else
426 int nexts = 0;
427 char **exts = 0;
428#endif
429
430 if (!nexts)
431 {
432 rxvt_warn ("+ (which is an unknown extension)\n", buffer);
433
399 XGetErrorDatabaseText (dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); 434 XGetErrorDatabaseText (dpy, "XlibMessage", "MinorCode", "Request Minor code %d", mesg, BUFSIZ);
400 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->minor_code); 435 snprintf (buffer, BUFSIZ, "+ %s\n", mesg); rxvt_warn (buffer, event->minor_code);
436
437#if 0
438 sprintf (number, "RENDER.%d", event->minor_code);
439 XGetErrorDatabaseText (dpy, "XRequest", number, "", buffer, BUFSIZ);
440 rxvt_warn ("+ (which is %s)\n", buffer);
441#endif
442 }
443
444 XFreeExtensionList (exts);
445 }
446 else
447 {
448 sprintf (number, "%d", event->request_code);
449 XGetErrorDatabaseText (dpy, "XRequest", number, "", buffer, BUFSIZ);
450 rxvt_warn ("+ (which is %s)\n", buffer);
401 } 451 }
402 452
403 if (event->error_code == BadWindow 453 if (event->error_code == BadWindow
404 || event->error_code == BadPixmap 454 || event->error_code == BadPixmap
405 || event->error_code == BadCursor 455 || event->error_code == BadCursor
410 || event->error_code == BadIDChoice 460 || event->error_code == BadIDChoice
411 || event->error_code == BadValue 461 || event->error_code == BadValue
412 || event->error_code == BadAtom) 462 || event->error_code == BadAtom)
413 { 463 {
414 if (event->error_code == BadValue) 464 if (event->error_code == BadValue)
415 XGetErrorDatabaseText (dpy, mtype, "Value", "Value 0x%x", mesg, BUFSIZ); 465 XGetErrorDatabaseText (dpy, "XlibMessage", "Value", "Value 0x%x", mesg, BUFSIZ);
416 else if (event->error_code == BadAtom) 466 else if (event->error_code == BadAtom)
417 XGetErrorDatabaseText (dpy, mtype, "AtomID", "AtomID 0x%x", mesg, BUFSIZ); 467 XGetErrorDatabaseText (dpy, "XlibMessage", "AtomID", "AtomID 0x%x", mesg, BUFSIZ);
418 else 468 else
419 XGetErrorDatabaseText (dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); 469 XGetErrorDatabaseText (dpy, "XlibMessage", "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ);
420 470
421 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->resourceid); 471 snprintf (buffer, BUFSIZ, "+ %s\n", mesg); rxvt_warn (buffer, event->resourceid);
422 } 472 }
423
424 XGetErrorDatabaseText (dpy, mtype, "ErrorSerial", "Error Serial #%d", mesg, BUFSIZ);
425 rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->serial);
426} 473}
427#endif 474#endif
428 475
429int ecb_cold 476int ecb_cold
430rxvt_xerror_handler (Display *display, XErrorEvent *event) 477rxvt_xerror_handler (Display *display, XErrorEvent *event)
770 817
771 delete fontset[0]; 818 delete fontset[0];
772 fontset[0] = fs; 819 fontset[0] = fs;
773 820
774 prop = (*fs)[rxvt_fontset::firstFont]->properties (); 821 prop = (*fs)[rxvt_fontset::firstFont]->properties ();
775 prop.width += letterSpace; 822 prop.width = max (prop.width + letterSpace, 1);
776 823
777 fs->set_prop (prop, false); 824 fs->set_prop (prop, false);
778 825
779 fwidth = prop.width; 826 fwidth = prop.width;
780 fheight = prop.height + lineSpace; 827 fheight = prop.height + lineSpace;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines