BlackBerry Plugin: support 8 mouse buttons, instead of just 3.
authorRick Stockton <rickstockton@reno-computerhelp.com>
Thu, 8 Mar 2012 00:38:37 +0000 (16:38 -0800)
committerQt by Nokia <qt-info@nokia.com>
Thu, 8 Mar 2012 22:52:34 +0000 (23:52 +0100)
The mask of possible mouse buttons in QNX provides tracking for the
up/down State of up to 8 mouse buttons. This update adds support
for the 5 buttons which we previously ignored in Qt on this Platform.

Task-number: QTBUG-24682

Change-Id: I8c1d2b2a5d0deb3b857fb387c242c3792e21ff95
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
src/plugins/platforms/blackberry/qbbeventthread.cpp

index 547428d..6951921 100644 (file)
@@ -380,13 +380,26 @@ void QBBEventThread::handlePointerEvent(screen_event_t event)
     QPoint localPoint(windowPos[0], windowPos[1]);
 
     // Convert buttons.
+    // Some QNX header files invert 'Right Button versus "Left Button' ('Right' == 0x01). But they also offer a 'Button Swap' bit,
+    // so we may receive events as shown. (If this is wrong, the fix is easy.)
+    // QNX Button mask is 8 buttons wide, with a maximum value of x080.
     Qt::MouseButtons buttons = Qt::NoButton;
-    if (buttonState & 1)
+    if (buttonState & 0x01)
         buttons |= Qt::LeftButton;
-    if (buttonState & 2)
+    if (buttonState & 0x02)
         buttons |= Qt::MidButton;
-    if (buttonState & 4)
+    if (buttonState & 0x04)
         buttons |= Qt::RightButton;
+    if (buttonState & 0x08)
+        buttons |= Qt::ExtraButton1;    // AKA 'Qt::BackButton'
+    if (buttonState & 0x10)
+        buttons |= Qt::ExtraButton2;    // AKA 'Qt::ForwardButton'
+    if (buttonState & 0x20)
+        buttons |= Qt::ExtraButton3;
+    if (buttonState & 0x40)
+        buttons |= Qt::ExtraButton4;
+    if (buttonState & 0x80)
+        buttons |= Qt::ExtraButton5;
 
     if (w) {
         // Inject mouse event into Qt only if something has changed.