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,104 @@
/*
SPDX-FileCopyrightText: 2019 Harald Sitter <sitter@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "kbusyindicatorwidget.h"
#include <QApplication>
#include <QIcon>
#include <QPainter>
#include <QResizeEvent>
#include <QStyle>
#include <QVariantAnimation>
class KBusyIndicatorWidgetPrivate
{
public:
KBusyIndicatorWidgetPrivate(KBusyIndicatorWidget *parent)
: q(parent)
{
animation.setLoopCount(-1);
animation.setDuration(2000);
animation.setStartValue(0);
animation.setEndValue(360);
QObject::connect(&animation, &QVariantAnimation::valueChanged, q, [this](QVariant value) {
rotation = value.toReal();
q->update(); // repaint new rotation
});
}
KBusyIndicatorWidget *const q;
QVariantAnimation animation;
QIcon icon = QIcon::fromTheme(QStringLiteral("view-refresh"));
qreal rotation = 0;
QPointF paintCenter;
};
KBusyIndicatorWidget::KBusyIndicatorWidget(QWidget *parent)
: QWidget(parent)
, d(new KBusyIndicatorWidgetPrivate(this))
{
}
KBusyIndicatorWidget::~KBusyIndicatorWidget() = default;
QSize KBusyIndicatorWidget::minimumSizeHint() const
{
const auto extent = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
return QSize(extent, extent);
}
void KBusyIndicatorWidget::start()
{
d->animation.start();
}
void KBusyIndicatorWidget::stop()
{
if (d->animation.state() == QAbstractAnimation::Running) // avoid warning if never started yet
d->animation.pause();
}
void KBusyIndicatorWidget::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
start();
}
void KBusyIndicatorWidget::hideEvent(QHideEvent *event)
{
QWidget::hideEvent(event);
stop();
}
void KBusyIndicatorWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
d->paintCenter = QPointF(event->size().width() / 2.0, //
event->size().height() / 2.0);
}
void KBusyIndicatorWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
// Rotate around the center and then reset back to origin for icon painting.
painter.translate(d->paintCenter);
painter.rotate(d->rotation);
painter.translate(-d->paintCenter);
d->icon.paint(&painter, rect());
}
bool KBusyIndicatorWidget::event(QEvent *event)
{
// Only overridden to be flexible WRT binary compatible in the future.
// Overriding later has potential to change the call going through
// the vtable or not.
return QWidget::event(event);
}
#include "moc_kbusyindicatorwidget.cpp"