about summary refs log tree commit diff stats
path: root/wm.c
diff options
context:
space:
mode:
Diffstat (limited to 'wm.c')
-rw-r--r--wm.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/wm.c b/wm.c
index 6d67bfc..ed002f7 100644
--- a/wm.c
+++ b/wm.c
@@ -37,17 +37,17 @@ char stext[1024];
 int tsel = Tdev; /* default tag */
 int screen, sx, sy, sw, sh, th;
 
-Brush brush = {0};
+DC dc = {0};
 Client *clients = NULL;
 Client *stack = NULL;
 
 static Bool other_wm_running;
 static const char version[] =
-	"gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
+	"dwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
 static int (*x_error_handler) (Display *, XErrorEvent *);
 
 static void
-usage() {	error("usage: gridwm [-v]\n"); }
+usage() {	error("usage: dwm [-v]\n"); }
 
 static void
 scan_wins()
@@ -149,7 +149,7 @@ error_handler(Display *dpy, XErrorEvent *error)
 			|| (error->request_code == X_GrabKey
 				&& error->error_code == BadAccess))
 		return 0;
-	fprintf(stderr, "gridwm: fatal error: request code=%d, error code=%d\n",
+	fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
 			error->request_code, error->error_code);
 	return x_error_handler(dpy, error); /* may call exit() */
 }
@@ -203,7 +203,7 @@ main(int argc, char *argv[])
 
 	dpy = XOpenDisplay(0);
 	if(!dpy)
-		error("gridwm: cannot connect X server\n");
+		error("dwm: cannot connect X server\n");
 
 	screen = DefaultScreen(dpy);
 	root = RootWindow(dpy, screen);
@@ -216,7 +216,7 @@ main(int argc, char *argv[])
 	XFlush(dpy);
 
 	if(other_wm_running)
-		error("gridwm: another window manager is already running\n");
+		error("dwm: another window manager is already running\n");
 
 	sx = sy = 0;
 	sw = DisplayWidth(dpy, screen);
@@ -244,20 +244,19 @@ main(int argc, char *argv[])
 	update_keys();
 
 	/* style */
-	loadcolors(screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR);
-	loadfont(&brush.font, FONT);
+	initcolors(BGCOLOR, FGCOLOR, BORDERCOLOR);
+	initfont(&dc.font, FONT);
 
-	th = texth(&brush.font);
+	th = texth(&dc.font);
 
-	brush.drawable = XCreatePixmap(dpy, root, sw, th, DefaultDepth(dpy, screen));
-	brush.gc = XCreateGC(dpy, root, 0, 0);
+	dc.drawable = XCreatePixmap(dpy, root, sw, th, DefaultDepth(dpy, screen));
+	dc.gc = XCreateGC(dpy, root, 0, 0);
 
 	wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
 					| LeaveWindowMask;
 	wa.cursor = cursor[CurNormal];
 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
 
-	arrange = grid;
 	scan_wins();
 
 	while(running) {
8b77742e'>^
48b6e9a ^
b9da4b0 ^

a05beb6 ^
b9da4b0 ^
dfd84f9 ^
b9da4b0 ^

dfd84f9 ^


b9da4b0 ^
dfd84f9 ^
3f942f9 ^



da2bbd3 ^
b9da4b0 ^











3f942f9 ^
b9da4b0 ^


3f942f9 ^

48b6e9a ^
b9da4b0 ^


b9da4b0 ^
dfd84f9 ^
b9da4b0 ^

dfd84f9 ^


b9da4b0 ^
dfd84f9 ^
3f942f9 ^

da2bbd3 ^
b9da4b0 ^

b9da4b0 ^




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

                                                              


                                        
                
 


                   
                       
 


















































                                                                                          



                                                             



                  
                     
 

                   
                                                                                  

                                                                                     
                                                                
                 
                                                               

                                 


                                             
                                  
                                    



                                                                        
                                  











                                                         
                                 


                         

                   
                                                                                  


                                                                                   
                 
                                                               

                                  


                                             
                                  
                                    

                                                         
                                  

                                   




                                                         
/*
 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
 * See LICENSE file for license details.
 */

#include "dwm.h"

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <X11/keysym.h>

/********** CUSTOMIZE **********/

const char *term[] = { 
	"aterm", "-tr", "+sb", "-bg", "black", "-fg", "white", "-fn",
	"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*",NULL
};
const char *browse[] = { "firefox", NULL };

static Key key[] = {
	{ Mod1Mask, XK_Return, (void (*)(void *))spawn, term },
	{ Mod1Mask, XK_w, (void (*)(void *))spawn, browse },
	{ Mod1Mask, XK_k, sel, "prev" }, 
	{ Mod1Mask, XK_j, sel, "next" }, 
	{ Mod1Mask, XK_space, toggle, NULL }, 
	{ Mod1Mask, XK_m, max, NULL }, 
	{ Mod1Mask | ShiftMask, XK_c, ckill, NULL }, 
	{ Mod1Mask | ShiftMask, XK_q, quit, NULL },
};

/********** CUSTOMIZE **********/

void
update_keys(void)
{
	unsigned int i, len;
	KeyCode code;

	len = sizeof(key) / sizeof(key[0]);
	for(i = 0; i < len; i++) {
		code = XKeysymToKeycode(dpy, key[i].keysym);
		XUngrabKey(dpy, code, key[i].mod, root);
		XGrabKey(dpy, code, key[i].mod, root, True, GrabModeAsync, GrabModeAsync);
	}
}

void
keypress(XEvent *e)
{
	XKeyEvent *ev = &e->xkey;
	unsigned int i, len;
	KeySym keysym;

	keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
	len = sizeof(key) / sizeof(key[0]);
	for(i = 0; i < len; i++)
		if((keysym == key[i].keysym) && (key[i].mod == ev->state)) {
			if(key[i].func)
				key[i].func(key[i].aux);
			return;
		}
}

#define ButtonMask      (ButtonPressMask | ButtonReleaseMask)
#define MouseMask       (ButtonMask | PointerMotionMask)

void
mresize(Client *c)
{
	XEvent ev;
	int ocx, ocy;

	ocx = c->x;
	ocy = c->y;
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
				None, cursor[CurResize], CurrentTime) != GrabSuccess)
		return;
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
	for(;;) {
		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
		switch(ev.type) {
		default: break;
		case Expose:
			handler[Expose](&ev);
			break;
		case MotionNotify:
			XFlush(dpy);
			c->w = abs(ocx - ev.xmotion.x);
			c->h = abs(ocy - ev.xmotion.y);
			c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
			c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
			resize(c);
			break;
		case ButtonRelease:
			XUngrabPointer(dpy, CurrentTime);
			return;
		}
	}
}

void
mmove(Client *c)
{
	XEvent ev;
	int x1, y1, ocx, ocy, di;
	unsigned int dui;
	Window dummy;

	ocx = c->x;
	ocy = c->y;
	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
				None, cursor[CurMove], CurrentTime) != GrabSuccess)
		return;
	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
	for(;;) {
		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
		switch (ev.type) {
		default: break;
		case Expose:
			handler[Expose](&ev);
			break;
		case MotionNotify:
			XFlush(dpy);
			c->x = ocx + (ev.xmotion.x - x1);
			c->y = ocy + (ev.xmotion.y - y1);
			resize(c);
			break;
		case ButtonRelease:
			XUngrabPointer(dpy, CurrentTime);
			return;
		}
	}
}