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 ac33a34a 2005-07-13 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 ac33a34a 2005-07-13 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 ac33a34a 2005-07-13 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 ac33a34a 2005-07-13 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 ac33a34a 2005-07-13 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 75e12c22 2005-08-10 devnull if(debug == 0)
89 75e12c22 2005-08-10 devnull return;
90 0206bd51 2008-01-30 rsc setbuf(stdout, 0);
91 cbeb0b26 2006-04-01 devnull fprintf(stderr, "rio: %s: c=%p", s, (void*)c);
92 ac33a34a 2005-07-13 devnull if(c)
93 cbeb0b26 2006-04-01 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, (int)c->window, (int)c->parent);
94 038e9089 2004-03-21 devnull #ifdef DEBUG_EV
95 ac33a34a 2005-07-13 devnull if(e){
96 038e9089 2004-03-21 devnull fprintf(stderr, "\n\t");
97 038e9089 2004-03-21 devnull ShowEvent(e);
98 038e9089 2004-03-21 devnull }
99 038e9089 2004-03-21 devnull #endif
100 038e9089 2004-03-21 devnull fprintf(stderr, "\n");
101 038e9089 2004-03-21 devnull }
102 038e9089 2004-03-21 devnull #endif