b64f95b703
This makes KWin switch to in-tree copy of KWaylandServer codebase. KWaylandServer namespace has been left as is. It will be addressed later by renaming classes in order to fit in the KWin namespace.
114 lines
2.8 KiB
C++
114 lines
2.8 KiB
C++
/*
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#include "dpmsinputeventfilter.h"
|
|
#include "main.h"
|
|
#include "output.h"
|
|
#include "platform.h"
|
|
#include "wayland/seat_interface.h"
|
|
#include "wayland_server.h"
|
|
|
|
#include <QGuiApplication>
|
|
#include <QKeyEvent>
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
DpmsInputEventFilter::DpmsInputEventFilter()
|
|
: InputEventFilter()
|
|
{
|
|
KSharedConfig::Ptr kwinSettings = kwinApp()->config();
|
|
m_enableDoubleTap = kwinSettings->group("Wayland").readEntry<bool>("DoubleTapWakeup", true);
|
|
}
|
|
|
|
DpmsInputEventFilter::~DpmsInputEventFilter() = default;
|
|
|
|
bool DpmsInputEventFilter::pointerEvent(QMouseEvent *event, quint32 nativeButton)
|
|
{
|
|
Q_UNUSED(event)
|
|
Q_UNUSED(nativeButton)
|
|
notify();
|
|
return true;
|
|
}
|
|
|
|
bool DpmsInputEventFilter::wheelEvent(QWheelEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
notify();
|
|
return true;
|
|
}
|
|
|
|
bool DpmsInputEventFilter::keyEvent(QKeyEvent *event)
|
|
{
|
|
if (event->type() == QKeyEvent::KeyPress) {
|
|
notify();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool DpmsInputEventFilter::touchDown(qint32 id, const QPointF &pos, quint32 time)
|
|
{
|
|
Q_UNUSED(pos)
|
|
Q_UNUSED(time)
|
|
if (m_enableDoubleTap) {
|
|
if (m_touchPoints.isEmpty()) {
|
|
if (!m_doubleTapTimer.isValid()) {
|
|
// this is the first tap
|
|
m_doubleTapTimer.start();
|
|
} else {
|
|
if (m_doubleTapTimer.elapsed() < qApp->doubleClickInterval()) {
|
|
m_secondTap = true;
|
|
} else {
|
|
// took too long. Let's consider it a new click
|
|
m_doubleTapTimer.restart();
|
|
}
|
|
}
|
|
} else {
|
|
// not a double tap
|
|
m_doubleTapTimer.invalidate();
|
|
m_secondTap = false;
|
|
}
|
|
m_touchPoints << id;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool DpmsInputEventFilter::touchUp(qint32 id, quint32 time)
|
|
{
|
|
if (m_enableDoubleTap) {
|
|
m_touchPoints.removeAll(id);
|
|
if (m_touchPoints.isEmpty() && m_doubleTapTimer.isValid() && m_secondTap) {
|
|
if (m_doubleTapTimer.elapsed() < qApp->doubleClickInterval()) {
|
|
waylandServer()->seat()->setTimestamp(time);
|
|
notify();
|
|
}
|
|
m_doubleTapTimer.invalidate();
|
|
m_secondTap = false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool DpmsInputEventFilter::touchMotion(qint32 id, const QPointF &pos, quint32 time)
|
|
{
|
|
Q_UNUSED(id)
|
|
Q_UNUSED(pos)
|
|
Q_UNUSED(time)
|
|
// ignore the event
|
|
return true;
|
|
}
|
|
|
|
void DpmsInputEventFilter::notify()
|
|
{
|
|
const QVector<Output *> enabledOutputs = kwinApp()->platform()->enabledOutputs();
|
|
for (Output *output : enabledOutputs) {
|
|
output->setDpmsMode(Output::DpmsMode::On);
|
|
}
|
|
}
|
|
|
|
}
|