summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d394ad8)
raw | patch | inline | side by side (parent: d394ad8)
author | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Sat, 13 Mar 2010 02:48:03 +0000 (03:48 +0100) | ||
committer | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Sat, 13 Mar 2010 02:48:03 +0000 (03:48 +0100) |
src/dialogs/input.cpp | patch | blob | history |
diff --git a/src/dialogs/input.cpp b/src/dialogs/input.cpp
index f2ef8afe065794cc9df77ad86059077d8fbc6216..a8892bde428e5039c0a4c9de7470ab8757c606e5 100644 (file)
--- a/src/dialogs/input.cpp
+++ b/src/dialogs/input.cpp
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;
}