1 module legacy;
2 
3 import core.sys.posix.signal;
4 import core.sys.posix.sys.wait;
5 import core.sys.posix.unistd;
6 import core.memory;
7 import std.stdio;
8 
9 import deimos.X11.X;
10 import deimos.X11.Xlib;
11 import deimos.X11.keysymdef;
12 import deimos.X11.Xutil;
13 import deimos.X11.Xatom;
14 
15 import utils;
16 
17 extern(C) int xerrordummy(Display *dpy, XErrorEvent *ee) nothrow {
18     return 0;
19 }
20 
21 // From core.sys.posix.sys.wait because waitpid is not nothrow @nogc @system
22 extern(C) pid_t waitpid(pid_t, int*, int) nothrow @nogc @system;
23 
24 // From core.stdc.stdio due to conflict with std.stdio over stderr
25 extern(C) int close(int fd) @trusted;
26 
27 extern(C) void sigchldImpl(int unused) nothrow @nogc @system 
28 {
29 	// wait for all child processes to exit.
30 	while(0 < waitpid(-1, null, WNOHANG)) {}
31 }
32 
33 extern(C) int xerrorstart(Display *dpy, XErrorEvent *ee) nothrow 
34 {
35    die("cobox: another window manager is already running");
36    return -1;
37 }
38 
39 extern(C) int xerror(Display *dpy, XErrorEvent *ee) nothrow {
40 	import deimos.X11.Xproto :
41 		    X_SetInputFocus, X_PolyText8, X_PolyFillRectangle, X_PolySegment,
42 		    X_ConfigureWindow, X_GrabButton, X_GrabKey, X_CopyArea;
43 
44 	    if(ee.error_code == XErrorCode.BadWindow
45 			|| (ee.request_code == X_SetInputFocus && ee.error_code == XErrorCode.BadMatch)
46 			|| (ee.request_code == X_PolyText8 && ee.error_code == XErrorCode.BadDrawable)
47 			|| (ee.request_code == X_PolyFillRectangle && ee.error_code == XErrorCode.BadDrawable)
48 			|| (ee.request_code == X_PolySegment && ee.error_code == XErrorCode.BadDrawable)
49 			|| (ee.request_code == X_ConfigureWindow && ee.error_code == XErrorCode.BadMatch)
50 			|| (ee.request_code == X_GrabButton && ee.error_code == XErrorCode.BadAccess)
51 			|| (ee.request_code == X_GrabKey && ee.error_code == XErrorCode.BadAccess)
52 			|| (ee.request_code == X_CopyArea && ee.error_code == XErrorCode.BadDrawable)
53 		 ) {
54 		    printf(">>>> XERROR: %d", ee.error_code);
55 			return 0;
56 		 }
57 	
58 		printf("cobox: fatal error: request code=%d, error code=%d", ee.request_code, ee.error_code);
59 		
60 		return xerrorxlib(dpy, ee); 
61 }
62 
63 extern(C) static int function(Display*, XErrorEvent*) nothrow xerrorxlib;
64