Blame


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