A device that's both a pointer and a keyboard device confuses the server with its strict pointer/keyboard separation, see Bug 49950 amongst others. The only viable solution appears to be to split the devices at the driver level into a keyboard and a pointer component, then send the events accordingly.
giving this a wontfix, it's unlikely to get fixed for the evdev driver. however, the libinput driver provides this functionality since this commit: commit 1f43f3921f6ceebd9a0cb92ef998a930d5fc3a3e Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Nov 11 10:10:58 2015 +1000 Split mixed pointer/keyboard devices into two separate X devices
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.