summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/global/qnamespace.h31
-rw-r--r--src/gui/kernel/qguiapplication.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp39
-rw-r--r--src/plugins/platforms/xlib/qxlibwindow.cpp24
4 files changed, 88 insertions, 14 deletions
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index ce842f36a3..a6e649ee0b 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -155,8 +155,37 @@ public:
MidButton = 0x00000004, // ### Qt 5: remove me
MiddleButton = MidButton,
XButton1 = 0x00000008,
+ BackButton = XButton1,
+ ExtraButton1 = XButton1,
XButton2 = 0x00000010,
- MouseButtonMask = 0x000000ff
+ ForwardButton = XButton2,
+ ExtraButton2 = XButton2,
+ TaskButton = 0x00000020,
+ ExtraButton3 = TaskButton,
+ ExtraButton4 = 0x00000040,
+ ExtraButton5 = 0x00000080,
+ ExtraButton6 = 0x00000100,
+ ExtraButton7 = 0x00000200,
+ ExtraButton8 = 0x00000400,
+ ExtraButton9 = 0x00000800,
+ ExtraButton10 = 0x00001000,
+ ExtraButton11 = 0x00002000,
+ ExtraButton12 = 0x00004000,
+ ExtraButton13 = 0x00008000,
+ ExtraButton14 = 0x00010000,
+ ExtraButton15 = 0x00020000,
+ ExtraButton16 = 0x00040000,
+ ExtraButton17 = 0x00080000,
+ ExtraButton18 = 0x00100000,
+ ExtraButton19 = 0x00200000,
+ ExtraButton20 = 0x00400000,
+ ExtraButton21 = 0x00800000,
+ ExtraButton22 = 0x01000000,
+ ExtraButton23 = 0x02000000,
+ ExtraButton24 = 0x04000000,
+ MaxMouseButton = ExtraButton24,
+ // 4 high-order bits remain available for future use (0x08000000 through 0x40000000).
+ MouseButtonMask = 0xffffffff,
};
Q_DECLARE_FLAGS(MouseButtons, MouseButton)
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 07e9489ddc..b1abe659e4 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -316,7 +316,7 @@ static void init_plugins(const QList<QByteArray> &pluginList)
else
plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)),
QLatin1String(pluginSpec.mid(colonPos+1)));
- qDebug() << " created" << plugin;
+ qDebug() << " created" << plugin;
if (plugin)
QGuiApplicationPrivate::generic_plugin_list.append(plugin);
}
@@ -618,9 +618,9 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance)
mousePressButton = Qt::NoButton;
}
- else { // check to see if a new button has been pressed/released
+ else { // Check to see if a new button has been pressed/released.
for (int check = Qt::LeftButton;
- check <= Qt::XButton2;
+ check <= Qt::MaxMouseButton;
check = check << 1) {
if (check & stateChange) {
button = Qt::MouseButton(check);
@@ -628,7 +628,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
}
}
if (button == Qt::NoButton) {
- // Ignore mouse events that don't change the current state
+ // Ignore mouse events that don't change the current state.
return;
}
buttons = e->buttons;
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 3b379c3caa..4f31e066ca 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -1265,14 +1265,35 @@ static Qt::MouseButtons translateMouseButtons(int s)
static Qt::MouseButton translateMouseButton(xcb_button_t s)
{
switch (s) {
- case 1:
- return Qt::LeftButton;
- case 2:
- return Qt::MidButton;
- case 3:
- return Qt::RightButton;
- default:
- return Qt::NoButton;
+ case 1: return Qt::LeftButton;
+ case 2: return Qt::MidButton;
+ case 3: return Qt::RightButton;
+ // Button values 4-7 were already handled as Wheel events, and won't occur here.
+ case 8: return Qt::BackButton; // Also known as Qt::ExtraButton1
+ case 9: return Qt::ForwardButton; // Also known as Qt::ExtraButton2
+ case 10: return Qt::ExtraButton3;
+ case 11: return Qt::ExtraButton4;
+ case 12: return Qt::ExtraButton5;
+ case 13: return Qt::ExtraButton6;
+ case 14: return Qt::ExtraButton7;
+ case 15: return Qt::ExtraButton8;
+ case 16: return Qt::ExtraButton9;
+ case 17: return Qt::ExtraButton10;
+ case 18: return Qt::ExtraButton11;
+ case 19: return Qt::ExtraButton12;
+ case 20: return Qt::ExtraButton13;
+ case 21: return Qt::ExtraButton14;
+ case 22: return Qt::ExtraButton15;
+ case 23: return Qt::ExtraButton16;
+ case 24: return Qt::ExtraButton17;
+ case 25: return Qt::ExtraButton18;
+ case 26: return Qt::ExtraButton19;
+ case 27: return Qt::ExtraButton20;
+ case 28: return Qt::ExtraButton21;
+ case 29: return Qt::ExtraButton22;
+ case 30: return Qt::ExtraButton23;
+ case 31: return Qt::ExtraButton24;
+ default: return Qt::NoButton;
}
}
@@ -1286,7 +1307,7 @@ void QXcbWindow::handleButtonPressEvent(const xcb_button_press_event_t *event)
Qt::KeyboardModifiers modifiers = connection()->keyboard()->translateModifiers(event->state);
if (event->detail >= 4 && event->detail <= 7) {
- //logic borrowed from qapplication_x11.cpp
+ // Logic borrowed from qapplication_x11.cpp
int delta = 120 * ((event->detail == 4 || event->detail == 6) ? 1 : -1);
bool hor = (((event->detail == 4 || event->detail == 5)
&& (modifiers & Qt::AltModifier))
diff --git a/src/plugins/platforms/xlib/qxlibwindow.cpp b/src/plugins/platforms/xlib/qxlibwindow.cpp
index e388f1054d..c14fadaaaa 100644
--- a/src/plugins/platforms/xlib/qxlibwindow.cpp
+++ b/src/plugins/platforms/xlib/qxlibwindow.cpp
@@ -221,6 +221,30 @@ void QXlibWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e)
}
return;
}
+ case 8: button = Qt::BackButton; break; // Also known as Qt::ExtraButton1
+ case 9: button = Qt::ForwardButton; break; // Also known as Qt::ExtraButton2
+ case 10: button = Qt::ExtraButton3; break;
+ case 11: button = Qt::ExtraButton4; break;
+ case 12: button = Qt::ExtraButton5; break;
+ case 13: button = Qt::ExtraButton6; break;
+ case 14: button = Qt::ExtraButton7; break;
+ case 15: button = Qt::ExtraButton8; break;
+ case 16: button = Qt::ExtraButton9; break;
+ case 17: button = Qt::ExtraButton10; break;
+ case 18: button = Qt::ExtraButton11; break;
+ case 19: button = Qt::ExtraButton12; break;
+ case 20: button = Qt::ExtraButton13; break;
+ case 21: button = Qt::ExtraButton14; break;
+ case 22: button = Qt::ExtraButton15; break;
+ case 23: button = Qt::ExtraButton16; break;
+ case 24: button = Qt::ExtraButton17; break;
+ case 25: button = Qt::ExtraButton18; break;
+ case 26: button = Qt::ExtraButton19; break;
+ case 27: button = Qt::ExtraButton20; break;
+ case 28: button = Qt::ExtraButton21; break;
+ case 29: button = Qt::ExtraButton22; break;
+ case 30: button = Qt::ExtraButton23; break;
+ case 31: button = Qt::ExtraButton24; break;
default: break;
}
}