garbeam@0: /* garbeam@0: * (C)opyright MMVI Anselm R. Garbe garbeam@0: * See LICENSE file for license details. garbeam@0: */ garbeam@0: arg@166: #include "config.h" garbeam@32: #include garbeam@32: arg@143: /* mask shorthands, used in event.c and client.c */ arg@150: #define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) arg@150: #define MOUSEMASK (BUTTONMASK | PointerMotionMask) arg@157: #define PROTODELWIN 1 arg@143: arg@333: typedef union { arg@189: const char *cmd; garbeam@49: int i; arg@333: } Arg; garbeam@18: garbeam@5: /* atoms */ arg@230: enum { NetSupported, NetWMName, NetLast }; garbeam@13: enum { WMProtocols, WMDelete, WMLast }; garbeam@0: garbeam@5: /* cursor */ garbeam@84: enum { CurNormal, CurResize, CurMove, CurLast }; garbeam@0: arg@353: /* color */ arg@353: enum { ColFG, ColBG, ColLast }; arg@353: arg@333: /* window corners */ arg@143: typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner; arg@99: arg@333: typedef struct { garbeam@32: int ascent; garbeam@32: int descent; garbeam@32: int height; garbeam@84: XFontSet set; garbeam@84: XFontStruct *xfont; arg@333: } Fnt; garbeam@32: arg@333: typedef struct { /* draw context */ garbeam@32: int x, y, w, h; arg@353: unsigned long norm[ColLast]; arg@353: unsigned long sel[ColLast]; arg@353: unsigned long status[ColLast]; garbeam@84: Drawable drawable; garbeam@84: Fnt font; garbeam@84: GC gc; arg@333: } DC; garbeam@32: arg@333: typedef struct Client Client; garbeam@0: struct Client { garbeam@31: char name[256]; garbeam@13: int proto; arg@115: int x, y, w, h; arg@115: int tx, ty, tw, th; /* title */ garbeam@20: int basew, baseh, incw, inch, maxw, maxh, minw, minh; garbeam@29: int grav; arg@164: long flags; arg@381: unsigned int border, weight; garbeam@80: Bool isfloat; arg@124: Bool ismax; arg@178: Bool *tags; garbeam@84: Client *next; arg@127: Client *prev; garbeam@0: Window win; arg@342: Window twin; garbeam@0: }; garbeam@0: arg@178: extern const char *tags[]; arg@173: extern char stext[1024]; arg@362: extern int bx, by, bw, bh, bmw, mw, screen, sx, sy, sw, sh; arg@362: extern unsigned int ntags, numlockmask; garbeam@53: extern void (*handler[LASTEvent])(XEvent *); garbeam@53: extern void (*arrange)(Arg *); garbeam@84: extern Atom wmatom[WMLast], netatom[NetLast]; arg@262: extern Bool running, issel, *seltag; garbeam@84: extern Client *clients, *sel; garbeam@84: extern Cursor cursor[CurLast]; garbeam@84: extern DC dc; garbeam@84: extern Display *dpy; garbeam@84: extern Window root, barwin; garbeam@3: garbeam@5: /* client.c */ garbeam@75: extern void ban(Client *c); garbeam@76: extern void focus(Client *c); garbeam@76: extern Client *getclient(Window w); garbeam@76: extern Client *getctitle(Window w); garbeam@76: extern void gravitate(Client *c, Bool invert); garbeam@76: extern void killclient(Arg *arg); garbeam@10: extern void manage(Window w, XWindowAttributes *wa); arg@129: extern void resize(Client *c, Bool sizehints, Corner sticky); garbeam@74: extern void setsize(Client *c); garbeam@76: extern void settitle(Client *c); arg@124: extern void togglemax(Arg *arg); garbeam@76: extern void unmanage(Client *c); garbeam@13: garbeam@33: /* draw.c */ garbeam@75: extern void drawall(); garbeam@74: extern void drawstatus(); garbeam@74: extern void drawtitle(Client *c); garbeam@74: extern unsigned long getcolor(const char *colstr); garbeam@74: extern void setfont(const char *fontstr); arg@173: extern unsigned int textw(const char *text); garbeam@33: garbeam@75: /* event.c */ garbeam@73: extern void grabkeys(); arg@292: extern void procevent(); garbeam@18: garbeam@43: /* main.c */ garbeam@76: extern int getproto(Window w); garbeam@75: extern void quit(Arg *arg); garbeam@76: extern void sendevent(Window w, Atom a, long value); garbeam@75: extern int xerror(Display *dsply, XErrorEvent *ee); garbeam@43: garbeam@75: /* tag.c */ arg@191: extern void initrregs(); arg@142: extern Client *getnext(Client *c); arg@127: extern Client *getprev(Client *c); garbeam@76: extern void settags(Client *c); arg@284: extern void tag(Arg *arg); arg@284: extern void toggletag(Arg *arg); garbeam@73: garbeam@32: /* util.c */ garbeam@76: extern void *emallocz(unsigned int size); garbeam@75: extern void eprint(const char *errstr, ...); arg@270: extern void *erealloc(void *ptr, unsigned int size); garbeam@49: extern void spawn(Arg *arg); arg@327: arg@327: /* view.c */ arg@378: extern void detach(Client *c); arg@327: extern void dofloat(Arg *arg); arg@327: extern void dotile(Arg *arg); arg@327: extern void focusnext(Arg *arg); arg@327: extern void focusprev(Arg *arg); arg@327: extern Bool isvisible(Client *c); arg@327: extern void restack(); arg@327: extern void togglemode(Arg *arg); arg@327: extern void toggleview(Arg *arg); arg@327: extern void view(Arg *arg); arg@327: extern void zoom(Arg *arg);