]> Dogcows Code - chaz/openbox/blobdiff - openbox/translate.c
consistant glib type usage
[chaz/openbox] / openbox / translate.c
index 9b4c1406e9af9ebb966e4ee798ce25153fb1faf9..312d32923928e09c139d3ca9ed836428d7181f19 100644 (file)
@@ -1,10 +1,28 @@
-#include "kernel/openbox.h"
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   translate.c for the Openbox window manager
+   Copyright (c) 2003        Ben Jansens
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
+#include "openbox.h"
 #include "mouse.h"
 #include <glib.h>
 #include <string.h>
 #include <stdlib.h>
 
-static guint translate_modifier(char *str)
+static guint translate_modifier(gchar *str)
 {
     if (!g_ascii_strcasecmp("Mod1", str) ||
         !g_ascii_strcasecmp("A", str)) return Mod1Mask;
@@ -21,11 +39,11 @@ static guint translate_modifier(char *str)
     return 0;
 }
 
-gboolean translate_button(char *str, guint *state, guint *button)
+gboolean translate_button(const gchar *str, guint *state, guint *button)
 {
-    char **parsed;
-    char *l;
-    int i;
+    gchar **parsed;
+    gchar *l;
+    gint i;
     gboolean ret = FALSE;
 
     parsed = g_strsplit(str, "-", -1);
@@ -64,11 +82,11 @@ translation_fail:
     return ret;
 }
 
-gboolean translate_key(char *str, guint *state, guint *keycode)
+gboolean translate_key(const gchar *str, guint *state, guint *keycode)
 {
-    char **parsed;
-    char *l;
-    int i;
+    gchar **parsed;
+    gchar *l;
+    gint i;
     gboolean ret = FALSE;
     KeySym sym;
 
@@ -89,13 +107,24 @@ gboolean translate_key(char *str, guint *state, guint *keycode)
        *state |= m;
     }
 
-    /* figure out the keycode */
-    sym = XStringToKeysym(l);
-    if (sym == NoSymbol) {
-       g_warning("Invalid key name '%s' in key binding.", l);
-       goto translation_fail;
+    if (!g_ascii_strncasecmp("0x", l, 2)) {
+        gchar *end;
+
+        /* take it directly */
+        *keycode = strtol(l, &end, 16);
+        if (*l == '\0' || *end != '\0') {
+            g_warning("Invalid key code '%s' in key binding.", l);
+            goto translation_fail;
+        }
+    } else {
+        /* figure out the keycode */
+        sym = XStringToKeysym(l);
+        if (sym == NoSymbol) {
+            g_warning("Invalid key name '%s' in key binding.", l);
+            goto translation_fail;
+        }
+        *keycode = XKeysymToKeycode(ob_display, sym);
     }
-    *keycode = XKeysymToKeycode(ob_display, sym);
     if (!*keycode) {
        g_warning("Key '%s' does not exist on the display.", l); 
        goto translation_fail;
This page took 0.021685 seconds and 4 git commands to generate.