t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 44f2e8b952264311887c3b51dc6a987af226062a
   DIR parent 3f942f9e798d4222116ae4c083d2482ddb1e972b
   URI Author: Anselm R. Garbe <garbeam@wmii.de>
       Date:   Thu, 13 Jul 2006 10:34:55 +0200
       
       added dev.c instead of kb.c
       
       Diffstat:
         M Makefile                            |       2 +-
         M README                              |       2 +-
         A dev.c                               |     134 +++++++++++++++++++++++++++++++
         D kb.c                                |      60 -------------------------------
         D mouse.c                             |      81 ------------------------------
         M wm.h                                |       4 +---
       
       6 files changed, 137 insertions(+), 146 deletions(-)
       ---
   DIR diff --git a/Makefile b/Makefile
       t@@ -3,7 +3,7 @@
        
        include config.mk
        
       -SRC = client.c draw.c event.c kb.c mouse.c util.c wm.c
       +SRC = client.c dev.c draw.c event.c util.c wm.c
        OBJ = ${SRC:.c=.o}
        MAN1 = dwm.1 
        BIN = dwm
   DIR diff --git a/README b/README
       t@@ -37,4 +37,4 @@ This will start dwm on display :1 of the host foo.bar.
        Configuration
        -------------
        The configuration of dwm is done by customizing the wm.h source file. To
       -customize the key bindings edit kb.c.
       +customize the key bindings edit dev.c.
   DIR diff --git a/dev.c b/dev.c
       t@@ -0,0 +1,134 @@
       +/*
       + * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
       + * See LICENSE file for license details.
       + */
       +
       +#include "wm.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;
       +                }
       +        }
       +}
   DIR diff --git a/kb.c b/kb.c
       t@@ -1,60 +0,0 @@
       -/*
       - * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
       - * See LICENSE file for license details.
       - */
       -
       -#include "wm.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;
       -                }
       -}
   DIR diff --git a/mouse.c b/mouse.c
       t@@ -1,81 +0,0 @@
       -/*
       - * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
       - * See LICENSE file for license details.
       - */
       -
       -#include <stdlib.h>
       -#include <string.h>
       -#include <unistd.h>
       -
       -#include "wm.h"
       -
       -#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;
       -                }
       -        }
       -}
   DIR diff --git a/wm.h b/wm.h
       t@@ -115,11 +115,9 @@ extern unsigned int texth(Fnt *font);
        /* event.c */
        extern void discard_events(long even_mask);
        
       -/* kb.c */
       +/* dev.c */
        extern void update_keys(void);
        extern void keypress(XEvent *e);
       -
       -/* mouse.c */
        extern void mresize(Client *c);
        extern void mmove(Client *c);