Great idea! I have a screen where all keys are used and I need an extra key to go back a screen. The XButton was actioning a change on the screen before XButtonHeld could fire.
I used your idea to change the XButtonDown to XButtonUp and kept the XButtonHeld as it was. This worked!
The XButtonHeld gets triggered and the XButtonUp doesn't get a look in. Not sure what's going on behind the scenes, but from my testing the XButtonUp isn't firing - so that approach seems to work.