Code

Try harder to fix the tablet configuration problem
authorKrzysztof Kosiński <tweenk.pl@gmail.com>
Sat, 13 Mar 2010 02:48:03 +0000 (03:48 +0100)
committerKrzysztof Kosiński <tweenk.pl@gmail.com>
Sat, 13 Mar 2010 02:48:03 +0000 (03:48 +0100)
src/dialogs/input.cpp

index f2ef8afe065794cc9df77ad86059077d8fbc6216..a8892bde428e5039c0a4c9de7470ab8757c606e5 100644 (file)
@@ -69,15 +69,30 @@ static gchar const *axis_use_strings[GDK_AXIS_LAST] = {
 
 static Glib::ustring sanitized_device_path(gchar const *str)
 {
-    // LP #334800: device names on Windows sometimes contain funny junk like
-    // \x03, \xf2, etc. We need to get rid of this to properly access the settings.
-    gchar *escaped = g_strescape(str, NULL);
+    // LP #334800: tablet device names on Windows sometimes contain funny junk like
+    // \x03, \xf2, etc. Moreover this junk changes between runs.
+    // If the tablet name contains unprintable or non-ASCII characters,
+    // we use some default name.
+    // This might break if someone has two tablets with broken names, but it's
+    // not possible to do anything 100% correct then.
+    bool broken = false;
+    if (!str || *str == 0) {
+        broken = true;
+    } else {
+        for (gchar const *s = str; *s; ++s) {
+            if (*s < 0x20 || *s >= 0x7f) {
+                broken = true;
+                break;
+            }
+        }
+    }
 
-    for (gchar *s = escaped; *s; ++s) {
-        if (*s == '/') *s = '_';
+    Glib::ustring device_path = "/devices/";
+    if (broken) {
+        device_path += "Tablet";
+    } else {
+        device_path += str;
     }
-    Glib::ustring device_path = Glib::ustring("/devices/") + escaped;
-    g_free(escaped);
     return device_path;
 }