Advance KWin Wayland port for Red Bear desktop session

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-18 17:58:57 +01:00
parent 5451f25a7a
commit 85a5ceaa3c
59 changed files with 726 additions and 509 deletions
@@ -41,15 +41,17 @@
#include "workspace.h"
// KDE
#include <KConfigGroup>
#include <KConfigPropertyMap>
#if KWIN_BUILD_QTQUICK
#include <KDeclarative/KConfigPropertyMap>
#endif
#include <KGlobalAccel>
#include <KLocalizedContext>
#include <KLocalizedQmlContext>
#include <KPackage/PackageLoader>
// Qt
#include <QDBusConnection>
#include <QDBusPendingCallWatcher>
#include <QDebug>
#include <QFile>
#include <QFutureWatcher>
#include <QMenu>
#include <QQmlContext>
@@ -59,7 +61,6 @@
#include <QStandardPaths>
#include <QtConcurrentRun>
#include "scriptadaptor.h"
static QRect scriptValueToRect(const QJSValue &value)
{
@@ -112,8 +113,6 @@ KWin::AbstractScript::AbstractScript(int id, QString scriptName, QString pluginN
m_pluginName = scriptName;
}
new ScriptAdaptor(this);
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Scripting/Script") + QString::number(scriptId()), this, QDBusConnection::ExportAdaptors);
}
KWin::AbstractScript::~AbstractScript()
@@ -566,6 +565,7 @@ QAction *KWin::Script::createMenu(const QString &title, const QJSValue &items, Q
return menu->menuAction();
}
#if KWIN_BUILD_QTQUICK
KWin::DeclarativeScript::DeclarativeScript(int id, QString scriptName, QString pluginName, QObject *parent)
: AbstractScript(id, scriptName, pluginName, parent)
, m_context(new QQmlContext(Scripting::self()->declarativeScriptSharedContext(), this))
@@ -603,8 +603,9 @@ void KWin::DeclarativeScript::createComponent()
}
setRunning(true);
}
#endif
KWin::JSEngineGlobalMethodsWrapper::JSEngineGlobalMethodsWrapper(KWin::DeclarativeScript *parent)
KWin::JSEngineGlobalMethodsWrapper::JSEngineGlobalMethodsWrapper(KWin::AbstractScript *parent)
: QObject(parent)
, m_script(parent)
{
@@ -636,7 +637,9 @@ KWin::Scripting::Scripting(QObject *parent)
, m_workspaceWrapper(new QtScriptWorkspaceWrapper(this))
{
m_qmlEngine->setProperty("_kirigamiTheme", QStringLiteral("KirigamiPlasmaStyle"));
m_qmlEngine->rootContext()->setContextObject(new KLocalizedQmlContext(m_qmlEngine));
#if KWIN_BUILD_QTQUICK
m_qmlEngine->rootContext()->setContextObject(new KLocalizedContext(m_qmlEngine));
#endif
init();
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Scripting"), this, QDBusConnection::ExportScriptableContents | QDBusConnection::ExportScriptableInvokables);
connect(Workspace::self(), &Workspace::configChanged, this, &Scripting::start);
@@ -670,7 +673,9 @@ void KWin::Scripting::init()
});
qmlRegisterSingletonInstance("org.kde.kwin", 3, 0, "Options", options);
#if KWIN_BUILD_QTQUICK
qmlRegisterAnonymousType<KConfigPropertyMap>("org.kde.kwin", 3);
#endif
qmlRegisterAnonymousType<KWin::Output>("org.kde.kwin", 3);
qmlRegisterAnonymousType<KWin::Window>("org.kde.kwin", 3);
qmlRegisterAnonymousType<KWin::VirtualDesktop>("org.kde.kwin", 3);
@@ -697,7 +702,9 @@ void KWin::Scripting::start()
if (it->first) {
loadScript(it->second.first, it->second.second);
} else {
#if KWIN_BUILD_QTQUICK
loadDeclarativeScript(it->second.first, it->second.second);
#endif
}
}
@@ -764,7 +771,9 @@ void KWin::Scripting::slotScriptsQueried()
if (it->first) {
loadScript(it->second.first, it->second.second);
} else {
#if KWIN_BUILD_QTQUICK
loadDeclarativeScript(it->second.first, it->second.second);
#endif
}
}
@@ -827,6 +836,7 @@ int KWin::Scripting::loadScript(const QString &filePath, const QString &pluginNa
return id;
}
#if KWIN_BUILD_QTQUICK
int KWin::Scripting::loadDeclarativeScript(const QString &filePath, const QString &pluginName)
{
QMutexLocker locker(m_scriptsLock.get());
@@ -839,6 +849,7 @@ int KWin::Scripting::loadDeclarativeScript(const QString &filePath, const QStrin
scripts.append(script);
return id;
}
#endif
KWin::Scripting::~Scripting()
{