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.
83 lines
2.5 KiB
QML
83 lines
2.5 KiB
QML
import QtQuick
|
|
import QtQuick.Window
|
|
import org.kde.layershell 1.0 as LayerShell
|
|
import Nebula.UI
|
|
|
|
Window {
|
|
id: root
|
|
|
|
readonly property int outputWidth: OutputTracker.width > 0
|
|
? OutputTracker.width
|
|
: (screen && screen.width > 0 ? screen.width : Screen.width)
|
|
readonly property int outputHeight: OutputTracker.height > 0
|
|
? OutputTracker.height
|
|
: (screen && screen.height > 0 ? screen.height : Screen.height)
|
|
|
|
title: qsTr("Nebula Launcher")
|
|
color: "transparent"
|
|
flags: Qt.FramelessWindowHint
|
|
visible: ShellState.launcherOpen || launcher.opacity > 0.01
|
|
width: outputWidth
|
|
height: Math.max(1, outputHeight - Theme.topBarHeight)
|
|
|
|
LayerShell.Window.scope: "nebula-launcher"
|
|
LayerShell.Window.layer: LayerShell.Window.LayerOverlay
|
|
LayerShell.Window.anchors: LayerShell.Window.AnchorTop
|
|
| LayerShell.Window.AnchorBottom
|
|
| LayerShell.Window.AnchorLeft
|
|
| LayerShell.Window.AnchorRight
|
|
LayerShell.Window.margins.top: Theme.topBarHeight
|
|
LayerShell.Window.exclusionZone: 0
|
|
LayerShell.Window.keyboardInteractivity: ShellState.launcherOpen
|
|
? LayerShell.Window.KeyboardInteractivityExclusive
|
|
: LayerShell.Window.KeyboardInteractivityNone
|
|
|
|
Item {
|
|
anchors.fill: parent
|
|
focus: ShellState.launcherOpen
|
|
Keys.onEscapePressed: {
|
|
event.accepted = true
|
|
ShellState.closeLauncher()
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
onClicked: ShellState.closeLauncher()
|
|
}
|
|
|
|
Launcher {
|
|
id: launcher
|
|
x: 10
|
|
y: 10
|
|
width: Math.min(420, parent.width - 20)
|
|
height: Math.min(implicitHeight, Math.min(640, parent.height - 24))
|
|
opacity: ShellState.launcherOpen ? 1 : 0
|
|
yOffset: ShellState.launcherOpen ? 0 : -6
|
|
scale: ShellState.launcherOpen ? 1 : 0.985
|
|
focus: ShellState.launcherOpen
|
|
|
|
Behavior on opacity {
|
|
NumberAnimation {
|
|
duration: Theme.animationNormal
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
Behavior on yOffset {
|
|
NumberAnimation {
|
|
duration: Theme.animationNormal
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
|
|
Behavior on scale {
|
|
NumberAnimation {
|
|
duration: Theme.animationNormal
|
|
easing.type: Easing.OutCubic
|
|
}
|
|
}
|
|
}
|
|
}
|