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,316 @@
/*
SPDX-FileCopyrightText: 2000 Peter Putzer <putzer@kde.org>
SPDX-License-Identifier: LGPL-2.1-or-later
*/
#include "kurllabel.h"
#include <QApplication>
#include <QMouseEvent>
#include <QPalette>
#include <QTimer>
class KUrlLabelPrivate
{
public:
KUrlLabelPrivate(const QString &_url, KUrlLabel *_parent)
: parent(_parent)
, url(_url)
, tipText(url)
, linkColor(_parent->palette().color(QPalette::Active, QPalette::Link))
, highlightedLinkColor(_parent->palette().color(QPalette::Active, QPalette::BrightText))
, cursor(nullptr)
, textUnderlined(true)
, realUnderlined(true)
, useTips(false)
, useCursor(false)
, glowEnabled(true)
, floatEnabled(false)
, timer(new QTimer(parent))
{
QObject::connect(timer, &QTimer::timeout, parent, [this]() {
updateColor();
});
}
void updateColor()
{
timer->stop();
if (!(glowEnabled || floatEnabled) || !parent->rect().contains(parent->mapFromGlobal(QCursor::pos()))) {
setLinkColor(linkColor);
}
}
void setLinkColor(const QColor &color)
{
QPalette palette = parent->palette();
palette.setColor(QPalette::WindowText, color);
parent->setPalette(palette);
parent->update();
}
KUrlLabel *parent;
QString url;
QString tipText;
QColor linkColor;
QColor highlightedLinkColor;
QCursor *cursor;
bool textUnderlined : 1;
bool realUnderlined : 1;
bool useTips : 1;
bool useCursor : 1;
bool glowEnabled : 1;
bool floatEnabled : 1;
QPixmap alternatePixmap;
QPixmap realPixmap;
QTimer *timer;
};
KUrlLabel::KUrlLabel(const QString &url, const QString &text, QWidget *parent)
: QLabel(!text.isNull() ? text : url, parent)
, d(new KUrlLabelPrivate(url, this))
{
setFont(font());
setCursor(QCursor(Qt::PointingHandCursor));
d->setLinkColor(d->linkColor);
}
KUrlLabel::KUrlLabel(QWidget *parent)
: QLabel(parent)
, d(new KUrlLabelPrivate(QString(), this))
{
setFont(font());
setCursor(QCursor(Qt::PointingHandCursor));
d->setLinkColor(d->linkColor);
}
KUrlLabel::~KUrlLabel() = default;
void KUrlLabel::mouseReleaseEvent(QMouseEvent *event)
{
QLabel::mouseReleaseEvent(event);
d->setLinkColor(d->highlightedLinkColor);
d->timer->start(300);
switch (event->button()) {
case Qt::LeftButton:
Q_EMIT leftClickedUrl();
break;
case Qt::MiddleButton:
Q_EMIT middleClickedUrl();
break;
case Qt::RightButton:
Q_EMIT rightClickedUrl();
break;
default:
break;
}
}
void KUrlLabel::setFont(const QFont &font)
{
QFont newFont = font;
newFont.setUnderline(d->textUnderlined);
QLabel::setFont(newFont);
}
void KUrlLabel::setUnderline(bool on)
{
d->textUnderlined = on;
setFont(font());
}
void KUrlLabel::setUrl(const QString &url)
{
if (d->tipText == d->url) { // update the tip as well
d->tipText = url;
setUseTips(d->useTips);
}
d->url = url;
}
QString KUrlLabel::url() const
{
return d->url;
}
void KUrlLabel::setUseCursor(bool on, QCursor *cursor)
{
d->useCursor = on;
d->cursor = cursor;
if (on) {
if (cursor) {
setCursor(*cursor);
} else {
setCursor(QCursor(Qt::PointingHandCursor));
}
} else {
unsetCursor();
}
}
bool KUrlLabel::useCursor() const
{
return d->useCursor;
}
void KUrlLabel::setUseTips(bool on)
{
d->useTips = on;
if (on) {
setToolTip(d->tipText);
} else {
setToolTip(QString());
}
}
void KUrlLabel::setTipText(const QString &tipText)
{
d->tipText = tipText;
setUseTips(d->useTips);
}
bool KUrlLabel::useTips() const
{
return d->useTips;
}
QString KUrlLabel::tipText() const
{
return d->tipText;
}
void KUrlLabel::setHighlightedColor(const QColor &color)
{
d->linkColor = color;
if (!d->timer->isActive()) {
d->setLinkColor(color);
}
}
void KUrlLabel::setHighlightedColor(const QString &color)
{
setHighlightedColor(QColor(color));
}
void KUrlLabel::setSelectedColor(const QColor &color)
{
d->highlightedLinkColor = color;
if (d->timer->isActive()) {
d->setLinkColor(color);
}
}
void KUrlLabel::setSelectedColor(const QString &color)
{
setSelectedColor(QColor(color));
}
void KUrlLabel::setGlowEnabled(bool glowEnabled)
{
d->glowEnabled = glowEnabled;
}
void KUrlLabel::setFloatEnabled(bool floatEnabled)
{
d->floatEnabled = floatEnabled;
}
bool KUrlLabel::isGlowEnabled() const
{
return d->glowEnabled;
}
bool KUrlLabel::isFloatEnabled() const
{
return d->floatEnabled;
}
void KUrlLabel::setAlternatePixmap(const QPixmap &pixmap)
{
d->alternatePixmap = pixmap;
}
const QPixmap *KUrlLabel::alternatePixmap() const
{
return &d->alternatePixmap;
}
void KUrlLabel::enterEvent(QEnterEvent *event)
{
QLabel::enterEvent(event);
if (!d->alternatePixmap.isNull()) {
const auto currentPixmap = pixmap();
if (!currentPixmap.isNull()) {
d->realPixmap = currentPixmap;
setPixmap(d->alternatePixmap);
}
}
if (d->glowEnabled || d->floatEnabled) {
d->timer->stop();
d->setLinkColor(d->highlightedLinkColor);
d->realUnderlined = d->textUnderlined;
if (d->floatEnabled) {
setUnderline(true);
}
}
Q_EMIT enteredUrl();
}
void KUrlLabel::leaveEvent(QEvent *event)
{
QLabel::leaveEvent(event);
if (!d->alternatePixmap.isNull() && !pixmap().isNull()) {
setPixmap(d->realPixmap);
}
if ((d->glowEnabled || d->floatEnabled) && !d->timer->isActive()) {
d->setLinkColor(d->linkColor);
}
setUnderline(d->realUnderlined);
Q_EMIT leftUrl();
}
bool KUrlLabel::event(QEvent *event)
{
if (event->type() == QEvent::PaletteChange) {
// Use parentWidget() unless you are a toplevel widget, then try qAapp
QPalette palette = parentWidget() ? parentWidget()->palette() : qApp->palette();
palette.setBrush(QPalette::Base, palette.brush(QPalette::Normal, QPalette::Window));
palette.setColor(QPalette::WindowText, this->palette().color(QPalette::Active, QPalette::WindowText));
setPalette(palette);
d->linkColor = palette.color(QPalette::Active, QPalette::Link);
d->updateColor();
return true;
} else {
return QLabel::event(event);
}
}
#include "moc_kurllabel.cpp"