garbeam@0: /* garbeam@0: * (C)opyright MMVI Anselm R. Garbe garbeam@0: * See LICENSE file for license details. garbeam@0: */ garbeam@0: garbeam@32: #include garbeam@2: garbeam@32: /********** CUSTOMIZE **********/ garbeam@0: garbeam@32: #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" garbeam@32: #define BGCOLOR "#666699" garbeam@32: #define FGCOLOR "#ffffff" garbeam@32: #define BORDERCOLOR "#9999CC" garbeam@32: #define STATUSDELAY 10 /* seconds */ garbeam@13: #define WM_PROTOCOL_DELWIN 1 garbeam@13: garbeam@32: /* tags */ garbeam@32: enum { Tscratch, Tdev, Tirc, Twww, Twork, TLast }; garbeam@32: garbeam@32: /********** CUSTOMIZE **********/ garbeam@32: garbeam@32: typedef struct Brush Brush; garbeam@18: typedef struct Client Client; garbeam@32: typedef struct Fnt Fnt; garbeam@18: typedef struct Key Key; garbeam@18: garbeam@5: /* atoms */ garbeam@13: enum { WMProtocols, WMDelete, WMLast }; garbeam@0: enum { NetSupported, NetWMName, NetLast }; garbeam@0: garbeam@5: /* cursor */ garbeam@0: enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; garbeam@0: garbeam@32: struct Fnt { garbeam@32: XFontStruct *xfont; garbeam@32: XFontSet set; garbeam@32: int ascent; garbeam@32: int descent; garbeam@32: int height; garbeam@32: }; garbeam@32: garbeam@32: struct Brush { garbeam@32: GC gc; garbeam@32: Drawable drawable; garbeam@32: int x, y, w, h; garbeam@32: Fnt font; garbeam@32: unsigned long bg; garbeam@32: unsigned long fg; garbeam@32: unsigned long border; garbeam@32: }; garbeam@32: garbeam@0: struct Client { garbeam@31: char name[256]; garbeam@31: char *tags[TLast]; garbeam@13: int proto; garbeam@20: int x, y, w, h; garbeam@22: int tx, ty, tw, th; garbeam@20: int basew, baseh, incw, inch, maxw, maxh, minw, minh; garbeam@29: int grav; garbeam@29: unsigned int border; garbeam@20: long flags; garbeam@0: Window win; garbeam@0: Window trans; garbeam@0: Window title; garbeam@0: Client *next; garbeam@5: Client *snext; garbeam@0: }; garbeam@0: garbeam@8: struct Key { garbeam@8: unsigned long mod; garbeam@8: KeySym keysym; garbeam@14: void (*func)(void *aux); garbeam@14: void *aux; garbeam@8: }; garbeam@8: garbeam@0: extern Display *dpy; garbeam@32: extern Window root; garbeam@13: extern Atom wm_atom[WMLast], net_atom[NetLast]; garbeam@0: extern Cursor cursor[CurLast]; garbeam@31: extern Bool running, issel; garbeam@5: extern void (*handler[LASTEvent]) (XEvent *); garbeam@31: extern void (*arrange)(void *aux); garbeam@0: garbeam@32: extern int tsel, screen, sx, sy, sw, sh, th; garbeam@31: extern char stext[1024], *tags[TLast]; garbeam@3: garbeam@3: extern Brush brush; garbeam@13: extern Client *clients, *stack; garbeam@3: garbeam@5: /* client.c */ garbeam@10: extern void manage(Window w, XWindowAttributes *wa); garbeam@13: extern void unmanage(Client *c); garbeam@13: extern Client *getclient(Window w); garbeam@13: extern void focus(Client *c); garbeam@13: extern void update_name(Client *c); garbeam@16: extern void draw_client(Client *c); garbeam@18: extern void resize(Client *c); garbeam@20: extern void update_size(Client *c); garbeam@23: extern Client *gettitle(Window w); garbeam@32: extern void craise(Client *c); garbeam@26: extern void lower(Client *c); garbeam@32: extern void ckill(void *aux); garbeam@27: extern void sel(void *aux); garbeam@28: extern void max(void *aux); garbeam@31: extern void floating(void *aux); garbeam@31: extern void grid(void *aux); garbeam@29: extern void gravitate(Client *c, Bool invert); garbeam@13: garbeam@33: /* draw.c */ garbeam@33: extern void draw(Brush *b, Bool border, const char *text); garbeam@33: extern void loadcolors(int scr, Brush *b, garbeam@33: const char *bg, const char *fg, const char *bo); garbeam@33: extern void loadfont(Fnt *font, const char *fontstr); garbeam@33: extern unsigned int textnw(Fnt *font, char *text, unsigned int len); garbeam@33: extern unsigned int textw(Fnt *font, char *text); garbeam@33: extern unsigned int texth(Fnt *font); garbeam@33: garbeam@13: /* event.c */ garbeam@26: extern void discard_events(long even_mask); garbeam@5: garbeam@33: /* kb.c */ garbeam@33: extern void update_keys(void); garbeam@9: extern void keypress(XEvent *e); garbeam@8: garbeam@18: /* mouse.c */ garbeam@18: extern void mresize(Client *c); garbeam@18: extern void mmove(Client *c); garbeam@18: garbeam@32: /* util.c */ garbeam@33: extern void error(const char *errstr, ...); garbeam@32: extern void *emallocz(unsigned int size); garbeam@32: extern void *emalloc(unsigned int size); garbeam@32: extern void *erealloc(void *ptr, unsigned int size); garbeam@32: extern char *estrdup(const char *str); garbeam@33: extern void spawn(char *argv[]); garbeam@32: extern void swap(void **p1, void **p2); garbeam@32: garbeam@0: /* wm.c */ garbeam@33: extern int error_handler(Display *dsply, XErrorEvent *e); garbeam@13: extern void send_message(Window w, Atom a, long value); garbeam@13: extern int win_proto(Window w); garbeam@27: extern void quit(void *aux);