Advance Wayland and KDE package bring-up

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-14 10:51:06 +01:00
parent 51f3c21121
commit cf12defd28
15214 changed files with 20594243 additions and 269 deletions
@@ -0,0 +1,147 @@
/* This file is part of the KDE libraries
* SPDX-FileCopyrightText: 2009 Dario Freddi <drf at kde.org>
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
#include "kwindowbasedidletimepoller_p.h"
#include <QEvent>
#include <QTimer>
#include <QWindow>
KWindowBasedIdleTimePoller::KWindowBasedIdleTimePoller(QObject *parent)
: KAbstractIdleTimePoller(parent)
{
}
KWindowBasedIdleTimePoller::~KWindowBasedIdleTimePoller()
{
}
bool KWindowBasedIdleTimePoller::isAvailable()
{
return true;
}
bool KWindowBasedIdleTimePoller::setUpPoller()
{
m_pollTimer = new QTimer(this);
// setup idle timer, with some smart polling
connect(m_pollTimer, &QTimer::timeout, this, &KWindowBasedIdleTimePoller::poll);
m_grabber = new QWindow();
m_grabber->setFlag(Qt::X11BypassWindowManagerHint);
m_grabber->setPosition(-1000, -1000);
m_grabber->installEventFilter(this);
m_grabber->setObjectName(QStringLiteral("KIdleGrabberWidget"));
return additionalSetUp();
}
void KWindowBasedIdleTimePoller::unloadPoller()
{
m_pollTimer->deleteLater();
m_grabber->deleteLater();
}
QList<int> KWindowBasedIdleTimePoller::timeouts() const
{
return m_timeouts;
}
void KWindowBasedIdleTimePoller::addTimeout(int nextTimeout)
{
m_timeouts.append(nextTimeout);
poll();
}
bool KWindowBasedIdleTimePoller::eventFilter(QObject *object, QEvent *event)
{
if (object == m_grabber && (event->type() == QEvent::MouseMove || event->type() == QEvent::KeyPress)) {
detectedActivity();
return true;
} else if (object != m_grabber) {
// If it's not the grabber, fallback to default event filter
return false;
}
// Otherwise, simply ignore it
return false;
}
void KWindowBasedIdleTimePoller::waitForActivity()
{
m_grabber->show();
m_grabber->setMouseGrabEnabled(true);
m_grabber->setKeyboardGrabEnabled(true);
}
void KWindowBasedIdleTimePoller::detectedActivity()
{
stopCatchingIdleEvents();
Q_EMIT resumingFromIdle();
}
void KWindowBasedIdleTimePoller::releaseInputLock()
{
m_grabber->setMouseGrabEnabled(false);
m_grabber->setKeyboardGrabEnabled(false);
m_grabber->hide();
}
int KWindowBasedIdleTimePoller::poll()
{
int idle = getIdleTime();
// Check if we reached a timeout..
for (int timeOut : std::as_const(m_timeouts)) {
if ((timeOut - idle < 300 && timeOut >= idle) || (idle - timeOut < 300 && idle > timeOut)) {
// Bingo!
Q_EMIT timeoutReached(timeOut);
}
}
// Let's check the timer now!
int mintime = 0;
for (int i : std::as_const(m_timeouts)) {
if (i > idle && (i < mintime || mintime == 0)) {
mintime = i;
}
}
// qDebug() << "mintime " << mintime << "idle " << idle;
if (mintime != 0) {
m_pollTimer->start(mintime - idle);
} else {
m_pollTimer->stop();
}
return idle;
}
int KWindowBasedIdleTimePoller::forcePollRequest()
{
return poll();
}
void KWindowBasedIdleTimePoller::removeTimeout(int timeout)
{
m_timeouts.removeOne(timeout);
poll();
}
void KWindowBasedIdleTimePoller::catchIdleEvent()
{
waitForActivity();
}
void KWindowBasedIdleTimePoller::stopCatchingIdleEvents()
{
releaseInputLock();
}
#include "moc_kwindowbasedidletimepoller_p.cpp"