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();