It's awfully late for an API change to Qt5, but this would be an awkward
Backward Compatibility problem to attempt in later Qt5 Releases: Should
Qt5 present a 32-bit Button State mask?
** Background **
As you all remember, I added "more mouse buttons" for MouseButtonPress
and MouseButtonRelease events into Qt5 between December and March. The
number of buttons varies according to the Platform Plugin, which (IIRC,
SWAG) is as follows:
Wayland, XCB using X11's evdev driver, OS-X "Cocoa": 16 buttons maximum
QNX: 8 buttons
Windows: 5 buttons (i.e., no change from Qt 4.x).
XCB using legacy driver "mouse": 27 buttons
DirectFB: supports up to 27 buttons within Qt, but DirectFB issues
appear to limit mouse support to 3 buttons.
And finally, IIRC, a MouseArea can only supports 5 buttons.
** Why this might be useful **
(1) Mouse/Pointer Shortcuts with 2 or more buttons, containing more than
ONE button with a "higher" enum value than "MiddleButton". (We already
get a narrow mask containing
Qt::LeftButton+Qt::RightButton+QtMiddleButton. But LeftButton might be
used for gestures; RightButton pops up context menus, and MiddleButton
is physically hard to push.)
(2) Various KDE and Qt Application might want to determine the State of
all buttons at various times (in particular, at the time of the first
MouseButton event following an XCB_ENTER_WINDOW event.)
** Why it just became possible **
XCB Platform Plugin has been modified to use XI Version 2.x by
default, instead of XI 1.x. XI V2.x provides a button mask of 32 bits.
(Theoretically, multiple mask segments of 32 bits each. But we don't
support those buttons, so we'll ignore any such "extra" bytes of mask
bits.) Right now, in the platform plugin, we downgrade the XI 2.x
pointer ButtonPress and ButtonRelease events, translating them into XI
V1 events (losing information by doing that, obviously.) We SHOULD, IMO,
break BC right now and include a 32-bit mask field for ButtonPress and
ButtonRelease events on all platforms.
That field will never contain a set bit for a button higher than the
supported maximum button number for the platform being used, but will
otherwise include all buttons which remain in "IsPressed" State at the
time of of the event (excluding the button which caused a
MouseButtonRelease event to occur).