1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 17:52:10 +02:00

[MouseGestures] Configurable mouse gesture button

UI changes:
* the Settings dialog offers a combo box to select left and right
  mouse buttons, or disable the gestures completely
* changes are permanently saved
* OK button is added

Closes #386
Closes #1280

It is now also possible to enable/disable rocker navigation.

Closes #1234
This commit is contained in:
David Sterba 2014-04-05 17:46:05 +02:00 committed by nowrep
parent f69c8645fb
commit 3360f17735
6 changed files with 249 additions and 47 deletions

View File

@ -29,14 +29,28 @@
#include <QMouseEvent>
#include <QWebFrame>
#include <QWebHistory>
#include <QSettings>
MouseGestures::MouseGestures(QObject* parent)
MouseGestures::MouseGestures(const QString &settingsPath, QObject* parent)
: QObject(parent)
, m_filter(0)
, m_settingsFile(settingsPath + QL1S("/extensions.ini"))
, m_button(Qt::MiddleButton)
, m_enableRockerNavigation(false)
, m_blockNextRightMouseRelease(false)
, m_blockNextLeftMouseRelease(false)
, m_enableRockerNavigation(false)
{
m_filter = new QjtMouseGestureFilter(false, Qt::MiddleButton, 20);
loadSettings();
}
void MouseGestures::initFilter()
{
if (m_filter) {
m_filter->clearGestures(true);
delete m_filter;
}
m_filter = new QjtMouseGestureFilter(false, m_button, 20);
QjtMouseGesture* upGesture = new QjtMouseGesture(DirectionList() << Up, m_filter);
connect(upGesture, SIGNAL(gestured()), this, SLOT(upGestured()));
@ -142,7 +156,7 @@ bool MouseGestures::mouseMove(QObject* obj, QMouseEvent* event)
void MouseGestures::showSettings(QWidget* parent)
{
if (!m_settings) {
m_settings = new MouseGesturesSettingsDialog(parent);
m_settings = new MouseGesturesSettingsDialog(this, parent);
}
m_settings.data()->show();
@ -257,6 +271,90 @@ void MouseGestures::upRightGestured()
}
}
void MouseGestures::init()
{
initFilter();
// We need to override right mouse button events
WebView::setForceContextMenuOnMouseRelease(m_button == Qt::RightButton || m_enableRockerNavigation);
}
void MouseGestures::setGestureButton(Qt::MouseButton button)
{
m_button = button;
init();
}
void MouseGestures::setGestureButtonByIndex(int index)
{
switch (index) {
case 0:
m_button = Qt::MiddleButton;
break;
case 1:
m_button = Qt::RightButton;
break;
default:
m_button = Qt::NoButton;
}
setGestureButton(m_button);
}
Qt::MouseButton MouseGestures::gestureButton() const
{
return m_button;
}
int MouseGestures::buttonToIndex() const
{
switch (m_button) {
case Qt::MiddleButton:
return 0;
case Qt::RightButton:
return 1;
default:
return 2;
}
}
bool MouseGestures::rockerNavigationEnabled() const
{
return m_enableRockerNavigation;
}
void MouseGestures::setRockerNavigationEnabled(bool enable)
{
m_enableRockerNavigation = enable;
init();
}
void MouseGestures::loadSettings()
{
QSettings settings(m_settingsFile, QSettings::IniFormat);
settings.beginGroup("MouseGestures");
setGestureButtonByIndex(settings.value("Button", 0).toInt());
m_enableRockerNavigation = settings.value("RockerNavigation", true).toBool();
settings.endGroup();
init();
}
void MouseGestures::saveSettings()
{
QSettings settings(m_settingsFile, QSettings::IniFormat);
settings.beginGroup("MouseGestures");
settings.setValue("Button", buttonToIndex());
settings.setValue("RockerNavigation", m_enableRockerNavigation);
settings.endGroup();
}
MouseGestures::~MouseGestures()
{
m_filter->clearGestures(true);

View File

@ -31,7 +31,7 @@ class MouseGestures : public QObject
{
Q_OBJECT
public:
explicit MouseGestures(QObject* parent = 0);
explicit MouseGestures(const QString &settingsPath, QObject* parent = 0);
~MouseGestures();
bool mousePress(QObject* obj, QMouseEvent* event);
@ -41,6 +41,17 @@ public:
void showSettings(QWidget* parent);
void unloadPlugin();
Qt::MouseButton gestureButton() const;
void setGestureButton(Qt::MouseButton button);
void setGestureButtonByIndex(int index);
int buttonToIndex() const;
bool rockerNavigationEnabled() const;
void setRockerNavigationEnabled(bool enable);
void loadSettings();
void saveSettings();
private slots:
void upGestured();
void downGestured();
@ -55,13 +66,19 @@ private slots:
void upRightGestured();
private:
void init();
void initFilter();
QjtMouseGestureFilter* m_filter;
QPointer<MouseGesturesSettingsDialog> m_settings;
QPointer<WebView> m_view;
QString m_settingsFile;
Qt::MouseButton m_button;
bool m_enableRockerNavigation;
bool m_blockNextRightMouseRelease;
bool m_blockNextLeftMouseRelease;
bool m_enableRockerNavigation;
};
#endif // MOUSEGESTURES_H

View File

@ -46,9 +46,8 @@ PluginSpec MouseGesturesPlugin::pluginSpec()
void MouseGesturesPlugin::init(InitState state, const QString &settingsPath)
{
Q_UNUSED(state)
Q_UNUSED(settingsPath)
m_gestures = new MouseGestures(this);
m_gestures = new MouseGestures(settingsPath, this);
QZ_REGISTER_EVENT_HANDLER(PluginProxy::MousePressHandler);
QZ_REGISTER_EVENT_HANDLER(PluginProxy::MouseReleaseHandler);

View File

@ -18,12 +18,14 @@
#include "mousegesturessettingsdialog.h"
#include "ui_mousegesturessettingsdialog.h"
#include "licenseviewer.h"
#include "mousegestures.h"
#include <QLabel>
MouseGesturesSettingsDialog::MouseGesturesSettingsDialog(QWidget* parent)
MouseGesturesSettingsDialog::MouseGesturesSettingsDialog(MouseGestures* gestures, QWidget* parent)
: QDialog(parent)
, ui(new Ui::MouseGesturesSettingsDialog)
, m_gestures(gestures)
{
setAttribute(Qt::WA_DeleteOnClose);
ui->setupUi(this);
@ -35,8 +37,14 @@ MouseGesturesSettingsDialog::MouseGesturesSettingsDialog(QWidget* parent)
ui->label_20->setPixmap(QPixmap(":/mousegestures/data/up-left.gif"));
}
m_gestures->loadSettings();
ui->mouseButtonComboBox->setCurrentIndex(m_gestures->buttonToIndex());
ui->enableRockerNavigation->setChecked(m_gestures->rockerNavigationEnabled());
setAttribute(Qt::WA_DeleteOnClose);
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(accepted()));
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(close()));
connect(ui->licenseButton, SIGNAL(clicked()), this, SLOT(showLicense()));
}
@ -52,3 +60,11 @@ void MouseGesturesSettingsDialog::showLicense()
v->show();
}
void MouseGesturesSettingsDialog::accepted()
{
m_gestures->setGestureButtonByIndex(ui->mouseButtonComboBox->currentIndex());
m_gestures->setRockerNavigationEnabled(ui->enableRockerNavigation->isChecked());
m_gestures->saveSettings();
close();
}

