--- rxvt-unicode/src/main.C 2005/02/04 11:41:23 1.134 +++ rxvt-unicode/src/main.C 2005/11/28 18:37:42 1.146 @@ -32,7 +32,6 @@ #include "../config.h" /* NECESSARY */ #include "rxvt.h" /* NECESSARY */ -#include "main.intpro" /* PROTOS for internal routines */ #include #include @@ -262,7 +261,7 @@ // TODO: free pixcolours, colours should become part of rxvt_display delete pix_colors_focused; -#ifdef OFF_FOCUS_FADING +#if OFF_FOCUS_FADING delete pix_colors_unfocused; #endif @@ -364,6 +363,55 @@ (*t)->emergency_cleanup (); } +#if ENABLE_FRILLS +static void +print_x_error (Display *dpy, XErrorEvent *event) +{ + char buffer[BUFSIZ]; + char mesg[BUFSIZ]; + char number[32]; + char *mtype = "XlibMessage"; + XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); + XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); + rxvt_warn ("An X Error occured, trying to continue after report.\n"); + rxvt_warn ("%s: %s\n", mesg, buffer); + XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); + rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->request_code); + sprintf(number, "%d", event->request_code); + XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); + rxvt_warn ("(which is %s)\n", buffer); + if (event->request_code >= 128) { + XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", + mesg, BUFSIZ); + rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->minor_code); + } + if ((event->error_code == BadWindow) || + (event->error_code == BadPixmap) || + (event->error_code == BadCursor) || + (event->error_code == BadFont) || + (event->error_code == BadDrawable) || + (event->error_code == BadColor) || + (event->error_code == BadGC) || + (event->error_code == BadIDChoice) || + (event->error_code == BadValue) || + (event->error_code == BadAtom)) { + if (event->error_code == BadValue) + XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x", + mesg, BUFSIZ); + else if (event->error_code == BadAtom) + XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x", + mesg, BUFSIZ); + else + XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", + mesg, BUFSIZ); + rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->resourceid); + } + XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", + mesg, BUFSIZ); + rxvt_warn (strncat (mesg, "\n", BUFSIZ), event->serial); +} +#endif + int rxvt_xerror_handler (Display *display, XErrorEvent *event) { @@ -371,10 +419,13 @@ GET_R->allowedxerror = event->error_code; else { - //TODO: GET_R is most likely not the terminal which caused the error - //TODO: maybe just output the error and continue? + // GET_R is most likely not the terminal which caused the error, + // so just output the error and continue +#if ENABLE_FRILLS + print_x_error (display, event); +#else old_xerror_handler (display, event); - GET_R->destroy (); +#endif } return 0; @@ -536,7 +587,6 @@ return p; } -/* INTPROTO */ void * rxvt_calloc (size_t number, size_t size) { @@ -548,7 +598,6 @@ return p; } -/* INTPROTO */ void * rxvt_realloc (void *ptr, size_t size) { @@ -662,16 +711,19 @@ parsed_geometry = 1; if (rs[Rs_geometry]) flags = XParseGeometry (rs[Rs_geometry], &x, &y, &w, &h); + if (flags & WidthValue) { TermWin.ncol = BOUND_POSITIVE_INT16 (w); szHint.flags |= USSize; } + if (flags & HeightValue) { TermWin.nrow = BOUND_POSITIVE_INT16 (h); szHint.flags |= USSize; } + if (flags & XValue) { szHint.x = x; @@ -682,6 +734,7 @@ szHint.win_gravity = NorthEastGravity; } } + if (flags & YValue) { szHint.y = y; @@ -790,7 +843,7 @@ #if 0 // TIOCSWINSZ⎈ is supposed to do this automatically and correctly if (cmd_pid) /* force through to the command */ - kill (cmd_pid, SIGWINCH); + kill (-cmd_pid, SIGWINCH); #endif } @@ -904,7 +957,7 @@ rxvt_term::set_title (const char *str) { set_string_property (XA_WM_NAME, str); -#if ENABLE_FRILLS +#if ENABLE_EWMH set_utf8_property (xa[XA_NET_WM_NAME], str); #endif } @@ -913,7 +966,7 @@ rxvt_term::set_icon_name (const char *str) { set_string_property (XA_WM_ICON_NAME, str); -#if ENABLE_FRILLS +#if ENABLE_EWMH set_utf8_property (xa[XA_NET_WM_ICON_NAME], str); #endif } @@ -939,7 +992,7 @@ # ifndef NO_BRIGHTCOLOR pix_colors_focused[idx] = pix_colors_focused[minBrightCOLOR + i]; SET_PIXCOLOR (idx); - goto Done; + goto done; # endif } @@ -947,7 +1000,7 @@ { /* normal colors */ pix_colors_focused[idx] = pix_colors_focused[minCOLOR + i]; SET_PIXCOLOR (idx); - goto Done; + goto done; } } @@ -977,10 +1030,11 @@ /* XSetWindowAttributes attr; */ /* Cursor cursor; */ -Done: -#ifdef OFF_FOCUS_FADING +done: + +#if OFF_FOCUS_FADING if (rs[Rs_fade]) - pix_colors_unfocused[idx] = pix_colors_focused[idx].fade (display, atoi (rs[Rs_fade])); + pix_colors_unfocused[idx] = pix_colors_focused[idx].fade (display, atoi (rs[Rs_fade]), pix_colors[Color_fade]); #endif /*TODO: handle Color_BD, scrollbar background, etc. */ @@ -1195,6 +1249,7 @@ if (width == 0 || height == 0) { XGetWindowAttributes (display->display, display->root, &wattr); + if (width == 0) width = wattr.width - szHint.base_width; if (height == 0) @@ -1503,6 +1558,8 @@ char **s; char buf[IMBUFSIZ]; + SET_R (this); + im_destroy (); D_MAIN ((stderr, "rxvt_IMInstantiateCallback ()"));