Add desktop app service and VM dev session tooling
Introduces a new `core/applications` QML/C++ module (`Nebula.Applications`) to discover `.desktop` entries, expose filterable application models, and launch installed apps safely from the shell. The desktop launcher now uses real installed apps with themed icon loading and fallback glyphs, adds output-aware surface sizing via `OutputTracker`, and wires in image/icon providers. It also adds VMware-focused Sway/shell wrapper scripts, updates Sway config/session env defaults, and refreshes README docs to document the new development flow and Desktop 0.1 behavior.
This commit is contained in:
@@ -1,11 +1,48 @@
|
||||
#include "DesktopIconProvider.hpp"
|
||||
|
||||
#include <LayerShellQt/Shell>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QGuiApplication>
|
||||
#include <QIcon>
|
||||
#include <QQmlApplicationEngine>
|
||||
#include <QQuickWindow>
|
||||
#include <QUrl>
|
||||
#include <QtGlobal>
|
||||
|
||||
namespace {
|
||||
|
||||
void initializeIconTheme()
|
||||
{
|
||||
if (QIcon::themeName().isEmpty()) {
|
||||
const QStringList candidates = {
|
||||
QStringLiteral("Adwaita"),
|
||||
QStringLiteral("Yaru"),
|
||||
QStringLiteral("ubuntu-mono-dark"),
|
||||
QStringLiteral("breeze"),
|
||||
QStringLiteral("hicolor"),
|
||||
};
|
||||
|
||||
const QStringList searchPaths = QIcon::themeSearchPaths();
|
||||
for (const QString &theme : candidates) {
|
||||
for (const QString &root : searchPaths) {
|
||||
if (QDir(root + QLatin1Char('/') + theme).exists()) {
|
||||
QIcon::setThemeName(theme);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!QIcon::themeName().isEmpty())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (QIcon::fallbackThemeName().isEmpty())
|
||||
QIcon::setFallbackThemeName(QStringLiteral("hicolor"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
LayerShellQt::Shell::useLayerShell();
|
||||
@@ -16,10 +53,12 @@ int main(int argc, char *argv[])
|
||||
app.setOrganizationName(QStringLiteral("NebulaOS"));
|
||||
app.setDesktopFileName(QStringLiteral("org.nebulaos.shell"));
|
||||
|
||||
initializeIconTheme();
|
||||
QQuickWindow::setDefaultAlphaBuffer(true);
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
engine.addImportPath(QStringLiteral("qrc:/qt/qml"));
|
||||
engine.addImageProvider(QStringLiteral("desktopicon"), new DesktopIconProvider);
|
||||
|
||||
QObject::connect(
|
||||
&engine,
|
||||
|
||||
Reference in New Issue
Block a user