all repos — dwm @ 4d67199a4bb68e5377d2fece62a83fde66c92861

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 higher(Client *c);
 93extern void killclient(Arg *arg);
 94extern void manage(Window w, XWindowAttributes *wa);
 95extern void resize(Client *c, Bool sizehints, Corner sticky);
 96extern void setsize(Client *c);
 97extern void settitle(Client *c);
 98extern void togglemax(Arg *arg);
 99extern void unmanage(Client *c);
100extern void zoom(Arg *arg);
101
102/* draw.c */
103extern void drawall();
104extern void drawstatus();
105extern void drawtitle(Client *c);
106extern unsigned long getcolor(const char *colstr);
107extern void setfont(const char *fontstr);
108extern unsigned int textw(const char *text);
109
110/* event.c */
111extern void grabkeys();
112
113/* main.c */
114extern int getproto(Window w);
115extern void quit(Arg *arg);
116extern void sendevent(Window w, Atom a, long value);
117extern int xerror(Display *dsply, XErrorEvent *ee);
118
119/* tag.c */
120extern void appendtag(Arg *arg);
121extern void dofloat(Arg *arg);
122extern void dotile(Arg *arg);
123extern void initrregs();
124extern Bool isvisible(Client *c);
125extern Client *getnext(Client *c);
126extern Client *getprev(Client *c);
127extern void replacetag(Arg *arg);
128extern void settags(Client *c);
129extern void togglemode(Arg *arg);
130extern void view(Arg *arg);
131extern void toggleview(Arg *arg);
132
133/* util.c */
134extern void *emallocz(unsigned int size);
135extern void eprint(const char *errstr, ...);
136extern void spawn(Arg *arg);