all repos — dwm @ 4ad20ffc2c23d29329bc7349985d889f2cb45612

fork of suckless dynamic window manager

dwm.h (view raw)

  1/*
  2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
  3 * See LICENSE file for license details.
  4 */
  5
  6#include "config.h"
  7#include <X11/Xlib.h>
  8
  9/* mask shorthands, used in event.c and client.c */
 10#define BUTTONMASK		(ButtonPressMask | ButtonReleaseMask)
 11#define MOUSEMASK		(BUTTONMASK | PointerMotionMask)
 12#define PROTODELWIN		1
 13
 14typedef union Arg Arg;
 15typedef struct Client Client;
 16typedef struct DC DC;
 17typedef struct Fnt Fnt;
 18
 19union Arg {
 20	const char *cmd;
 21	int i;
 22};
 23
 24/* atoms */
 25enum { NetSupported, NetWMName, NetLast };
 26enum { WMProtocols, WMDelete, WMLast };
 27
 28/* cursor */
 29enum { CurNormal, CurResize, CurMove, CurLast };
 30
 31/* windowcorners */
 32typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner;
 33
 34struct Fnt {
 35	int ascent;
 36	int descent;
 37	int height;
 38	XFontSet set;
 39	XFontStruct *xfont;
 40};
 41
 42struct DC { /* draw context */
 43	int x, y, w, h;
 44	unsigned long bg;
 45	unsigned long fg;
 46	unsigned long border;
 47	Drawable drawable;
 48	Fnt font;
 49	GC gc;
 50};
 51
 52struct Client {
 53	char name[256];
 54	int proto;
 55	int x, y, w, h;
 56	int tx, ty, tw, th; /* title */
 57	int basew, baseh, incw, inch, maxw, maxh, minw, minh;
 58	int grav;
 59	long flags; 
 60	unsigned int border;
 61	Bool isfloat;
 62	Bool ismax;
 63	Bool *tags;
 64	Client *next;
 65	Client *prev;
 66	Window win;
 67	Window title;
 68};
 69
 70extern const char *tags[];
 71extern char stext[1024];
 72extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
 73extern unsigned int ntags;
 74extern void (*handler[LASTEvent])(XEvent *);
 75extern void (*arrange)(Arg *);
 76extern Atom wmatom[WMLast], netatom[NetLast];
 77extern Bool running, issel, *seltag;
 78extern Client *clients, *sel;
 79extern Cursor cursor[CurLast];
 80extern DC dc;
 81extern Display *dpy;
 82extern Window root, barwin;
 83
 84/* client.c */
 85extern void ban(Client *c);
 86extern void focus(Client *c);
 87extern void focusnext(Arg *arg);
 88extern void focusprev(Arg *arg);
 89extern Client *getclient(Window w);
 90extern Client *getctitle(Window w);
 91extern void gravitate(Client *c, Bool invert);
 92extern void killclient(Arg *arg);
 93extern void manage(Window w, XWindowAttributes *wa);
 94extern void resize(Client *c, Bool sizehints, Corner sticky);
 95extern void setsize(Client *c);
 96extern void settitle(Client *c);
 97extern void togglemax(Arg *arg);
 98extern void unmanage(Client *c);
 99extern void zoom(Arg *arg);
100
101/* draw.c */
102extern void drawall();
103extern void drawstatus();
104extern void drawtitle(Client *c);
105extern unsigned long getcolor(const char *colstr);
106extern void setfont(const char *fontstr);
107extern unsigned int textw(const char *text);
108
109/* event.c */
110extern void grabkeys();
111
112/* main.c */
113extern int getproto(Window w);
114extern void quit(Arg *arg);
115extern void sendevent(Window w, Atom a, long value);
116extern int xerror(Display *dsply, XErrorEvent *ee);
117
118/* tag.c */
119extern void dofloat(Arg *arg);
120extern void dotile(Arg *arg);
121extern void initrregs();
122extern Bool isvisible(Client *c);
123extern Client *getnext(Client *c);
124extern Client *getprev(Client *c);
125extern void restack();
126extern void settags(Client *c);
127extern void tag(Arg *arg);
128extern void togglemode(Arg *arg);
129extern void toggletag(Arg *arg);
130extern void toggleview(Arg *arg);
131extern void view(Arg *arg);
132
133/* util.c */
134extern void *emallocz(unsigned int size);
135extern void eprint(const char *errstr, ...);
136extern void *erealloc(void *ptr, unsigned int size);
137extern void spawn(Arg *arg);