diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-03-19 04:16:19 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-03-19 04:16:19 +0000 |
| commit | 4bcd03b2d0904e2b5443a2383b66055422240255 (patch) | |
| tree | eff8130702cf9a4eff2f18cc10f549d9786be0cc /plugins/mouse/translate.c | |
| parent | 51b93d9c4ce080f337fce7175a43d0de269dec81 (diff) | |
mouse and key bindings plugins work. segfault somewhere still on shutdown
Diffstat (limited to 'plugins/mouse/translate.c')
| -rw-r--r-- | plugins/mouse/translate.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/plugins/mouse/translate.c b/plugins/mouse/translate.c new file mode 100644 index 00000000..8d4b0d49 --- /dev/null +++ b/plugins/mouse/translate.c @@ -0,0 +1,55 @@ +#include "../../kernel/openbox.h" +#include <glib.h> +#include <string.h> +#include <stdlib.h> + +static guint translate_modifier(char *str) +{ + if (!strcmp("Mod1", str) || !strcmp("A", str)) return Mod1Mask; + else if (!strcmp("Mod2", str)) return Mod2Mask; + else if (!strcmp("Mod3", str)) return Mod3Mask; + else if (!strcmp("Mod4", str) || !strcmp("W", str)) return Mod4Mask; + else if (!strcmp("Mod5", str)) return Mod5Mask; + else if (!strcmp("C", str)) return ControlMask; + else if (!strcmp("S", str)) return ShiftMask; + g_warning("Invalid modifier '%s' in binding.", str); + return 0; +} + +gboolean translate_button(char *str, guint *state, guint *button) +{ + char **parsed; + char *l; + int i; + gboolean ret = FALSE; + + parsed = g_strsplit(str, "-", -1); + + /* first, find the button (last token) */ + l = NULL; + for (i = 0; parsed[i] != NULL; ++i) + l = parsed[i]; + if (l == NULL) + goto translation_fail; + + /* figure out the mod mask */ + *state = 0; + for (i = 0; parsed[i] != l; ++i) { + guint m = translate_modifier(parsed[i]); + if (!m) goto translation_fail; + *state |= m; + } + + /* figure out the button */ + *button = atoi(l); + if (!*button) { + g_warning("Invalid button '%s' in pointer binding.", l); + goto translation_fail; + } + + ret = TRUE; + +translation_fail: + g_strfreev(parsed); + return ret; +} |
