The wcmIsSiblingDevice function uses several tricks to try and determine if two devices should be considered siblings. If its 'logical_only' parameter is false, this includes comparing device names. Device name comparison is complicated by the fact that suffixes are added on by the X and kernel drivers. To deal with this, the wcmSplitName function tries to split a device name into three pieces: its "basename" that describes the model, its "subdevice" name that describes the interface, and its "tool" name which describes the X11 tool.
Spliting the name is a somewhat kludgy process which does not properly handle the device names for the MobileStudio Pro or Cintiq Pro. The kernel reads the name of these devices directly from the hardware's descriptors, and the names are slightly different between the pen and touch interfaces (the touch device has an extra "Touch" suffix). This patch tweaks how wcmSplitName breaks apart device names in order to handle the MobileStudio Pro and Cintiq Pro. Specifically, it now allows the "subdevice" to contain an arbitrary number of "Pen", "Finger", or "Pad" suffixes. For the MobileStudio Pro and Cintiq Pro, this should allow the "basename" that is considered for sibling device matches to be identical between both the pen and touch interfaces. Signed-off-by: Jason Gerecke <jason.gere...@wacom.com> Signed-off-by: Ping Cheng <ping.ch...@wacom.com> --- src/wcmConfig.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/wcmConfig.c b/src/wcmConfig.c index 27c686f..ab82918 100644 --- a/src/wcmConfig.c +++ b/src/wcmConfig.c @@ -320,10 +320,18 @@ static void wcmSplitName(char* devicename, char *basename, char *subdevice, char { *a = '\0'; b = strrchr(name, ' '); - if (b && (!strcmp(b, " Pen") || !strcmp(b, " Finger") || !strcmp(b, " Pad"))) + + while (b) { - *b = '\0'; - strncat(subdevice, b+1, len-1); + if (!strcmp(b, " Pen") || !strcmp(b, " Finger") || !strcmp(b, " Pad") || !strcmp(b, " Touch")) + { + *b = '\0'; + strncpy(subdevice, b+1, len-1); + subdevice[len-1] = '\0'; + b = strrchr(name, ' '); + } + else + b = NULL; } strncat(tool, a+1, len-1); } -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel