Simplify key/mb binding moving argtype into flags and dropping another

variable; removes the need to zero out struct binding, leaving a simple
malloc.
This commit is contained in:
okan 2015-03-26 21:41:43 +00:00
parent ac42dff6c1
commit bad97699f9
2 changed files with 9 additions and 13 deletions

View File

@ -84,6 +84,7 @@
#define CWM_NOGAP 0x0002 #define CWM_NOGAP 0x0002
#define CWM_WIN 0x0001 #define CWM_WIN 0x0001
#define CWM_CMD 0x0002
#define CWM_QUIT 0x0000 #define CWM_QUIT 0x0000
#define CWM_RUNNING 0x0001 #define CWM_RUNNING 0x0001
@ -252,7 +253,6 @@ struct binding {
unsigned int modmask; unsigned int modmask;
union press press; union press press;
int flags; int flags;
int argtype;
}; };
TAILQ_HEAD(keybinding_q, binding); TAILQ_HEAD(keybinding_q, binding);
TAILQ_HEAD(mousebinding_q, binding); TAILQ_HEAD(mousebinding_q, binding);

20
conf.c
View File

@ -491,11 +491,10 @@ conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
{ {
struct binding *kb; struct binding *kb;
const char *key; const char *key;
unsigned int i, mask; unsigned int i;
kb = xcalloc(1, sizeof(*kb)); kb = xmalloc(sizeof(*kb));
key = conf_bind_getmask(bind, &mask); key = conf_bind_getmask(bind, &kb->modmask);
kb->modmask |= mask;
kb->press.keysym = XStringToKeysym(key); kb->press.keysym = XStringToKeysym(key);
if (kb->press.keysym == NoSymbol) { if (kb->press.keysym == NoSymbol) {
@ -519,15 +518,13 @@ conf_bind_kbd(struct conf *c, const char *bind, const char *cmd)
kb->callback = name_to_func[i].handler; kb->callback = name_to_func[i].handler;
kb->flags = name_to_func[i].flags; kb->flags = name_to_func[i].flags;
kb->argument = name_to_func[i].argument; kb->argument = name_to_func[i].argument;
kb->argtype |= ARG_INT;
TAILQ_INSERT_TAIL(&c->keybindingq, kb, entry); TAILQ_INSERT_TAIL(&c->keybindingq, kb, entry);
return(1); return(1);
} }
kb->callback = kbfunc_cmdexec; kb->callback = kbfunc_cmdexec;
kb->flags = 0; kb->flags = CWM_CMD;
kb->argument.c = xstrdup(cmd); kb->argument.c = xstrdup(cmd);
kb->argtype |= ARG_CHAR;
TAILQ_INSERT_TAIL(&c->keybindingq, kb, entry); TAILQ_INSERT_TAIL(&c->keybindingq, kb, entry);
return(1); return(1);
} }
@ -543,7 +540,7 @@ conf_unbind_kbd(struct conf *c, struct binding *unbind)
if (key->press.keysym == unbind->press.keysym) { if (key->press.keysym == unbind->press.keysym) {
TAILQ_REMOVE(&c->keybindingq, key, entry); TAILQ_REMOVE(&c->keybindingq, key, entry);
if (key->argtype & ARG_CHAR) if (key->flags & CWM_CMD)
free(key->argument.c); free(key->argument.c);
free(key); free(key);
} }
@ -555,11 +552,10 @@ conf_bind_mouse(struct conf *c, const char *bind, const char *cmd)
{ {
struct binding *mb; struct binding *mb;
const char *button, *errstr; const char *button, *errstr;
unsigned int i, mask; unsigned int i;
mb = xcalloc(1, sizeof(*mb)); mb = xmalloc(sizeof(*mb));
button = conf_bind_getmask(bind, &mask); button = conf_bind_getmask(bind, &mb->modmask);
mb->modmask |= mask;
mb->press.button = strtonum(button, Button1, Button5, &errstr); mb->press.button = strtonum(button, Button1, Button5, &errstr);
if (errstr) { if (errstr) {