|
|
@ -25,8 +25,6 @@ |
|
|
|
* |
|
|
|
* To understand everything else, start reading main(). |
|
|
|
*/ |
|
|
|
#include "dwm.h" |
|
|
|
|
|
|
|
#include <errno.h> |
|
|
|
#include <locale.h> |
|
|
|
#include <stdarg.h> |
|
|
@ -41,73 +39,17 @@ |
|
|
|
#include <X11/cursorfont.h> |
|
|
|
#include <X11/keysym.h> |
|
|
|
#include <X11/Xatom.h> |
|
|
|
#include <X11/Xlib.h> |
|
|
|
#include <X11/Xproto.h> |
|
|
|
#include <X11/Xutil.h> |
|
|
|
|
|
|
|
#include "dwm.h" |
|
|
|
|
|
|
|
/* macros */ |
|
|
|
#define BUTTONMASK (ButtonPressMask | ButtonReleaseMask) |
|
|
|
#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) |
|
|
|
#define MOUSEMASK (BUTTONMASK | PointerMotionMask) |
|
|
|
|
|
|
|
/* local typedefs */ |
|
|
|
typedef struct { |
|
|
|
const char *prop; |
|
|
|
const char *tags; |
|
|
|
Bool isfloating; |
|
|
|
} Rule; |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
regex_t *propregex; |
|
|
|
regex_t *tagregex; |
|
|
|
} Regs; |
|
|
|
|
|
|
|
/* variables */ |
|
|
|
char stext[256]; |
|
|
|
double mwfact; |
|
|
|
int screen, sx, sy, sw, sh, wax, way, waw, wah; |
|
|
|
int (*xerrorxlib)(Display *, XErrorEvent *); |
|
|
|
unsigned int bh, bpos; |
|
|
|
unsigned int blw = 0; |
|
|
|
unsigned int ltidx = 0; /* default */ |
|
|
|
unsigned int nlayouts = 0; |
|
|
|
unsigned int nrules = 0; |
|
|
|
unsigned int numlockmask = 0; |
|
|
|
void (*handler[LASTEvent]) (XEvent *) = { |
|
|
|
[ButtonPress] = buttonpress, |
|
|
|
[ConfigureRequest] = configurerequest, |
|
|
|
[ConfigureNotify] = configurenotify, |
|
|
|
[DestroyNotify] = destroynotify, |
|
|
|
[EnterNotify] = enternotify, |
|
|
|
[LeaveNotify] = leavenotify, |
|
|
|
[Expose] = expose, |
|
|
|
[KeyPress] = keypress, |
|
|
|
[MappingNotify] = mappingnotify, |
|
|
|
[MapRequest] = maprequest, |
|
|
|
[PropertyNotify] = propertynotify, |
|
|
|
[UnmapNotify] = unmapnotify |
|
|
|
}; |
|
|
|
Atom wmatom[WMLast], netatom[NetLast]; |
|
|
|
Bool otherwm, readin; |
|
|
|
Bool running = True; |
|
|
|
Bool selscreen = True; |
|
|
|
Client *clients = NULL; |
|
|
|
Client *sel = NULL; |
|
|
|
Client *stack = NULL; |
|
|
|
Cursor cursor[CurLast]; |
|
|
|
Display *dpy; |
|
|
|
DC dc = {0}; |
|
|
|
Window barwin, root; |
|
|
|
Regs *regs = NULL; |
|
|
|
|
|
|
|
/* configuration, allows nested code to access above variables */ |
|
|
|
#include "config.h" |
|
|
|
|
|
|
|
/* Statically define the number of tags. */ |
|
|
|
unsigned int ntags = sizeof tags / sizeof tags[0]; |
|
|
|
Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True}; |
|
|
|
Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True}; |
|
|
|
|
|
|
|
/* functions*/ |
|
|
|
void |
|
|
|
applyrules(Client *c) { |
|
|
|
static char buf[512]; |
|
|
@ -1032,7 +974,6 @@ quit(const char *arg) { |
|
|
|
|
|
|
|
void |
|
|
|
resize(Client *c, int x, int y, int w, int h, Bool sizehints) { |
|
|
|
double dx, dy, max, min, ratio; |
|
|
|
XWindowChanges wc; |
|
|
|
|
|
|
|
if(sizehints) { |
|
|
|