diff --git a/src/tabletfinder/dialog.ui b/src/tabletfinder/dialog.ui
--- a/src/tabletfinder/dialog.ui
+++ b/src/tabletfinder/dialog.ui
@@ -159,15 +159,15 @@
- GroupBox
+ Button mapping
-
-
- Number of available Express Keys:
+ Number of available buttons (including pen tip):
diff --git a/src/tabletfinder/hwbuttondialog.h b/src/tabletfinder/hwbuttondialog.h
--- a/src/tabletfinder/hwbuttondialog.h
+++ b/src/tabletfinder/hwbuttondialog.h
@@ -45,19 +45,19 @@
Q_OBJECT
public:
- explicit HWButtonDialog(int maxButtons, QWidget *parent = 0);
+ explicit HWButtonDialog(int maxButtons, QWidget *parent = nullptr);
~HWButtonDialog();
QList buttonMap() const;
protected:
- virtual bool nativeEvent(const QByteArray &eventType, void *message, long int *result) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) final;
private:
void hwKey(unsigned int button);
void nextButton();
- Ui::HWButtonDialog *ui;
+ Ui::HWButtonDialog *ui = nullptr;
int m_maxButtons;
int m_nextButton;
QList m_buttonMap;
diff --git a/src/tabletfinder/hwbuttondialog.cpp b/src/tabletfinder/hwbuttondialog.cpp
--- a/src/tabletfinder/hwbuttondialog.cpp
+++ b/src/tabletfinder/hwbuttondialog.cpp
@@ -19,8 +19,26 @@
#include "hwbuttondialog.h"
#include "ui_hwbuttondialog.h"
-#include
-#include
+
+#include
+#include
+
+static unsigned int QtButton2X11Button(Qt::MouseButton qtbutton) {
+ // We could probably just use log2 here, but I don't know if this can backfire
+ // Qt seems to offer no function for getting index of a set flag
+ unsigned int button = qtbutton;
+ unsigned int buttonNumber = 0;
+ while (button > 0) {
+ buttonNumber++;
+ button >>= 1;
+ }
+
+ if (buttonNumber < 4) {
+ return buttonNumber;
+ } else { // X11 buttons 4-7 are reserved for scroll wheel
+ return buttonNumber + 4;
+ }
+}
using namespace Wacom;
@@ -32,33 +50,15 @@
{
ui->setupUi(this);
- ui->buttonBox->setEnabled(false);
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
nextButton();
}
HWButtonDialog::~HWButtonDialog()
{
delete ui;
}
-bool HWButtonDialog::nativeEvent(const QByteArray& eventType, void* message, long int* result)
-{
- Q_UNUSED(eventType);
- Q_UNUSED(result);
- if (!QX11Info::isPlatformX11()) {
- return false;
- }
-
- xcb_generic_event_t* event = static_cast(message);
- if ((event->response_type & ~0x80) != XCB_BUTTON_PRESS && m_nextButton <= m_maxButtons) {
- xcb_button_press_event_t* buttonEvent = static_cast(message);
- hwKey(buttonEvent->detail);
- return true;
- }
-
- return false;
-}
-
void HWButtonDialog::nextButton()
{
if(m_nextButton <= m_maxButtons) {
@@ -74,9 +74,17 @@
}
}
-void HWButtonDialog::hwKey(unsigned int button)
+void HWButtonDialog::mousePressEvent(QMouseEvent *event)
{
+ if (event->button() == Qt::MouseButton::NoButton) {
+ return;
+ }
+ hwKey(QtButton2X11Button(event->button()));
+}
+
+void HWButtonDialog::hwKey(unsigned int button)
+{
if(m_nextButton <= m_maxButtons) {
QString text = i18n("Hardware button %1 detected.", button);
ui->textEdit->insertHtml(text);
@@ -91,12 +99,13 @@
if(m_nextButton > m_maxButtons) {
ui->textEdit->insertHtml(i18n("All buttons detected. Please close dialog"));
+ ui->textEdit->insertHtml(QLatin1String("
"));
QTextCursor cursor = ui->textEdit->textCursor();
cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
ui->textEdit->setTextCursor(cursor);
- ui->buttonBox->setEnabled(true);
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
}
else {
nextButton();