Blob


1 /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <X11/X.h>
5 #include <X11/Xlib.h>
6 #include <X11/Xutil.h>
7 #include <X11/Xproto.h>
8 #include "dat.h"
9 #include "fns.h"
11 int ignore_badwindow;
13 void
14 fatal(char *s)
15 {
16 fprintf(stderr, "rio: ");
17 perror(s);
18 fprintf(stderr, "\n");
19 exit(1);
20 }
22 int
23 handler(Display *d, XErrorEvent *e)
24 {
25 char msg[80], req[80], number[80];
27 if(initting && (e->request_code == X_ChangeWindowAttributes) && (e->error_code == BadAccess)){
28 fprintf(stderr, "rio: it looks like there's already a window manager running; rio not started\n");
29 exit(1);
30 }
32 if(ignore_badwindow && (e->error_code == BadWindow || e->error_code == BadColor))
33 return 0;
35 XGetErrorText(d, e->error_code, msg, sizeof(msg));
36 sprintf(number, "%d", e->request_code);
37 XGetErrorDatabaseText(d, "XRequest", number, "", req, sizeof(req));
38 if(req[0] == '\0')
39 sprintf(req, "<request-code-%d>", (int)e->request_code);
41 fprintf(stderr, "rio: %s(0x%x): %s\n", req, (int)e->resourceid, msg);
43 if(initting){
44 fprintf(stderr, "rio: failure during initialisation; aborting\n");
45 exit(1);
46 }
47 return 0;
48 }
50 void
51 graberror(char *f, int err)
52 {
53 #ifdef DEBUG /* sick of "bug" reports; grab errors "just happen" */
54 char *s;
56 switch (err){
57 case GrabNotViewable:
58 s = "not viewable";
59 break;
60 case AlreadyGrabbed:
61 s = "already grabbed";
62 break;
63 case GrabFrozen:
64 s = "grab frozen";
65 break;
66 case GrabInvalidTime:
67 s = "invalid time";
68 break;
69 case GrabSuccess:
70 return;
71 default:
72 fprintf(stderr, "rio: %s: grab error: %d\n", f, err);
73 return;
74 }
75 fprintf(stderr, "rio: %s: grab error: %s\n", f, s);
76 #endif
77 }
79 #ifdef DEBUG_EV
80 #include "showevent/ShowEvent.c"
81 #endif
83 #ifdef DEBUG
85 void
86 dotrace(char *s, Client *c, XEvent *e)
87 {
88 if(debug == 0)
89 return;
90 setbuf(stdout, 0);
91 fprintf(stderr, "rio: %s: c=%p", s, (void*)c);
92 if(c)
93 fprintf(stderr, " x %d y %d dx %d dy %d w 0x%x parent 0x%x", c->x, c->y, c->dx, c->dy, (int)c->window, (int)c->parent);
94 #ifdef DEBUG_EV
95 if(e){
96 fprintf(stderr, "\n\t");
97 ShowEvent(e);
98 }
99 #endif
100 fprintf(stderr, "\n");
102 #endif