/* See LICENSE file for copyright and license details. */ #include /* enums */ enum { BarTop, BarBot, BarOff }; /* bar position */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { ColBorder, ColFG, ColBG, ColLast }; /* color */ enum { NetSupported, NetWMName, NetLast }; /* EWMH atoms */ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ /* typedefs */ typedef struct Client Client; struct Client { char name[256]; int x, y, w, h; int rx, ry, rw, rh; /* revert geometry */ int basew, baseh, incw, inch, maxw, maxh, minw, minh; int minax, maxax, minay, maxay; long flags; unsigned int border, oldborder; Bool isbanned, isfixed, ismax, isfloating, wasfloating; Bool *tags; Client *next; Client *prev; Client *snext; Window win; }; typedef struct { int x, y, w, h; unsigned long norm[ColLast]; unsigned long sel[ColLast]; Drawable drawable; GC gc; struct { int ascent; int descent; int height; XFontSet set; XFontStruct *xfont; } font; } DC; /* draw context */ typedef struct { unsigned long mod; KeySym keysym; void (*func)(const char *arg); const char *arg; } Key; typedef struct { const char *symbol; void (*arrange)(void); } Layout; /* functions */ void applyrules(Client *c); void arrange(void); void attach(Client *c); void attachstack(Client *c); void ban(Client *c); void buttonpress(XEvent *e); void checkotherwm(void); void cleanup(void); void compileregs(void); void configure(Client *c); void configurenotify(XEvent *e); void configurerequest(XEvent *e); void destroynotify(XEvent *e); void detach(Client *c); void detachstack(Client *c); void drawbar(void); void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]); void drawtext(const char *text, unsigned long col[ColLast]); void *emallocz(unsigned int size); void enternotify(XEvent *e); void eprint(const char *errstr, ...); void expose(XEvent *e); void floating(void); /* default floating layout */ void focus(Client *c); void focusnext(const char *arg); void focusprev(const char *arg); Client *getclient(Window w); unsigned long getcolor(const char *colstr); long getstate(Window w); Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); void grabbuttons(Client *c, Bool focused); unsigned int idxoftag(const char *tag); void initfont(const char *fontstr); Bool isarrange(void (*func)()); Bool isoccupied(unsigned int t); Bool isprotodel(Client *c); Bool isvisible(Client *c); void keypress(XEvent *e); void killclient(const char *arg); void leavenotify(XEvent *e); void manage(Window w, XWindowAttributes *wa); void mappingnotify(XEvent *e); void maprequest(XEvent *e); void movemouse(Client *c); Client *nexttiled(Client *c); void propertynotify(XEvent *e); void quit(const char *arg); void resize(Client *c, int x, int y, int w, int h, Bool sizehints); void resizemouse(Client *c); void restack(void); void run(void); void scan(void); void setclientstate(Client *c, long state); void setlayout(const char *arg); void setmwfact(const char *arg); void setup(void); void spawn(const char *arg); void tag(const char *arg); unsigned int textnw(const char *text, unsigned int len); unsigned int textw(const char *text); void tile(void); void togglebar(const char *arg); void togglefloating(const char *arg); void togglemax(const char *arg); void toggletag(const char *arg); void toggleview(const char *arg); void unban(Client *c); void unmanage(Client *c); void unmapnotify(XEvent *e); void updatebarpos(void); void updatesizehints(Client *c); void updatetitle(Client *c); void view(const char *arg); void viewprevtag(const char *arg); /* views previous selected tags */ int xerror(Display *dpy, XErrorEvent *ee); int xerrordummy(Display *dsply, XErrorEvent *ee); int xerrorstart(Display *dsply, XErrorEvent *ee); void zoom(const char *arg);