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,108 @@
/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org>
SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org>
SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org>
SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org>
SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org>
SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org>
SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org>
SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
SPDX-FileCopyrightText: 2023 Kai Uwe Broulik <kde@broulik.de>
SPDX-License-Identifier: LGPL-2.0-only
*/
#include "ktoolbarpopupaction.h"
#include <QMenu>
#include <QToolBar>
#include <memory>
class KToolBarPopupActionPrivate
{
public:
KToolBarPopupActionPrivate(KToolBarPopupAction *q)
: q(q)
, m_popupMode(KToolBarPopupAction::MenuButtonPopup)
, m_popupMenu(new QMenu())
{
}
void applyPopupMode(QToolButton *button, KToolBarPopupAction::PopupMode mode)
{
if (mode == KToolBarPopupAction::NoPopup) {
button->setMenu(nullptr);
button->setPopupMode(QToolButton::InstantPopup);
} else {
// In case the menu is explicitly overridden, use it.
// QAction::menu() is automatically applied thanks to QToolButton::setDefaultAction().
if (!q->menu()) {
button->setMenu(m_popupMenu.get());
}
button->setPopupMode(static_cast<QToolButton::ToolButtonPopupMode>(mode));
}
}
KToolBarPopupAction *q;
KToolBarPopupAction::PopupMode m_popupMode;
std::unique_ptr<QMenu> m_popupMenu;
};
KToolBarPopupAction::KToolBarPopupAction(const QIcon &icon, const QString &text, QObject *parent)
: QWidgetAction(parent)
, d(new KToolBarPopupActionPrivate(this))
{
setIcon(icon);
setText(text);
}
KToolBarPopupAction::~KToolBarPopupAction() = default;
QWidget *KToolBarPopupAction::createWidget(QWidget *_parent)
{
QToolBar *parent = qobject_cast<QToolBar *>(_parent);
if (!parent) {
return QWidgetAction::createWidget(_parent);
}
QToolButton *button = new QToolButton(parent);
button->setAutoRaise(true);
button->setFocusPolicy(Qt::NoFocus);
button->setIconSize(parent->iconSize());
button->setToolButtonStyle(parent->toolButtonStyle());
button->setDefaultAction(this);
d->applyPopupMode(button, d->m_popupMode);
connect(parent, &QToolBar::iconSizeChanged, button, &QAbstractButton::setIconSize);
connect(parent, &QToolBar::toolButtonStyleChanged, button, &QToolButton::setToolButtonStyle);
connect(button, &QToolButton::triggered, parent, &QToolBar::actionTriggered);
return button;
}
KToolBarPopupAction::PopupMode KToolBarPopupAction::popupMode() const
{
return d->m_popupMode;
}
void KToolBarPopupAction::setPopupMode(KToolBarPopupAction::PopupMode popupMode)
{
d->m_popupMode = popupMode;
const auto widgets = createdWidgets();
for (QWidget *widget : widgets) {
if (auto *button = qobject_cast<QToolButton *>(widget)) {
d->applyPopupMode(button, popupMode);
}
}
}
QMenu *KToolBarPopupAction::popupMenu() const
{
return d->m_popupMenu.get();
}
#include "moc_ktoolbarpopupaction.cpp"