3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-19 13:45:54 +00:00
Brooklyn/plasma/kcms/mouse/kcm/xlib/xlib_config.cpp
Scare Crowe d2ebfd0519 QortalOS Titan 5.60.12
Screw the description like that inbred T3Q
2022-03-05 21:17:59 +05:00

302 lines
10 KiB
C++

/*
SPDX-FileCopyrightText: 1997 Patrick Dowler <dowler@morgul.fsh.uvic.ca>
SPDX-FileCopyrightText: 1999 Dirk A. Mueller <dmuell@gmx.net>
SPDX-FileCopyrightText: 1999 Matthias Hoelzer-Kluepfel <hoelzer@kde.org>
SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org>
SPDX-FileCopyrightText: 2000 Bernd Gehrmann
SPDX-FileCopyrightText: 2000 Rik Hemsley <rik@kde.org>
SPDX-FileCopyrightText: 2000 Brad Hughes <bhughes@trolltech.com>
SPDX-FileCopyrightText: 2004 Brad Hards <bradh@frogmouth.net>
SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "xlib_config.h"
#include "../configcontainer.h"
#include "backends/x11/x11_evdev_backend.h"
#include "../../../migrationlib/kdelibs4config.h"
#include <KLocalizedString>
#include <KToolInvocation>
//#include <KConfig>
#include <KAboutData>
#include <KPluginFactory>
#include <QCheckBox>
#include <QDoubleSpinBox>
#include <QFormLayout>
#include <QSpinBox>
#include <QStandardPaths>
#include <QTabWidget>
#include <QWhatsThis>
#include <KConfig>
#include <KConfigGroup>
XlibConfig::XlibConfig(ConfigContainer *parent, InputBackend *backend)
: ConfigPlugin(parent)
, m_backend(dynamic_cast<X11EvdevBackend *>(backend))
{
setupUi(this);
handedGroup->setId(rightHanded, static_cast<int>(Handed::Right));
handedGroup->setId(leftHanded, static_cast<int>(Handed::Left));
connect(handedGroup, SIGNAL(buttonClicked(int)), m_parent, SLOT(changed()));
connect(handedGroup, SIGNAL(buttonClicked(int)), this, SLOT(slotHandedChanged(int)));
connect(cbScrollPolarity, SIGNAL(clicked()), m_parent, SLOT(changed()));
connect(cbScrollPolarity, SIGNAL(clicked()), this, SLOT(slotScrollPolarityChanged()));
connect(accel, SIGNAL(valueChanged(double)), m_parent, SLOT(changed()));
connect(thresh, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(thresh, SIGNAL(valueChanged(int)), this, SLOT(slotThreshChanged(int)));
slotThreshChanged(thresh->value());
// It would be nice if the user had a test field.
// Selecting such values in milliseconds is not intuitive
connect(doubleClickInterval, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(dragStartTime, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(dragStartDist, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(dragStartDist, SIGNAL(valueChanged(int)), this, SLOT(slotDragStartDistChanged(int)));
slotDragStartDistChanged(dragStartDist->value());
connect(wheelScrollLines, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(wheelScrollLines, SIGNAL(valueChanged(int)), SLOT(slotWheelScrollLinesChanged(int)));
slotWheelScrollLinesChanged(wheelScrollLines->value());
connect(mouseKeys, SIGNAL(clicked()), this, SLOT(checkAccess()));
connect(mouseKeys, SIGNAL(clicked()), m_parent, SLOT(changed()));
connect(mk_delay, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(mk_interval, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(mk_time_to_max, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(mk_max_speed, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
connect(mk_curve, SIGNAL(valueChanged(int)), m_parent, SLOT(changed()));
KAboutData *about = new KAboutData(QStringLiteral("kcmmouse"),
i18n("Mouse"),
QStringLiteral("1.0"),
QString(),
KAboutLicense::GPL,
i18n("(c) 1997 - 2018 Mouse developers"));
about->addAuthor(i18n("Patrick Dowler"));
about->addAuthor(i18n("Dirk A. Mueller"));
about->addAuthor(i18n("David Faure"));
about->addAuthor(i18n("Bernd Gehrmann"));
about->addAuthor(i18n("Rik Hemsley"));
about->addAuthor(i18n("Brad Hughes"));
about->addAuthor(i18n("Brad Hards"));
about->addAuthor(i18n("Roman Gilg"));
m_parent->setAboutData(about);
}
void XlibConfig::checkAccess()
{
mk_delay->setEnabled(mouseKeys->isChecked());
mk_interval->setEnabled(mouseKeys->isChecked());
mk_time_to_max->setEnabled(mouseKeys->isChecked());
mk_max_speed->setEnabled(mouseKeys->isChecked());
mk_curve->setEnabled(mouseKeys->isChecked());
}
double XlibConfig::getAccel()
{
return accel->value();
}
void XlibConfig::setAccel(double val)
{
accel->setValue(val);
}
int XlibConfig::getThreshold()
{
return thresh->value();
}
void XlibConfig::setThreshold(int val)
{
thresh->setValue(val);
}
Handed XlibConfig::getHandedness()
{
if (rightHanded->isChecked())
return Handed::Right;
else
return Handed::Left;
}
void XlibConfig::setHandedness(Handed val)
{
rightHanded->setChecked(false);
leftHanded->setChecked(false);
if (val == Handed::Right) {
rightHanded->setChecked(true);
mousePix->setPixmap(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kcmmouse/pics/mouse_rh.png"));
} else {
leftHanded->setChecked(true);
mousePix->setPixmap(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kcmmouse/pics/mouse_lh.png"));
}
m_backend->settings()->handedNeedsApply = true;
}
void XlibConfig::load()
{
EvdevSettings *settings = m_backend->settings();
m_parent->kcmLoad();
m_backend->load();
// Only allow setting reversing scroll polarity if we have scroll buttons
if (m_backend) {
if (m_backend->supportScrollPolarity()) {
cbScrollPolarity->setEnabled(true);
cbScrollPolarity->show();
} else {
cbScrollPolarity->setEnabled(false);
cbScrollPolarity->hide();
}
}
rightHanded->setEnabled(settings->handedEnabled);
leftHanded->setEnabled(settings->handedEnabled);
if (cbScrollPolarity->isEnabled())
cbScrollPolarity->setEnabled(settings->handedEnabled);
cbScrollPolarity->setChecked(settings->reverseScrollPolarity);
setAccel(settings->accelRate);
setThreshold(settings->thresholdMove);
setHandedness(settings->handed);
doubleClickInterval->setValue(settings->doubleClickInterval);
dragStartTime->setValue(settings->dragStartTime);
dragStartDist->setValue(settings->dragStartDist);
wheelScrollLines->setValue(settings->wheelScrollLines);
KConfig ac("kaccessrc");
KConfigGroup group = ac.group("Mouse");
mouseKeys->setChecked(group.readEntry("MouseKeys", false));
mk_delay->setValue(group.readEntry("MKDelay", 160));
int interval = group.readEntry("MKInterval", 5);
mk_interval->setValue(interval);
// Default time to reach maximum speed: 5000 msec
int time_to_max = group.readEntry("MKTimeToMax", (5000 + interval / 2) / interval);
time_to_max = group.readEntry("MK-TimeToMax", time_to_max * interval);
mk_time_to_max->setValue(time_to_max);
// Default maximum speed: 1000 pixels/sec
// (The old default maximum speed from KDE <= 3.4
// (100000 pixels/sec) was way too fast)
long max_speed = group.readEntry("MKMaxSpeed", interval);
max_speed = max_speed * 1000 / interval;
if (max_speed > 2000)
max_speed = 2000;
max_speed = group.readEntry("MK-MaxSpeed", int(max_speed));
mk_max_speed->setValue(max_speed);
mk_curve->setValue(group.readEntry("MKCurve", 0));
checkAccess();
Q_EMIT m_parent->changed(false);
}
void XlibConfig::save()
{
EvdevSettings *settings = m_backend->settings();
settings->accelRate = getAccel();
settings->thresholdMove = getThreshold();
settings->handed = getHandedness();
settings->doubleClickInterval = doubleClickInterval->value();
settings->dragStartTime = dragStartTime->value();
settings->dragStartDist = dragStartDist->value();
settings->wheelScrollLines = wheelScrollLines->value();
settings->reverseScrollPolarity = cbScrollPolarity->isChecked();
m_backend->apply();
settings->save();
KConfig ac("kaccessrc");
KConfigGroup group = ac.group("Mouse");
int interval = mk_interval->value();
group.writeEntry("MouseKeys", mouseKeys->isChecked());
group.writeEntry("MKDelay", mk_delay->value());
group.writeEntry("MKInterval", interval);
group.writeEntry("MK-TimeToMax", mk_time_to_max->value());
group.writeEntry("MKTimeToMax", (mk_time_to_max->value() + interval / 2) / interval);
group.writeEntry("MK-MaxSpeed", mk_max_speed->value());
group.writeEntry("MKMaxSpeed", (mk_max_speed->value() * interval + 500) / 1000);
group.writeEntry("MKCurve", mk_curve->value());
group.sync();
// restart kaccess
KToolInvocation::startServiceByDesktopName("kaccess");
Q_EMIT m_parent->changed(false);
}
void XlibConfig::defaults()
{
setThreshold(2);
setAccel(2);
setHandedness(Handed::Right);
cbScrollPolarity->setChecked(false);
doubleClickInterval->setValue(400);
dragStartTime->setValue(500);
dragStartDist->setValue(4);
wheelScrollLines->setValue(3);
mouseKeys->setChecked(false);
mk_delay->setValue(160);
mk_interval->setValue(5);
mk_time_to_max->setValue(5000);
mk_max_speed->setValue(1000);
mk_curve->setValue(0);
checkAccess();
m_parent->kcmDefaults();
Q_EMIT m_parent->changed(true);
}
/** No descriptions */
void XlibConfig::slotHandedChanged(int val)
{
if (val == static_cast<int>(Handed::Right))
mousePix->setPixmap(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kcmmouse/pics/mouse_rh.png"));
else
mousePix->setPixmap(QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kcmmouse/pics/mouse_lh.png"));
m_backend->settings()->handedNeedsApply = true;
}
void XlibConfig::slotThreshChanged(int value)
{
thresh->setSuffix(i18np(" pixel", " pixels", value));
}
void XlibConfig::slotDragStartDistChanged(int value)
{
dragStartDist->setSuffix(i18np(" pixel", " pixels", value));
}
void XlibConfig::slotWheelScrollLinesChanged(int value)
{
wheelScrollLines->setSuffix(i18np(" line", " lines", value));
}
void XlibConfig::slotScrollPolarityChanged()
{
m_backend->settings()->handedNeedsApply = true;
}