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