diff options
author | Sebastian Parborg <darkdefende@gmail.com> | 2019-08-02 17:40:04 +0300 |
---|---|---|
committer | Sebastian Parborg <darkdefende@gmail.com> | 2019-08-02 17:42:24 +0300 |
commit | 369ffbd911c1957c83fa58ba2491cc578179ce2f (patch) | |
tree | 0c4427f45e332c929c85b630b35962f76b0daa4d /intern | |
parent | 455a1e210bccccf6fdf7fff5981a2495360e1d58 (diff) |
Fix T68073: Wacom Intuos 5S no pen pressure on Wayland
The issue is that wayland seems to impose a generic device naming scheme
when using Xwayland For example any table stylus will show up with the
following naming convention: xwayland-stylus:33
For this to work in blender, I had to modify how the identifier string
is extracted. I also renamed the two char pointers in the search
algorithm to be more logical.
Reviewed By: Brecht
Differential Revision: http://developer.blender.org/D5401
Diffstat (limited to 'intern')
-rw-r--r-- | intern/ghost/intern/GHOST_SystemX11.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 31411c823ae..e46edeeac9a 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -2194,23 +2194,28 @@ int GHOST_X11_ApplicationIOErrorHandler(Display * /*display*/) #ifdef WITH_X11_XINPUT +static bool is_filler_char(char c) +{ + return isspace(c) || c == '_' || c == '-' || c == ';' || c == ':'; +} + /* These C functions are copied from Wine 3.12's wintab.c */ static bool match_token(const char *haystack, const char *needle) { - const char *p, *q; - for (p = haystack; *p;) { - while (*p && isspace(*p)) - p++; - if (!*p) + const char *h, *n; + for (h = haystack; *h;) { + while (*h && is_filler_char(*h)) + h++; + if (!*h) break; - for (q = needle; *q && *p && tolower(*p) == tolower(*q); q++) - p++; - if (!*q && (isspace(*p) || !*p)) + for (n = needle; *n && *h && tolower(*h) == tolower(*n); n++) + h++; + if (!*n && (is_filler_char(*h) || !*h)) return true; - while (*p && !isspace(*p)) - p++; + while (*h && !is_filler_char(*h)) + h++; } return false; } |