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,186 @@
/*
* SPDX-FileCopyrightText: 2021 Waqar Ahmed <waqar.17a@gmail.com>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include <KCommandBar>
#include <QMainWindow>
#include <QAction>
#include <QApplication>
#include <QDebug>
#include <QMenu>
#include <QPlainTextEdit>
#include <QToolBar>
#include <QVBoxLayout>
class Window;
/**
* Fwd decl
* A helper function to generate a QAction
*/
static QAction *genAction(Window *p, const QString &icon, int i, const int shortcut = Qt::CTRL);
class Window : public QMainWindow
{
public:
Window(QWidget *parent = nullptr)
: QMainWindow(parent)
, pe(this)
{
setCentralWidget(&pe);
auto toolBar = new QToolBar(this);
this->addToolBar(toolBar);
auto qo1 = toolBar->addAction(QStringLiteral("Open Command Bar"));
connect(qo1, &QAction::triggered, this, [this] {
KCommandBar *bar = new KCommandBar(this);
bar->setActions(getActions());
bar->show();
});
auto qo2 = toolBar->addAction(QStringLiteral("Open Command Bar (RTL)"));
connect(qo2, &QAction::triggered, this, [this] {
KCommandBar *bar = new KCommandBar(this);
bar->setActions(getRTLActions());
bar->show();
});
}
QAction *getMenu()
{
QMenu *file = new QMenu(this);
file->setTitle(QStringLiteral("File"));
auto createActionAndConnect = [file, this](const char *name) {
auto a = file->addAction(QString::fromUtf8(name));
connect(a, &QAction::triggered, [a, this] {
pe.appendPlainText(a->text() + QStringLiteral(" triggered"));
});
};
createActionAndConnect("File Menu action 1");
createActionAndConnect("File Menu act 2");
return file->menuAction();
}
QAction *getAboutToShowMenu()
{
QMenu *menu = new QMenu(this);
menu->setTitle(QStringLiteral("Tool"));
connect(menu, &QMenu::aboutToShow, this, [this, menu] {
if (!menu->actions().isEmpty()) {
return;
}
auto createActionAndConnect = [menu, this](const char *name) {
auto a = menu->addAction(QString::fromUtf8(name));
connect(a, &QAction::triggered, [a, this] {
pe.appendPlainText(a->text() + QStringLiteral(" triggered"));
});
};
createActionAndConnect("About to show action 1");
createActionAndConnect("About to show 2");
});
return menu->menuAction();
}
QList<KCommandBar::ActionGroup> getActions()
{
QList<KCommandBar::ActionGroup> acts(4);
/**
* Menus with actions
*/
acts[0].actions = {getAboutToShowMenu(), getMenu()};
int i = 0;
acts[1].name = QStringLiteral("First Menu Group");
for (; i < 2; ++i) {
acts[1].actions.append(genAction(this, QStringLiteral("folder"), i));
}
acts[1].actions[0]->setShortcut(QStringLiteral("G"));
acts[1].actions[1]->setCheckable(true);
acts[1].actions[1]->setShortcut(QStringLiteral("Ctrl++"));
acts[2].name = QStringLiteral("Second Menu Group - Disabled acts");
for (; i < 4; ++i) {
auto act = genAction(this, QStringLiteral("zoom-out"), i);
act->setText(QStringLiteral("Disabled Act %1").arg(i));
act->setEnabled(false);
acts[2].actions.append(act);
}
acts[3].name = QStringLiteral("Third Menu Group");
for (; i < 6; ++i) {
acts[3].actions.append(genAction(this, QStringLiteral("security-low"), i, Qt::CTRL | Qt::ALT));
}
acts[3].actions[0]->setCheckable(true);
acts[3].actions[0]->setShortcut(QStringLiteral("Ctrl+,, Ctrl++, Ctrl+K"));
return acts;
}
// Use ./bin/kcommandbartest -reverse to test this
QList<KCommandBar::ActionGroup> getRTLActions()
{
QList<KCommandBar::ActionGroup> acts(2);
acts[0].name = QStringLiteral("مینو گروپ");
acts[0].actions = {new QAction(QIcon::fromTheme("folder"), QStringLiteral("یہ فولڈر ایکشن ہے"), this),
new QAction(QIcon::fromTheme("folder"), QStringLiteral("یہ ایک اور فولڈر ایکشن ہے"), this)};
acts[0].actions[1]->setCheckable(true);
acts[0].actions[1]->setShortcut(QStringLiteral("Ctrl+Shift++"));
acts[1].name = QStringLiteral("گروپ");
acts[1].actions = {new QAction(QIcon::fromTheme("zoom-out"), QStringLiteral("یہ فولڈر ایکشن ہے"), this),
new QAction(QIcon::fromTheme("security-low"), QStringLiteral("یہ ایک اور فولڈر ایکشن ہے"), this)};
acts[1].actions[1]->setCheckable(true);
acts[1].actions[1]->setShortcut(QStringLiteral("Ctrl+-"));
return acts;
}
QPlainTextEdit *textEdit()
{
return &pe;
}
private:
QPlainTextEdit pe;
};
static QAction *genAction(Window *p, const QString &icon, int i, const int shortcut)
{
QString text = QStringLiteral("A long long Action name %1").arg(i++);
QAction *action = new QAction(QIcon::fromTheme(icon), text, p);
QObject::connect(action, &QAction::triggered, [action, p] {
p->textEdit()->appendPlainText(action->text() + QStringLiteral(" triggered"));
});
static int key = Qt::Key_1;
key++;
// Reset
if (key == Qt::Key_BraceRight) {
key = Qt::Key_1;
}
const auto ss = shortcut | key;
action->setShortcut(ss);
return action;
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QApplication::setApplicationName(QStringLiteral("kcommandbartest"));
Window *window = new Window();
window->resize(1024, 600);
window->show();
return app.exec();
}