]> Dogcows Code - chaz/openbox/blobdiff - openbox/translate.c
const
[chaz/openbox] / openbox / translate.c
index 9b4c1406e9af9ebb966e4ee798ce25153fb1faf9..11a88f662129c8ac12a229b6c5131e5735d0e4c8 100644 (file)
@@ -1,4 +1,22 @@
-#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>
@@ -21,7 +39,7 @@ 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;
@@ -64,7 +82,7 @@ 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;
@@ -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.024308 seconds and 4 git commands to generate.