input.cpp: refactor enable and disable touchpads

Add method enableOrDisableTouchpads which sets touchpads to
given state and also sends OSD message, so there's no
duplicate OSD messages or otherwise repeated code.
This commit is contained in:
Akseli Lahtinen 2024-09-03 11:32:59 +03:00
parent a01b71f922
commit d66925251a
No known key found for this signature in database
GPG key ID: 2D8ADFDD01E76FAC
2 changed files with 28 additions and 45 deletions

View file

@ -3220,6 +3220,30 @@ void InputRedirection::updateAvailableInputDevices()
} }
} }
void InputRedirection::enableOrDisableTouchpads(bool enable)
{
bool changed = false;
for (InputDevice *device : std::as_const(m_inputDevices)) {
if (!device->isTouchpad()) {
continue;
}
if (device->isEnabled() != enable) {
device->setEnabled(enable);
changed = true;
}
}
// send OSD message
if (changed) {
QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.plasmashell"),
QStringLiteral("/org/kde/osdService"),
QStringLiteral("org.kde.osdService"),
QStringLiteral("touchpadEnabledChanged"));
msg.setArguments({enable});
QDBusConnection::sessionBus().asyncCall(msg);
}
}
void InputRedirection::toggleTouchpads() void InputRedirection::toggleTouchpads()
{ {
bool enabled = true; bool enabled = true;
@ -3234,59 +3258,17 @@ void InputRedirection::toggleTouchpads()
} }
} }
if (enabled) { enableOrDisableTouchpads(!enabled);
disableTouchpads();
} else {
enableTouchpads();
}
} }
void InputRedirection::enableTouchpads() void InputRedirection::enableTouchpads()
{ {
bool changed = false; enableOrDisableTouchpads(true);
for (InputDevice *device : std::as_const(m_inputDevices)) {
if (!device->isTouchpad()) {
continue;
}
if (device->isEnabled()) {
continue;
}
device->setEnabled(true);
changed = true;
}
// send OSD message
if (changed) {
QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.plasmashell"),
QStringLiteral("/org/kde/osdService"),
QStringLiteral("org.kde.osdService"),
QStringLiteral("touchpadEnabledChanged"));
msg.setArguments({true});
QDBusConnection::sessionBus().asyncCall(msg);
}
} }
void InputRedirection::disableTouchpads() void InputRedirection::disableTouchpads()
{ {
bool changed = false; enableOrDisableTouchpads(false);
for (InputDevice *device : std::as_const(m_inputDevices)) {
if (!device->isTouchpad()) {
continue;
}
if (!device->isEnabled()) {
continue;
}
device->setEnabled(false);
changed = true;
}
// send OSD message
if (changed) {
QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.plasmashell"),
QStringLiteral("/org/kde/osdService"),
QStringLiteral("org.kde.osdService"),
QStringLiteral("touchpadEnabledChanged"));
msg.setArguments({false});
QDBusConnection::sessionBus().asyncCall(msg);
}
} }
void InputRedirection::addInputBackend(std::unique_ptr<InputBackend> &&inputBackend) void InputRedirection::addInputBackend(std::unique_ptr<InputBackend> &&inputBackend)

View file

@ -240,6 +240,7 @@ public:
void startInteractivePositionSelection(std::function<void(const QPoint &)> callback); void startInteractivePositionSelection(std::function<void(const QPoint &)> callback);
bool isSelectingWindow() const; bool isSelectingWindow() const;
void enableOrDisableTouchpads(bool enable);
void toggleTouchpads(); void toggleTouchpads();
void enableTouchpads(); void enableTouchpads();
void disableTouchpads(); void disableTouchpads();