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,120 @@
/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 2004 Felix Berger <felixberger@beldesign.de>
SPDX-License-Identifier: LGPL-2.0-only
*/
#include "ktoolbarlabelaction.h"
#include <QApplication>
#include <QLabel>
#include <QPointer>
#include <QToolBar>
class KToolBarLabelActionPrivate
{
public:
QPointer<QAction> buddy;
QPointer<QLabel> label;
};
KToolBarLabelAction::KToolBarLabelAction(const QString &text, QObject *parent)
: QWidgetAction(parent)
, d(new KToolBarLabelActionPrivate)
{
setText(text);
d->label = nullptr;
}
KToolBarLabelAction::KToolBarLabelAction(QAction *buddy, const QString &text, QObject *parent)
: QWidgetAction(parent)
, d(new KToolBarLabelActionPrivate)
{
setBuddy(buddy);
setText(text);
d->label = nullptr;
}
KToolBarLabelAction::~KToolBarLabelAction() = default;
void KToolBarLabelAction::setBuddy(QAction *buddy)
{
d->buddy = buddy;
QList<QLabel *> labels;
const auto associatedWidgets = this->associatedObjects();
for (auto *widget : associatedWidgets) {
if (QToolBar *toolBar = qobject_cast<QToolBar *>(widget)) {
if (QLabel *label = qobject_cast<QLabel *>(toolBar->widgetForAction(this))) {
labels.append(label);
}
}
}
const auto buddysAssociatedWidgets = buddy->associatedObjects();
for (auto *widget : buddysAssociatedWidgets) {
if (QToolBar *toolBar = qobject_cast<QToolBar *>(widget)) {
QWidget *newBuddy = toolBar->widgetForAction(buddy);
for (QLabel *label : std::as_const(labels)) {
label->setBuddy(newBuddy);
}
return;
}
}
}
QAction *KToolBarLabelAction::buddy() const
{
return d->buddy;
}
bool KToolBarLabelAction::event(QEvent *event)
{
if (event->type() == QEvent::ActionChanged) {
if (d->label && text() != d->label->text()) {
Q_EMIT textChanged(text());
d->label->setText(text());
}
}
return QWidgetAction::event(event);
}
bool KToolBarLabelAction::eventFilter(QObject *watched, QEvent *event)
{
if (d->label && d->buddy && event->type() == QEvent::PolishRequest && watched == d->label) {
const auto buddysAssociatedWidgets = d->buddy->associatedObjects();
for (auto *widget : buddysAssociatedWidgets) {
if (QToolBar *toolBar = qobject_cast<QToolBar *>(widget)) {
QWidget *newBuddy = toolBar->widgetForAction(d->buddy);
d->label->setBuddy(newBuddy);
}
}
}
return QWidgetAction::eventFilter(watched, event);
}
QWidget *KToolBarLabelAction::createWidget(QWidget *_parent)
{
QToolBar *parent = qobject_cast<QToolBar *>(_parent);
if (!parent) {
return QWidgetAction::createWidget(_parent);
}
if (!d->label) {
d->label = new QLabel(parent);
// These lines were copied from Konqueror's KonqDraggableLabel class in
// konq_misc.cc
d->label->setBackgroundRole(QPalette::Button);
d->label->setAlignment((QApplication::isRightToLeft() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignVCenter);
d->label->adjustSize();
d->label->setText(text());
d->label->installEventFilter(this);
}
return d->label;
}
#include "moc_ktoolbarlabelaction.cpp"