tadded key handling - dwm - [fork] customized build of dwm, the dynamic window … | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 366d81e313e6dd4e9e6c61ed8dfca4b4b40ccde6 | |
parent 8a8b7956b6de80decbfd3bff6d2ad6e5bb69b2bd | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Tue, 11 Jul 2006 11:50:18 +0200 | |
added key handling | |
Diffstat: | |
M Makefile | 2 +- | |
M config.h | 2 ++ | |
A key.c | 26 ++++++++++++++++++++++++++ | |
M wm.c | 29 +---------------------------- | |
M wm.h | 15 ++++++++++++++- | |
5 files changed, 44 insertions(+), 30 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -3,7 +3,7 @@ | |
include config.mk | |
-WMSRC = bar.c client.c draw.c event.c util.c wm.c | |
+WMSRC = bar.c client.c cmd.c draw.c event.c key.c util.c wm.c | |
WMOBJ = ${WMSRC:.c=.o} | |
MENSRC = menu.c draw.c util.c | |
MENOBJ = ${MENSRC:.c=.o} | |
diff --git a/config.h b/config.h | |
t@@ -9,3 +9,5 @@ | |
#define BORDERCOLOR "#000000" | |
#define STATUSCMD "echo -n `date` `uptime | sed 's/.*://; s/,//g'`" \ | |
" `acpi | awk '{print $4}' | sed 's/,/… | |
+#define KEYS \ | |
+ { Mod1Mask, XK_Return, run, "xterm -u8 -bg black -fg white -fn -*-term… | |
diff --git a/key.c b/key.c | |
t@@ -0,0 +1,26 @@ | |
+/* | |
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> | |
+ * See LICENSE file for license details. | |
+ */ | |
+ | |
+#include "wm.h" | |
+ | |
+#include <X11/keysym.h> | |
+ | |
+static Key key[] = { | |
+ KEYS | |
+}; | |
+ | |
+void | |
+update_keys() | |
+{ | |
+ 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, Gra… | |
+ } | |
+} | |
diff --git a/wm.c b/wm.c | |
t@@ -24,7 +24,6 @@ Client *client = NULL; | |
char *bartext, tag[256]; | |
int screen, sel_screen; | |
-unsigned int lock_mask, numlock_mask; | |
/* draw structs */ | |
Brush brush = {0}; | |
t@@ -144,32 +143,6 @@ startup_error_handler(Display *dpy, XErrorEvent *error) | |
} | |
static void | |
-init_lock_keys() | |
-{ | |
- XModifierKeymap *modmap; | |
- KeyCode numlock; | |
- int i; | |
- static int masks[] = { | |
- ShiftMask, LockMask, ControlMask, Mod1Mask, | |
- Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask | |
- }; | |
- | |
- numlock_mask = 0; | |
- modmap = XGetModifierMapping(dpy); | |
- numlock = XKeysymToKeycode(dpy, XStringToKeysym("Num_Lock")); | |
- | |
- if(modmap && modmap->max_keypermod > 0) { | |
- int max = (sizeof(masks) / sizeof(int)) * modmap->max_keypermo… | |
- for(i = 0; i < max; i++) | |
- if(numlock && (modmap->modifiermap[i] == numlock)) | |
- numlock_mask = masks[i / modmap->max_keypermod… | |
- } | |
- XFreeModifiermap(modmap); | |
- | |
- lock_mask = 255 & ~(numlock_mask | LockMask); | |
-} | |
- | |
-static void | |
cleanup() | |
{ | |
/* | |
t@@ -243,7 +216,7 @@ main(int argc, char *argv[]) | |
cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | |
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | |
- init_lock_keys(); | |
+ update_keys(); | |
brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height, | |
DefaultDepth(dpy, screen)); | |
diff --git a/wm.h b/wm.h | |
t@@ -20,6 +20,7 @@ enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; | |
enum { RFloat, RGrid, RLast }; | |
typedef struct Client Client; | |
+typedef struct Key Key; | |
struct Client { | |
char name[256]; | |
t@@ -36,6 +37,13 @@ struct Client { | |
Client *snext; | |
}; | |
+struct Key { | |
+ unsigned long mod; | |
+ KeySym keysym; | |
+ void (*func)(char *arg); | |
+ char *arg; | |
+}; | |
+ | |
extern Display *dpy; | |
extern Window root, barwin; | |
extern Atom wm_atom[WMLast], net_atom[NetLast]; | |
t@@ -46,7 +54,6 @@ extern Bool grid; | |
extern void (*handler[LASTEvent]) (XEvent *); | |
extern int screen, sel_screen; | |
-extern unsigned int lock_mask, numlock_mask; | |
extern char *bartext, tag[256]; | |
extern Brush brush; | |
t@@ -55,9 +62,15 @@ extern Client *client; | |
/* bar.c */ | |
extern void draw_bar(); | |
+/* cmd.c */ | |
+extern void run(char *arg); | |
+ | |
/* client.c */ | |
extern Client *create_client(Window w, XWindowAttributes *wa); | |
extern void manage(Client *c); | |
+/* key.c */ | |
+extern void update_keys(); | |
+ | |
/* wm.c */ | |
extern int win_proto(Window w); |