Browse Source

Disable certain mouse wheel events in Options dialog

The mouse wheel events for QComboBox & QSpinBox widgets in Options
dialog are filtered out.
adaptive-webui-19844
Chocobo1 7 years ago
parent
commit
96819f3798
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 4
      src/gui/advancedsettings.cpp
  2. 17
      src/gui/advancedsettings.h
  3. 21
      src/gui/optionsdlg.cpp

4
src/gui/advancedsettings.cpp

@ -485,10 +485,6 @@ void AdvancedSettings::loadAdvancedSettings()
template <typename T> template <typename T>
void AdvancedSettings::addRow(int row, const QString &rowText, T* widget) void AdvancedSettings::addRow(int row, const QString &rowText, T* widget)
{ {
// ignore mouse wheel event
static WheelEventEater filter;
widget->installEventFilter(&filter);
setItem(row, PROPERTY, new QTableWidgetItem(rowText)); setItem(row, PROPERTY, new QTableWidgetItem(rowText));
setCellWidget(row, VALUE, widget); setCellWidget(row, VALUE, widget);

17
src/gui/advancedsettings.h

@ -31,28 +31,11 @@
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QEvent>
#include <QLabel> #include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QSpinBox> #include <QSpinBox>
#include <QTableWidget> #include <QTableWidget>
class WheelEventEater: public QObject
{
Q_OBJECT
private:
bool eventFilter(QObject *obj, QEvent *event)
{
switch (event->type()) {
case QEvent::Wheel:
return true;
default:
return QObject::eventFilter(obj, event);
}
}
};
class AdvancedSettings: public QTableWidget class AdvancedSettings: public QTableWidget
{ {
Q_OBJECT Q_OBJECT

21
src/gui/optionsdlg.cpp

@ -38,6 +38,7 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QEvent>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
@ -50,6 +51,7 @@
#include "app/application.h" #include "app/application.h"
#include "base/bittorrent/session.h" #include "base/bittorrent/session.h"
#include "base/global.h"
#include "base/net/dnsupdater.h" #include "base/net/dnsupdater.h"
#include "base/net/portforwarder.h" #include "base/net/portforwarder.h"
#include "base/net/proxyconfigurationmanager.h" #include "base/net/proxyconfigurationmanager.h"
@ -72,6 +74,18 @@
#include "ui_optionsdlg.h" #include "ui_optionsdlg.h"
class WheelEventEater : public QObject
{
public:
using QObject::QObject;
private:
bool eventFilter(QObject *, QEvent *event) override
{
return (event->type() == QEvent::Wheel);
}
};
// Constructor // Constructor
OptionsDialog::OptionsDialog(QWidget *parent) OptionsDialog::OptionsDialog(QWidget *parent)
: QDialog(parent) : QDialog(parent)
@ -425,6 +439,13 @@ OptionsDialog::OptionsDialog(QWidget *parent)
m_ui->textTempPath->setDialogCaption(tr("Choose a save directory")); m_ui->textTempPath->setDialogCaption(tr("Choose a save directory"));
m_ui->textTempPath->setMode(FileSystemPathEdit::Mode::DirectorySave); m_ui->textTempPath->setMode(FileSystemPathEdit::Mode::DirectorySave);
// disable mouse wheel event on widgets to avoid mis-selection
WheelEventEater *wheelEventEater = new WheelEventEater(this);
for (QComboBox *widget : copyAsConst(findChildren<QComboBox *>()))
widget->installEventFilter(wheelEventEater);
for (QSpinBox *widget : copyAsConst(findChildren<QSpinBox *>()))
widget->installEventFilter(wheelEventEater);
loadWindowState(); loadWindowState();
show(); show();
// Have to be called after show(), because splitter width needed // Have to be called after show(), because splitter width needed

Loading…
Cancel
Save