View File

@ -26,19 +26,23 @@ namespace Ui
class MouseGesturesSettingsDialog;
}
class MouseGestures;
class MouseGesturesSettingsDialog : public QDialog
{
Q_OBJECT
public:
explicit MouseGesturesSettingsDialog(QWidget* parent = 0);
explicit MouseGesturesSettingsDialog(MouseGestures* gestures, QWidget* parent = 0);
~MouseGesturesSettingsDialog();
private slots:
void showLicense();
void accepted();
private:
Ui::MouseGesturesSettingsDialog* ui;
MouseGestures* m_gestures;
};
#endif // MOUSEGESTURESSETTINGSDIALOG_H

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>502</width>
<height>420</height>
<height>433</height>
</rect>
</property>
<property name="windowTitle">
@ -32,7 +32,7 @@
<item>
<widget class="QLabel" name="label_2">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/icon.png</pixmap>
<pixmap>:/mousegestures/data/icon.png</pixmap>
</property>
</widget>
</item>
@ -58,10 +58,93 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="topMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Mouse button:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="mouseButtonComboBox">
<item>
<property name="text">
<string>Middle button</string>
</property>
</item>
<item>
<property name="text">
<string>Right button</string>
</property>
</item>
<item>
<property name="text">
<string>Disabled</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Rocker Navigation:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="enableRockerNavigation">
<property name="text">
<string>Enable Rocker Navigation</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_17">
<property name="text">
<string>Press and hold the middle mouse button and move your mouse in the indicated directions.</string>
<string>Press and hold the mouse button and move your mouse in the indicated directions.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@ -71,19 +154,6 @@
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
@ -101,7 +171,7 @@
</sizepolicy>
</property>
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/up.gif</pixmap>
<pixmap>:/mousegestures/data/up.gif</pixmap>
</property>
</widget>
</item>
@ -115,7 +185,7 @@
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/down.gif</pixmap>
<pixmap>:/mousegestures/data/down.gif</pixmap>
</property>
</widget>
</item>
@ -129,7 +199,7 @@
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/left.gif</pixmap>
<pixmap>:/mousegestures/data/left.gif</pixmap>
</property>
</widget>
</item>
@ -149,21 +219,14 @@
</sizepolicy>
</property>
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/up-down.gif</pixmap>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_11">
<property name="text">
<string>&lt;b&gt;Reload&lt;/b&gt;&lt;br/&gt;Reload page</string>
<pixmap>:/mousegestures/data/up-down.gif</pixmap>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_7">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/down-right.gif</pixmap>
<pixmap>:/mousegestures/data/down-right.gif</pixmap>
</property>
</widget>
</item>
@ -177,7 +240,7 @@
<item row="2" column="2">
<widget class="QLabel" name="label_6">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/right.gif</pixmap>
<pixmap>:/mousegestures/data/right.gif</pixmap>
</property>
</widget>
</item>
@ -198,7 +261,7 @@
<item row="4" column="0">
<widget class="QLabel" name="label_14">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/down-left.gif</pixmap>
<pixmap>:/mousegestures/data/down-left.gif</pixmap>
</property>
</widget>
</item>
@ -212,7 +275,7 @@
<item row="3" column="2">
<widget class="QLabel" name="label_20">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/up-right.gif</pixmap>
<pixmap>:/mousegestures/data/up-right.gif</pixmap>
</property>
</widget>
</item>
@ -226,7 +289,14 @@
<item row="3" column="0">
<widget class="QLabel" name="label_18">
<property name="pixmap">
<pixmap resource="mousegestures.qrc">:/mousegestures/data/up-left.gif</pixmap>
<pixmap>:/mousegestures/data/up-left.gif</pixmap>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_11">
<property name="text">
<string>&lt;b&gt;Reload&lt;/b&gt;&lt;br/&gt;Reload page</string>
</property>
</widget>
</item>
@ -260,7 +330,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
@ -268,9 +338,7 @@
</item>
</layout>
</widget>
<resources>
<include location="mousegestures.qrc"/>
</resources>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>