diff options
author | okan <okan> | 2013-07-08 16:10:55 +0000 |
---|---|---|
committer | okan <okan> | 2013-07-08 16:10:55 +0000 |
commit | 912ec90ea1f6e25b33a2bb0d6d7a1138622bd099 (patch) | |
tree | f600b3ca953c91529868b650eb5a6750f169178c | |
parent | fe439f2b965b9ee6e9dc9a6d8e2ecb443f86e788 (diff) | |
download | cwm-912ec90ea1f6e25b33a2bb0d6d7a1138622bd099.tar.gz cwm-912ec90ea1f6e25b33a2bb0d6d7a1138622bd099.tar.xz cwm-912ec90ea1f6e25b33a2bb0d6d7a1138622bd099.zip |
move duplicate kbd and mouse modifier parsing to a generic function;
from Tiago Cunha
-rw-r--r-- | conf.c | 64 |
1 files changed, 30 insertions, 34 deletions
diff --git a/conf.c b/conf.c index a771963..d84bc4f 100644 --- a/conf.c +++ b/conf.c @@ -31,8 +31,9 @@ #include "calmwm.h" -static void conf_mouseunbind(struct conf *, struct mousebinding *); -static void conf_unbind(struct conf *, struct keybinding *); +static const char *conf_bind_getmask(const char *, u_int *); +static void conf_mouseunbind(struct conf *, struct mousebinding *); +static void conf_unbind(struct conf *, struct keybinding *); /* Add an command menu entry to the end of the menu */ void @@ -442,27 +443,35 @@ static struct { { 'S', ShiftMask }, }; +static const char * +conf_bind_getmask(const char *name, u_int *mask) +{ + char *dash; + const char *ch; + u_int i; + + *mask = 0; + if ((dash = strchr(name, '-')) == NULL) + return (name); + for (i = 0; i < nitems(bind_mods); i++) { + if ((ch = strchr(name, bind_mods[i].chr)) != NULL && ch < dash) + *mask |= bind_mods[i].mask; + } + + /* Skip past modifiers. */ + return (dash + 1); +} + void conf_bindname(struct conf *c, char *name, char *binding) { struct keybinding *current_binding; - char *substring, *tmp; - u_int i; + const char *substring; + u_int i, mask; current_binding = xcalloc(1, sizeof(*current_binding)); - - if ((substring = strchr(name, '-')) != NULL) { - for (i = 0; i < nitems(bind_mods); i++) { - if ((tmp = strchr(name, bind_mods[i].chr)) != - NULL && tmp < substring) { - current_binding->modmask |= bind_mods[i].mask; - } - } - - /* skip past the modifiers */ - substring++; - } else - substring = name; + substring = conf_bind_getmask(name, &mask); + current_binding->modmask |= mask; if (substring[0] == '[' && substring[strlen(substring)-1] == ']') { @@ -551,25 +560,12 @@ int conf_mousebind(struct conf *c, char *name, char *binding) { struct mousebinding *current_binding; - char *substring, *tmp; - u_int button; - const char *errstr; - u_int i; + const char *errstr, *substring; + u_int button, i, mask; current_binding = xcalloc(1, sizeof(*current_binding)); - - if ((substring = strchr(name, '-')) != NULL) { - for (i = 0; i < nitems(bind_mods); i++) { - if ((tmp = strchr(name, bind_mods[i].chr)) != - NULL && tmp < substring) { - current_binding->modmask |= bind_mods[i].mask; - } - } - - /* skip past the modifiers */ - substring++; - } else - substring = name; + substring = conf_bind_getmask(name, &mask); + current_binding->modmask |= mask; button = strtonum(substring, 1, 5, &errstr); if (errstr) |